diff --git a/app/assets/javascripts/mapbox-gl.js b/app/assets/javascripts/mapbox-gl.js index e59e069..631fbe4 100644 --- a/app/assets/javascripts/mapbox-gl.js +++ b/app/assets/javascripts/mapbox-gl.js @@ -1,4 +1,4 @@ -/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.8.1/LICENSE.txt */ +/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.9.0/LICENSE.txt */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -1296,7 +1296,7 @@ var objectKeys = Object.keys || function (obj) { var name = "mapbox-gl"; var description = "A WebGL interactive maps library"; -var version = "1.8.1"; +var version = "1.9.0"; var main = "dist/mapbox-gl.js"; var style = "dist/mapbox-gl.css"; var license = "SEE LICENSE IN LICENSE.txt"; @@ -1343,6 +1343,7 @@ var devDependencies = { "babel-eslint": "^10.0.1", benchmark: "^2.1.4", browserify: "^16.2.3", + canvas: "^2.6.1", chalk: "^3.0.0", chokidar: "^3.0.2", cssnano: "^4.1.10", @@ -1369,6 +1370,7 @@ var devDependencies = { "mapbox-gl-styles": "^2.0.2", "mock-geolocation": "^1.0.11", "node-notifier": "^5.4.3", + "npm-font-open-sans": "^1.1.0", "npm-run-all": "^4.1.5", nyc: "^13.3.0", pirates: "^4.0.1", @@ -1391,6 +1393,7 @@ var devDependencies = { "rollup-plugin-sourcemaps": "^0.4.2", "rollup-plugin-terser": "^5.1.2", "rollup-plugin-unassert": "^0.3.0", + "selenium-webdriver": "^4.0.0-alpha.5", "shuffle-seed": "^1.1.6", sinon: "^7.3.2", st: "^1.2.2", @@ -1436,6 +1439,7 @@ var scripts = { "test-suite-clean": "find test/integration/{render,query, expressions}-tests -mindepth 2 -type d -exec test -e \"{}/actual.png\" \\; -not \\( -exec test -e \"{}/style.json\" \\; \\) -print | xargs -t rm -r", "test-unit": "build/run-tap --reporter classic --no-coverage test/unit", "test-build": "build/run-tap --no-coverage test/build/**/*.test.js", + "test-browser": "build/run-tap --reporter spec --no-coverage test/browser/**/*.test.js", "test-render": "node --max-old-space-size=2048 test/render.test.js", "test-query-node": "node test/query.test.js", "watch-query": "testem -f test/integration/testem.js", @@ -2928,7 +2932,7 @@ var TelemetryEvent = function TelemetryEvent(type ) { * to the values that should be saved. For this reason, the callback should be invoked prior to the call * to TelemetryEvent#saveData */ - TelemetryEvent.prototype.postEvent = function postEvent (timestamp , additionalPayload , callback , customAccessToken ) { + TelemetryEvent.prototype.postEvent = function postEvent (timestamp , additionalPayload , callback , customAccessToken ) { var this$1 = this; if (!config.EVENTS_URL) { return; } @@ -3648,7 +3652,7 @@ var getVideo = function(urls , callback // - + function _addEventListener(type , listener , listenerList ) { var listenerExists = listenerList[type] && listenerList[type].indexOf(listener) !== -1; @@ -5528,6 +5532,9 @@ var expression_name = { "!": { group: "Decision" }, + within: { + group: "Decision" + }, "is-supported-script": { group: "String" }, @@ -7654,7 +7661,8 @@ var ResolvedImage = function ResolvedImage(options ) { return this.name; }; - ResolvedImage.fromString = function fromString (name ) { + ResolvedImage.fromString = function fromString (name ) { + if (!name) { return null; } // treat empty values as no image return new ResolvedImage({name: name, available: false}); }; @@ -7823,8 +7831,8 @@ Literal.prototype.evaluate = function evaluate () { Literal.prototype.eachChild = function eachChild () {}; -Literal.prototype.possibleOutputs = function possibleOutputs () { - return [this.value]; +Literal.prototype.outputDefined = function outputDefined () { + return true; }; Literal.prototype.serialize = function serialize () { @@ -7863,7 +7871,6 @@ RuntimeError.prototype.toJSON = function toJSON () { - var types = { @@ -7942,14 +7949,12 @@ Assertion.prototype.evaluate = function evaluate (ctx ) { return null; }; -Assertion.prototype.eachChild = function eachChild (fn ) { +Assertion.prototype.eachChild = function eachChild (fn ) { this.args.forEach(fn); }; -Assertion.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []).concat.apply(ref, this.args.map(function (arg) { return arg.possibleOutputs(); })); +Assertion.prototype.outputDefined = function outputDefined () { + return this.args.every(function (arg) { return arg.outputDefined(); }); }; Assertion.prototype.serialize = function serialize () { @@ -8066,7 +8071,7 @@ FormatExpression.prototype.evaluate = function evaluate (ctx ) { return new Formatted(this.sections.map(evaluateSection)); }; -FormatExpression.prototype.eachChild = function eachChild (fn ) { +FormatExpression.prototype.eachChild = function eachChild (fn ) { for (var i = 0, list = this.sections; i < list.length; i += 1) { var section = list[i]; @@ -8083,10 +8088,10 @@ FormatExpression.prototype.eachChild = function eachChild (fn ) } }; -FormatExpression.prototype.possibleOutputs = function possibleOutputs () { +FormatExpression.prototype.outputDefined = function outputDefined () { // Technically the combinatoric set of all children // Usually, this.text will be undefined anyway - return [undefined]; + return false; }; FormatExpression.prototype.serialize = function serialize () { @@ -8135,22 +8140,20 @@ ImageExpression.parse = function parse (args , context ImageExpression.prototype.evaluate = function evaluate (ctx ) { var evaluatedImageName = this.input.evaluate(ctx); - var available = false; - if (ctx.availableImages && ctx.availableImages.indexOf(evaluatedImageName) > -1) { - available = true; - } + var value = ResolvedImage.fromString(evaluatedImageName); + if (value && ctx.availableImages) { value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1; } - return new ResolvedImage({name: evaluatedImageName, available: available}); + return value; }; -ImageExpression.prototype.eachChild = function eachChild (fn ) { +ImageExpression.prototype.eachChild = function eachChild (fn ) { fn(this.input); }; -ImageExpression.prototype.possibleOutputs = function possibleOutputs () { +ImageExpression.prototype.outputDefined = function outputDefined () { // The output of image is determined by the list of available images in the evaluation context - return [undefined]; + return false; }; ImageExpression.prototype.serialize = function serialize () { @@ -8162,7 +8165,6 @@ ImageExpression.prototype.serialize = function serialize () { - var types$1 = { @@ -8257,14 +8259,12 @@ Coercion.prototype.evaluate = function evaluate (ctx ) { } }; -Coercion.prototype.eachChild = function eachChild (fn ) { +Coercion.prototype.eachChild = function eachChild (fn ) { this.args.forEach(fn); }; -Coercion.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []).concat.apply(ref, this.args.map(function (arg) { return arg.possibleOutputs(); })); +Coercion.prototype.outputDefined = function outputDefined () { + return this.args.every(function (arg) { return arg.outputDefined(); }); }; Coercion.prototype.serialize = function serialize () { @@ -8284,6 +8284,7 @@ Coercion.prototype.serialize = function serialize () { // + var geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon']; @@ -8294,6 +8295,7 @@ var EvaluationContext = function EvaluationContext() { this.formattedSection = null; this._parseColorCache = {}; this.availableImages = null; + this.canonical = null; }; EvaluationContext.prototype.id = function id () { @@ -8304,6 +8306,14 @@ EvaluationContext.prototype.geometryType = function geometryType () { return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null; }; +EvaluationContext.prototype.geometry = function geometry () { + return this.feature && 'geometry' in this.feature ? this.feature.geometry : null; +}; + +EvaluationContext.prototype.canonicalID = function canonicalID () { + return this.canonical; +}; + EvaluationContext.prototype.properties = function properties () { return this.feature && this.feature.properties || {}; }; @@ -8339,12 +8349,12 @@ CompoundExpression.prototype.evaluate = function evaluate (ctx ) { return this._evaluate(ctx, this.args); }; -CompoundExpression.prototype.eachChild = function eachChild (fn ) { +CompoundExpression.prototype.eachChild = function eachChild (fn ) { this.args.forEach(fn); }; -CompoundExpression.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; +CompoundExpression.prototype.outputDefined = function outputDefined () { + return false; }; CompoundExpression.prototype.serialize = function serialize () { @@ -8459,7 +8469,7 @@ CompoundExpression.parse = function parse (args , context CompoundExpression.register = function register ( registry , - definitions + definitions ) { assert_1(!CompoundExpression.definitions); CompoundExpression.definitions = definitions; @@ -8519,7 +8529,7 @@ CollatorExpression.prototype.evaluate = function evaluate (ctx ) { return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null); }; -CollatorExpression.prototype.eachChild = function eachChild (fn ) { +CollatorExpression.prototype.eachChild = function eachChild (fn ) { fn(this.caseSensitive); fn(this.diacriticSensitive); if (this.locale) { @@ -8527,12 +8537,12 @@ CollatorExpression.prototype.eachChild = function eachChild (fn } }; -CollatorExpression.prototype.possibleOutputs = function possibleOutputs () { +CollatorExpression.prototype.outputDefined = function outputDefined () { // Technically the set of possible outputs is the combinatoric set of Collators produced - // by all possibleOutputs of locale/caseSensitive/diacriticSensitive + // by all possible outputs of locale/caseSensitive/diacriticSensitive // But for the primary use of Collators in comparison operators, we ignore the Collator's - // possibleOutputs anyway, so we can get away with leaving this undefined for now. - return [undefined]; + // possible outputs anyway, so we can get away with leaving this false for now. + return false; }; CollatorExpression.prototype.serialize = function serialize () { @@ -8547,526 +8557,1378 @@ CollatorExpression.prototype.serialize = function serialize () { // - + -function isFeatureConstant(e ) { - if (e instanceof CompoundExpression) { - if (e.name === 'get' && e.args.length === 1) { - return false; - } else if (e.name === 'feature-state') { - return false; - } else if (e.name === 'has' && e.args.length === 1) { - return false; - } else if ( - e.name === 'properties' || - e.name === 'geometry-type' || - e.name === 'id' - ) { - return false; - } else if (/^filter-/.test(e.name)) { - return false; - } +/** + * A `LngLatBounds` object represents a geographical bounding box, + * defined by its southwest and northeast points in longitude and latitude. + * + * If no arguments are provided to the constructor, a `null` bounding box is created. + * + * Note that any Mapbox GL method that accepts a `LngLatBounds` object as an argument or option + * can also accept an `Array` of two {@link LngLatLike} constructs and will perform an implicit conversion. + * This flexible type is documented as {@link LngLatBoundsLike}. + * + * @param {LngLatLike} [sw] The southwest corner of the bounding box. + * @param {LngLatLike} [ne] The northeast corner of the bounding box. + * @example + * var sw = new mapboxgl.LngLat(-73.9876, 40.7661); + * var ne = new mapboxgl.LngLat(-73.9397, 40.8002); + * var llb = new mapboxgl.LngLatBounds(sw, ne); + */ +var LngLatBounds = function LngLatBounds(sw , ne ) { + if (!sw) { + // noop + } else if (ne) { + this.setSouthWest(sw).setNorthEast(ne); + } else if (sw.length === 4) { + this.setSouthWest([sw[0], sw[1]]).setNorthEast([sw[2], sw[3]]); + } else { + this.setSouthWest(sw[0]).setNorthEast(sw[1]); } +}; - var result = true; - e.eachChild(function (arg) { - if (result && !isFeatureConstant(arg)) { result = false; } - }); - return result; -} +/** + * Set the northeast corner of the bounding box + * + * @param {LngLatLike} ne a {@link LngLatLike} object describing the northeast corner of the bounding box. + * @returns {LngLatBounds} `this` + */ +LngLatBounds.prototype.setNorthEast = function setNorthEast (ne ) { + this._ne = ne instanceof LngLat ? new LngLat(ne.lng, ne.lat) : LngLat.convert(ne); + return this; +}; -function isStateConstant(e ) { - if (e instanceof CompoundExpression) { - if (e.name === 'feature-state') { - return false; - } - } - var result = true; - e.eachChild(function (arg) { - if (result && !isStateConstant(arg)) { result = false; } - }); - return result; -} +/** + * Set the southwest corner of the bounding box + * + * @param {LngLatLike} sw a {@link LngLatLike} object describing the southwest corner of the bounding box. + * @returns {LngLatBounds} `this` + */ +LngLatBounds.prototype.setSouthWest = function setSouthWest (sw ) { + this._sw = sw instanceof LngLat ? new LngLat(sw.lng, sw.lat) : LngLat.convert(sw); + return this; +}; -function isGlobalPropertyConstant(e , properties ) { - if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) { return false; } - var result = true; - e.eachChild(function (arg) { - if (result && !isGlobalPropertyConstant(arg, properties)) { result = false; } - }); - return result; -} +/** + * Extend the bounds to include a given LngLatLike or LngLatBoundsLike. + * + * @param {LngLatLike|LngLatBoundsLike} obj object to extend to + * @returns {LngLatBounds} `this` + */ +LngLatBounds.prototype.extend = function extend (obj ) { + var sw = this._sw, + ne = this._ne; + var sw2, ne2; -// + if (obj instanceof LngLat) { + sw2 = obj; + ne2 = obj; - - - - + } else if (obj instanceof LngLatBounds) { + sw2 = obj._sw; + ne2 = obj._ne; -var Var = function Var(name , boundExpression ) { - this.type = boundExpression.type; - this.name = name; - this.boundExpression = boundExpression; -}; + if (!sw2 || !ne2) { return this; } -Var.parse = function parse (args , context ) { - if (args.length !== 2 || typeof args[1] !== 'string') - { return context.error("'var' expression requires exactly one string literal argument."); } + } else { + if (Array.isArray(obj)) { + if (obj.length === 4 || obj.every(Array.isArray)) { + var lngLatBoundsObj = ((obj ) ); + return this.extend(LngLatBounds.convert(lngLatBoundsObj)); + } else { + var lngLatObj = ((obj ) ); + return this.extend(LngLat.convert(lngLatObj)); + } + } + return this; + } - var name = args[1]; - if (!context.scope.has(name)) { - return context.error(("Unknown variable \"" + name + "\". Make sure \"" + name + "\" has been bound in an enclosing \"let\" expression before using it."), 1); + if (!sw && !ne) { + this._sw = new LngLat(sw2.lng, sw2.lat); + this._ne = new LngLat(ne2.lng, ne2.lat); + + } else { + sw.lng = Math.min(sw2.lng, sw.lng); + sw.lat = Math.min(sw2.lat, sw.lat); + ne.lng = Math.max(ne2.lng, ne.lng); + ne.lat = Math.max(ne2.lat, ne.lat); } - return new Var(name, context.scope.get(name)); + return this; }; -Var.prototype.evaluate = function evaluate (ctx ) { - return this.boundExpression.evaluate(ctx); +/** + * Returns the geographical coordinate equidistant from the bounding box's corners. + * + * @returns {LngLat} The bounding box's center. + * @example + * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); + * llb.getCenter(); // = LngLat {lng: -73.96365, lat: 40.78315} + */ +LngLatBounds.prototype.getCenter = function getCenter () { + return new LngLat((this._sw.lng + this._ne.lng) / 2, (this._sw.lat + this._ne.lat) / 2); }; -Var.prototype.eachChild = function eachChild () {}; +/** + * Returns the southwest corner of the bounding box. + * + * @returns {LngLat} The southwest corner of the bounding box. + */ +LngLatBounds.prototype.getSouthWest = function getSouthWest () { return this._sw; }; -Var.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; -}; +/** +* Returns the northeast corner of the bounding box. +* +* @returns {LngLat} The northeast corner of the bounding box. + */ +LngLatBounds.prototype.getNorthEast = function getNorthEast () { return this._ne; }; -Var.prototype.serialize = function serialize () { - return ["var", this.name]; -}; +/** +* Returns the northwest corner of the bounding box. +* +* @returns {LngLat} The northwest corner of the bounding box. + */ +LngLatBounds.prototype.getNorthWest = function getNorthWest () { return new LngLat(this.getWest(), this.getNorth()); }; -// +/** +* Returns the southeast corner of the bounding box. +* +* @returns {LngLat} The southeast corner of the bounding box. + */ +LngLatBounds.prototype.getSouthEast = function getSouthEast () { return new LngLat(this.getEast(), this.getSouth()); }; - - +/** +* Returns the west edge of the bounding box. +* +* @returns {number} The west edge of the bounding box. + */ +LngLatBounds.prototype.getWest = function getWest () { return this._sw.lng; }; /** - * State associated parsing at a given point in an expression tree. - * @private +* Returns the south edge of the bounding box. +* +* @returns {number} The south edge of the bounding box. */ -var ParsingContext = function ParsingContext( - registry , - path, - expectedType , - scope, - errors -) { - if ( path === void 0 ) path = []; - if ( scope === void 0 ) scope = new Scope(); - if ( errors === void 0 ) errors = []; +LngLatBounds.prototype.getSouth = function getSouth () { return this._sw.lat; }; - this.registry = registry; - this.path = path; - this.key = path.map(function (part) { return ("[" + part + "]"); }).join(''); - this.scope = scope; - this.errors = errors; - this.expectedType = expectedType; -}; +/** +* Returns the east edge of the bounding box. +* +* @returns {number} The east edge of the bounding box. + */ +LngLatBounds.prototype.getEast = function getEast () { return this._ne.lng; }; /** - * @param expr the JSON expression to parse - * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed - * @param options - * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation. - * @private +* Returns the north edge of the bounding box. +* +* @returns {number} The north edge of the bounding box. */ -ParsingContext.prototype.parse = function parse ( - expr , - index , - expectedType , - bindings , - options -) { - if ( options === void 0 ) options = {}; +LngLatBounds.prototype.getNorth = function getNorth () { return this._ne.lat; }; - if (index) { - return this.concat(index, expectedType, bindings)._parse(expr, options); - } - return this._parse(expr, options); +/** + * Returns the bounding box represented as an array. + * + * @returns {Array>} The bounding box represented as an array, consisting of the + * southwest and northeast coordinates of the bounding represented as arrays of numbers. + * @example + * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); + * llb.toArray(); // = [[-73.9876, 40.7661], [-73.9397, 40.8002]] + */ +LngLatBounds.prototype.toArray = function toArray () { + return [this._sw.toArray(), this._ne.toArray()]; }; -ParsingContext.prototype._parse = function _parse (expr , options ) { - if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') { - expr = ['literal', expr]; - } - - function annotate(parsed, type, typeAnnotation ) { - if (typeAnnotation === 'assert') { - return new Assertion(type, [parsed]); - } else if (typeAnnotation === 'coerce') { - return new Coercion(type, [parsed]); - } else { - return parsed; - } - } +/** + * Return the bounding box represented as a string. + * + * @returns {string} The bounding box represents as a string of the format + * `'LngLatBounds(LngLat(lng, lat), LngLat(lng, lat))'`. + * @example + * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); + * llb.toString(); // = "LngLatBounds(LngLat(-73.9876, 40.7661), LngLat(-73.9397, 40.8002))" + */ +LngLatBounds.prototype.toString = function toString () { + return ("LngLatBounds(" + (this._sw.toString()) + ", " + (this._ne.toString()) + ")"); +}; - if (Array.isArray(expr)) { - if (expr.length === 0) { - return this.error("Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []]."); - } +/** + * Check if the bounding box is an empty/`null`-type box. + * + * @returns {boolean} True if bounds have been defined, otherwise false. + */ +LngLatBounds.prototype.isEmpty = function isEmpty () { + return !(this._sw && this._ne); +}; - var op = expr[0]; - if (typeof op !== 'string') { - this.error(("Expression name must be a string, but found " + (typeof op) + " instead. If you wanted a literal array, use [\"literal\", [...]]."), 0); - return null; - } +/** +* Check if the point is within the bounding box. +* +* @param {LngLatLike} lnglat geographic point to check against. +* @returns {boolean} True if the point is within the bounding box. +*/ +LngLatBounds.prototype.contains = function contains (lnglat ) { + var ref = LngLat.convert(lnglat); + var lng = ref.lng; + var lat = ref.lat; - var Expr = this.registry[op]; - if (Expr) { - var parsed = Expr.parse(expr, this); - if (!parsed) { return null; } + var containsLatitude = this._sw.lat <= lat && lat <= this._ne.lat; + var containsLongitude = this._sw.lng <= lng && lng <= this._ne.lng; + if (this._sw.lng > this._ne.lng) { // wrapped coordinates + containsLongitude = this._sw.lng >= lng && lng >= this._ne.lng; + } - if (this.expectedType) { - var expected = this.expectedType; - var actual = parsed.type; + return containsLatitude && containsLongitude; +}; - // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion. - // When we expect a color or formatted string, but have a string or value, wrap it in a coercion. - // Otherwise, we do static type-checking. - // - // These behaviors are overridable for: - // * The "coalesce" operator, which needs to omit type annotations. - // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion. - // - if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') { - parsed = annotate(parsed, expected, options.typeAnnotation || 'assert'); - } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) { - parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce'); - } else if (this.checkSubtype(expected, actual)) { - return null; - } - } +/** + * Converts an array to a `LngLatBounds` object. + * + * If a `LngLatBounds` object is passed in, the function returns it unchanged. + * + * Internally, the function calls `LngLat#convert` to convert arrays to `LngLat` values. + * + * @param {LngLatBoundsLike} input An array of two coordinates to convert, or a `LngLatBounds` object to return. + * @returns {LngLatBounds} A new `LngLatBounds` object, if a conversion occurred, or the original `LngLatBounds` object. + * @example + * var arr = [[-73.9876, 40.7661], [-73.9397, 40.8002]]; + * var llb = mapboxgl.LngLatBounds.convert(arr); + * llb; // = LngLatBounds {_sw: LngLat {lng: -73.9876, lat: 40.7661}, _ne: LngLat {lng: -73.9397, lat: 40.8002}} + */ +LngLatBounds.convert = function convert (input ) { + if (!input || input instanceof LngLatBounds) { return input; } + return new LngLatBounds(input); +}; - // If an expression's arguments are all literals, we can evaluate - // it immediately and replace it with a literal value in the - // parsed/compiled result. Expressions that expect an image should - // not be resolved here so we can later get the available images. - if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) { - var ec = new EvaluationContext(); - try { - parsed = new Literal(parsed.type, parsed.evaluate(ec)); - } catch (e) { - this.error(e.message); - return null; - } - } +// - return parsed; - } +/* +* Approximate radius of the earth in meters. +* Uses the WGS-84 approximation. The radius at the equator is ~6378137 and at the poles is ~6356752. https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84 +* 6371008.8 is one published "average radius" see https://en.wikipedia.org/wiki/Earth_radius#Mean_radius, or ftp://athena.fsv.cvut.cz/ZFG/grs80-Moritz.pdf p.4 +*/ +var earthRadius = 6371008.8; - return this.error(("Unknown expression \"" + op + "\". If you wanted a literal array, use [\"literal\", [...]]."), 0); - } else if (typeof expr === 'undefined') { - return this.error("'undefined' value invalid. Use null instead."); - } else if (typeof expr === 'object') { - return this.error("Bare objects invalid. Use [\"literal\", {...}] instead."); - } else { - return this.error(("Expected an array, but found " + (typeof expr) + " instead.")); +/** + * A `LngLat` object represents a given longitude and latitude coordinate, measured in degrees. + * + * Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON. + * + * Note that any Mapbox GL method that accepts a `LngLat` object as an argument or option + * can also accept an `Array` of two numbers and will perform an implicit conversion. + * This flexible type is documented as {@link LngLatLike}. + * + * @param {number} lng Longitude, measured in degrees. + * @param {number} lat Latitude, measured in degrees. + * @example + * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); + * @see [Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) + * @see [Display a popup](https://www.mapbox.com/mapbox-gl-js/example/popup/) + * @see [Highlight features within a bounding box](https://www.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) + * @see [Create a timeline animation](https://www.mapbox.com/mapbox-gl-js/example/timeline-animation/) + */ +var LngLat = function LngLat(lng , lat ) { + if (isNaN(lng) || isNaN(lat)) { + throw new Error(("Invalid LngLat object: (" + lng + ", " + lat + ")")); + } + this.lng = +lng; + this.lat = +lat; + if (this.lat > 90 || this.lat < -90) { + throw new Error('Invalid LngLat latitude value: must be between -90 and 90'); } }; /** - * Returns a copy of this context suitable for parsing the subexpression at - * index `index`, optionally appending to 'let' binding map. + * Returns a new `LngLat` object whose longitude is wrapped to the range (-180, 180). * - * Note that `errors` property, intended for collecting errors while - * parsing, is copied by reference rather than cloned. - * @private + * @returns {LngLat} The wrapped `LngLat` object. + * @example + * var ll = new mapboxgl.LngLat(286.0251, 40.7736); + * var wrapped = ll.wrap(); + * wrapped.lng; // = -73.9749 */ -ParsingContext.prototype.concat = function concat (index , expectedType , bindings ) { - var path = typeof index === 'number' ? this.path.concat(index) : this.path; - var scope = bindings ? this.scope.concat(bindings) : this.scope; - return new ParsingContext( - this.registry, - path, - expectedType || null, - scope, - this.errors - ); +LngLat.prototype.wrap = function wrap$1 () { + return new LngLat(wrap(this.lng, -180, 180), this.lat); }; /** - * Push a parsing (or type checking) error into the `this.errors` - * @param error The message - * @param keys Optionally specify the source of the error at a child - * of the current expression at `this.key`. - * @private + * Returns the coordinates represented as an array of two numbers. + * + * @returns {Array} The coordinates represeted as an array of longitude and latitude. + * @example + * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); + * ll.toArray(); // = [-73.9749, 40.7736] */ -ParsingContext.prototype.error = function error (error$1 ) { - var keys = [], len = arguments.length - 1; - while ( len-- > 0 ) keys[ len ] = arguments[ len + 1 ]; - - var key = "" + (this.key) + (keys.map(function (k) { return ("[" + k + "]"); }).join('')); - this.errors.push(new ParsingError(key, error$1)); +LngLat.prototype.toArray = function toArray () { + return [this.lng, this.lat]; }; /** - * Returns null if `t` is a subtype of `expected`; otherwise returns an - * error message and also pushes it to `this.errors`. + * Returns the coordinates represent as a string. + * + * @returns {string} The coordinates represented as a string of the format `'LngLat(lng, lat)'`. + * @example + * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); + * ll.toString(); // = "LngLat(-73.9749, 40.7736)" */ -ParsingContext.prototype.checkSubtype = function checkSubtype$1 (expected , t ) { - var error = checkSubtype(expected, t); - if (error) { this.error(error); } - return error; +LngLat.prototype.toString = function toString () { + return ("LngLat(" + (this.lng) + ", " + (this.lat) + ")"); }; -function isConstant(expression ) { - if (expression instanceof Var) { - return isConstant(expression.boundExpression); - } else if (expression instanceof CompoundExpression && expression.name === 'error') { - return false; - } else if (expression instanceof CollatorExpression) { - // Although the results of a Collator expression with fixed arguments - // generally shouldn't change between executions, we can't serialize them - // as constant expressions because results change based on environment. - return false; - } - - var isTypeAnnotation = expression instanceof Coercion || - expression instanceof Assertion; +/** + * Returns the approximate distance between a pair of coordinates in meters + * Uses the Haversine Formula (from R.W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol. 68, no. 2, 1984, p. 159) + * + * @param {LngLat} lngLat coordinates to compute the distance to + * @returns {number} Distance in meters between the two coordinates. + * @example + * var new_york = new mapboxgl.LngLat(-74.0060, 40.7128); + * var los_angeles = new mapboxgl.LngLat(-118.2437, 34.0522); + * new_york.distanceTo(los_angeles); // = 3935751.690893987, "true distance" using a non-spherical approximation is ~3966km + */ +LngLat.prototype.distanceTo = function distanceTo (lngLat ) { + var rad = Math.PI / 180; + var lat1 = this.lat * rad; + var lat2 = lngLat.lat * rad; + var a = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos((lngLat.lng - this.lng) * rad); - var childrenConstant = true; - expression.eachChild(function (child) { - // We can _almost_ assume that if `expressions` children are constant, - // they would already have been evaluated to Literal values when they - // were parsed. Type annotations are the exception, because they might - // have been inferred and added after a child was parsed. + var maxMeters = earthRadius * Math.acos(Math.min(a, 1)); + return maxMeters; +}; - // So we recurse into isConstant() for the children of type annotations, - // but otherwise simply check whether they are Literals. - if (isTypeAnnotation) { - childrenConstant = childrenConstant && isConstant(child); - } else { - childrenConstant = childrenConstant && child instanceof Literal; - } - }); - if (!childrenConstant) { - return false; +/** + * Returns a `LngLatBounds` from the coordinates extended by a given `radius`. The returned `LngLatBounds` completely contains the `radius`. + * + * @param {number} [radius=0] Distance in meters from the coordinates to extend the bounds. + * @returns {LngLatBounds} A new `LngLatBounds` object representing the coordinates extended by the `radius`. + * @example + * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); + * ll.toBounds(100).toArray(); // = [[-73.97501862141328, 40.77351016847229], [-73.97478137858673, 40.77368983152771]] + */ +LngLat.prototype.toBounds = function toBounds (radius) { + if ( radius === void 0 ) radius = 0; + + var earthCircumferenceInMetersAtEquator = 40075017; + var latAccuracy = 360 * radius / earthCircumferenceInMetersAtEquator, + lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat); + + return new LngLatBounds(new LngLat(this.lng - lngAccuracy, this.lat - latAccuracy), + new LngLat(this.lng + lngAccuracy, this.lat + latAccuracy)); +}; + +/** + * Converts an array of two numbers or an object with `lng` and `lat` or `lon` and `lat` properties + * to a `LngLat` object. + * + * If a `LngLat` object is passed in, the function returns it unchanged. + * + * @param {LngLatLike} input An array of two numbers or object to convert, or a `LngLat` object to return. + * @returns {LngLat} A new `LngLat` object, if a conversion occurred, or the original `LngLat` object. + * @example + * var arr = [-73.9749, 40.7736]; + * var ll = mapboxgl.LngLat.convert(arr); + * ll; // = LngLat {lng: -73.9749, lat: 40.7736} + */ +LngLat.convert = function convert (input ) { + if (input instanceof LngLat) { + return input; + } + if (Array.isArray(input) && (input.length === 2 || input.length === 3)) { + return new LngLat(Number(input[0]), Number(input[1])); + } + if (!Array.isArray(input) && typeof input === 'object' && input !== null) { + return new LngLat( + // flow can't refine this to have one of lng or lat, so we have to cast to any + Number('lng' in input ? (input ).lng : (input ).lon), + Number(input.lat) + ); } + throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]"); +}; - return isFeatureConstant(expression) && - isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'accumulated', 'is-supported-script']); +// + + +/* + * The average circumference of the world in meters. + */ +var earthCircumfrence = 2 * Math.PI * earthRadius; // meters + +/* + * The circumference at a line of latitude in meters. + */ +function circumferenceAtLatitude(latitude ) { + return earthCircumfrence * Math.cos(latitude * Math.PI / 180); } -// +function mercatorXfromLng(lng ) { + return (180 + lng) / 360; +} - +function mercatorYfromLat(lat ) { + return (180 - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)))) / 360; +} - +function mercatorZfromAltitude(altitude , lat ) { + return altitude / circumferenceAtLatitude(lat); +} + +function lngFromMercatorX(x ) { + return x * 360 - 180; +} + +function latFromMercatorY(y ) { + var y2 = 180 - y * 360; + return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90; +} + +function altitudeFromMercatorZ(z , y ) { + return z * circumferenceAtLatitude(latFromMercatorY(y)); +} /** - * Returns the index of the last stop <= input, or 0 if it doesn't exist. + * Determine the Mercator scale factor for a given latitude, see + * https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor + * + * At the equator the scale factor will be 1, which increases at higher latitudes. + * + * @param {number} lat Latitude + * @returns {number} scale factor * @private */ -function findStopLessThanOrEqualTo(stops , input ) { - var lastIndex = stops.length - 1; - var lowerIndex = 0; - var upperIndex = lastIndex; - var currentIndex = 0; - var currentValue, nextValue; +function mercatorScale(lat ) { + return 1 / Math.cos(lat * Math.PI / 180); +} - while (lowerIndex <= upperIndex) { - currentIndex = Math.floor((lowerIndex + upperIndex) / 2); - currentValue = stops[currentIndex]; - nextValue = stops[currentIndex + 1]; +/** + * A `MercatorCoordinate` object represents a projected three dimensional position. + * + * `MercatorCoordinate` uses the web mercator projection ([EPSG:3857](https://epsg.io/3857)) with slightly different units: + * - the size of 1 unit is the width of the projected world instead of the "mercator meter" + * - the origin of the coordinate space is at the north-west corner instead of the middle + * + * For example, `MercatorCoordinate(0, 0, 0)` is the north-west corner of the mercator world and + * `MercatorCoordinate(1, 1, 0)` is the south-east corner. If you are familiar with + * [vector tiles](https://github.com/mapbox/vector-tile-spec) it may be helpful to think + * of the coordinate space as the `0/0/0` tile with an extent of `1`. + * + * The `z` dimension of `MercatorCoordinate` is conformal. A cube in the mercator coordinate space would be rendered as a cube. + * + * @param {number} x The x component of the position. + * @param {number} y The y component of the position. + * @param {number} z The z component of the position. + * @example + * var nullIsland = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); + * + * @see [Add a custom style layer](https://www.mapbox.com/mapbox-gl-js/example/custom-style-layer/) + */ +var MercatorCoordinate = function MercatorCoordinate(x , y , z) { + if ( z === void 0 ) z = 0; - if (currentValue <= input) { - if (currentIndex === lastIndex || input < nextValue) { // Search complete - return currentIndex; - } + this.x = +x; + this.y = +y; + this.z = +z; +}; - lowerIndex = currentIndex + 1; - } else if (currentValue > input) { - upperIndex = currentIndex - 1; - } else { - throw new RuntimeError('Input is not a number.'); +/** + * Project a `LngLat` to a `MercatorCoordinate`. + * + * @param {LngLatLike} lngLatLike The location to project. + * @param {number} altitude The altitude in meters of the position. + * @returns {MercatorCoordinate} The projected mercator coordinate. + * @example + * var coord = mapboxgl.MercatorCoordinate.fromLngLat({ lng: 0, lat: 0}, 0); + * coord; // MercatorCoordinate(0.5, 0.5, 0) + */ +MercatorCoordinate.fromLngLat = function fromLngLat (lngLatLike , altitude) { + if ( altitude === void 0 ) altitude = 0; + + var lngLat = LngLat.convert(lngLatLike); + + return new MercatorCoordinate( + mercatorXfromLng(lngLat.lng), + mercatorYfromLat(lngLat.lat), + mercatorZfromAltitude(altitude, lngLat.lat)); +}; + +/** + * Returns the `LngLat` for the coordinate. + * + * @returns {LngLat} The `LngLat` object. + * @example + * var coord = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); + * var latLng = coord.toLngLat(); // LngLat(0, 0) + */ +MercatorCoordinate.prototype.toLngLat = function toLngLat () { + return new LngLat( + lngFromMercatorX(this.x), + latFromMercatorY(this.y)); +}; + +/** + * Returns the altitude in meters of the coordinate. + * + * @returns {number} The altitude in meters. + * @example + * var coord = new mapboxgl.MercatorCoordinate(0, 0, 0.02); + * coord.toAltitude(); // 6914.281956295339 + */ +MercatorCoordinate.prototype.toAltitude = function toAltitude () { + return altitudeFromMercatorZ(this.z, this.y); +}; + +/** + * Returns the distance of 1 meter in `MercatorCoordinate` units at this latitude. + * + * For coordinates in real world units using meters, this naturally provides the scale + * to transform into `MercatorCoordinate`s. + * + * @returns {number} Distance of 1 meter in `MercatorCoordinate` units. + */ +MercatorCoordinate.prototype.meterInMercatorCoordinateUnits = function meterInMercatorCoordinateUnits () { + // 1 meter / circumference at equator in meters * Mercator projection scale factor at this latitude + return 1 / earthCircumfrence * mercatorScale(latFromMercatorY(this.y)); +}; + +// + +/** + * The maximum value of a coordinate in the internal tile coordinate system. Coordinates of + * all source features normalized to this extent upon load. + * + * The value is a consequence of the following: + * + * * Vertex buffer store positions as signed 16 bit integers. + * * One bit is lost for signedness to support tile buffers. + * * One bit is lost because the line vertex buffer used to pack 1 bit of other data into the int. + * * One bit is lost to support features extending past the extent on the right edge of the tile. + * * This leaves us with 2^13 = 8192 + * + * @private + * @readonly + */ +var EXTENT = 8192; + +// + + + + +// minX, minY, maxX, maxY + +function updateBBox(bbox , coord ) { + bbox[0] = Math.min(bbox[0], coord[0]); + bbox[1] = Math.min(bbox[1], coord[1]); + bbox[2] = Math.max(bbox[2], coord[0]); + bbox[3] = Math.max(bbox[3], coord[1]); +} + +function boxWithinBox(bbox1 , bbox2 ) { + if (bbox1[0] <= bbox2[0]) { return false; } + if (bbox1[2] >= bbox2[2]) { return false; } + if (bbox1[1] <= bbox2[1]) { return false; } + if (bbox1[3] >= bbox2[3]) { return false; } + return true; +} + +function getTileCoordinates(p, canonical ) { + var coord = MercatorCoordinate.fromLngLat({lng: p[0], lat: p[1]}, 0); + var tilesAtZoom = Math.pow(2, canonical.z); + return [Math.round(coord.x * tilesAtZoom * EXTENT), Math.round(coord.y * tilesAtZoom * EXTENT)]; +} + +function onBoundary(p, p1, p2) { + var x1 = p[0] - p1[0]; + var y1 = p[1] - p1[1]; + var x2 = p[0] - p2[0]; + var y2 = p[1] - p2[1]; + return (x1 * y2 - x2 * y1 === 0) && (x1 * x2 <= 0) && (y1 * y2 <= 0); +} + +function rayIntersect(p, p1, p2) { + return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]); +} + +// ray casting algorithm for detecting if point is in polygon +function pointWithinPolygon(point, rings) { + var inside = false; + for (var i = 0, len = rings.length; i < len; i++) { + var ring = rings[i]; + for (var j = 0, len2 = ring.length; j < len2 - 1; j++) { + if (onBoundary(point, ring[j], ring[j + 1])) { return false; } + if (rayIntersect(point, ring[j], ring[j + 1])) { inside = !inside; } } } - - return 0; + return inside; } -// +function pointWithinPolygons(point, polygons) { + for (var i = 0; i < polygons.length; i++) { + if (pointWithinPolygon(point, polygons[i])) { return true; } + } + return false; +} - - - - - - +function perp(v1, v2) { + return (v1[0] * v2[1] - v1[1] * v2[0]); +} -var Step = function Step(type , input , stops ) { - this.type = type; - this.input = input; +// check if p1 and p2 are in different sides of line segment q1->q2 +function twoSided(p1, p2, q1, q2) { + // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3) + var x1 = p1[0] - q1[0]; + var y1 = p1[1] - q1[1]; + var x2 = p2[0] - q1[0]; + var y2 = p2[1] - q1[1]; + var x3 = q2[0] - q1[0]; + var y3 = q2[1] - q1[1]; + if ((x1 * y3 - x3 * y1) * (x2 * y3 - x3 * y2) < 0) { return true; } + return false; +} +// a, b are end points for line segment1, c and d are end points for line segment2 +function lineIntersectLine(a, b, c, d) { + // check if two segments are parallel or not + // precondition is end point a, b is inside polygon, if line a->b is + // parallel to polygon edge c->d, then a->b won't intersect with c->d + var vectorP = [b[0] - a[0], b[1] - a[1]]; + var vectorQ = [d[0] - c[0], d[1] - c[1]]; + if (perp(vectorQ, vectorP) === 0) { return false; } + + // If lines are intersecting with each other, the relative location should be: + // a and b lie in different sides of segment c->d + // c and d lie in different sides of segment a->b + if (twoSided(a, b, c, d) && twoSided(c, d, a, b)) { return true; } + return false; +} - this.labels = []; - this.outputs = []; - for (var i = 0, list = stops; i < list.length; i += 1) { - var ref = list[i]; - var label = ref[0]; - var expression = ref[1]; +function lineIntersectPolygon(p1, p2, polygon) { + for (var i = 0, list = polygon; i < list.length; i += 1) { + // loop through every edge of the ring + var ring = list[i]; - this.labels.push(label); - this.outputs.push(expression); + for (var j = 0; j < ring.length - 1; ++j) { + if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) { + return true; + } + } } -}; + return false; +} -Step.parse = function parse (args , context ) { - if (args.length - 1 < 4) { - return context.error(("Expected at least 4 arguments, but found only " + (args.length - 1) + ".")); +function lineStringWithinPolygon(line, polygon) { + // First, check if geometry points of line segments are all inside polygon + for (var i = 0; i < line.length; ++i) { + if (!pointWithinPolygon(line[i], polygon)) { + return false; + } } - if ((args.length - 1) % 2 !== 0) { - return context.error("Expected an even number of arguments."); + // Second, check if there is line segment intersecting polygon edge + for (var i$1 = 0; i$1 < line.length - 1; ++i$1) { + if (lineIntersectPolygon(line[i$1], line[i$1 + 1], polygon)) { + return false; + } } + return true; +} - var input = context.parse(args[1], 1, NumberType); - if (!input) { return null; } +function lineStringWithinPolygons(line, polygons) { + for (var i = 0; i < polygons.length; i++) { + if (lineStringWithinPolygon(line, polygons[i])) { return true; } + } + return false; +} - var stops = []; +function getTilePolygon(coordinates, bbox, canonical) { + var polygon = []; + for (var i = 0; i < coordinates.length; i++) { + var ring = []; + for (var j = 0; j < coordinates[i].length; j++) { + var coord = getTileCoordinates(coordinates[i][j], canonical); + updateBBox(bbox, coord); + ring.push(coord); + } + polygon.push(ring); + } + return polygon; +} - var outputType = (null ); - if (context.expectedType && context.expectedType.kind !== 'value') { - outputType = context.expectedType; +function getTilePolygons(coordinates, bbox, canonical) { + var polygons = []; + for (var i = 0; i < coordinates.length; i++) { + var polygon = getTilePolygon(coordinates[i], bbox, canonical); + polygons.push(polygon); } + return polygons; +} - for (var i = 1; i < args.length; i += 2) { - var label = i === 1 ? -Infinity : args[i]; - var value = args[i + 1]; +function pointsWithinPolygons(ctx , polygonGeometry ) { + var pointBBox = [Infinity, Infinity, -Infinity, -Infinity]; + var polyBBox = [Infinity, Infinity, -Infinity, -Infinity]; + var canonical = ctx.canonicalID(); + var shifts = [canonical.x * EXTENT, canonical.y * EXTENT]; + var tilePoints = []; - var labelKey = i; - var valueKey = i + 1; + for (var i$1 = 0, list$1 = ctx.geometry(); i$1 < list$1.length; i$1 += 1) { + var points = list$1[i$1]; - if (typeof label !== 'number') { - return context.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey); + for (var i = 0, list = points; i < list.length; i += 1) { + var point = list[i]; + + var p = [point.x + shifts[0], point.y + shifts[1]]; + updateBBox(pointBBox, p); + tilePoints.push(p); } + } - if (stops.length && stops[stops.length - 1][0] >= label) { - return context.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', labelKey); + if (polygonGeometry.type === 'Polygon') { + var tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical); + if (!boxWithinBox(pointBBox, polyBBox)) { return false; } + + for (var i$2 = 0, list$2 = tilePoints; i$2 < list$2.length; i$2 += 1) { + var point$1 = list$2[i$2]; + + if (!pointWithinPolygon(point$1, tilePolygon)) { return false; } } + } - var parsed = context.parse(value, valueKey, outputType); - if (!parsed) { return null; } - outputType = outputType || parsed.type; - stops.push([label, parsed]); + if (polygonGeometry.type === 'MultiPolygon') { + var tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical); + if (!boxWithinBox(pointBBox, polyBBox)) { return false; } + + for (var i$3 = 0, list$3 = tilePoints; i$3 < list$3.length; i$3 += 1) { + var point$2 = list$3[i$3]; + + if (!pointWithinPolygons(point$2, tilePolygons)) { return false; } + } } - return new Step(outputType, input, stops); -}; + return true; +} -Step.prototype.evaluate = function evaluate (ctx ) { - var labels = this.labels; - var outputs = this.outputs; +function linesWithinPolygons(ctx , polygonGeometry ) { + var lineBBox = [Infinity, Infinity, -Infinity, -Infinity]; + var polyBBox = [Infinity, Infinity, -Infinity, -Infinity]; - if (labels.length === 1) { - return outputs[0].evaluate(ctx); + var canonical = ctx.canonicalID(); + var shifts = [canonical.x * EXTENT, canonical.y * EXTENT]; + var tileLines = []; + + for (var i$1 = 0, list$1 = ctx.geometry(); i$1 < list$1.length; i$1 += 1) { + var line = list$1[i$1]; + + var tileLine = []; + for (var i = 0, list = line; i < list.length; i += 1) { + var point = list[i]; + + var p = [point.x + shifts[0], point.y + shifts[1]]; + updateBBox(lineBBox, p); + tileLine.push(p); + } + tileLines.push(tileLine); } - var value = ((this.input.evaluate(ctx) ) ); - if (value <= labels[0]) { - return outputs[0].evaluate(ctx); + if (polygonGeometry.type === 'Polygon') { + var tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical); + if (!boxWithinBox(lineBBox, polyBBox)) { return false; } + + for (var i$2 = 0, list$2 = tileLines; i$2 < list$2.length; i$2 += 1) { + var line$1 = list$2[i$2]; + + if (!lineStringWithinPolygon(line$1, tilePolygon)) { return false; } + } } - var stopCount = labels.length; - if (value >= labels[stopCount - 1]) { - return outputs[stopCount - 1].evaluate(ctx); + if (polygonGeometry.type === 'MultiPolygon') { + var tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical); + + if (!boxWithinBox(lineBBox, polyBBox)) { return false; } + + for (var i$3 = 0, list$3 = tileLines; i$3 < list$3.length; i$3 += 1) { + var line$2 = list$3[i$3]; + + if (!lineStringWithinPolygons(line$2, tilePolygons)) { return false; } + } } + return true; - var index = findStopLessThanOrEqualTo(labels, value); - return outputs[index].evaluate(ctx); +} + +var Within = function Within(geojson , geometries ) { + this.type = BooleanType; + this.geojson = geojson; + this.geometries = geometries; }; -Step.prototype.eachChild = function eachChild (fn ) { - fn(this.input); - for (var i = 0, list = this.outputs; i < list.length; i += 1) { - var expression = list[i]; +Within.parse = function parse (args , context ) { + if (args.length !== 2) + { return context.error(("'within' expression requires exactly one argument, but found " + (args.length - 1) + " instead.")); } + if (isValue(args[1])) { + var geojson = (args[1] ); + if (geojson.type === 'FeatureCollection') { + for (var i = 0; i < geojson.features.length; ++i) { + var type = geojson.features[i].geometry.type; + if (type === 'Polygon' || type === 'MultiPolygon') { + return new Within(geojson, geojson.features[i].geometry); + } + } + } else if (geojson.type === 'Feature') { + var type$1 = geojson.geometry.type; + if (type$1 === 'Polygon' || type$1 === 'MultiPolygon') { + return new Within(geojson, geojson.geometry); + } + } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') { + return new Within(geojson, geojson); + } + } + return context.error("'within' expression requires valid geojson object that contains polygon geometry type."); +}; - fn(expression); +Within.prototype.evaluate = function evaluate (ctx ) { + if (ctx.geometry() != null && ctx.canonicalID() != null) { + if (ctx.geometryType() === 'Point') { + return pointsWithinPolygons(ctx, this.geometries); + } else if (ctx.geometryType() === 'LineString') { + return linesWithinPolygons(ctx, this.geometries); + } } + return false; }; -Step.prototype.possibleOutputs = function possibleOutputs () { - var ref; +Within.prototype.eachChild = function eachChild () {}; - return (ref = []).concat.apply(ref, this.outputs.map(function (output) { return output.possibleOutputs(); })); +Within.prototype.outputDefined = function outputDefined () { + return true; }; -Step.prototype.serialize = function serialize () { - var serialized = ["step", this.input.serialize()]; - for (var i = 0; i < this.labels.length; i++) { - if (i > 0) { - serialized.push(this.labels[i]); - } - serialized.push(this.outputs[i].serialize()); - } - return serialized; +Within.prototype.serialize = function serialize () { + return ["within", this.geojson]; }; // + -function number(a , b , t ) { - return (a * (1 - t)) + (b * t); -} +function isFeatureConstant(e ) { + if (e instanceof CompoundExpression) { + if (e.name === 'get' && e.args.length === 1) { + return false; + } else if (e.name === 'feature-state') { + return false; + } else if (e.name === 'has' && e.args.length === 1) { + return false; + } else if ( + e.name === 'properties' || + e.name === 'geometry-type' || + e.name === 'id' + ) { + return false; + } else if (/^filter-/.test(e.name)) { + return false; + } + } -function color(from , to , t ) { - return new Color( - number(from.r, to.r, t), - number(from.g, to.g, t), - number(from.b, to.b, t), - number(from.a, to.a, t) - ); + if (e instanceof Within) { + return false; + } + + var result = true; + e.eachChild(function (arg) { + if (result && !isFeatureConstant(arg)) { result = false; } + }); + return result; } -function array$1(from , to , t ) { - return from.map(function (d, i) { - return number(d, to[i], t); +function isStateConstant(e ) { + if (e instanceof CompoundExpression) { + if (e.name === 'feature-state') { + return false; + } + } + var result = true; + e.eachChild(function (arg) { + if (result && !isStateConstant(arg)) { result = false; } }); + return result; } -var interpolate = /*#__PURE__*/Object.freeze({ -__proto__: null, -number: number, -color: color, -array: array$1 -}); +function isGlobalPropertyConstant(e , properties ) { + if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) { return false; } + var result = true; + e.eachChild(function (arg) { + if (result && !isGlobalPropertyConstant(arg, properties)) { result = false; } + }); + return result; +} // - - - - - - + + + + - - - - - - +var Var = function Var(name , boundExpression ) { + this.type = boundExpression.type; + this.name = name; + this.boundExpression = boundExpression; +}; -// Constants -var Xn = 0.950470, // D65 standard referent - Yn = 1, - Zn = 1.088830, - t0 = 4 / 29, - t1 = 6 / 29, - t2 = 3 * t1 * t1, - t3 = t1 * t1 * t1, - deg2rad = Math.PI / 180, - rad2deg = 180 / Math.PI; +Var.parse = function parse (args , context ) { + if (args.length !== 2 || typeof args[1] !== 'string') + { return context.error("'var' expression requires exactly one string literal argument."); } -// Utilities -function xyz2lab(t ) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; -} + var name = args[1]; + if (!context.scope.has(name)) { + return context.error(("Unknown variable \"" + name + "\". Make sure \"" + name + "\" has been bound in an enclosing \"let\" expression before using it."), 1); + } -function lab2xyz(t ) { - return t > t1 ? t * t * t : t2 * (t - t0); -} + return new Var(name, context.scope.get(name)); +}; -function xyz2rgb(x ) { +Var.prototype.evaluate = function evaluate (ctx ) { + return this.boundExpression.evaluate(ctx); +}; + +Var.prototype.eachChild = function eachChild () {}; + +Var.prototype.outputDefined = function outputDefined () { + return false; +}; + +Var.prototype.serialize = function serialize () { + return ["var", this.name]; +}; + +// + + + + +/** + * State associated parsing at a given point in an expression tree. + * @private + */ +var ParsingContext = function ParsingContext( + registry , + path, + expectedType , + scope, + errors +) { + if ( path === void 0 ) path = []; + if ( scope === void 0 ) scope = new Scope(); + if ( errors === void 0 ) errors = []; + + this.registry = registry; + this.path = path; + this.key = path.map(function (part) { return ("[" + part + "]"); }).join(''); + this.scope = scope; + this.errors = errors; + this.expectedType = expectedType; +}; + +/** + * @param expr the JSON expression to parse + * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed + * @param options + * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation. + * @private + */ +ParsingContext.prototype.parse = function parse ( + expr , + index , + expectedType , + bindings , + options +) { + if ( options === void 0 ) options = {}; + + if (index) { + return this.concat(index, expectedType, bindings)._parse(expr, options); + } + return this._parse(expr, options); +}; + +ParsingContext.prototype._parse = function _parse (expr , options ) { + if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') { + expr = ['literal', expr]; + } + + function annotate(parsed, type, typeAnnotation ) { + if (typeAnnotation === 'assert') { + return new Assertion(type, [parsed]); + } else if (typeAnnotation === 'coerce') { + return new Coercion(type, [parsed]); + } else { + return parsed; + } + } + + if (Array.isArray(expr)) { + if (expr.length === 0) { + return this.error("Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []]."); + } + + var op = expr[0]; + if (typeof op !== 'string') { + this.error(("Expression name must be a string, but found " + (typeof op) + " instead. If you wanted a literal array, use [\"literal\", [...]]."), 0); + return null; + } + + var Expr = this.registry[op]; + if (Expr) { + var parsed = Expr.parse(expr, this); + if (!parsed) { return null; } + + if (this.expectedType) { + var expected = this.expectedType; + var actual = parsed.type; + + // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion. + // When we expect a color or formatted string, but have a string or value, wrap it in a coercion. + // Otherwise, we do static type-checking. + // + // These behaviors are overridable for: + // * The "coalesce" operator, which needs to omit type annotations. + // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion. + // + if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') { + parsed = annotate(parsed, expected, options.typeAnnotation || 'assert'); + } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) { + parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce'); + } else if (this.checkSubtype(expected, actual)) { + return null; + } + } + + // If an expression's arguments are all literals, we can evaluate + // it immediately and replace it with a literal value in the + // parsed/compiled result. Expressions that expect an image should + // not be resolved here so we can later get the available images. + if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) { + var ec = new EvaluationContext(); + try { + parsed = new Literal(parsed.type, parsed.evaluate(ec)); + } catch (e) { + this.error(e.message); + return null; + } + } + + return parsed; + } + + return this.error(("Unknown expression \"" + op + "\". If you wanted a literal array, use [\"literal\", [...]]."), 0); + } else if (typeof expr === 'undefined') { + return this.error("'undefined' value invalid. Use null instead."); + } else if (typeof expr === 'object') { + return this.error("Bare objects invalid. Use [\"literal\", {...}] instead."); + } else { + return this.error(("Expected an array, but found " + (typeof expr) + " instead.")); + } +}; + +/** + * Returns a copy of this context suitable for parsing the subexpression at + * index `index`, optionally appending to 'let' binding map. + * + * Note that `errors` property, intended for collecting errors while + * parsing, is copied by reference rather than cloned. + * @private + */ +ParsingContext.prototype.concat = function concat (index , expectedType , bindings ) { + var path = typeof index === 'number' ? this.path.concat(index) : this.path; + var scope = bindings ? this.scope.concat(bindings) : this.scope; + return new ParsingContext( + this.registry, + path, + expectedType || null, + scope, + this.errors + ); +}; + +/** + * Push a parsing (or type checking) error into the `this.errors` + * @param error The message + * @param keys Optionally specify the source of the error at a child + * of the current expression at `this.key`. + * @private + */ +ParsingContext.prototype.error = function error (error$1 ) { + var keys = [], len = arguments.length - 1; + while ( len-- > 0 ) keys[ len ] = arguments[ len + 1 ]; + + var key = "" + (this.key) + (keys.map(function (k) { return ("[" + k + "]"); }).join('')); + this.errors.push(new ParsingError(key, error$1)); +}; + +/** + * Returns null if `t` is a subtype of `expected`; otherwise returns an + * error message and also pushes it to `this.errors`. + */ +ParsingContext.prototype.checkSubtype = function checkSubtype$1 (expected , t ) { + var error = checkSubtype(expected, t); + if (error) { this.error(error); } + return error; +}; + +function isConstant(expression ) { + if (expression instanceof Var) { + return isConstant(expression.boundExpression); + } else if (expression instanceof CompoundExpression && expression.name === 'error') { + return false; + } else if (expression instanceof CollatorExpression) { + // Although the results of a Collator expression with fixed arguments + // generally shouldn't change between executions, we can't serialize them + // as constant expressions because results change based on environment. + return false; + } else if (expression instanceof Within) { + return false; + } + + var isTypeAnnotation = expression instanceof Coercion || + expression instanceof Assertion; + + var childrenConstant = true; + expression.eachChild(function (child) { + // We can _almost_ assume that if `expressions` children are constant, + // they would already have been evaluated to Literal values when they + // were parsed. Type annotations are the exception, because they might + // have been inferred and added after a child was parsed. + + // So we recurse into isConstant() for the children of type annotations, + // but otherwise simply check whether they are Literals. + if (isTypeAnnotation) { + childrenConstant = childrenConstant && isConstant(child); + } else { + childrenConstant = childrenConstant && child instanceof Literal; + } + }); + if (!childrenConstant) { + return false; + } + + return isFeatureConstant(expression) && + isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'accumulated', 'is-supported-script']); +} + +// + + + + + +/** + * Returns the index of the last stop <= input, or 0 if it doesn't exist. + * @private + */ +function findStopLessThanOrEqualTo(stops , input ) { + var lastIndex = stops.length - 1; + var lowerIndex = 0; + var upperIndex = lastIndex; + var currentIndex = 0; + var currentValue, nextValue; + + while (lowerIndex <= upperIndex) { + currentIndex = Math.floor((lowerIndex + upperIndex) / 2); + currentValue = stops[currentIndex]; + nextValue = stops[currentIndex + 1]; + + if (currentValue <= input) { + if (currentIndex === lastIndex || input < nextValue) { // Search complete + return currentIndex; + } + + lowerIndex = currentIndex + 1; + } else if (currentValue > input) { + upperIndex = currentIndex - 1; + } else { + throw new RuntimeError('Input is not a number.'); + } + } + + return 0; +} + +// + + + + + + + +var Step = function Step(type , input , stops ) { + this.type = type; + this.input = input; + + this.labels = []; + this.outputs = []; + for (var i = 0, list = stops; i < list.length; i += 1) { + var ref = list[i]; + var label = ref[0]; + var expression = ref[1]; + + this.labels.push(label); + this.outputs.push(expression); + } +}; + +Step.parse = function parse (args , context ) { + if (args.length - 1 < 4) { + return context.error(("Expected at least 4 arguments, but found only " + (args.length - 1) + ".")); + } + + if ((args.length - 1) % 2 !== 0) { + return context.error("Expected an even number of arguments."); + } + + var input = context.parse(args[1], 1, NumberType); + if (!input) { return null; } + + var stops = []; + + var outputType = (null ); + if (context.expectedType && context.expectedType.kind !== 'value') { + outputType = context.expectedType; + } + + for (var i = 1; i < args.length; i += 2) { + var label = i === 1 ? -Infinity : args[i]; + var value = args[i + 1]; + + var labelKey = i; + var valueKey = i + 1; + + if (typeof label !== 'number') { + return context.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey); + } + + if (stops.length && stops[stops.length - 1][0] >= label) { + return context.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', labelKey); + } + + var parsed = context.parse(value, valueKey, outputType); + if (!parsed) { return null; } + outputType = outputType || parsed.type; + stops.push([label, parsed]); + } + + return new Step(outputType, input, stops); +}; + +Step.prototype.evaluate = function evaluate (ctx ) { + var labels = this.labels; + var outputs = this.outputs; + + if (labels.length === 1) { + return outputs[0].evaluate(ctx); + } + + var value = ((this.input.evaluate(ctx) ) ); + if (value <= labels[0]) { + return outputs[0].evaluate(ctx); + } + + var stopCount = labels.length; + if (value >= labels[stopCount - 1]) { + return outputs[stopCount - 1].evaluate(ctx); + } + + var index = findStopLessThanOrEqualTo(labels, value); + return outputs[index].evaluate(ctx); +}; + +Step.prototype.eachChild = function eachChild (fn ) { + fn(this.input); + for (var i = 0, list = this.outputs; i < list.length; i += 1) { + var expression = list[i]; + + fn(expression); + } +}; + +Step.prototype.outputDefined = function outputDefined () { + return this.outputs.every(function (out) { return out.outputDefined(); }); +}; + +Step.prototype.serialize = function serialize () { + var serialized = ["step", this.input.serialize()]; + for (var i = 0; i < this.labels.length; i++) { + if (i > 0) { + serialized.push(this.labels[i]); + } + serialized.push(this.outputs[i].serialize()); + } + return serialized; +}; + +// + +function number(a , b , t ) { + return (a * (1 - t)) + (b * t); +} + +function color(from , to , t ) { + return new Color( + number(from.r, to.r, t), + number(from.g, to.g, t), + number(from.b, to.b, t), + number(from.a, to.a, t) + ); +} + +function array$1(from , to , t ) { + return from.map(function (d, i) { + return number(d, to[i], t); + }); +} + +var interpolate = /*#__PURE__*/Object.freeze({ +__proto__: null, +number: number, +color: color, +array: array$1 +}); + +// + + + + + + + + + + + + + + + +// Constants +var Xn = 0.950470, // D65 standard referent + Yn = 1, + Zn = 1.088830, + t0 = 4 / 29, + t1 = 6 / 29, + t2 = 3 * t1 * t1, + t3 = t1 * t1 * t1, + deg2rad = Math.PI / 180, + rad2deg = 180 / Math.PI; + +// Utilities +function xyz2lab(t ) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; +} + +function lab2xyz(t ) { + return t > t1 ? t * t * t : t2 * (t - t0); +} + +function xyz2rgb(x ) { return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); } @@ -9181,7 +10043,6 @@ hcl: hcl - @@ -9348,7 +10209,7 @@ Interpolate.prototype.evaluate = function evaluate (ctx ) { } }; -Interpolate.prototype.eachChild = function eachChild (fn ) { +Interpolate.prototype.eachChild = function eachChild (fn ) { fn(this.input); for (var i = 0, list = this.outputs; i < list.length; i += 1) { var expression = list[i]; @@ -9357,10 +10218,8 @@ Interpolate.prototype.eachChild = function eachChild (fn ) { } }; -Interpolate.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []).concat.apply(ref, this.outputs.map(function (output) { return output.possibleOutputs(); })); +Interpolate.prototype.outputDefined = function outputDefined () { + return this.outputs.every(function (out) { return out.outputDefined(); }); }; Interpolate.prototype.serialize = function serialize () { @@ -9441,7 +10300,6 @@ function exponentialInterpolation(input, base, lowerValue, upperValue) { - var Coalesce = function Coalesce(type , args ) { @@ -9509,14 +10367,12 @@ Coalesce.prototype.evaluate = function evaluate (ctx ) { return result; }; -Coalesce.prototype.eachChild = function eachChild (fn ) { +Coalesce.prototype.eachChild = function eachChild (fn ) { this.args.forEach(fn); }; -Coalesce.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []).concat.apply(ref, this.args.map(function (arg) { return arg.possibleOutputs(); })); +Coalesce.prototype.outputDefined = function outputDefined () { + return this.args.every(function (arg) { return arg.outputDefined(); }); }; Coalesce.prototype.serialize = function serialize () { @@ -9542,7 +10398,7 @@ Let.prototype.evaluate = function evaluate (ctx ) { return this.result.evaluate(ctx); }; -Let.prototype.eachChild = function eachChild (fn ) { +Let.prototype.eachChild = function eachChild (fn ) { for (var i = 0, list = this.bindings; i < list.length; i += 1) { var binding = list[i]; @@ -9579,8 +10435,8 @@ Let.parse = function parse (args , context ) { return new Let(bindings, result); }; -Let.prototype.possibleOutputs = function possibleOutputs () { - return this.result.possibleOutputs(); +Let.prototype.outputDefined = function outputDefined () { + return this.result.outputDefined(); }; Let.prototype.serialize = function serialize () { @@ -9642,13 +10498,13 @@ At.prototype.evaluate = function evaluate (ctx ) { return array[index]; }; -At.prototype.eachChild = function eachChild (fn ) { +At.prototype.eachChild = function eachChild (fn ) { fn(this.index); fn(this.input); }; -At.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; +At.prototype.outputDefined = function outputDefined () { + return false; }; At.prototype.serialize = function serialize () { @@ -9710,7 +10566,7 @@ In.prototype.evaluate = function evaluate (ctx ) { var needle = (this.needle.evaluate(ctx) ); var haystack = (this.haystack.evaluate(ctx) ); - if (!needle || !haystack) { return false; } + if (needle == null || !haystack) { return false; } if (!isComparableRuntimeValue(needle)) { throw new RuntimeError(("Expected first argument to be of type boolean, string or number, but found " + (toString(typeOf(needle))) + " instead.")); @@ -9723,13 +10579,13 @@ In.prototype.evaluate = function evaluate (ctx ) { return haystack.indexOf(needle) >= 0; }; -In.prototype.eachChild = function eachChild (fn ) { +In.prototype.eachChild = function eachChild (fn ) { fn(this.needle); fn(this.haystack); }; -In.prototype.possibleOutputs = function possibleOutputs () { - return [true, false]; +In.prototype.outputDefined = function outputDefined () { + return true; }; In.prototype.serialize = function serialize () { @@ -9741,7 +10597,6 @@ In.prototype.serialize = function serialize () { - // Map input label values to output expression index @@ -9832,18 +10687,14 @@ Match.prototype.evaluate = function evaluate (ctx ) { return output.evaluate(ctx); }; -Match.prototype.eachChild = function eachChild (fn ) { +Match.prototype.eachChild = function eachChild (fn ) { fn(this.input); this.outputs.forEach(fn); fn(this.otherwise); }; -Match.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []) - .concat.apply(ref, this.outputs.map(function (out) { return out.possibleOutputs(); })) - .concat(this.otherwise.possibleOutputs()); +Match.prototype.outputDefined = function outputDefined () { + return this.outputs.every(function (out) { return out.outputDefined(); }) && this.otherwise.outputDefined(); }; Match.prototype.serialize = function serialize () { @@ -9898,7 +10749,6 @@ Match.prototype.serialize = function serialize () { - @@ -9953,7 +10803,7 @@ Case.prototype.evaluate = function evaluate (ctx ) { return this.otherwise.evaluate(ctx); }; -Case.prototype.eachChild = function eachChild (fn ) { +Case.prototype.eachChild = function eachChild (fn ) { for (var i = 0, list = this.branches; i < list.length; i += 1) { var ref = list[i]; var test = ref[0]; @@ -9965,17 +10815,13 @@ Case.prototype.eachChild = function eachChild (fn ) { fn(this.otherwise); }; -Case.prototype.possibleOutputs = function possibleOutputs () { - var ref; - - return (ref = []) - .concat.apply(ref, this.branches.map(function (ref) { - var _ = ref[0]; - var out = ref[1]; +Case.prototype.outputDefined = function outputDefined () { + return this.branches.every(function (ref) { + var _ = ref[0]; + var out = ref[1]; - return out.possibleOutputs(); - })) - .concat(this.otherwise.possibleOutputs()); + return out.outputDefined(); + }) && this.otherwise.outputDefined(); }; Case.prototype.serialize = function serialize () { @@ -10131,7 +10977,7 @@ function makeComparison(op , compareBasic, compareWithCollato compareBasic(ctx, lhs, rhs); }; - Comparison.prototype.eachChild = function eachChild (fn ) { + Comparison.prototype.eachChild = function eachChild (fn ) { fn(this.lhs); fn(this.rhs); if (this.collator) { @@ -10139,8 +10985,8 @@ function makeComparison(op , compareBasic, compareWithCollato } }; - Comparison.prototype.possibleOutputs = function possibleOutputs () { - return [true, false]; + Comparison.prototype.outputDefined = function outputDefined () { + return true; }; Comparison.prototype.serialize = function serialize () { @@ -10255,7 +11101,7 @@ var NumberFormat = function NumberFormat(number , }).format(this.number.evaluate(ctx)); }; - NumberFormat.prototype.eachChild = function eachChild (fn ) { + NumberFormat.prototype.eachChild = function eachChild (fn ) { fn(this.number); if (this.locale) { fn(this.locale); @@ -10271,8 +11117,8 @@ var NumberFormat = function NumberFormat(number , } }; - NumberFormat.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; + NumberFormat.prototype.outputDefined = function outputDefined () { + return false; }; NumberFormat.prototype.serialize = function serialize () { @@ -10328,12 +11174,12 @@ Length.prototype.evaluate = function evaluate (ctx ) { } }; -Length.prototype.eachChild = function eachChild (fn ) { +Length.prototype.eachChild = function eachChild (fn ) { fn(this.input); }; -Length.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; +Length.prototype.outputDefined = function outputDefined () { + return false; }; Length.prototype.serialize = function serialize () { @@ -10380,7 +11226,8 @@ var expressions = { 'to-color': Coercion, 'to-number': Coercion, 'to-string': Coercion, - 'var': Var + 'var': Var, + 'within': Within }; function rgba(ctx, ref) { @@ -10910,7 +11757,7 @@ CompoundExpression.register(expressions, { 'filter-has-id': [ BooleanType, [], - function (ctx) { return ctx.id() !== null; } + function (ctx) { return (ctx.id() !== null && ctx.id() !== undefined); } ], 'filter-type-in': [ BooleanType, @@ -11389,21 +12236,24 @@ function interpolationFactor(input, base, lowerValue, upperValue) { + + - - + + + - + - + @@ -11415,20 +12265,22 @@ var StyleExpression = function StyleExpression(expression , propertySpe this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null; }; - StyleExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , availableImages , formattedSection ) { + StyleExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , canonical , availableImages , formattedSection ) { this._evaluator.globals = globals; this._evaluator.feature = feature; this._evaluator.featureState = featureState; + this._evaluator.canonical = canonical; this._evaluator.availableImages = availableImages || null; this._evaluator.formattedSection = formattedSection; return this.expression.evaluate(this._evaluator); }; - StyleExpression.prototype.evaluate = function evaluate (globals , feature , featureState , availableImages , formattedSection ) { + StyleExpression.prototype.evaluate = function evaluate (globals , feature , featureState , canonical , availableImages , formattedSection ) { this._evaluator.globals = globals; this._evaluator.feature = feature || null; this._evaluator.featureState = featureState || null; + this._evaluator.canonical = canonical; this._evaluator.availableImages = availableImages || null; this._evaluator.formattedSection = formattedSection || null; @@ -11488,12 +12340,12 @@ var ZoomConstantExpression = function ZoomConstantExpression(kind , expressio this.isStateDependent = kind !== ('constant' ) && !isStateConstant(expression.expression); }; - ZoomConstantExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , availableImages , formattedSection ) { - return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, availableImages, formattedSection); + ZoomConstantExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , canonical , availableImages , formattedSection ) { + return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection); }; - ZoomConstantExpression.prototype.evaluate = function evaluate (globals , feature , featureState , availableImages , formattedSection ) { - return this._styleExpression.evaluate(globals, feature, featureState, availableImages, formattedSection); + ZoomConstantExpression.prototype.evaluate = function evaluate (globals , feature , featureState , canonical , availableImages , formattedSection ) { + return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection); }; var ZoomDependentExpression = function ZoomDependentExpression(kind , expression , zoomStops , interpolationType ) { @@ -11504,12 +12356,12 @@ var ZoomDependentExpression = function ZoomDependentExpression(kind , express this.interpolationType = interpolationType; }; - ZoomDependentExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , availableImages , formattedSection ) { - return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, availableImages, formattedSection); + ZoomDependentExpression.prototype.evaluateWithoutErrorHandling = function evaluateWithoutErrorHandling (globals , feature , featureState , canonical , availableImages , formattedSection ) { + return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection); }; - ZoomDependentExpression.prototype.evaluate = function evaluate (globals , feature , featureState , availableImages , formattedSection ) { - return this._styleExpression.evaluate(globals, feature, featureState, availableImages, formattedSection); + ZoomDependentExpression.prototype.evaluate = function evaluate (globals , feature , featureState , canonical , availableImages , formattedSection ) { + return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection); }; ZoomDependentExpression.prototype.interpolationFactor = function interpolationFactor (input , lower , upper ) { @@ -11522,18 +12374,18 @@ var ZoomDependentExpression = function ZoomDependentExpression(kind , express - + - + - + @@ -11542,7 +12394,7 @@ var ZoomDependentExpression = function ZoomDependentExpression(kind , express - + @@ -12050,7 +12902,7 @@ function validateExpression(options ) { var expressionObj = (expression.value ).expression || (expression.value )._styleExpression.expression; if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') && - expressionObj.possibleOutputs().indexOf(undefined) !== -1) { + !expressionObj.outputDefined()) { return [new ValidationError(options.key, options.value, ("Invalid data expression for \"" + (options.propertyKey) + "\". Output values must be contained as literals within the expression."))]; } @@ -12136,7 +12988,8 @@ function isExpressionFilter(filter ) { return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type'; case 'in': - return filter.length >= 3 && Array.isArray(filter[2]); + return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2])); + case '!in': case '!has': case 'none': @@ -12188,7 +13041,7 @@ var filterSpec = { */ function createFilter(filter ) { if (filter === null || filter === undefined) { - return function () { return true; }; + return {filter: function () { return true; }, needGeometry: false}; } if (!isExpressionFilter(filter)) { @@ -12199,7 +13052,9 @@ function createFilter(filter ) { if (compiled.result === 'error') { throw new Error(compiled.value.map(function (err) { return ((err.key) + ": " + (err.message)); }).join(', ')); } else { - return function (globalProperties , feature ) { return compiled.value.evaluate(globalProperties, feature); }; + var needGeometry = Array.isArray(filter) && filter.length !== 0 && filter[0] === 'within'; + return {filter: function (globalProperties , feature , canonical ) { return compiled.value.evaluate(globalProperties, feature, {}, canonical); }, + needGeometry: needGeometry}; } } @@ -13113,7 +13968,7 @@ var ImageBitmap = self.ImageBitmap; - // eslint-disable-line + // eslint-disable-line @@ -13132,7 +13987,7 @@ var ImageBitmap = self.ImageBitmap; - + @@ -14237,6 +15092,7 @@ var EvaluationParameters = function EvaluationParameters(zoom , options ) // + @@ -14295,7 +15151,7 @@ var EvaluationParameters = function EvaluationParameters(zoom , options ) */ - + @@ -14328,8 +15184,8 @@ var PropertyValue = function PropertyValue(property , value return this.expression.kind === 'source' || this.expression.kind === 'composite'; }; - PropertyValue.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , availableImages ) { - return this.property.possiblyEvaluate(this, parameters, availableImages); + PropertyValue.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , canonical , availableImages ) { + return this.property.possiblyEvaluate(this, parameters, canonical, availableImages); }; // ------- Transitionable ------- @@ -14474,9 +15330,9 @@ var TransitioningPropertyValue = function TransitioningPropertyValue(property } }; - TransitioningPropertyValue.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , availableImages ) { + TransitioningPropertyValue.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , canonical , availableImages ) { var now = parameters.now || 0; - var finalValue = this.value.possiblyEvaluate(parameters, availableImages); + var finalValue = this.value.possiblyEvaluate(parameters, canonical, availableImages); var prior = this.prior; if (!prior) { // No prior value. @@ -14493,11 +15349,11 @@ var TransitioningPropertyValue = function TransitioningPropertyValue(property return finalValue; } else if (now < this.begin) { // Transition hasn't started yet. - return prior.possiblyEvaluate(parameters, availableImages); + return prior.possiblyEvaluate(parameters, canonical, availableImages); } else { // Interpolate between recursively-calculated prior value and final. var t = (now - this.begin) / (this.end - this.begin); - return this.property.interpolate(prior.possiblyEvaluate(parameters, availableImages), finalValue, easeCubicInOut(t)); + return this.property.interpolate(prior.possiblyEvaluate(parameters, canonical, availableImages), finalValue, easeCubicInOut(t)); } }; @@ -14655,8 +15511,8 @@ var PossiblyEvaluatedPropertyValue = function PossiblyEvaluatedPropertyValue(pro } }; - PossiblyEvaluatedPropertyValue.prototype.evaluate = function evaluate (feature , featureState , availableImages ) { - return this.property.evaluate(this.value, this.parameters, feature, featureState, availableImages); + PossiblyEvaluatedPropertyValue.prototype.evaluate = function evaluate (feature , featureState , canonical , availableImages ) { + return this.property.evaluate(this.value, this.parameters, feature, featureState, canonical, availableImages); }; /** @@ -14730,9 +15586,9 @@ var DataDrivenProperty = function DataDrivenProperty(specification this.overrides = overrides; }; - DataDrivenProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , availableImages ) { + DataDrivenProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , canonical , availableImages ) { if (value.expression.kind === 'constant' || value.expression.kind === 'camera') { - return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: value.expression.evaluate(parameters, (null ), {}, availableImages)}, parameters); + return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: value.expression.evaluate(parameters, (null ), {}, canonical, availableImages)}, parameters); } else { return new PossiblyEvaluatedPropertyValue(this, value.expression, parameters); } @@ -14765,11 +15621,11 @@ var DataDrivenProperty = function DataDrivenProperty(specification } }; - DataDrivenProperty.prototype.evaluate = function evaluate (value , parameters , feature , featureState , availableImages ) { + DataDrivenProperty.prototype.evaluate = function evaluate (value , parameters , feature , featureState , canonical , availableImages ) { if (value.kind === 'constant') { return value.value; } else { - return value.evaluate(parameters, feature, featureState, availableImages); + return value.evaluate(parameters, feature, featureState, canonical, availableImages); } }; @@ -14789,11 +15645,11 @@ var CrossFadedDataDrivenProperty = /*@__PURE__*/(function (DataDrivenProperty) { CrossFadedDataDrivenProperty.prototype = Object.create( DataDrivenProperty && DataDrivenProperty.prototype ); CrossFadedDataDrivenProperty.prototype.constructor = CrossFadedDataDrivenProperty; - CrossFadedDataDrivenProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , availableImages ) { + CrossFadedDataDrivenProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , canonical , availableImages ) { if (value.value === undefined) { return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: undefined}, parameters); } else if (value.expression.kind === 'constant') { - var evaluatedValue = value.expression.evaluate(parameters, (null ), {}, availableImages); + var evaluatedValue = value.expression.evaluate(parameters, (null ), {}, canonical, availableImages); var isImageExpression = value.property.specification.type === 'resolvedImage'; var constantValue = isImageExpression && typeof evaluatedValue !== 'string' ? evaluatedValue.name : evaluatedValue; var constant = this._calculate(constantValue, constantValue, constantValue, parameters); @@ -14811,9 +15667,9 @@ var CrossFadedDataDrivenProperty = /*@__PURE__*/(function (DataDrivenProperty) { } }; - CrossFadedDataDrivenProperty.prototype.evaluate = function evaluate (value , globals , feature , featureState , availableImages ) { + CrossFadedDataDrivenProperty.prototype.evaluate = function evaluate (value , globals , feature , featureState , canonical , availableImages ) { if (value.kind === 'source') { - var constant = value.evaluate(globals, feature, featureState, availableImages); + var constant = value.evaluate(globals, feature, featureState, canonical, availableImages); return this._calculate(constant, constant, constant, globals); } else if (value.kind === 'composite') { return this._calculate( @@ -14847,11 +15703,11 @@ var CrossFadedProperty = function CrossFadedProperty(specification this.specification = specification; }; - CrossFadedProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , availableImages ) { + CrossFadedProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , canonical , availableImages ) { if (value.value === undefined) { return undefined; } else if (value.expression.kind === 'constant') { - var constant = value.expression.evaluate(parameters, (null ), {}, availableImages); + var constant = value.expression.evaluate(parameters, (null ), {}, canonical, availableImages); return this._calculate(constant, constant, constant, parameters); } else { assert_1(!value.isDataDriven()); @@ -14884,8 +15740,8 @@ var ColorRampProperty = function ColorRampProperty(specification this.specification = specification; }; - ColorRampProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , availableImages ) { - return !!value.expression.evaluate(parameters, (null ), {}, availableImages); + ColorRampProperty.prototype.possiblyEvaluate = function possiblyEvaluate (value , parameters , canonical , availableImages ) { + return !!value.expression.evaluate(parameters, (null ), {}, canonical, availableImages); }; ColorRampProperty.prototype.interpolate = function interpolate () { return false; }; @@ -14956,7 +15812,7 @@ var StyleLayer = /*@__PURE__*/(function (Evented) { this.id = layer.id; this.type = layer.type; - this._featureFilter = function () { return true; }; + this._featureFilter = {filter: function () { return true; }, needGeometry: false}; if (layer.type === 'custom') { return; } @@ -15256,6 +16112,7 @@ var StructArray = function StructArray() { * Serialize a StructArray instance.Serializes both the raw data and the * metadata needed to reconstruct the StructArray base class during * deserialization. + * @private */ StructArray.serialize = function serialize (array , transferables ) { assert_1(!array.isTransferred); @@ -15560,31 +16417,33 @@ register('StructArrayLayout2i4ub8', StructArrayLayout2i4ub8); /** * Implementation of the StructArray layout: * [0]: Uint16[8] + * [16]: Uint8[2] * * @private */ -var StructArrayLayout8ui16 = /*@__PURE__*/(function (StructArray) { - function StructArrayLayout8ui16 () { +var StructArrayLayout8ui2ub18 = /*@__PURE__*/(function (StructArray) { + function StructArrayLayout8ui2ub18 () { StructArray.apply(this, arguments); } - if ( StructArray ) StructArrayLayout8ui16.__proto__ = StructArray; - StructArrayLayout8ui16.prototype = Object.create( StructArray && StructArray.prototype ); - StructArrayLayout8ui16.prototype.constructor = StructArrayLayout8ui16; + if ( StructArray ) StructArrayLayout8ui2ub18.__proto__ = StructArray; + StructArrayLayout8ui2ub18.prototype = Object.create( StructArray && StructArray.prototype ); + StructArrayLayout8ui2ub18.prototype.constructor = StructArrayLayout8ui2ub18; - StructArrayLayout8ui16.prototype._refreshViews = function _refreshViews () { + StructArrayLayout8ui2ub18.prototype._refreshViews = function _refreshViews () { this.uint8 = new Uint8Array(this.arrayBuffer); this.uint16 = new Uint16Array(this.arrayBuffer); }; - StructArrayLayout8ui16.prototype.emplaceBack = function emplaceBack (v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 ) { + StructArrayLayout8ui2ub18.prototype.emplaceBack = function emplaceBack (v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 ) { var i = this.length; this.resize(i + 1); - return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7); + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); }; - StructArrayLayout8ui16.prototype.emplace = function emplace (i , v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 ) { - var o2 = i * 8; + StructArrayLayout8ui2ub18.prototype.emplace = function emplace (i , v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 ) { + var o2 = i * 9; + var o1 = i * 18; this.uint16[o2 + 0] = v0; this.uint16[o2 + 1] = v1; this.uint16[o2 + 2] = v2; @@ -15593,14 +16452,16 @@ var StructArrayLayout8ui16 = /*@__PURE__*/(function (StructArray) { this.uint16[o2 + 5] = v5; this.uint16[o2 + 6] = v6; this.uint16[o2 + 7] = v7; + this.uint8[o1 + 16] = v8; + this.uint8[o1 + 17] = v9; return i; }; - return StructArrayLayout8ui16; + return StructArrayLayout8ui2ub18; }(StructArray)); -StructArrayLayout8ui16.prototype.bytesPerElement = 16; -register('StructArrayLayout8ui16', StructArrayLayout8ui16); +StructArrayLayout8ui2ub18.prototype.bytesPerElement = 18; +register('StructArrayLayout8ui2ub18', StructArrayLayout8ui2ub18); /** * Implementation of the StructArray layout: @@ -16340,27 +17201,16 @@ var CollisionBoxStruct = /*@__PURE__*/(function (Struct) { var prototypeAccessors = { anchorPointX: { configurable: true },anchorPointY: { configurable: true },x1: { configurable: true },y1: { configurable: true },x2: { configurable: true },y2: { configurable: true },featureIndex: { configurable: true },sourceLayerIndex: { configurable: true },bucketIndex: { configurable: true },radius: { configurable: true },signedDistanceFromAnchor: { configurable: true },anchorPoint: { configurable: true } }; prototypeAccessors.anchorPointX.get = function () { return this._structArray.int16[this._pos2 + 0]; }; - prototypeAccessors.anchorPointX.set = function (x ) { this._structArray.int16[this._pos2 + 0] = x; }; prototypeAccessors.anchorPointY.get = function () { return this._structArray.int16[this._pos2 + 1]; }; - prototypeAccessors.anchorPointY.set = function (x ) { this._structArray.int16[this._pos2 + 1] = x; }; prototypeAccessors.x1.get = function () { return this._structArray.int16[this._pos2 + 2]; }; - prototypeAccessors.x1.set = function (x ) { this._structArray.int16[this._pos2 + 2] = x; }; prototypeAccessors.y1.get = function () { return this._structArray.int16[this._pos2 + 3]; }; - prototypeAccessors.y1.set = function (x ) { this._structArray.int16[this._pos2 + 3] = x; }; prototypeAccessors.x2.get = function () { return this._structArray.int16[this._pos2 + 4]; }; - prototypeAccessors.x2.set = function (x ) { this._structArray.int16[this._pos2 + 4] = x; }; prototypeAccessors.y2.get = function () { return this._structArray.int16[this._pos2 + 5]; }; - prototypeAccessors.y2.set = function (x ) { this._structArray.int16[this._pos2 + 5] = x; }; prototypeAccessors.featureIndex.get = function () { return this._structArray.uint32[this._pos4 + 3]; }; - prototypeAccessors.featureIndex.set = function (x ) { this._structArray.uint32[this._pos4 + 3] = x; }; prototypeAccessors.sourceLayerIndex.get = function () { return this._structArray.uint16[this._pos2 + 8]; }; - prototypeAccessors.sourceLayerIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 8] = x; }; prototypeAccessors.bucketIndex.get = function () { return this._structArray.uint16[this._pos2 + 9]; }; - prototypeAccessors.bucketIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 9] = x; }; prototypeAccessors.radius.get = function () { return this._structArray.int16[this._pos2 + 10]; }; - prototypeAccessors.radius.set = function (x ) { this._structArray.int16[this._pos2 + 10] = x; }; prototypeAccessors.signedDistanceFromAnchor.get = function () { return this._structArray.int16[this._pos2 + 11]; }; - prototypeAccessors.signedDistanceFromAnchor.set = function (x ) { this._structArray.int16[this._pos2 + 11] = x; }; prototypeAccessors.anchorPoint.get = function () { return new pointGeometry(this.anchorPointX, this.anchorPointY); }; Object.defineProperties( CollisionBoxStruct.prototype, prototypeAccessors ); @@ -16406,31 +17256,18 @@ var PlacedSymbolStruct = /*@__PURE__*/(function (Struct) { var prototypeAccessors$1 = { anchorX: { configurable: true },anchorY: { configurable: true },glyphStartIndex: { configurable: true },numGlyphs: { configurable: true },vertexStartIndex: { configurable: true },lineStartIndex: { configurable: true },lineLength: { configurable: true },segment: { configurable: true },lowerSize: { configurable: true },upperSize: { configurable: true },lineOffsetX: { configurable: true },lineOffsetY: { configurable: true },writingMode: { configurable: true },placedOrientation: { configurable: true },hidden: { configurable: true },crossTileID: { configurable: true },associatedIconIndex: { configurable: true } }; prototypeAccessors$1.anchorX.get = function () { return this._structArray.int16[this._pos2 + 0]; }; - prototypeAccessors$1.anchorX.set = function (x ) { this._structArray.int16[this._pos2 + 0] = x; }; prototypeAccessors$1.anchorY.get = function () { return this._structArray.int16[this._pos2 + 1]; }; - prototypeAccessors$1.anchorY.set = function (x ) { this._structArray.int16[this._pos2 + 1] = x; }; prototypeAccessors$1.glyphStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 2]; }; - prototypeAccessors$1.glyphStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 2] = x; }; prototypeAccessors$1.numGlyphs.get = function () { return this._structArray.uint16[this._pos2 + 3]; }; - prototypeAccessors$1.numGlyphs.set = function (x ) { this._structArray.uint16[this._pos2 + 3] = x; }; prototypeAccessors$1.vertexStartIndex.get = function () { return this._structArray.uint32[this._pos4 + 2]; }; - prototypeAccessors$1.vertexStartIndex.set = function (x ) { this._structArray.uint32[this._pos4 + 2] = x; }; prototypeAccessors$1.lineStartIndex.get = function () { return this._structArray.uint32[this._pos4 + 3]; }; - prototypeAccessors$1.lineStartIndex.set = function (x ) { this._structArray.uint32[this._pos4 + 3] = x; }; prototypeAccessors$1.lineLength.get = function () { return this._structArray.uint32[this._pos4 + 4]; }; - prototypeAccessors$1.lineLength.set = function (x ) { this._structArray.uint32[this._pos4 + 4] = x; }; prototypeAccessors$1.segment.get = function () { return this._structArray.uint16[this._pos2 + 10]; }; - prototypeAccessors$1.segment.set = function (x ) { this._structArray.uint16[this._pos2 + 10] = x; }; prototypeAccessors$1.lowerSize.get = function () { return this._structArray.uint16[this._pos2 + 11]; }; - prototypeAccessors$1.lowerSize.set = function (x ) { this._structArray.uint16[this._pos2 + 11] = x; }; prototypeAccessors$1.upperSize.get = function () { return this._structArray.uint16[this._pos2 + 12]; }; - prototypeAccessors$1.upperSize.set = function (x ) { this._structArray.uint16[this._pos2 + 12] = x; }; prototypeAccessors$1.lineOffsetX.get = function () { return this._structArray.float32[this._pos4 + 7]; }; - prototypeAccessors$1.lineOffsetX.set = function (x ) { this._structArray.float32[this._pos4 + 7] = x; }; prototypeAccessors$1.lineOffsetY.get = function () { return this._structArray.float32[this._pos4 + 8]; }; - prototypeAccessors$1.lineOffsetY.set = function (x ) { this._structArray.float32[this._pos4 + 8] = x; }; prototypeAccessors$1.writingMode.get = function () { return this._structArray.uint8[this._pos1 + 36]; }; - prototypeAccessors$1.writingMode.set = function (x ) { this._structArray.uint8[this._pos1 + 36] = x; }; prototypeAccessors$1.placedOrientation.get = function () { return this._structArray.uint8[this._pos1 + 37]; }; prototypeAccessors$1.placedOrientation.set = function (x ) { this._structArray.uint8[this._pos1 + 37] = x; }; prototypeAccessors$1.hidden.get = function () { return this._structArray.uint8[this._pos1 + 38]; }; @@ -16438,7 +17275,6 @@ var PlacedSymbolStruct = /*@__PURE__*/(function (Struct) { prototypeAccessors$1.crossTileID.get = function () { return this._structArray.uint32[this._pos4 + 10]; }; prototypeAccessors$1.crossTileID.set = function (x ) { this._structArray.uint32[this._pos4 + 10] = x; }; prototypeAccessors$1.associatedIconIndex.get = function () { return this._structArray.int16[this._pos2 + 22]; }; - prototypeAccessors$1.associatedIconIndex.set = function (x ) { this._structArray.int16[this._pos2 + 22] = x; }; Object.defineProperties( PlacedSymbolStruct.prototype, prototypeAccessors$1 ); @@ -16483,57 +17319,32 @@ var SymbolInstanceStruct = /*@__PURE__*/(function (Struct) { var prototypeAccessors$2 = { anchorX: { configurable: true },anchorY: { configurable: true },rightJustifiedTextSymbolIndex: { configurable: true },centerJustifiedTextSymbolIndex: { configurable: true },leftJustifiedTextSymbolIndex: { configurable: true },verticalPlacedTextSymbolIndex: { configurable: true },placedIconSymbolIndex: { configurable: true },verticalPlacedIconSymbolIndex: { configurable: true },key: { configurable: true },textBoxStartIndex: { configurable: true },textBoxEndIndex: { configurable: true },verticalTextBoxStartIndex: { configurable: true },verticalTextBoxEndIndex: { configurable: true },iconBoxStartIndex: { configurable: true },iconBoxEndIndex: { configurable: true },verticalIconBoxStartIndex: { configurable: true },verticalIconBoxEndIndex: { configurable: true },featureIndex: { configurable: true },numHorizontalGlyphVertices: { configurable: true },numVerticalGlyphVertices: { configurable: true },numIconVertices: { configurable: true },numVerticalIconVertices: { configurable: true },crossTileID: { configurable: true },textBoxScale: { configurable: true },textOffset0: { configurable: true },textOffset1: { configurable: true } }; prototypeAccessors$2.anchorX.get = function () { return this._structArray.int16[this._pos2 + 0]; }; - prototypeAccessors$2.anchorX.set = function (x ) { this._structArray.int16[this._pos2 + 0] = x; }; prototypeAccessors$2.anchorY.get = function () { return this._structArray.int16[this._pos2 + 1]; }; - prototypeAccessors$2.anchorY.set = function (x ) { this._structArray.int16[this._pos2 + 1] = x; }; prototypeAccessors$2.rightJustifiedTextSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 2]; }; - prototypeAccessors$2.rightJustifiedTextSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 2] = x; }; prototypeAccessors$2.centerJustifiedTextSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 3]; }; - prototypeAccessors$2.centerJustifiedTextSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 3] = x; }; prototypeAccessors$2.leftJustifiedTextSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 4]; }; - prototypeAccessors$2.leftJustifiedTextSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 4] = x; }; prototypeAccessors$2.verticalPlacedTextSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 5]; }; - prototypeAccessors$2.verticalPlacedTextSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 5] = x; }; prototypeAccessors$2.placedIconSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 6]; }; - prototypeAccessors$2.placedIconSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 6] = x; }; prototypeAccessors$2.verticalPlacedIconSymbolIndex.get = function () { return this._structArray.int16[this._pos2 + 7]; }; - prototypeAccessors$2.verticalPlacedIconSymbolIndex.set = function (x ) { this._structArray.int16[this._pos2 + 7] = x; }; prototypeAccessors$2.key.get = function () { return this._structArray.uint16[this._pos2 + 8]; }; - prototypeAccessors$2.key.set = function (x ) { this._structArray.uint16[this._pos2 + 8] = x; }; prototypeAccessors$2.textBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 9]; }; - prototypeAccessors$2.textBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 9] = x; }; prototypeAccessors$2.textBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 10]; }; - prototypeAccessors$2.textBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 10] = x; }; prototypeAccessors$2.verticalTextBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 11]; }; - prototypeAccessors$2.verticalTextBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 11] = x; }; prototypeAccessors$2.verticalTextBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 12]; }; - prototypeAccessors$2.verticalTextBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 12] = x; }; prototypeAccessors$2.iconBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 13]; }; - prototypeAccessors$2.iconBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 13] = x; }; prototypeAccessors$2.iconBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 14]; }; - prototypeAccessors$2.iconBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 14] = x; }; prototypeAccessors$2.verticalIconBoxStartIndex.get = function () { return this._structArray.uint16[this._pos2 + 15]; }; - prototypeAccessors$2.verticalIconBoxStartIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 15] = x; }; prototypeAccessors$2.verticalIconBoxEndIndex.get = function () { return this._structArray.uint16[this._pos2 + 16]; }; - prototypeAccessors$2.verticalIconBoxEndIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 16] = x; }; prototypeAccessors$2.featureIndex.get = function () { return this._structArray.uint16[this._pos2 + 17]; }; - prototypeAccessors$2.featureIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 17] = x; }; prototypeAccessors$2.numHorizontalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 18]; }; - prototypeAccessors$2.numHorizontalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 18] = x; }; prototypeAccessors$2.numVerticalGlyphVertices.get = function () { return this._structArray.uint16[this._pos2 + 19]; }; - prototypeAccessors$2.numVerticalGlyphVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 19] = x; }; prototypeAccessors$2.numIconVertices.get = function () { return this._structArray.uint16[this._pos2 + 20]; }; - prototypeAccessors$2.numIconVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 20] = x; }; prototypeAccessors$2.numVerticalIconVertices.get = function () { return this._structArray.uint16[this._pos2 + 21]; }; - prototypeAccessors$2.numVerticalIconVertices.set = function (x ) { this._structArray.uint16[this._pos2 + 21] = x; }; prototypeAccessors$2.crossTileID.get = function () { return this._structArray.uint32[this._pos4 + 11]; }; prototypeAccessors$2.crossTileID.set = function (x ) { this._structArray.uint32[this._pos4 + 11] = x; }; prototypeAccessors$2.textBoxScale.get = function () { return this._structArray.float32[this._pos4 + 12]; }; - prototypeAccessors$2.textBoxScale.set = function (x ) { this._structArray.float32[this._pos4 + 12] = x; }; prototypeAccessors$2.textOffset0.get = function () { return this._structArray.float32[this._pos4 + 13]; }; - prototypeAccessors$2.textOffset0.set = function (x ) { this._structArray.float32[this._pos4 + 13] = x; }; prototypeAccessors$2.textOffset1.get = function () { return this._structArray.float32[this._pos4 + 14]; }; - prototypeAccessors$2.textOffset1.set = function (x ) { this._structArray.float32[this._pos4 + 14] = x; }; Object.defineProperties( SymbolInstanceStruct.prototype, prototypeAccessors$2 ); @@ -16566,29 +17377,6 @@ var SymbolInstanceArray = /*@__PURE__*/(function (StructArrayLayout8i14ui1ul3f60 register('SymbolInstanceArray', SymbolInstanceArray); -var GlyphOffsetStruct = /*@__PURE__*/(function (Struct) { - function GlyphOffsetStruct () { - Struct.apply(this, arguments); - } - - if ( Struct ) GlyphOffsetStruct.__proto__ = Struct; - GlyphOffsetStruct.prototype = Object.create( Struct && Struct.prototype ); - GlyphOffsetStruct.prototype.constructor = GlyphOffsetStruct; - - var prototypeAccessors$3 = { offsetX: { configurable: true } }; - - prototypeAccessors$3.offsetX.get = function () { return this._structArray.float32[this._pos4 + 0]; }; - prototypeAccessors$3.offsetX.set = function (x ) { this._structArray.float32[this._pos4 + 0] = x; }; - - Object.defineProperties( GlyphOffsetStruct.prototype, prototypeAccessors$3 ); - - return GlyphOffsetStruct; -}(Struct)); - -GlyphOffsetStruct.prototype.size = 4; - - - /** * @private */ @@ -16602,47 +17390,12 @@ var GlyphOffsetArray = /*@__PURE__*/(function (StructArrayLayout1f4) { GlyphOffsetArray.prototype.constructor = GlyphOffsetArray; GlyphOffsetArray.prototype.getoffsetX = function getoffsetX (index ) { return this.float32[index * 1 + 0]; }; - /** - * Return the GlyphOffsetStruct at the given location in the array. - * @param {number} index The index of the element. - */ - GlyphOffsetArray.prototype.get = function get (index ) { - assert_1(!this.isTransferred); - return new GlyphOffsetStruct(this, index); - }; return GlyphOffsetArray; }(StructArrayLayout1f4)); register('GlyphOffsetArray', GlyphOffsetArray); -var SymbolLineVertexStruct = /*@__PURE__*/(function (Struct) { - function SymbolLineVertexStruct () { - Struct.apply(this, arguments); - } - - if ( Struct ) SymbolLineVertexStruct.__proto__ = Struct; - SymbolLineVertexStruct.prototype = Object.create( Struct && Struct.prototype ); - SymbolLineVertexStruct.prototype.constructor = SymbolLineVertexStruct; - - var prototypeAccessors$4 = { x: { configurable: true },y: { configurable: true },tileUnitDistanceFromAnchor: { configurable: true } }; - - prototypeAccessors$4.x.get = function () { return this._structArray.int16[this._pos2 + 0]; }; - prototypeAccessors$4.x.set = function (x ) { this._structArray.int16[this._pos2 + 0] = x; }; - prototypeAccessors$4.y.get = function () { return this._structArray.int16[this._pos2 + 1]; }; - prototypeAccessors$4.y.set = function (x ) { this._structArray.int16[this._pos2 + 1] = x; }; - prototypeAccessors$4.tileUnitDistanceFromAnchor.get = function () { return this._structArray.int16[this._pos2 + 2]; }; - prototypeAccessors$4.tileUnitDistanceFromAnchor.set = function (x ) { this._structArray.int16[this._pos2 + 2] = x; }; - - Object.defineProperties( SymbolLineVertexStruct.prototype, prototypeAccessors$4 ); - - return SymbolLineVertexStruct; -}(Struct)); - -SymbolLineVertexStruct.prototype.size = 6; - - - /** * @private */ @@ -16658,14 +17411,6 @@ var SymbolLineVertexArray = /*@__PURE__*/(function (StructArrayLayout3i6) { SymbolLineVertexArray.prototype.getx = function getx (index ) { return this.int16[index * 3 + 0]; }; SymbolLineVertexArray.prototype.gety = function gety (index ) { return this.int16[index * 3 + 1]; }; SymbolLineVertexArray.prototype.gettileUnitDistanceFromAnchor = function gettileUnitDistanceFromAnchor (index ) { return this.int16[index * 3 + 2]; }; - /** - * Return the SymbolLineVertexStruct at the given location in the array. - * @param {number} index The index of the element. - */ - SymbolLineVertexArray.prototype.get = function get (index ) { - assert_1(!this.isTransferred); - return new SymbolLineVertexStruct(this, index); - }; return SymbolLineVertexArray; }(StructArrayLayout3i6)); @@ -16681,16 +17426,13 @@ var FeatureIndexStruct = /*@__PURE__*/(function (Struct) { FeatureIndexStruct.prototype = Object.create( Struct && Struct.prototype ); FeatureIndexStruct.prototype.constructor = FeatureIndexStruct; - var prototypeAccessors$5 = { featureIndex: { configurable: true },sourceLayerIndex: { configurable: true },bucketIndex: { configurable: true } }; + var prototypeAccessors$3 = { featureIndex: { configurable: true },sourceLayerIndex: { configurable: true },bucketIndex: { configurable: true } }; - prototypeAccessors$5.featureIndex.get = function () { return this._structArray.uint32[this._pos4 + 0]; }; - prototypeAccessors$5.featureIndex.set = function (x ) { this._structArray.uint32[this._pos4 + 0] = x; }; - prototypeAccessors$5.sourceLayerIndex.get = function () { return this._structArray.uint16[this._pos2 + 2]; }; - prototypeAccessors$5.sourceLayerIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 2] = x; }; - prototypeAccessors$5.bucketIndex.get = function () { return this._structArray.uint16[this._pos2 + 3]; }; - prototypeAccessors$5.bucketIndex.set = function (x ) { this._structArray.uint16[this._pos2 + 3] = x; }; + prototypeAccessors$3.featureIndex.get = function () { return this._structArray.uint32[this._pos4 + 0]; }; + prototypeAccessors$3.sourceLayerIndex.get = function () { return this._structArray.uint16[this._pos2 + 2]; }; + prototypeAccessors$3.bucketIndex.get = function () { return this._structArray.uint16[this._pos2 + 3]; }; - Object.defineProperties( FeatureIndexStruct.prototype, prototypeAccessors$5 ); + Object.defineProperties( FeatureIndexStruct.prototype, prototypeAccessors$3 ); return FeatureIndexStruct; }(Struct)); @@ -16741,7 +17483,7 @@ var alignment = layout$1.alignment; - + var SegmentVector = function SegmentVector(segments) { @@ -17073,7 +17815,7 @@ register('FeaturePositionMap', FeaturePositionMap); - + var Uniform = function Uniform(context , location ) { this.gl = context.gl; @@ -17236,6 +17978,7 @@ var UniformMatrix4f = /*@__PURE__*/(function (Uniform) { // + @@ -17295,8 +18038,8 @@ function packColor(color ) { */ - - + + @@ -17304,7 +18047,7 @@ function packColor(color ) { - + var ConstantBinder = function ConstantBinder(value , names , type ) { @@ -17317,7 +18060,7 @@ var ConstantBinder = function ConstantBinder(value , names , typ uniform.set(currentValue.constantOr(this.value)); }; - ConstantBinder.prototype.getBinding = function getBinding (context , location ) { + ConstantBinder.prototype.getBinding = function getBinding (context , location , _ ) { return (this.type === 'color') ? new UniformColor(context, location) : new Uniform1f(context, location); @@ -17327,22 +18070,30 @@ var CrossFadedConstantBinder = function CrossFadedConstantBinder(value , nam this.uniformNames = names.map(function (name) { return ("u_" + name); }); this.patternFrom = null; this.patternTo = null; + this.pixelRatioFrom = 1.0; + this.pixelRatioTo = 1.0; }; CrossFadedConstantBinder.prototype.setConstantPatternPositions = function setConstantPatternPositions (posTo , posFrom ) { - this.patternTo = posTo.tlbr; + this.pixelRatioFrom = posFrom.pixelRatio; + this.pixelRatioTo = posTo.pixelRatio; this.patternFrom = posFrom.tlbr; + this.patternTo = posTo.tlbr; }; CrossFadedConstantBinder.prototype.setUniform = function setUniform (uniform , globals , currentValue , uniformName ) { var pos = uniformName === 'u_pattern_to' ? this.patternTo : - uniformName === 'u_pattern_from' ? this.patternFrom : null; + uniformName === 'u_pattern_from' ? this.patternFrom : + uniformName === 'u_pixel_ratio_to' ? this.pixelRatioTo : + uniformName === 'u_pixel_ratio_from' ? this.pixelRatioFrom : null; if (pos) { uniform.set(pos); } }; - CrossFadedConstantBinder.prototype.getBinding = function getBinding (context , location ) { - return new Uniform4f(context, location); + CrossFadedConstantBinder.prototype.getBinding = function getBinding (context , location , name ) { + return name.substr(0, 9) === 'u_pattern' ? + new Uniform4f(context, location) : + new Uniform1f(context, location); }; var SourceExpressionBinder = function SourceExpressionBinder(expression , names , type , PaintVertexArray ) { @@ -17358,9 +18109,9 @@ var SourceExpressionBinder = function SourceExpressionBinder(expression this.paintVertexArray = new PaintVertexArray(); }; - SourceExpressionBinder.prototype.populatePaintArray = function populatePaintArray (newLength , feature , imagePositions , formattedSection ) { + SourceExpressionBinder.prototype.populatePaintArray = function populatePaintArray (newLength , feature , imagePositions , canonical , formattedSection ) { var start = this.paintVertexArray.length; - var value = this.expression.evaluate(new EvaluationParameters(0), feature, {}, [], formattedSection); + var value = this.expression.evaluate(new EvaluationParameters(0), feature, {}, canonical, [], formattedSection); this.paintVertexArray.resize(newLength); this._setPaintValue(start, newLength, value); }; @@ -17416,9 +18167,9 @@ var CompositeExpressionBinder = function CompositeExpressionBinder(expression this.paintVertexArray = new PaintVertexArray(); }; - CompositeExpressionBinder.prototype.populatePaintArray = function populatePaintArray (newLength , feature , imagePositions , formattedSection ) { - var min = this.expression.evaluate(new EvaluationParameters(this.zoom), feature, {}, [], formattedSection); - var max = this.expression.evaluate(new EvaluationParameters(this.zoom + 1), feature, {}, [], formattedSection); + CompositeExpressionBinder.prototype.populatePaintArray = function populatePaintArray (newLength , feature , imagePositions , canonical , formattedSection ) { + var min = this.expression.evaluate(new EvaluationParameters(this.zoom), feature, {}, canonical, [], formattedSection); + var max = this.expression.evaluate(new EvaluationParameters(this.zoom + 1), feature, {}, canonical, [], formattedSection); var start = this.paintVertexArray.length; this.paintVertexArray.resize(newLength); this._setPaintValue(start, newLength, min, max); @@ -17467,7 +18218,7 @@ var CompositeExpressionBinder = function CompositeExpressionBinder(expression uniform.set(factor); }; - CompositeExpressionBinder.prototype.getBinding = function getBinding (context , location ) { + CompositeExpressionBinder.prototype.getBinding = function getBinding (context , location , _ ) { return new Uniform1f(context, location); }; @@ -17489,14 +18240,14 @@ var CrossFadedCompositeBinder = function CrossFadedCompositeBinder(expression this.zoomOutPaintVertexArray = new PaintVertexArray(); }; - CrossFadedCompositeBinder.prototype.populatePaintArray = function populatePaintArray (length , feature , imagePositions ) { + CrossFadedCompositeBinder.prototype.populatePaintArray = function populatePaintArray (length , feature , imagePositions ) { var start = this.zoomInPaintVertexArray.length; this.zoomInPaintVertexArray.resize(length); this.zoomOutPaintVertexArray.resize(length); this._setPaintValues(start, length, feature.patterns && feature.patterns[this.layerId], imagePositions); }; - CrossFadedCompositeBinder.prototype.updatePaintArray = function updatePaintArray (start , end , feature , featureState , imagePositions ) { + CrossFadedCompositeBinder.prototype.updatePaintArray = function updatePaintArray (start , end , feature , featureState , imagePositions ) { this._setPaintValues(start, end, feature.patterns && feature.patterns[this.layerId], imagePositions); }; @@ -17517,11 +18268,15 @@ var CrossFadedCompositeBinder = function CrossFadedCompositeBinder(expression for (var i = start; i < end; i++) { this.zoomInPaintVertexArray.emplace(i, imageMid.tl[0], imageMid.tl[1], imageMid.br[0], imageMid.br[1], - imageMin.tl[0], imageMin.tl[1], imageMin.br[0], imageMin.br[1] + imageMin.tl[0], imageMin.tl[1], imageMin.br[0], imageMin.br[1], + imageMid.pixelRatio, + imageMin.pixelRatio ); this.zoomOutPaintVertexArray.emplace(i, imageMid.tl[0], imageMid.tl[1], imageMid.br[0], imageMid.br[1], - imageMax.tl[0], imageMax.tl[1], imageMax.br[0], imageMax.br[1] + imageMax.tl[0], imageMax.tl[1], imageMax.br[0], imageMax.br[1], + imageMid.pixelRatio, + imageMax.pixelRatio ); } }; @@ -17558,7 +18313,7 @@ var CrossFadedCompositeBinder = function CrossFadedCompositeBinder(expression * * @private */ -var ProgramConfiguration = function ProgramConfiguration(layer , zoom , filterProperties , layoutAttributes ) { +var ProgramConfiguration = function ProgramConfiguration(layer , zoom , filterProperties , layoutAttributes ) { this.binders = {}; this.layoutAttributes = layoutAttributes; this._buffers = []; @@ -17606,11 +18361,11 @@ var ProgramConfiguration = function ProgramConfiguration(layer , z return binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder ? binder.maxValue : 0; }; - ProgramConfiguration.prototype.populatePaintArrays = function populatePaintArrays (newLength , feature , imagePositions , formattedSection ) { + ProgramConfiguration.prototype.populatePaintArrays = function populatePaintArrays (newLength , feature , imagePositions , canonical , formattedSection ) { for (var property in this.binders) { var binder = this.binders[property]; if (binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder || binder instanceof CrossFadedCompositeBinder) - { (binder ).populatePaintArray(newLength, feature, imagePositions, formattedSection); } + { (binder ).populatePaintArray(newLength, feature, imagePositions, canonical, formattedSection); } } }; ProgramConfiguration.prototype.setConstantPatternPositions = function setConstantPatternPositions (posTo , posFrom ) { @@ -17621,7 +18376,7 @@ var ProgramConfiguration = function ProgramConfiguration(layer , z } }; - ProgramConfiguration.prototype.updatePaintArrays = function updatePaintArrays (featureStates , featureMap , vtLayer , layer , imagePositions ) { + ProgramConfiguration.prototype.updatePaintArrays = function updatePaintArrays (featureStates , featureMap , vtLayer , layer , imagePositions ) { var dirty = false; for (var id in featureStates) { var positions = featureMap.getPositions(id); @@ -17671,7 +18426,7 @@ var ProgramConfiguration = function ProgramConfiguration(layer , z var name = list[i]; if (locations[name]) { - var binding = binder.getBinding(context, locations[name]); + var binding = binder.getBinding(context, locations[name], name); uniforms.push({name: name, property: property, binding: binding}); } } @@ -17726,7 +18481,7 @@ var ProgramConfiguration = function ProgramConfiguration(layer , z }; var ProgramConfigurationSet = function ProgramConfigurationSet(layoutAttributes , layers , zoom , filterProperties) { - if ( filterProperties === void 0 ) filterProperties = function () { return true; }; + if ( filterProperties === void 0 ) filterProperties = function () { return true; }; this.programConfigurations = {}; for (var i = 0, list = layers; i < list.length; i += 1) { @@ -17739,9 +18494,9 @@ var ProgramConfigurationSet = function ProgramConfigurationSet(layoutAttributes this._bufferOffset = 0; }; - ProgramConfigurationSet.prototype.populatePaintArrays = function populatePaintArrays (length , feature , index , imagePositions , formattedSection ) { + ProgramConfigurationSet.prototype.populatePaintArrays = function populatePaintArrays (length , feature , index , imagePositions , canonical , formattedSection ) { for (var key in this.programConfigurations) { - this.programConfigurations[key].populatePaintArrays(length, feature, imagePositions, formattedSection); + this.programConfigurations[key].populatePaintArrays(length, feature, imagePositions, canonical, formattedSection); } if (feature.id !== undefined) { @@ -17752,7 +18507,7 @@ var ProgramConfigurationSet = function ProgramConfigurationSet(layoutAttributes this.needsUpload = true; }; - ProgramConfigurationSet.prototype.updatePaintArrays = function updatePaintArrays (featureStates , vtLayer , layers , imagePositions ) { + ProgramConfigurationSet.prototype.updatePaintArrays = function updatePaintArrays (featureStates , vtLayer , layers , imagePositions ) { for (var i = 0, list = layers; i < list.length; i += 1) { var layer = list[i]; @@ -17791,9 +18546,9 @@ function paintAttributeNames(property, type) { 'text-halo-width': ['halo_width'], 'icon-halo-width': ['halo_width'], 'line-gap-width': ['gapwidth'], - 'line-pattern': ['pattern_to', 'pattern_from'], - 'fill-pattern': ['pattern_to', 'pattern_from'], - 'fill-extrusion-pattern': ['pattern_to', 'pattern_from'], + 'line-pattern': ['pattern_to', 'pattern_from', 'pixel_ratio_to', 'pixel_ratio_from'], + 'fill-pattern': ['pattern_to', 'pattern_from', 'pixel_ratio_to', 'pixel_ratio_from'], + 'fill-extrusion-pattern': ['pattern_to', 'pattern_from', 'pixel_ratio_to', 'pixel_ratio_from'], }; return attributeNameExceptions[property] || [property.replace((type + "-"), '').replace(/-/g, '_')]; @@ -17802,16 +18557,16 @@ function paintAttributeNames(property, type) { function getLayoutException(property) { var propertyExceptions = { 'line-pattern':{ - 'source': StructArrayLayout8ui16, - 'composite': StructArrayLayout8ui16 + 'source': StructArrayLayout8ui2ub18, + 'composite': StructArrayLayout8ui2ub18 }, 'fill-pattern': { - 'source': StructArrayLayout8ui16, - 'composite': StructArrayLayout8ui16 + 'source': StructArrayLayout8ui2ub18, + 'composite': StructArrayLayout8ui2ub18 }, 'fill-extrusion-pattern':{ - 'source': StructArrayLayout8ui16, - 'composite': StructArrayLayout8ui16 + 'source': StructArrayLayout8ui2ub18, + 'composite': StructArrayLayout8ui2ub18 } }; @@ -17846,25 +18601,6 @@ register('ProgramConfigurationSet', ProgramConfigurationSet); // -/** - * The maximum value of a coordinate in the internal tile coordinate system. Coordinates of - * all source features normalized to this extent upon load. - * - * The value is a consequence of the following: - * - * * Vertex buffer store positions as signed 16 bit integers. - * * One bit is lost for signedness to support tile buffers. - * * One bit is lost because the line vertex buffer used to pack 1 bit of other data into the int. - * * One bit is lost to support features extending past the extent on the right edge of the tile. - * * This leaves us with 2^13 = 8192 - * - * @private - * @readonly - */ -var EXTENT = 8192; - -// - // These bounds define the minimum and maximum supported coordinate values. @@ -17910,6 +18646,7 @@ function loadGeometry(feature ) { // + @@ -17954,7 +18691,7 @@ var CircleBucket = function CircleBucket(options ) { this.stateDependentLayerIds = this.layers.filter(function (l) { return l.isStateDependent(); }).map(function (l) { return l.id; }); }; -CircleBucket.prototype.populate = function populate (features , options ) { +CircleBucket.prototype.populate = function populate (features , options , canonical ) { var styleLayer = this.layers[0]; var bucketFeatures = []; var circleSortKey = null; @@ -17971,25 +18708,32 @@ CircleBucket.prototype.populate = function populate (features var index = ref.index; var sourceLayerIndex = ref.sourceLayerIndex; - if (this.layers[0]._featureFilter(new EvaluationParameters(this.zoom), feature)) { - var geometry = loadGeometry(feature); - var sortKey = circleSortKey ? - circleSortKey.evaluate(feature, {}) : - undefined; + var needGeometry = this.layers[0]._featureFilter.needGeometry; + var evaluationFeature = {type: feature.type, + id: id, + properties: feature.properties, + geometry: needGeometry ? loadGeometry(feature) : []}; - var bucketFeature = { - id: id, - properties: feature.properties, - type: feature.type, - sourceLayerIndex: sourceLayerIndex, - index: index, - geometry: geometry, - patterns: {}, - sortKey: sortKey - }; + if (!this.layers[0]._featureFilter.filter(new EvaluationParameters(this.zoom), evaluationFeature, canonical)) { continue; } + + if (!needGeometry) { evaluationFeature.geometry = loadGeometry(feature); } + var sortKey = circleSortKey ? + circleSortKey.evaluate(evaluationFeature, {}, canonical) : + undefined; + + var bucketFeature = { + id: id, + properties: feature.properties, + type: feature.type, + sourceLayerIndex: sourceLayerIndex, + index: index, + geometry : evaluationFeature.geometry, + patterns: {}, + sortKey: sortKey + }; + + bucketFeatures.push(bucketFeature); - bucketFeatures.push(bucketFeature); - } } if (circleSortKey) { @@ -18003,17 +18747,17 @@ CircleBucket.prototype.populate = function populate (features var bucketFeature$1 = list$1[i$1]; var ref$1 = bucketFeature$1; - var geometry$1 = ref$1.geometry; + var geometry = ref$1.geometry; var index$1 = ref$1.index; var sourceLayerIndex$1 = ref$1.sourceLayerIndex; var feature$1 = features[index$1].feature; - this.addFeature(bucketFeature$1, geometry$1, index$1); - options.featureIndex.insert(feature$1, geometry$1, index$1, sourceLayerIndex$1, this.index); + this.addFeature(bucketFeature$1, geometry, index$1, canonical); + options.featureIndex.insert(feature$1, geometry, index$1, sourceLayerIndex$1, this.index); } }; -CircleBucket.prototype.update = function update (states , vtLayer , imagePositions ) { +CircleBucket.prototype.update = function update (states , vtLayer , imagePositions ) { if (!this.stateDependentLayers.length) { return; } this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); }; @@ -18043,7 +18787,7 @@ CircleBucket.prototype.destroy = function destroy () { this.segments.destroy(); }; -CircleBucket.prototype.addFeature = function addFeature (feature , geometry , index ) { +CircleBucket.prototype.addFeature = function addFeature (feature , geometry , index , canonical ) { for (var i$1 = 0, list$1 = geometry; i$1 < list$1.length; i$1 += 1) { var ring = list$1[i$1]; @@ -18081,7 +18825,7 @@ CircleBucket.prototype.addFeature = function addFeature (feature , geo } } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, {}); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, {}, canonical); }; register('CircleBucket', CircleBucket, {omit: ['layers']}); @@ -26855,6 +27599,7 @@ function addPatternDependencies(type , layers , patter // var EARCUT_MAX_RINGS = 500; + @@ -26888,7 +27633,7 @@ var FillBucket = function FillBucket(options ) { this.stateDependentLayerIds = this.layers.filter(function (l) { return l.isStateDependent(); }).map(function (l) { return l.id; }); }; -FillBucket.prototype.populate = function populate (features , options ) { +FillBucket.prototype.populate = function populate (features , options , canonical ) { this.hasPattern = hasPattern('fill', this.layers, options); var fillSortKey = this.layers[0].layout.get('fill-sort-key'); var bucketFeatures = []; @@ -26900,11 +27645,18 @@ FillBucket.prototype.populate = function populate (features , var index = ref.index; var sourceLayerIndex = ref.sourceLayerIndex; - if (!this.layers[0]._featureFilter(new EvaluationParameters(this.zoom), feature)) { continue; } + var needGeometry = this.layers[0]._featureFilter.needGeometry; + var evaluationFeature = {type: feature.type, + id: id, + properties: feature.properties, + geometry: needGeometry ? loadGeometry(feature) : []}; + + if (!this.layers[0]._featureFilter.filter(new EvaluationParameters(this.zoom), evaluationFeature, canonical)) { continue; } + + if (!needGeometry) { evaluationFeature.geometry = loadGeometry(feature); } - var geometry = loadGeometry(feature); var sortKey = fillSortKey ? - fillSortKey.evaluate(feature, {}, options.availableImages) : + fillSortKey.evaluate(evaluationFeature, {}, canonical, options.availableImages) : undefined; var bucketFeature = { @@ -26913,7 +27665,7 @@ FillBucket.prototype.populate = function populate (features , type: feature.type, sourceLayerIndex: sourceLayerIndex, index: index, - geometry: geometry, + geometry: evaluationFeature.geometry, patterns: {}, sortKey: sortKey }; @@ -26932,7 +27684,7 @@ FillBucket.prototype.populate = function populate (features , var bucketFeature$1 = list$1[i$1]; var ref$1 = bucketFeature$1; - var geometry$1 = ref$1.geometry; + var geometry = ref$1.geometry; var index$1 = ref$1.index; var sourceLayerIndex$1 = ref$1.sourceLayerIndex; @@ -26942,24 +27694,24 @@ FillBucket.prototype.populate = function populate (features , // so are stored during populate until later updated with positions by tile worker in addFeatures this.patternFeatures.push(patternFeature); } else { - this.addFeature(bucketFeature$1, geometry$1, index$1, {}); + this.addFeature(bucketFeature$1, geometry, index$1, canonical, {}); } var feature$1 = features[index$1].feature; - options.featureIndex.insert(feature$1, geometry$1, index$1, sourceLayerIndex$1, this.index); + options.featureIndex.insert(feature$1, geometry, index$1, sourceLayerIndex$1, this.index); } }; -FillBucket.prototype.update = function update (states , vtLayer , imagePositions ) { +FillBucket.prototype.update = function update (states , vtLayer , imagePositions ) { if (!this.stateDependentLayers.length) { return; } this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); }; -FillBucket.prototype.addFeatures = function addFeatures (options , imagePositions ) { +FillBucket.prototype.addFeatures = function addFeatures (options , canonical , imagePositions ) { for (var i = 0, list = this.patternFeatures; i < list.length; i += 1) { var feature = list[i]; - this.addFeature(feature, feature.geometry, feature.index, imagePositions); + this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions); } }; @@ -26990,7 +27742,7 @@ FillBucket.prototype.destroy = function destroy () { this.segments2.destroy(); }; -FillBucket.prototype.addFeature = function addFeature (feature , geometry , index , imagePositions ) { +FillBucket.prototype.addFeature = function addFeature (feature , geometry , index , canonical , imagePositions ) { for (var i$4 = 0, list$2 = classifyRings(geometry, EARCUT_MAX_RINGS); i$4 < list$2.length; i$4 += 1) { var polygon = list$2[i$4]; @@ -27050,7 +27802,7 @@ FillBucket.prototype.addFeature = function addFeature (feature , geome triangleSegment.vertexLength += numVertices; triangleSegment.primitiveLength += indices.length / 3; } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); }; register('FillBucket', FillBucket, {omit: ['layers', 'patternFeatures']}); @@ -27491,6 +28243,7 @@ var vectorTile = { var vectorTileFeatureTypes = vectorTile.VectorTileFeature.types; var EARCUT_MAX_RINGS$1 = 500; + @@ -27539,7 +28292,7 @@ var FillExtrusionBucket = function FillExtrusionBucket(options }; -FillExtrusionBucket.prototype.populate = function populate (features , options ) { +FillExtrusionBucket.prototype.populate = function populate (features , options , canonical ) { this.features = []; this.hasPattern = hasPattern('fill-extrusion', this.layers, options); @@ -27550,15 +28303,19 @@ FillExtrusionBucket.prototype.populate = function populate (features var index = ref.index; var sourceLayerIndex = ref.sourceLayerIndex; - if (!this.layers[0]._featureFilter(new EvaluationParameters(this.zoom), feature)) { continue; } + var needGeometry = this.layers[0]._featureFilter.needGeometry; + var evaluationFeature = {type: feature.type, + id: id, + properties: feature.properties, + geometry: needGeometry ? loadGeometry(feature) : []}; - var geometry = loadGeometry(feature); + if (!this.layers[0]._featureFilter.filter(new EvaluationParameters(this.zoom), evaluationFeature, canonical)) { continue; } var patternFeature = { id: id, sourceLayerIndex: sourceLayerIndex, index: index, - geometry: geometry, + geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature), properties: feature.properties, type: feature.type, patterns: {} @@ -27571,23 +28328,23 @@ FillExtrusionBucket.prototype.populate = function populate (features if (this.hasPattern) { this.features.push(addPatternDependencies('fill-extrusion', this.layers, patternFeature, this.zoom, options)); } else { - this.addFeature(patternFeature, geometry, index, {}); + this.addFeature(patternFeature, patternFeature.geometry, index, canonical, {}); } - options.featureIndex.insert(feature, geometry, index, sourceLayerIndex, this.index, true); + options.featureIndex.insert(feature, patternFeature.geometry, index, sourceLayerIndex, this.index, true); } }; -FillExtrusionBucket.prototype.addFeatures = function addFeatures (options , imagePositions ) { +FillExtrusionBucket.prototype.addFeatures = function addFeatures (options , canonical , imagePositions ) { for (var i = 0, list = this.features; i < list.length; i += 1) { var feature = list[i]; var geometry = feature.geometry; - this.addFeature(feature, geometry, feature.index, imagePositions); + this.addFeature(feature, geometry, feature.index, canonical, imagePositions); } }; -FillExtrusionBucket.prototype.update = function update (states , vtLayer , imagePositions ) { +FillExtrusionBucket.prototype.update = function update (states , vtLayer , imagePositions ) { if (!this.stateDependentLayers.length) { return; } this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); }; @@ -27617,7 +28374,7 @@ FillExtrusionBucket.prototype.destroy = function destroy () { this.segments.destroy(); }; -FillExtrusionBucket.prototype.addFeature = function addFeature (feature , geometry , index , imagePositions ) { +FillExtrusionBucket.prototype.addFeature = function addFeature (feature , geometry , index , canonical , imagePositions ) { for (var i$4 = 0, list$3 = classifyRings(geometry, EARCUT_MAX_RINGS$1); i$4 < list$3.length; i$4 += 1) { var polygon = list$3[i$4]; @@ -27731,7 +28488,7 @@ FillExtrusionBucket.prototype.addFeature = function addFeature (feature segment.vertexLength += numVertices; } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); }; register('FillExtrusionBucket', FillExtrusionBucket, {omit: ['layers', 'features']}); @@ -28016,6 +28773,7 @@ var alignment$3 = lineLayoutAttributes.alignment; // var vectorTileFeatureTypes$1 = vectorTile.VectorTileFeature.types; + @@ -28088,7 +28846,7 @@ var LineBucket = function LineBucket(options ) { this.stateDependentLayerIds = this.layers.filter(function (l) { return l.isStateDependent(); }).map(function (l) { return l.id; }); }; -LineBucket.prototype.populate = function populate (features , options ) { +LineBucket.prototype.populate = function populate (features , options , canonical ) { this.hasPattern = hasPattern('line', this.layers, options); var lineSortKey = this.layers[0].layout.get('line-sort-key'); var bucketFeatures = []; @@ -28100,11 +28858,18 @@ LineBucket.prototype.populate = function populate (features , var index = ref.index; var sourceLayerIndex = ref.sourceLayerIndex; - if (!this.layers[0]._featureFilter(new EvaluationParameters(this.zoom), feature)) { continue; } + var needGeometry = this.layers[0]._featureFilter.needGeometry; + var evaluationFeature = {type: feature.type, + id: id, + properties: feature.properties, + geometry: needGeometry ? loadGeometry(feature) : []}; + + if (!this.layers[0]._featureFilter.filter(new EvaluationParameters(this.zoom), evaluationFeature, canonical)) { continue; } + + if (!needGeometry) { evaluationFeature.geometry = loadGeometry(feature); } - var geometry = loadGeometry(feature); var sortKey = lineSortKey ? - lineSortKey.evaluate(feature, {}) : + lineSortKey.evaluate(evaluationFeature, {}, canonical) : undefined; var bucketFeature = { @@ -28113,7 +28878,7 @@ LineBucket.prototype.populate = function populate (features , type: feature.type, sourceLayerIndex: sourceLayerIndex, index: index, - geometry: geometry, + geometry: evaluationFeature.geometry, patterns: {}, sortKey: sortKey }; @@ -28132,7 +28897,7 @@ LineBucket.prototype.populate = function populate (features , var bucketFeature$1 = list$1[i$1]; var ref$1 = bucketFeature$1; - var geometry$1 = ref$1.geometry; + var geometry = ref$1.geometry; var index$1 = ref$1.index; var sourceLayerIndex$1 = ref$1.sourceLayerIndex; @@ -28142,24 +28907,24 @@ LineBucket.prototype.populate = function populate (features , // so are stored during populate until later updated with positions by tile worker in addFeatures this.patternFeatures.push(patternBucketFeature); } else { - this.addFeature(bucketFeature$1, geometry$1, index$1, {}); + this.addFeature(bucketFeature$1, geometry, index$1, canonical, {}); } var feature$1 = features[index$1].feature; - options.featureIndex.insert(feature$1, geometry$1, index$1, sourceLayerIndex$1, this.index); + options.featureIndex.insert(feature$1, geometry, index$1, sourceLayerIndex$1, this.index); } }; -LineBucket.prototype.update = function update (states , vtLayer , imagePositions ) { +LineBucket.prototype.update = function update (states , vtLayer , imagePositions ) { if (!this.stateDependentLayers.length) { return; } this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); }; -LineBucket.prototype.addFeatures = function addFeatures (options , imagePositions ) { +LineBucket.prototype.addFeatures = function addFeatures (options , canonical , imagePositions ) { for (var i = 0, list = this.patternFeatures; i < list.length; i += 1) { var feature = list[i]; - this.addFeature(feature, feature.geometry, feature.index, imagePositions); + this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions); } }; @@ -28188,7 +28953,7 @@ LineBucket.prototype.destroy = function destroy () { this.segments.destroy(); }; -LineBucket.prototype.addFeature = function addFeature (feature , geometry , index , imagePositions ) { +LineBucket.prototype.addFeature = function addFeature (feature , geometry , index , canonical , imagePositions ) { var layout = this.layers[0].layout; var join = layout.get('line-join').evaluate(feature, {}); var cap = layout.get('line-cap'); @@ -28198,11 +28963,11 @@ LineBucket.prototype.addFeature = function addFeature (feature , geome for (var i = 0, list = geometry; i < list.length; i += 1) { var line = list[i]; - this.addLine(line, feature, join, cap, miterLimit, roundLimit, index, imagePositions); + this.addLine(line, feature, join, cap, miterLimit, roundLimit, index, canonical, imagePositions); } }; -LineBucket.prototype.addLine = function addLine (vertices , feature , join , cap , miterLimit , roundLimit , index , imagePositions ) { +LineBucket.prototype.addLine = function addLine (vertices , feature , join , cap , miterLimit , roundLimit , index , canonical , imagePositions ) { this.distance = 0; this.scaledDistance = 0; this.totalDistance = 0; @@ -28448,7 +29213,7 @@ LineBucket.prototype.addLine = function addLine (vertices , feature } } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); }; /** @@ -28881,8 +29646,8 @@ function transformText$1(text , layer , feature function mergeLines (features ) { - var leftIndex = {}; - var rightIndex = {}; + var leftIndex = {}; + var rightIndex = {}; var mergedFeatures = []; var mergedIndex = 0; @@ -30012,7 +30777,7 @@ var prototypeAccessors = { tl: { configurable: true },br: { configurable: true } Object.defineProperties( ImagePosition.prototype, prototypeAccessors ); -var ImageAtlas = function ImageAtlas(icons , patterns ) { +var ImageAtlas = function ImageAtlas(icons , patterns ) { var iconPositions = {}, patternPositions = {}; this.haveRenderCallbacks = []; @@ -30053,7 +30818,7 @@ var ImageAtlas = function ImageAtlas(icons , patterns this.patternPositions = patternPositions; }; - ImageAtlas.prototype.addImages = function addImages (images , positions , bins ) { + ImageAtlas.prototype.addImages = function addImages (images , positions , bins ) { for (var id in images) { var src = images[id]; var bin = { @@ -30304,9 +31069,9 @@ function breakLines(input , lineBreakPoints ) } function shapeText(text , - glyphMap , - glyphPositions , - imagePositions , + glyphMap , + glyphPositions , + imagePositions , defaultFontStack , maxWidth , lineHeight , @@ -30389,7 +31154,7 @@ function shapeText(text , // using computed properties due to https://github.com/facebook/flow/issues/380 /* eslint no-useless-computed-key: 0 */ -var whitespace = {}; +var whitespace = {}; whitespace[0x09] = true; whitespace[0x0a] = true; whitespace[0x0b] = true; @@ -30397,7 +31162,7 @@ whitespace[0x0c] = true; whitespace[0x0d] = true; whitespace[0x20] = true; -var breakable = {}; +var breakable = {}; breakable[0x0a] = true; breakable[0x20] = true; breakable[0x26] = true; @@ -30415,8 +31180,8 @@ breakable[0x2027] = true; function getGlyphAdvance(codePoint , section , - glyphMap , - imagePositions , + glyphMap , + imagePositions , spacing , layoutTextSize ) { if (!section.imageName) { @@ -30434,8 +31199,8 @@ function getGlyphAdvance(codePoint , function determineAverageLineWidth(logicalInput , spacing , maxWidth , - glyphMap , - imagePositions , + glyphMap , + imagePositions , layoutTextSize ) { var totalWidth = 0; @@ -30540,8 +31305,8 @@ function leastBadBreaks(lastLineBreak ) { function determineLineBreaks(logicalInput , spacing , maxWidth , - glyphMap , - imagePositions , + glyphMap , + imagePositions , symbolPlacement , layoutTextSize ) { if (symbolPlacement !== 'point') @@ -30623,9 +31388,9 @@ function getAnchorAlignment(anchor ) { } function shapeLines(shaping , - glyphMap , - glyphPositions , - imagePositions , + glyphMap , + glyphPositions , + imagePositions , lines , lineHeight , textAnchor , @@ -31567,7 +32332,7 @@ function getGlyphQuads(anchor , layer , alongLine , feature , - imageMap , + imageMap , allowVerticalPlacement ) { var textRotate = layer.layout.get('text-rotate').evaluate(feature, {}) * Math.PI / 180; @@ -32205,11 +32970,12 @@ function evaluateVariableOffset(anchor , offset ) { } function performSymbolLayout(bucket , - glyphMap , - glyphPositions , - imageMap , - imagePositions , - showCollisionBoxes ) { + glyphMap , + glyphPositions , + imageMap , + imagePositions , + showCollisionBoxes , + canonical ) { bucket.createArrays(); var tileSize = 512 * bucket.overscaling; @@ -32227,8 +32993,8 @@ function performSymbolLayout(bucket , var minZoom = ref.minZoom; var maxZoom = ref.maxZoom; sizes.compositeTextSizes = [ - unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(minZoom)), - unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(maxZoom)) + unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(minZoom), canonical), + unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(maxZoom), canonical) ]; } @@ -32237,13 +33003,13 @@ function performSymbolLayout(bucket , var minZoom$1 = ref$1.minZoom; var maxZoom$1 = ref$1.maxZoom; sizes.compositeIconSizes = [ - unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(minZoom$1)), - unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(maxZoom$1)) + unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(minZoom$1), canonical), + unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(maxZoom$1), canonical) ]; } - sizes.layoutTextSize = unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(bucket.zoom + 1)); - sizes.layoutIconSize = unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(bucket.zoom + 1)); + sizes.layoutTextSize = unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(bucket.zoom + 1), canonical); + sizes.layoutIconSize = unevaluatedLayoutValues['icon-size'].possiblyEvaluate(new EvaluationParameters(bucket.zoom + 1), canonical); sizes.textMaxSize = unevaluatedLayoutValues['text-size'].possiblyEvaluate(new EvaluationParameters(18)); var lineHeight = layout.get('text-line-height') * ONE_EM; @@ -32254,10 +33020,10 @@ function performSymbolLayout(bucket , var loop = function () { var feature = list[i$1]; - var fontstack = layout.get('text-font').evaluate(feature, {}).join(','); - var layoutTextSizeThisZoom = textSize.evaluate(feature, {}); - var layoutTextSize = sizes.layoutTextSize.evaluate(feature, {}); - var layoutIconSize = sizes.layoutIconSize.evaluate(feature, {}); + var fontstack = layout.get('text-font').evaluate(feature, {}, canonical).join(','); + var layoutTextSizeThisZoom = textSize.evaluate(feature, {}, canonical); + var layoutTextSize = sizes.layoutTextSize.evaluate(feature, {}, canonical); + var layoutIconSize = sizes.layoutIconSize.evaluate(feature, {}, canonical); var shapedTextOrientations = { horizontal: {}, @@ -32267,14 +33033,14 @@ function performSymbolLayout(bucket , var textOffset = [0, 0]; if (text) { var unformattedText = text.toString(); - var spacing = layout.get('text-letter-spacing').evaluate(feature, {}) * ONE_EM; + var spacing = layout.get('text-letter-spacing').evaluate(feature, {}, canonical) * ONE_EM; var spacingIfAllowed = allowsLetterSpacing(unformattedText) ? spacing : 0; - var textAnchor = layout.get('text-anchor').evaluate(feature, {}); + var textAnchor = layout.get('text-anchor').evaluate(feature, {}, canonical); var variableTextAnchor = layout.get('text-variable-anchor'); if (!variableTextAnchor) { - var radialOffset = layout.get('text-radial-offset').evaluate(feature, {}); + var radialOffset = layout.get('text-radial-offset').evaluate(feature, {}, canonical); // Layers with variable anchors use the `text-radial-offset` property and the [x, y] offset vector // is calculated at placement time instead of layout time if (radialOffset) { @@ -32282,17 +33048,17 @@ function performSymbolLayout(bucket , // but doesn't actually specify what happens if you use both. We go with the radial offset. textOffset = evaluateVariableOffset(textAnchor, [radialOffset * ONE_EM, INVALID_TEXT_OFFSET]); } else { - textOffset = (layout.get('text-offset').evaluate(feature, {}).map(function (t) { return t * ONE_EM; }) ); + textOffset = (layout.get('text-offset').evaluate(feature, {}, canonical).map(function (t) { return t * ONE_EM; }) ); } } var textJustify = textAlongLine ? "center" : - layout.get('text-justify').evaluate(feature, {}); + layout.get('text-justify').evaluate(feature, {}, canonical); var symbolPlacement = layout.get('symbol-placement'); var maxWidth = symbolPlacement === 'point' ? - layout.get('text-max-width').evaluate(feature, {}) * ONE_EM : + layout.get('text-max-width').evaluate(feature, {}, canonical) * ONE_EM : 0; var addVerticalShapingForPointLabelIfNeeded = function () { @@ -32360,8 +33126,8 @@ function performSymbolLayout(bucket , if (image) { shapedIcon = shapeIcon( imagePositions[feature.icon.name], - layout.get('icon-offset').evaluate(feature, {}), - layout.get('icon-anchor').evaluate(feature, {})); + layout.get('icon-offset').evaluate(feature, {}, canonical), + layout.get('icon-anchor').evaluate(feature, {}, canonical)); isSDFIcon = image.sdf; if (bucket.sdfIcons === undefined) { bucket.sdfIcons = image.sdf; @@ -32379,7 +33145,7 @@ function performSymbolLayout(bucket , var shapedText = getDefaultHorizontalShaping(shapedTextOrientations.horizontal) || shapedTextOrientations.vertical; bucket.iconsInText = shapedText ? shapedText.iconsInText : false; if (shapedText || shapedIcon) { - addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon); + addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, canonical); } }; @@ -32416,12 +33182,12 @@ function addFeature(bucket , feature , shapedTextOrientations , shapedIcon , - imageMap , + imageMap , sizes , layoutTextSize , layoutIconSize , textOffset , - isSDFIcon ) { + isSDFIcon , canonical ) { // To reduce the number of labels that jump around when zooming we need // to use a text-size value that is the same for all zoom levels. // bucket calculates text-size at a high zoom level so that all tiles can @@ -32430,9 +33196,8 @@ function addFeature(bucket , if (textMaxSize === undefined) { textMaxSize = layoutTextSize; } - var layout = bucket.layers[0].layout; - var iconOffset = layout.get('icon-offset').evaluate(feature, {}); + var iconOffset = layout.get('icon-offset').evaluate(feature, {}, canonical); var defaultHorizontalShaping = getDefaultHorizontalShaping(shapedTextOrientations.horizontal); var glyphSize = 24, fontScale = layoutTextSize / glyphSize, @@ -32474,7 +33239,7 @@ function addFeature(bucket , bucket.collisionBoxArray, feature.index, feature.sourceLayerIndex, bucket.index, textBoxScale, textPadding, textAlongLine, textOffset, iconBoxScale, iconPadding, iconAlongLine, iconOffset, - feature, sizes, isSDFIcon); + feature, sizes, isSDFIcon, canonical); }; if (symbolPlacement === 'line') { @@ -32554,7 +33319,7 @@ var MAX_PACKED_SIZE = MAX_GLYPH_ICON_SIZE * SIZE_PACK_FACTOR; function addTextVertices(bucket , anchor , shapedText , - imageMap , + imageMap , layer , textAlongLine , feature , @@ -32562,9 +33327,10 @@ function addTextVertices(bucket , lineArray , writingMode , placementTypes , - placedTextSymbolIndices , + placedTextSymbolIndices , placedIconIndex , - sizes ) { + sizes , + canonical ) { var glyphQuads = getGlyphQuads(anchor, shapedText, textOffset, layer, textAlongLine, feature, imageMap, bucket.allowVerticalPlacement); @@ -32580,8 +33346,8 @@ function addTextVertices(bucket , } } else if (sizeData.kind === 'composite') { textSizeData = [ - SIZE_PACK_FACTOR * sizes.compositeTextSizes[0].evaluate(feature, {}), - SIZE_PACK_FACTOR * sizes.compositeTextSizes[1].evaluate(feature, {}) + SIZE_PACK_FACTOR * sizes.compositeTextSizes[0].evaluate(feature, {}, canonical), + SIZE_PACK_FACTOR * sizes.compositeTextSizes[1].evaluate(feature, {}, canonical) ]; if (textSizeData[0] > MAX_PACKED_SIZE || textSizeData[1] > MAX_PACKED_SIZE) { warnOnce(((bucket.layerIds[0]) + ": Value for \"text-size\" is >= " + MAX_GLYPH_ICON_SIZE + ". Reduce your \"text-size\".")); @@ -32599,7 +33365,8 @@ function addTextVertices(bucket , anchor, lineArray.lineStartIndex, lineArray.lineLength, - placedIconIndex); + placedIconIndex, + canonical); // The placedSymbolArray is used at render time in drawTileSymbols // These indices allow access to the array at collision detection time @@ -32612,7 +33379,7 @@ function addTextVertices(bucket , return glyphQuads.length * 4; } -function getDefaultHorizontalShaping(horizontalShaping ) { +function getDefaultHorizontalShaping(horizontalShaping ) { // We don't care which shaping we get because this is used for collision purposes // and all the justifications have the same collision box for (var justification in horizontalShaping) { @@ -32631,7 +33398,7 @@ function addSymbol(bucket , line , shapedTextOrientations , shapedIcon , - imageMap , + imageMap , verticallyShapedIcon , layer , collisionBoxArray , @@ -32648,7 +33415,8 @@ function addSymbol(bucket , iconOffset , feature , sizes , - isSDFIcon ) { + isSDFIcon , + canonical ) { var assign; var lineArray = bucket.addToLineVertexArray(anchor, line); @@ -32667,14 +33435,14 @@ function addSymbol(bucket , var textOffset0 = 0; var textOffset1 = 0; if (layer._unevaluatedLayout.getValue('text-radial-offset') === undefined) { - (assign = (layer.layout.get('text-offset').evaluate(feature, {}).map(function (t) { return t * ONE_EM; }) ), textOffset0 = assign[0], textOffset1 = assign[1]); + (assign = (layer.layout.get('text-offset').evaluate(feature, {}, canonical).map(function (t) { return t * ONE_EM; }) ), textOffset0 = assign[0], textOffset1 = assign[1]); } else { - textOffset0 = layer.layout.get('text-radial-offset').evaluate(feature, {}) * ONE_EM; + textOffset0 = layer.layout.get('text-radial-offset').evaluate(feature, {}, canonical) * ONE_EM; textOffset1 = INVALID_TEXT_OFFSET; } if (bucket.allowVerticalPlacement && shapedTextOrientations.vertical) { - var textRotation = layer.layout.get('text-rotate').evaluate(feature, {}); + var textRotation = layer.layout.get('text-rotate').evaluate(feature, {}, canonical); var verticalTextRotation = textRotation + 90.0; var verticalShaping = shapedTextOrientations.vertical; verticalTextCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, verticalShaping, textBoxScale, textPadding, textAlongLine, bucket.overscaling, verticalTextRotation); @@ -32709,8 +33477,8 @@ function addSymbol(bucket , } } else if (sizeData.kind === 'composite') { iconSizeData = [ - SIZE_PACK_FACTOR * sizes.compositeIconSizes[0].evaluate(feature, {}), - SIZE_PACK_FACTOR * sizes.compositeIconSizes[1].evaluate(feature, {}) + SIZE_PACK_FACTOR * sizes.compositeIconSizes[0].evaluate(feature, {}, canonical), + SIZE_PACK_FACTOR * sizes.compositeIconSizes[1].evaluate(feature, {}, canonical) ]; if (iconSizeData[0] > MAX_PACKED_SIZE || iconSizeData[1] > MAX_PACKED_SIZE) { warnOnce(((bucket.layerIds[0]) + ": Value for \"icon-size\" is >= " + MAX_GLYPH_ICON_SIZE + ". Reduce your \"icon-size\".")); @@ -32729,7 +33497,7 @@ function addSymbol(bucket , lineArray.lineStartIndex, lineArray.lineLength, // The icon itself does not have an associated symbol since the text isnt placed yet - -1); + -1, canonical); placedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; @@ -32748,7 +33516,7 @@ function addSymbol(bucket , lineArray.lineStartIndex, lineArray.lineLength, // The icon itself does not have an associated symbol since the text isnt placed yet - -1); + -1, canonical); verticalPlacedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; } @@ -32759,7 +33527,7 @@ function addSymbol(bucket , if (!textCollisionFeature) { key = murmurhashJs(shaping.text); - var textRotate = layer.layout.get('text-rotate').evaluate(feature, {}); + var textRotate = layer.layout.get('text-rotate').evaluate(feature, {}, canonical); // As a collision approximation, we can use either the vertical or any of the horizontal versions of the feature // We're counting on all versions having similar dimensions textCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, shaping, textBoxScale, textPadding, textAlongLine, bucket.overscaling, textRotate); @@ -32770,7 +33538,7 @@ function addSymbol(bucket , bucket, anchor, shaping, imageMap, layer, textAlongLine, feature, textOffset, lineArray, shapedTextOrientations.vertical ? WritingMode.horizontal : WritingMode.horizontalOnly, singleLine ? (Object.keys(shapedTextOrientations.horizontal) ) : [justification], - placedTextSymbolIndices, placedIconSymbolIndex, sizes); + placedTextSymbolIndices, placedIconSymbolIndex, sizes, canonical); if (singleLine) { break; @@ -32780,7 +33548,7 @@ function addSymbol(bucket , if (shapedTextOrientations.vertical) { numVerticalGlyphVertices += addTextVertices( bucket, anchor, shapedTextOrientations.vertical, imageMap, layer, textAlongLine, feature, - textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, verticalPlacedIconSymbolIndex, sizes); + textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, verticalPlacedIconSymbolIndex, sizes, canonical); } var textBoxStartIndex = textCollisionFeature ? textCollisionFeature.boxStartIndex : bucket.collisionBoxArray.length; @@ -32884,7 +33652,7 @@ var vectorTileFeatureTypes$2 = vectorTile.VectorTileFeature.types; - + @@ -33104,7 +33872,7 @@ var SymbolBucket = function SymbolBucket(options this.symbolInstances = new SymbolInstanceArray(); }; - SymbolBucket.prototype.calculateGlyphDependencies = function calculateGlyphDependencies (text , stack , textAlongLine , allowVerticalPlacement , doesAllowVerticalWritingMode ) { + SymbolBucket.prototype.calculateGlyphDependencies = function calculateGlyphDependencies (text , stack , textAlongLine , allowVerticalPlacement , doesAllowVerticalWritingMode ) { for (var i = 0; i < text.length; i++) { stack[text.charCodeAt(i)] = true; if ((textAlongLine || allowVerticalPlacement) && doesAllowVerticalWritingMode) { @@ -33116,7 +33884,7 @@ var SymbolBucket = function SymbolBucket(options } }; - SymbolBucket.prototype.populate = function populate (features , options ) { + SymbolBucket.prototype.populate = function populate (features , options , canonical ) { var layer = this.layers[0]; var layout = layer.layout; @@ -33132,7 +33900,7 @@ var SymbolBucket = function SymbolBucket(options // this allows us to fire the styleimagemissing event if image evaluation returns null // the only way to distinguish between null returned from a coalesce statement with no valid images // and null returned because icon-image wasn't defined is to check whether or not iconImage.parameters is an empty object - var hasIcon = (iconImage.value.kind !== 'constant' || !!iconImage.value.value) && Object.keys(iconImage.parameters).length > 0; + var hasIcon = iconImage.value.kind !== 'constant' || !!iconImage.value.value || Object.keys(iconImage.parameters).length > 0; var symbolSortKey = layout.get('symbol-sort-key'); this.features = []; @@ -33147,22 +33915,31 @@ var SymbolBucket = function SymbolBucket(options var globalProperties = new EvaluationParameters(this.zoom); for (var i$1 = 0, list$1 = features; i$1 < list$1.length; i$1 += 1) { + var ref = list$1[i$1]; var feature = ref.feature; var id = ref.id; var index = ref.index; var sourceLayerIndex = ref.sourceLayerIndex; - if (!layer._featureFilter(globalProperties, feature)) { + var needGeometry = layer._featureFilter.needGeometry; + var evaluationFeature = {type: feature.type, + id: id, + properties: feature.properties, + geometry: needGeometry ? loadGeometry(feature) : []}; + + if (!layer._featureFilter.filter(globalProperties, evaluationFeature, canonical)) { continue; } + if (!needGeometry){ evaluationFeature.geometry = loadGeometry(feature); } + var text = (void 0) ; if (hasText) { // Expression evaluation will automatically coerce to Formatted // but plain string token evaluation skips that pathway so do the // conversion here. - var resolvedTokens = layer.getValueAndResolveTokens('text-field', feature, availableImages); + var resolvedTokens = layer.getValueAndResolveTokens('text-field', evaluationFeature, canonical, availableImages); var formattedText = Formatted.factory(resolvedTokens); if (containsRTLText(formattedText)) { this.hasRTLText = true; @@ -33172,16 +33949,16 @@ var SymbolBucket = function SymbolBucket(options getRTLTextPluginStatus() === 'unavailable' || // We don't intend to lazy-load the rtl text plugin, so proceed with incorrect shaping this.hasRTLText && plugin.isParsed() // Use the rtlText plugin to shape text ) { - text = transformText$1(formattedText, layer, feature); + text = transformText$1(formattedText, layer, evaluationFeature); } } - var icon = (void 0) ; + var icon = (void 0) ; if (hasIcon) { // Expression evaluation will automatically coerce to Image // but plain string token evaluation skips that pathway so do the // conversion here. - var resolvedTokens$1 = layer.getValueAndResolveTokens('icon-image', feature, availableImages); + var resolvedTokens$1 = layer.getValueAndResolveTokens('icon-image', evaluationFeature, canonical, availableImages); if (resolvedTokens$1 instanceof ResolvedImage) { icon = resolvedTokens$1; } else { @@ -33192,9 +33969,8 @@ var SymbolBucket = function SymbolBucket(options if (!text && !icon) { continue; } - var sortKey = this.sortFeaturesByKey ? - symbolSortKey.evaluate(feature, {}) : + symbolSortKey.evaluate(evaluationFeature, {}, canonical) : undefined; var symbolFeature = { @@ -33215,7 +33991,7 @@ var SymbolBucket = function SymbolBucket(options } if (text) { - var fontStack = textFont.evaluate(feature, {}).join(','); + var fontStack = textFont.evaluate(evaluationFeature, {}, canonical).join(','); var textAlongLine = layout.get('text-rotation-alignment') === 'map' && layout.get('symbol-placement') !== 'point'; this.allowVerticalPlacement = this.writingModes && this.writingModes.indexOf(WritingMode.vertical) >= 0; for (var i = 0, list = text.sections; i < list.length; i += 1) { @@ -33248,7 +34024,7 @@ var SymbolBucket = function SymbolBucket(options } }; - SymbolBucket.prototype.update = function update (states , vtLayer , imagePositions ) { + SymbolBucket.prototype.update = function update (states , vtLayer , imagePositions ) { if (!this.stateDependentLayers.length) { return; } this.text.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, imagePositions); this.icon.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, imagePositions); @@ -33331,7 +34107,8 @@ var SymbolBucket = function SymbolBucket(options labelAnchor , lineStartIndex , lineLength , - associatedIconIndex ) { + associatedIconIndex , + canonical ) { var indexArray = arrays.indexArray; var layoutVertexArray = arrays.layoutVertexArray; @@ -33376,7 +34153,7 @@ var SymbolBucket = function SymbolBucket(options this.glyphOffsetArray.emplaceBack(glyphOffset[0]); if (i === quads.length - 1 || sectionIndex !== quads[i + 1].sectionIndex) { - arrays.programConfigurations.populatePaintArrays(layoutVertexArray.length, feature, feature.index, {}, sections && sections[sectionIndex]); + arrays.programConfigurations.populatePaintArrays(layoutVertexArray.length, feature, feature.index, {}, canonical, sections && sections[sectionIndex]); } } @@ -33868,7 +34645,7 @@ FormatSectionOverride.prototype.evaluate = function evaluate (ctx return this.defaultValue.property.specification.default; }; -FormatSectionOverride.prototype.eachChild = function eachChild (fn ) { +FormatSectionOverride.prototype.eachChild = function eachChild (fn ) { if (!this.defaultValue.isConstant()) { var expr = ((this.defaultValue.value) ); fn(expr._styleExpression.expression); @@ -33876,8 +34653,8 @@ FormatSectionOverride.prototype.eachChild = function eachChild (fn }; // Cannot be statically evaluated, as the output depends on the evaluation context. -FormatSectionOverride.prototype.possibleOutputs = function possibleOutputs () { - return [undefined]; +FormatSectionOverride.prototype.outputDefined = function outputDefined () { + return false; }; FormatSectionOverride.prototype.serialize = function serialize () { @@ -33943,8 +34720,8 @@ var SymbolStyleLayer = /*@__PURE__*/(function (StyleLayer) { this._setPaintOverrides(); }; - SymbolStyleLayer.prototype.getValueAndResolveTokens = function getValueAndResolveTokens (name , feature , availableImages ) { - var value = this.layout.get(name).evaluate(feature, {}, availableImages); + SymbolStyleLayer.prototype.getValueAndResolveTokens = function getValueAndResolveTokens (name , feature , canonical , availableImages ) { + var value = this.layout.get(name).evaluate(feature, {}, canonical, availableImages); var unevaluated = this._unevaluatedLayout._values[name]; if (!unevaluated.isDataDriven() && !isExpression(unevaluated.value) && value) { return resolveTokens(feature.properties, value); @@ -34480,883 +35257,350 @@ Texture.prototype.bind = function bind (filter , wrap , minFil var gl = context.gl; gl.bindTexture(gl.TEXTURE_2D, this.texture); - if (minFilter === gl.LINEAR_MIPMAP_NEAREST && !this.isSizePowerOfTwo()) { - minFilter = gl.LINEAR; - } - - if (filter !== this.filter) { - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter || filter); - this.filter = filter; - } - - if (wrap !== this.wrap) { - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrap); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrap); - this.wrap = wrap; - } -}; - -Texture.prototype.isSizePowerOfTwo = function isSizePowerOfTwo () { - return this.size[0] === this.size[1] && (Math.log(this.size[0]) / Math.LN2) % 1 === 0; -}; - -Texture.prototype.destroy = function destroy () { - var ref = this.context; - var gl = ref.gl; - gl.deleteTexture(this.texture); - this.texture = (null ); -}; - -// - -/** - * Invokes the wrapped function in a non-blocking way when trigger() is called. Invocation requests - * are ignored until the function was actually invoked. - * - * @private - */ -var ThrottledInvoker = function ThrottledInvoker(callback ) { - var this$1 = this; - - this._callback = callback; - this._triggered = false; - if (typeof MessageChannel !== 'undefined') { - this._channel = new MessageChannel(); - this._channel.port2.onmessage = function () { - this$1._triggered = false; - this$1._callback(); - }; - } -}; - -ThrottledInvoker.prototype.trigger = function trigger () { - var this$1 = this; - - if (!this._triggered) { - this._triggered = true; - if (this._channel) { - this._channel.port1.postMessage(true); - } else { - setTimeout(function () { - this$1._triggered = false; - this$1._callback(); - }, 0); - } - } -}; - -ThrottledInvoker.prototype.remove = function remove () { - delete this._channel; - this._callback = function () {}; -}; - -// - - - - -/** - * An implementation of the [Actor design pattern](http://en.wikipedia.org/wiki/Actor_model) - * that maintains the relationship between asynchronous tasks and the objects - * that spin them off - in this case, tasks like parsing parts of styles, - * owned by the styles - * - * @param {WebWorker} target - * @param {WebWorker} parent - * @param {string|number} mapId A unique identifier for the Map instance using this Actor. - * @private - */ -var Actor = function Actor(target , parent , mapId ) { - this.target = target; - this.parent = parent; - this.mapId = mapId; - this.callbacks = {}; - this.tasks = {}; - this.taskQueue = []; - this.cancelCallbacks = {}; - bindAll(['receive', 'process'], this); - this.invoker = new ThrottledInvoker(this.process); - this.target.addEventListener('message', this.receive, false); - this.globalScope = isWorker() ? target : self; -}; - -/** - * Sends a message from a main-thread map to a Worker or from a Worker back to - * a main-thread map instance. - * - * @param type The name of the target method to invoke or '[source-type].[source-name].name' for a method on a WorkerSource. - * @param targetMapId A particular mapId to which to send this message. - * @private - */ -Actor.prototype.send = function send (type , data , callback , targetMapId , mustQueue) { - var this$1 = this; - if ( mustQueue === void 0 ) mustQueue = false; - - // We're using a string ID instead of numbers because they are being used as object keys - // anyway, and thus stringified implicitly. We use random IDs because an actor may receive - // message from multiple other actors which could run in different execution context. A - // linearly increasing ID could produce collisions. - var id = Math.round((Math.random() * 1e18)).toString(36).substring(0, 10); - if (callback) { - this.callbacks[id] = callback; - } - var buffers = isSafari(this.globalScope) ? undefined : []; - this.target.postMessage({ - id: id, - type: type, - hasCallback: !!callback, - targetMapId: targetMapId, - mustQueue: mustQueue, - sourceMapId: this.mapId, - data: serialize(data, buffers) - }, buffers); - return { - cancel: function () { - if (callback) { - // Set the callback to null so that it never fires after the request is aborted. - delete this$1.callbacks[id]; - } - this$1.target.postMessage({ - id: id, - type: '', - targetMapId: targetMapId, - sourceMapId: this$1.mapId - }); - } - }; -}; - -Actor.prototype.receive = function receive (message ) { - var data = message.data, - id = data.id; - - if (!id) { - return; - } - - if (data.targetMapId && this.mapId !== data.targetMapId) { - return; - } - - if (data.type === '') { - // Remove the original request from the queue. This is only possible if it - // hasn't been kicked off yet. The id will remain in the queue, but because - // there is no associated task, it will be dropped once it's time to execute it. - delete this.tasks[id]; - var cancel = this.cancelCallbacks[id]; - delete this.cancelCallbacks[id]; - if (cancel) { - cancel(); - } - } else { - if (isWorker() || data.mustQueue) { - // In workers, store the tasks that we need to process before actually processing them. This - // is necessary because we want to keep receiving messages, and in particular, - // messages. Some tasks may take a while in the worker thread, so before - // executing the next task in our queue, postMessage preempts this and - // messages can be processed. We're using a MessageChannel object to get throttle the - // process() flow to one at a time. - this.tasks[id] = data; - this.taskQueue.push(id); - this.invoker.trigger(); - } else { - // In the main thread, process messages immediately so that other work does not slip in - // between getting partial data back from workers. - this.processTask(id, data); - } - } -}; - -Actor.prototype.process = function process () { - if (!this.taskQueue.length) { - return; - } - var id = this.taskQueue.shift(); - var task = this.tasks[id]; - delete this.tasks[id]; - // Schedule another process call if we know there's more to process _before_ invoking the - // current task. This is necessary so that processing continues even if the current task - // doesn't execute successfully. - if (this.taskQueue.length) { - this.invoker.trigger(); - } - if (!task) { - // If the task ID doesn't have associated task data anymore, it was canceled. - return; - } - - this.processTask(id, task); -}; - -Actor.prototype.processTask = function processTask (id , task ) { - var this$1 = this; - - if (task.type === '') { - // The done() function in the counterpart has been called, and we are now - // firing the callback in the originating actor, if there is one. - var callback = this.callbacks[id]; - delete this.callbacks[id]; - if (callback) { - // If we get a response, but don't have a callback, the request was canceled. - if (task.error) { - callback(deserialize(task.error)); - } else { - callback(null, deserialize(task.data)); - } - } - } else { - var completed = false; - var buffers = isSafari(this.globalScope) ? undefined : []; - var done = task.hasCallback ? function (err, data) { - completed = true; - delete this$1.cancelCallbacks[id]; - this$1.target.postMessage({ - id: id, - type: '', - sourceMapId: this$1.mapId, - error: err ? serialize(err) : null, - data: serialize(data, buffers) - }, buffers); - } : function (_) { - completed = true; - }; - - var callback$1 = null; - var params = (deserialize(task.data) ); - if (this.parent[task.type]) { - // task.type == 'loadTile', 'removeTile', etc. - callback$1 = this.parent[task.type](task.sourceMapId, params, done); - } else if (this.parent.getWorkerSource) { - // task.type == sourcetype.method - var keys = task.type.split('.'); - var scope = (this.parent ).getWorkerSource(task.sourceMapId, keys[0], params.source); - callback$1 = scope[keys[1]](params, done); - } else { - // No function was found. - done(new Error(("Could not find function " + (task.type)))); - } - - if (!completed && callback$1 && callback$1.cancel) { - // Allows canceling the task as long as it hasn't been completed yet. - this.cancelCallbacks[id] = callback$1.cancel; - } - } -}; - -Actor.prototype.remove = function remove () { - this.invoker.remove(); - this.target.removeEventListener('message', this.receive, false); -}; - -/** - * getURL - * - * @param {String} baseUrl Base url of the WMS server - * @param {String} layer Layer name - * @param {Number} x Tile coordinate x - * @param {Number} y Tile coordinate y - * @param {Number} z Tile zoom - * @param {Object} [options] - * @param {String} [options.format='image/png'] - * @param {String} [options.service='WMS'] - * @param {String} [options.version='1.1.1'] - * @param {String} [options.request='GetMap'] - * @param {String} [options.srs='EPSG:3857'] - * @param {Number} [options.width='256'] - * @param {Number} [options.height='256'] - * @returns {String} url - * @example - * var baseUrl = 'http://geodata.state.nj.us/imagerywms/Natural2015'; - * var layer = 'Natural2015'; - * var url = whoots.getURL(baseUrl, layer, 154308, 197167, 19); - */ -function getURL(baseUrl, layer, x, y, z, options) { - options = options || {}; - - var url = baseUrl + '?' + [ - 'bbox=' + getTileBBox(x, y, z), - 'format=' + (options.format || 'image/png'), - 'service=' + (options.service || 'WMS'), - 'version=' + (options.version || '1.1.1'), - 'request=' + (options.request || 'GetMap'), - 'srs=' + (options.srs || 'EPSG:3857'), - 'width=' + (options.width || 256), - 'height=' + (options.height || 256), - 'layers=' + layer - ].join('&'); - - return url; -} - - -/** - * getTileBBox - * - * @param {Number} x Tile coordinate x - * @param {Number} y Tile coordinate y - * @param {Number} z Tile zoom - * @returns {String} String of the bounding box - */ -function getTileBBox(x, y, z) { - // for Google/OSM tile scheme we need to alter the y - y = (Math.pow(2, z) - y - 1); - - var min = getMercCoords(x * 256, y * 256, z), - max = getMercCoords((x + 1) * 256, (y + 1) * 256, z); - - return min[0] + ',' + min[1] + ',' + max[0] + ',' + max[1]; -} - - -/** - * getMercCoords - * - * @param {Number} x Pixel coordinate x - * @param {Number} y Pixel coordinate y - * @param {Number} z Tile zoom - * @returns {Array} [x, y] - */ -function getMercCoords(x, y, z) { - var resolution = (2 * Math.PI * 6378137 / 256) / Math.pow(2, z), - merc_x = (x * resolution - 2 * Math.PI * 6378137 / 2.0), - merc_y = (y * resolution - 2 * Math.PI * 6378137 / 2.0); - - return [merc_x, merc_y]; -} - -// - - - -/** - * A `LngLatBounds` object represents a geographical bounding box, - * defined by its southwest and northeast points in longitude and latitude. - * - * If no arguments are provided to the constructor, a `null` bounding box is created. - * - * Note that any Mapbox GL method that accepts a `LngLatBounds` object as an argument or option - * can also accept an `Array` of two {@link LngLatLike} constructs and will perform an implicit conversion. - * This flexible type is documented as {@link LngLatBoundsLike}. - * - * @param {LngLatLike} [sw] The southwest corner of the bounding box. - * @param {LngLatLike} [ne] The northeast corner of the bounding box. - * @example - * var sw = new mapboxgl.LngLat(-73.9876, 40.7661); - * var ne = new mapboxgl.LngLat(-73.9397, 40.8002); - * var llb = new mapboxgl.LngLatBounds(sw, ne); - */ -var LngLatBounds = function LngLatBounds(sw , ne ) { - if (!sw) { - // noop - } else if (ne) { - this.setSouthWest(sw).setNorthEast(ne); - } else if (sw.length === 4) { - this.setSouthWest([sw[0], sw[1]]).setNorthEast([sw[2], sw[3]]); - } else { - this.setSouthWest(sw[0]).setNorthEast(sw[1]); - } -}; - -/** - * Set the northeast corner of the bounding box - * - * @param {LngLatLike} ne - * @returns {LngLatBounds} `this` - */ -LngLatBounds.prototype.setNorthEast = function setNorthEast (ne ) { - this._ne = ne instanceof LngLat ? new LngLat(ne.lng, ne.lat) : LngLat.convert(ne); - return this; -}; - -/** - * Set the southwest corner of the bounding box - * - * @param {LngLatLike} sw - * @returns {LngLatBounds} `this` - */ -LngLatBounds.prototype.setSouthWest = function setSouthWest (sw ) { - this._sw = sw instanceof LngLat ? new LngLat(sw.lng, sw.lat) : LngLat.convert(sw); - return this; -}; - -/** - * Extend the bounds to include a given LngLat or LngLatBounds. - * - * @param {LngLat|LngLatBounds} obj object to extend to - * @returns {LngLatBounds} `this` - */ -LngLatBounds.prototype.extend = function extend (obj ) { - var sw = this._sw, - ne = this._ne; - var sw2, ne2; - - if (obj instanceof LngLat) { - sw2 = obj; - ne2 = obj; - - } else if (obj instanceof LngLatBounds) { - sw2 = obj._sw; - ne2 = obj._ne; - - if (!sw2 || !ne2) { return this; } - - } else { - if (Array.isArray(obj)) { - if (obj.every(Array.isArray)) { - return this.extend(LngLatBounds.convert(obj)); - } else { - return this.extend(LngLat.convert(obj)); - } - } - return this; - } - - if (!sw && !ne) { - this._sw = new LngLat(sw2.lng, sw2.lat); - this._ne = new LngLat(ne2.lng, ne2.lat); - - } else { - sw.lng = Math.min(sw2.lng, sw.lng); - sw.lat = Math.min(sw2.lat, sw.lat); - ne.lng = Math.max(ne2.lng, ne.lng); - ne.lat = Math.max(ne2.lat, ne.lat); - } - - return this; -}; - -/** - * Returns the geographical coordinate equidistant from the bounding box's corners. - * - * @returns {LngLat} The bounding box's center. - * @example - * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); - * llb.getCenter(); // = LngLat {lng: -73.96365, lat: 40.78315} - */ -LngLatBounds.prototype.getCenter = function getCenter () { - return new LngLat((this._sw.lng + this._ne.lng) / 2, (this._sw.lat + this._ne.lat) / 2); -}; - -/** - * Returns the southwest corner of the bounding box. - * - * @returns {LngLat} The southwest corner of the bounding box. - */ -LngLatBounds.prototype.getSouthWest = function getSouthWest () { return this._sw; }; - -/** -* Returns the northeast corner of the bounding box. -* -* @returns {LngLat} The northeast corner of the bounding box. - */ -LngLatBounds.prototype.getNorthEast = function getNorthEast () { return this._ne; }; - -/** -* Returns the northwest corner of the bounding box. -* -* @returns {LngLat} The northwest corner of the bounding box. - */ -LngLatBounds.prototype.getNorthWest = function getNorthWest () { return new LngLat(this.getWest(), this.getNorth()); }; - -/** -* Returns the southeast corner of the bounding box. -* -* @returns {LngLat} The southeast corner of the bounding box. - */ -LngLatBounds.prototype.getSouthEast = function getSouthEast () { return new LngLat(this.getEast(), this.getSouth()); }; - -/** -* Returns the west edge of the bounding box. -* -* @returns {number} The west edge of the bounding box. - */ -LngLatBounds.prototype.getWest = function getWest () { return this._sw.lng; }; - -/** -* Returns the south edge of the bounding box. -* -* @returns {number} The south edge of the bounding box. - */ -LngLatBounds.prototype.getSouth = function getSouth () { return this._sw.lat; }; - -/** -* Returns the east edge of the bounding box. -* -* @returns {number} The east edge of the bounding box. - */ -LngLatBounds.prototype.getEast = function getEast () { return this._ne.lng; }; - -/** -* Returns the north edge of the bounding box. -* -* @returns {number} The north edge of the bounding box. - */ -LngLatBounds.prototype.getNorth = function getNorth () { return this._ne.lat; }; - -/** - * Returns the bounding box represented as an array. - * - * @returns {Array>} The bounding box represented as an array, consisting of the - * southwest and northeast coordinates of the bounding represented as arrays of numbers. - * @example - * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); - * llb.toArray(); // = [[-73.9876, 40.7661], [-73.9397, 40.8002]] - */ -LngLatBounds.prototype.toArray = function toArray () { - return [this._sw.toArray(), this._ne.toArray()]; -}; - -/** - * Return the bounding box represented as a string. - * - * @returns {string} The bounding box represents as a string of the format - * `'LngLatBounds(LngLat(lng, lat), LngLat(lng, lat))'`. - * @example - * var llb = new mapboxgl.LngLatBounds([-73.9876, 40.7661], [-73.9397, 40.8002]); - * llb.toString(); // = "LngLatBounds(LngLat(-73.9876, 40.7661), LngLat(-73.9397, 40.8002))" - */ -LngLatBounds.prototype.toString = function toString () { - return ("LngLatBounds(" + (this._sw.toString()) + ", " + (this._ne.toString()) + ")"); -}; - -/** - * Check if the bounding box is an empty/`null`-type box. - * - * @returns {boolean} True if bounds have been defined, otherwise false. - */ -LngLatBounds.prototype.isEmpty = function isEmpty () { - return !(this._sw && this._ne); -}; - -/** -* Check if the point is within the bounding box. -* -* @param {LngLatLike} lnglat geographic point to check against. -* @returns {boolean} True if the point is within the bounding box. -*/ -LngLatBounds.prototype.contains = function contains (lnglat ) { - var ref = LngLat.convert(lnglat); - var lng = ref.lng; - var lat = ref.lat; - - var containsLatitude = this._sw.lat <= lat && lat <= this._ne.lat; - var containsLongitude = this._sw.lng <= lng && lng <= this._ne.lng; - if (this._sw.lng > this._ne.lng) { // wrapped coordinates - containsLongitude = this._sw.lng >= lng && lng >= this._ne.lng; - } - - return containsLatitude && containsLongitude; -}; - -/** - * Converts an array to a `LngLatBounds` object. - * - * If a `LngLatBounds` object is passed in, the function returns it unchanged. - * - * Internally, the function calls `LngLat#convert` to convert arrays to `LngLat` values. - * - * @param {LngLatBoundsLike} input An array of two coordinates to convert, or a `LngLatBounds` object to return. - * @returns {LngLatBounds} A new `LngLatBounds` object, if a conversion occurred, or the original `LngLatBounds` object. - * @example - * var arr = [[-73.9876, 40.7661], [-73.9397, 40.8002]]; - * var llb = mapboxgl.LngLatBounds.convert(arr); - * llb; // = LngLatBounds {_sw: LngLat {lng: -73.9876, lat: 40.7661}, _ne: LngLat {lng: -73.9397, lat: 40.8002}} - */ -LngLatBounds.convert = function convert (input ) { - if (!input || input instanceof LngLatBounds) { return input; } - return new LngLatBounds(input); -}; - -// - -/* -* Approximate radius of the earth in meters. -* Uses the WGS-84 approximation. The radius at the equator is ~6378137 and at the poles is ~6356752. https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84 -* 6371008.8 is one published "average radius" see https://en.wikipedia.org/wiki/Earth_radius#Mean_radius, or ftp://athena.fsv.cvut.cz/ZFG/grs80-Moritz.pdf p.4 -*/ -var earthRadius = 6371008.8; - -/** - * A `LngLat` object represents a given longitude and latitude coordinate, measured in degrees. - * - * Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON. - * - * Note that any Mapbox GL method that accepts a `LngLat` object as an argument or option - * can also accept an `Array` of two numbers and will perform an implicit conversion. - * This flexible type is documented as {@link LngLatLike}. - * - * @param {number} lng Longitude, measured in degrees. - * @param {number} lat Latitude, measured in degrees. - * @example - * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); - * @see [Get coordinates of the mouse pointer](https://www.mapbox.com/mapbox-gl-js/example/mouse-position/) - * @see [Display a popup](https://www.mapbox.com/mapbox-gl-js/example/popup/) - * @see [Highlight features within a bounding box](https://www.mapbox.com/mapbox-gl-js/example/using-box-queryrenderedfeatures/) - * @see [Create a timeline animation](https://www.mapbox.com/mapbox-gl-js/example/timeline-animation/) - */ -var LngLat = function LngLat(lng , lat ) { - if (isNaN(lng) || isNaN(lat)) { - throw new Error(("Invalid LngLat object: (" + lng + ", " + lat + ")")); + if (minFilter === gl.LINEAR_MIPMAP_NEAREST && !this.isSizePowerOfTwo()) { + minFilter = gl.LINEAR; } - this.lng = +lng; - this.lat = +lat; - if (this.lat > 90 || this.lat < -90) { - throw new Error('Invalid LngLat latitude value: must be between -90 and 90'); + + if (filter !== this.filter) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter || filter); + this.filter = filter; + } + + if (wrap !== this.wrap) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrap); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrap); + this.wrap = wrap; } }; -/** - * Returns a new `LngLat` object whose longitude is wrapped to the range (-180, 180). - * - * @returns {LngLat} The wrapped `LngLat` object. - * @example - * var ll = new mapboxgl.LngLat(286.0251, 40.7736); - * var wrapped = ll.wrap(); - * wrapped.lng; // = -73.9749 - */ -LngLat.prototype.wrap = function wrap$1 () { - return new LngLat(wrap(this.lng, -180, 180), this.lat); +Texture.prototype.isSizePowerOfTwo = function isSizePowerOfTwo () { + return this.size[0] === this.size[1] && (Math.log(this.size[0]) / Math.LN2) % 1 === 0; }; -/** - * Returns the coordinates represented as an array of two numbers. - * - * @returns {Array} The coordinates represeted as an array of longitude and latitude. - * @example - * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); - * ll.toArray(); // = [-73.9749, 40.7736] - */ -LngLat.prototype.toArray = function toArray () { - return [this.lng, this.lat]; +Texture.prototype.destroy = function destroy () { + var ref = this.context; + var gl = ref.gl; + gl.deleteTexture(this.texture); + this.texture = (null ); }; +// + /** - * Returns the coordinates represent as a string. + * Invokes the wrapped function in a non-blocking way when trigger() is called. Invocation requests + * are ignored until the function was actually invoked. * - * @returns {string} The coordinates represented as a string of the format `'LngLat(lng, lat)'`. - * @example - * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); - * ll.toString(); // = "LngLat(-73.9749, 40.7736)" + * @private */ -LngLat.prototype.toString = function toString () { - return ("LngLat(" + (this.lng) + ", " + (this.lat) + ")"); +var ThrottledInvoker = function ThrottledInvoker(callback ) { + var this$1 = this; + + this._callback = callback; + this._triggered = false; + if (typeof MessageChannel !== 'undefined') { + this._channel = new MessageChannel(); + this._channel.port2.onmessage = function () { + this$1._triggered = false; + this$1._callback(); + }; + } }; -/** - * Returns the approximate distance between a pair of coordinates in meters - * Uses the Haversine Formula (from R.W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol. 68, no. 2, 1984, p. 159) - * - * @param {LngLat} lngLat coordinates to compute the distance to - * @returns {number} Distance in meters between the two coordinates. - * @example - * var new_york = new mapboxgl.LngLat(-74.0060, 40.7128); - * var los_angeles = new mapboxgl.LngLat(-118.2437, 34.0522); - * new_york.distanceTo(los_angeles); // = 3935751.690893987, "true distance" using a non-spherical approximation is ~3966km - */ -LngLat.prototype.distanceTo = function distanceTo (lngLat ) { - var rad = Math.PI / 180; - var lat1 = this.lat * rad; - var lat2 = lngLat.lat * rad; - var a = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos((lngLat.lng - this.lng) * rad); +ThrottledInvoker.prototype.trigger = function trigger () { + var this$1 = this; - var maxMeters = earthRadius * Math.acos(Math.min(a, 1)); - return maxMeters; + if (!this._triggered) { + this._triggered = true; + if (this._channel) { + this._channel.port1.postMessage(true); + } else { + setTimeout(function () { + this$1._triggered = false; + this$1._callback(); + }, 0); + } + } +}; + +ThrottledInvoker.prototype.remove = function remove () { + delete this._channel; + this._callback = function () {}; }; +// + + + + /** - * Returns a `LngLatBounds` from the coordinates extended by a given `radius`. The returned `LngLatBounds` completely contains the `radius`. + * An implementation of the [Actor design pattern](http://en.wikipedia.org/wiki/Actor_model) + * that maintains the relationship between asynchronous tasks and the objects + * that spin them off - in this case, tasks like parsing parts of styles, + * owned by the styles * - * @param {number} [radius=0] Distance in meters from the coordinates to extend the bounds. - * @returns {LngLatBounds} A new `LngLatBounds` object representing the coordinates extended by the `radius`. - * @example - * var ll = new mapboxgl.LngLat(-73.9749, 40.7736); - * ll.toBounds(100).toArray(); // = [[-73.97501862141328, 40.77351016847229], [-73.97478137858673, 40.77368983152771]] + * @param {WebWorker} target + * @param {WebWorker} parent + * @param {string|number} mapId A unique identifier for the Map instance using this Actor. + * @private */ -LngLat.prototype.toBounds = function toBounds (radius) { - if ( radius === void 0 ) radius = 0; - - var earthCircumferenceInMetersAtEquator = 40075017; - var latAccuracy = 360 * radius / earthCircumferenceInMetersAtEquator, - lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat); - - return new LngLatBounds(new LngLat(this.lng - lngAccuracy, this.lat - latAccuracy), - new LngLat(this.lng + lngAccuracy, this.lat + latAccuracy)); +var Actor = function Actor(target , parent , mapId ) { + this.target = target; + this.parent = parent; + this.mapId = mapId; + this.callbacks = {}; + this.tasks = {}; + this.taskQueue = []; + this.cancelCallbacks = {}; + bindAll(['receive', 'process'], this); + this.invoker = new ThrottledInvoker(this.process); + this.target.addEventListener('message', this.receive, false); + this.globalScope = isWorker() ? target : self; }; /** - * Converts an array of two numbers or an object with `lng` and `lat` or `lon` and `lat` properties - * to a `LngLat` object. - * - * If a `LngLat` object is passed in, the function returns it unchanged. + * Sends a message from a main-thread map to a Worker or from a Worker back to + * a main-thread map instance. * - * @param {LngLatLike} input An array of two numbers or object to convert, or a `LngLat` object to return. - * @returns {LngLat} A new `LngLat` object, if a conversion occurred, or the original `LngLat` object. - * @example - * var arr = [-73.9749, 40.7736]; - * var ll = mapboxgl.LngLat.convert(arr); - * ll; // = LngLat {lng: -73.9749, lat: 40.7736} + * @param type The name of the target method to invoke or '[source-type].[source-name].name' for a method on a WorkerSource. + * @param targetMapId A particular mapId to which to send this message. + * @private */ -LngLat.convert = function convert (input ) { - if (input instanceof LngLat) { - return input; - } - if (Array.isArray(input) && (input.length === 2 || input.length === 3)) { - return new LngLat(Number(input[0]), Number(input[1])); - } - if (!Array.isArray(input) && typeof input === 'object' && input !== null) { - return new LngLat( - // flow can't refine this to have one of lng or lat, so we have to cast to any - Number('lng' in input ? (input ).lng : (input ).lon), - Number(input.lat) - ); +Actor.prototype.send = function send (type , data , callback , targetMapId , mustQueue) { + var this$1 = this; + if ( mustQueue === void 0 ) mustQueue = false; + + // We're using a string ID instead of numbers because they are being used as object keys + // anyway, and thus stringified implicitly. We use random IDs because an actor may receive + // message from multiple other actors which could run in different execution context. A + // linearly increasing ID could produce collisions. + var id = Math.round((Math.random() * 1e18)).toString(36).substring(0, 10); + if (callback) { + this.callbacks[id] = callback; } - throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]"); + var buffers = isSafari(this.globalScope) ? undefined : []; + this.target.postMessage({ + id: id, + type: type, + hasCallback: !!callback, + targetMapId: targetMapId, + mustQueue: mustQueue, + sourceMapId: this.mapId, + data: serialize(data, buffers) + }, buffers); + return { + cancel: function () { + if (callback) { + // Set the callback to null so that it never fires after the request is aborted. + delete this$1.callbacks[id]; + } + this$1.target.postMessage({ + id: id, + type: '', + targetMapId: targetMapId, + sourceMapId: this$1.mapId + }); + } + }; }; -// - - -/* - * The average circumference of the world in meters. - */ -var earthCircumfrence = 2 * Math.PI * earthRadius; // meters +Actor.prototype.receive = function receive (message ) { + var data = message.data, + id = data.id; -/* - * The circumference at a line of latitude in meters. - */ -function circumferenceAtLatitude(latitude ) { - return earthCircumfrence * Math.cos(latitude * Math.PI / 180); -} + if (!id) { + return; + } -function mercatorXfromLng(lng ) { - return (180 + lng) / 360; -} + if (data.targetMapId && this.mapId !== data.targetMapId) { + return; + } -function mercatorYfromLat(lat ) { - return (180 - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)))) / 360; -} + if (data.type === '') { + // Remove the original request from the queue. This is only possible if it + // hasn't been kicked off yet. The id will remain in the queue, but because + // there is no associated task, it will be dropped once it's time to execute it. + delete this.tasks[id]; + var cancel = this.cancelCallbacks[id]; + delete this.cancelCallbacks[id]; + if (cancel) { + cancel(); + } + } else { + if (isWorker() || data.mustQueue) { + // In workers, store the tasks that we need to process before actually processing them. This + // is necessary because we want to keep receiving messages, and in particular, + // messages. Some tasks may take a while in the worker thread, so before + // executing the next task in our queue, postMessage preempts this and + // messages can be processed. We're using a MessageChannel object to get throttle the + // process() flow to one at a time. + this.tasks[id] = data; + this.taskQueue.push(id); + this.invoker.trigger(); + } else { + // In the main thread, process messages immediately so that other work does not slip in + // between getting partial data back from workers. + this.processTask(id, data); + } + } +}; -function mercatorZfromAltitude(altitude , lat ) { - return altitude / circumferenceAtLatitude(lat); -} +Actor.prototype.process = function process () { + if (!this.taskQueue.length) { + return; + } + var id = this.taskQueue.shift(); + var task = this.tasks[id]; + delete this.tasks[id]; + // Schedule another process call if we know there's more to process _before_ invoking the + // current task. This is necessary so that processing continues even if the current task + // doesn't execute successfully. + if (this.taskQueue.length) { + this.invoker.trigger(); + } + if (!task) { + // If the task ID doesn't have associated task data anymore, it was canceled. + return; + } -function lngFromMercatorX(x ) { - return x * 360 - 180; -} + this.processTask(id, task); +}; -function latFromMercatorY(y ) { - var y2 = 180 - y * 360; - return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90; -} +Actor.prototype.processTask = function processTask (id , task ) { + var this$1 = this; -function altitudeFromMercatorZ(z , y ) { - return z * circumferenceAtLatitude(latFromMercatorY(y)); -} + if (task.type === '') { + // The done() function in the counterpart has been called, and we are now + // firing the callback in the originating actor, if there is one. + var callback = this.callbacks[id]; + delete this.callbacks[id]; + if (callback) { + // If we get a response, but don't have a callback, the request was canceled. + if (task.error) { + callback(deserialize(task.error)); + } else { + callback(null, deserialize(task.data)); + } + } + } else { + var completed = false; + var buffers = isSafari(this.globalScope) ? undefined : []; + var done = task.hasCallback ? function (err, data) { + completed = true; + delete this$1.cancelCallbacks[id]; + this$1.target.postMessage({ + id: id, + type: '', + sourceMapId: this$1.mapId, + error: err ? serialize(err) : null, + data: serialize(data, buffers) + }, buffers); + } : function (_) { + completed = true; + }; -/** - * Determine the Mercator scale factor for a given latitude, see - * https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor - * - * At the equator the scale factor will be 1, which increases at higher latitudes. - * - * @param {number} lat Latitude - * @returns {number} scale factor - * @private - */ -function mercatorScale(lat ) { - return 1 / Math.cos(lat * Math.PI / 180); -} + var callback$1 = null; + var params = (deserialize(task.data) ); + if (this.parent[task.type]) { + // task.type == 'loadTile', 'removeTile', etc. + callback$1 = this.parent[task.type](task.sourceMapId, params, done); + } else if (this.parent.getWorkerSource) { + // task.type == sourcetype.method + var keys = task.type.split('.'); + var scope = (this.parent ).getWorkerSource(task.sourceMapId, keys[0], params.source); + callback$1 = scope[keys[1]](params, done); + } else { + // No function was found. + done(new Error(("Could not find function " + (task.type)))); + } -/** - * A `MercatorCoordinate` object represents a projected three dimensional position. - * - * `MercatorCoordinate` uses the web mercator projection ([EPSG:3857](https://epsg.io/3857)) with slightly different units: - * - the size of 1 unit is the width of the projected world instead of the "mercator meter" - * - the origin of the coordinate space is at the north-west corner instead of the middle - * - * For example, `MercatorCoordinate(0, 0, 0)` is the north-west corner of the mercator world and - * `MercatorCoordinate(1, 1, 0)` is the south-east corner. If you are familiar with - * [vector tiles](https://github.com/mapbox/vector-tile-spec) it may be helpful to think - * of the coordinate space as the `0/0/0` tile with an extent of `1`. - * - * The `z` dimension of `MercatorCoordinate` is conformal. A cube in the mercator coordinate space would be rendered as a cube. - * - * @param {number} x The x component of the position. - * @param {number} y The y component of the position. - * @param {number} z The z component of the position. - * @example - * var nullIsland = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); - * - * @see [Add a custom style layer](https://www.mapbox.com/mapbox-gl-js/example/custom-style-layer/) - */ -var MercatorCoordinate = function MercatorCoordinate(x , y , z) { - if ( z === void 0 ) z = 0; + if (!completed && callback$1 && callback$1.cancel) { + // Allows canceling the task as long as it hasn't been completed yet. + this.cancelCallbacks[id] = callback$1.cancel; + } + } +}; - this.x = +x; - this.y = +y; - this.z = +z; +Actor.prototype.remove = function remove () { + this.invoker.remove(); + this.target.removeEventListener('message', this.receive, false); }; /** - * Project a `LngLat` to a `MercatorCoordinate`. + * getURL * - * @param {LngLatLike} lngLatLike The location to project. - * @param {number} altitude The altitude in meters of the position. - * @returns {MercatorCoordinate} The projected mercator coordinate. + * @param {String} baseUrl Base url of the WMS server + * @param {String} layer Layer name + * @param {Number} x Tile coordinate x + * @param {Number} y Tile coordinate y + * @param {Number} z Tile zoom + * @param {Object} [options] + * @param {String} [options.format='image/png'] + * @param {String} [options.service='WMS'] + * @param {String} [options.version='1.1.1'] + * @param {String} [options.request='GetMap'] + * @param {String} [options.srs='EPSG:3857'] + * @param {Number} [options.width='256'] + * @param {Number} [options.height='256'] + * @returns {String} url * @example - * var coord = mapboxgl.MercatorCoordinate.fromLngLat({ lng: 0, lat: 0}, 0); - * coord; // MercatorCoordinate(0.5, 0.5, 0) + * var baseUrl = 'http://geodata.state.nj.us/imagerywms/Natural2015'; + * var layer = 'Natural2015'; + * var url = whoots.getURL(baseUrl, layer, 154308, 197167, 19); */ -MercatorCoordinate.fromLngLat = function fromLngLat (lngLatLike , altitude) { - if ( altitude === void 0 ) altitude = 0; +function getURL(baseUrl, layer, x, y, z, options) { + options = options || {}; - var lngLat = LngLat.convert(lngLatLike); + var url = baseUrl + '?' + [ + 'bbox=' + getTileBBox(x, y, z), + 'format=' + (options.format || 'image/png'), + 'service=' + (options.service || 'WMS'), + 'version=' + (options.version || '1.1.1'), + 'request=' + (options.request || 'GetMap'), + 'srs=' + (options.srs || 'EPSG:3857'), + 'width=' + (options.width || 256), + 'height=' + (options.height || 256), + 'layers=' + layer + ].join('&'); - return new MercatorCoordinate( - mercatorXfromLng(lngLat.lng), - mercatorYfromLat(lngLat.lat), - mercatorZfromAltitude(altitude, lngLat.lat)); -}; + return url; +} -/** - * Returns the `LngLat` for the coordinate. - * - * @returns {LngLat} The `LngLat` object. - * @example - * var coord = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); - * var latLng = coord.toLngLat(); // LngLat(0, 0) - */ -MercatorCoordinate.prototype.toLngLat = function toLngLat () { - return new LngLat( - lngFromMercatorX(this.x), - latFromMercatorY(this.y)); -}; /** - * Returns the altitude in meters of the coordinate. + * getTileBBox * - * @returns {number} The altitude in meters. - * @example - * var coord = new mapboxgl.MercatorCoordinate(0, 0, 0.02); - * coord.toAltitude(); // 6914.281956295339 + * @param {Number} x Tile coordinate x + * @param {Number} y Tile coordinate y + * @param {Number} z Tile zoom + * @returns {String} String of the bounding box */ -MercatorCoordinate.prototype.toAltitude = function toAltitude () { - return altitudeFromMercatorZ(this.z, this.y); -}; +function getTileBBox(x, y, z) { + // for Google/OSM tile scheme we need to alter the y + y = (Math.pow(2, z) - y - 1); + + var min = getMercCoords(x * 256, y * 256, z), + max = getMercCoords((x + 1) * 256, (y + 1) * 256, z); + + return min[0] + ',' + min[1] + ',' + max[0] + ',' + max[1]; +} + /** - * Returns the distance of 1 meter in `MercatorCoordinate` units at this latitude. - * - * For coordinates in real world units using meters, this naturally provides the scale - * to transform into `MercatorCoordinate`s. + * getMercCoords * - * @returns {number} Distance of 1 meter in `MercatorCoordinate` units. + * @param {Number} x Pixel coordinate x + * @param {Number} y Pixel coordinate y + * @param {Number} z Tile zoom + * @returns {Array} [x, y] */ -MercatorCoordinate.prototype.meterInMercatorCoordinateUnits = function meterInMercatorCoordinateUnits () { - // 1 meter / circumference at equator in meters * Mercator projection scale factor at this latitude - return 1 / earthCircumfrence * mercatorScale(latFromMercatorY(this.y)); -}; +function getMercCoords(x, y, z) { + var resolution = (2 * Math.PI * 6378137 / 256) / Math.pow(2, z), + merc_x = (x * resolution - 2 * Math.PI * 6378137 / 2.0), + merc_y = (y * resolution - 2 * Math.PI * 6378137 / 2.0); + + return [merc_x, merc_y]; +} // @@ -35650,6 +35894,7 @@ register('DEMData', DEMData); + @@ -35684,7 +35929,7 @@ register('DEMData', DEMData); - + @@ -35717,8 +35962,8 @@ register('DEMData', DEMData); - + @@ -35734,7 +35979,7 @@ register('DEMData', DEMData); -function deserialize$1(input , style ) { +function deserialize$1(input , style ) { var output = {}; // Guard against the case where the map's style has been set to null while @@ -35933,7 +36178,7 @@ SourceFeatureState.prototype.initializeTileState = function initializeTileState tile.setFeatureState(this.state, painter); }; -SourceFeatureState.prototype.coalesceChanges = function coalesceChanges (tiles , painter ) { +SourceFeatureState.prototype.coalesceChanges = function coalesceChanges (tiles , painter ) { //track changes with full state objects, but only for features that got modified var featuresChanged = {}; @@ -36000,6 +36245,7 @@ SourceFeatureState.prototype.coalesceChanges = function coalesceChanges (tiles + @@ -36041,7 +36287,7 @@ FeatureIndex.prototype.insert = function insert (feature , geometr } }; -FeatureIndex.prototype.loadVTLayers = function loadVTLayers () { +FeatureIndex.prototype.loadVTLayers = function loadVTLayers () { if (!this.vtLayers) { this.vtLayers = new vectorTile.VectorTile(new pbf(this.rawTileData)).layers; this.sourceLayerCoder = new DictionaryCoder(this.vtLayers ? Object.keys(this.vtLayers).sort() : ['_geojsonTileLayer']); @@ -36050,7 +36296,7 @@ FeatureIndex.prototype.loadVTLayers = function loadVTLayers () }; // Finds non-symbol features in this tile at a particular position. -FeatureIndex.prototype.query = function query (args , styleLayers , sourceFeatureState ) { +FeatureIndex.prototype.query = function query (args , styleLayers , serializedLayers , sourceFeatureState ) { var this$1 = this; this.loadVTLayers(); @@ -36098,16 +36344,15 @@ FeatureIndex.prototype.query = function query (args , styleLayers match.featureIndex, filter, params.layers, + params.availableImages, styleLayers, - function (feature , styleLayer , id ) { + serializedLayers, + sourceFeatureState, + function (feature , styleLayer , featureState ) { if (!featureGeometry) { featureGeometry = loadGeometry(feature); } - var featureState = {}; - if (id !== undefined) { - // `feature-state` expression evaluation requires feature state to be available - featureState = sourceFeatureState.getState(styleLayer.sourceLayer || '_geojsonTileLayer', id); - } + return styleLayer.queryIntersectsFeature(queryGeometry, feature, featureState, featureGeometry, this$1.z, args.transform, pixelsToTileUnits, args.pixelPosMatrix); } ); @@ -36119,14 +36364,17 @@ FeatureIndex.prototype.query = function query (args , styleLayers }; FeatureIndex.prototype.loadMatchingFeature = function loadMatchingFeature ( - result , + result , bucketIndex , sourceLayerIndex , featureIndex , filter , filterLayerIDs , - styleLayers , - intersectionTest ) { + availableImages , + styleLayers , + serializedLayers , + sourceFeatureState , + intersectionTest ) { var layerIDs = this.bucketLayerIDs[bucketIndex]; if (filterLayerIDs && !arraysIntersect(filterLayerIDs, layerIDs)) @@ -36136,7 +36384,7 @@ FeatureIndex.prototype.loadMatchingFeature = function loadMatchingFeature ( var sourceLayer = this.vtLayers[sourceLayerName]; var feature = sourceLayer.feature(featureIndex); - if (!filter(new EvaluationParameters(this.tileID.overscaledZ), feature)) + if (!filter.filter(new EvaluationParameters(this.tileID.overscaledZ), feature)) { return; } var id = this.getId(feature, sourceLayerName); @@ -36149,16 +36397,28 @@ FeatureIndex.prototype.loadMatchingFeature = function loadMatchingFeature ( } var styleLayer = styleLayers[layerID]; + if (!styleLayer) { continue; } - var intersectionZ = !intersectionTest || intersectionTest(feature, styleLayer, id); + var featureState = {}; + if (id !== undefined && sourceFeatureState) { + // `feature-state` expression evaluation requires feature state to be available + featureState = sourceFeatureState.getState(styleLayer.sourceLayer || '_geojsonTileLayer', id); + } + + var serializedLayer = serializedLayers[layerID]; + + serializedLayer.paint = evaluateProperties(serializedLayer.paint, styleLayer.paint, feature, featureState, availableImages); + serializedLayer.layout = evaluateProperties(serializedLayer.layout, styleLayer.layout, feature, featureState, availableImages); + + var intersectionZ = !intersectionTest || intersectionTest(feature, styleLayer, featureState); if (!intersectionZ) { // Only applied for non-symbol features continue; } var geojsonFeature = new Feature(feature, this.z, this.x, this.y, id); - (geojsonFeature ).layer = styleLayer.serialize(); + (geojsonFeature ).layer = serializedLayer; var layerResult = result[layerID]; if (layerResult === undefined) { layerResult = result[layerID] = []; @@ -36170,11 +36430,13 @@ FeatureIndex.prototype.loadMatchingFeature = function loadMatchingFeature ( // Given a set of symbol indexes that have already been looked up, // return a matching set of GeoJSONFeatures FeatureIndex.prototype.lookupSymbolFeatures = function lookupSymbolFeatures (symbolFeatureIndexes , + serializedLayers , bucketIndex , sourceLayerIndex , filterSpec , filterLayerIDs , - styleLayers ) { + availableImages , + styleLayers ) { var result = {}; this.loadVTLayers(); @@ -36190,7 +36452,9 @@ FeatureIndex.prototype.lookupSymbolFeatures = function lookupSymbolFeatures (sym symbolFeatureIndex, filter, filterLayerIDs, - styleLayers + availableImages, + styleLayers, + serializedLayers ); } @@ -36227,6 +36491,13 @@ register( {omit: ['rawTileData', 'sourceLayerCoder']} ); +function evaluateProperties(serializedProperties, styleLayerProperties, feature, featureState, availableImages) { + return mapObject(serializedProperties, function (property, key) { + var prop = styleLayerProperties instanceof PossiblyEvaluated ? styleLayerProperties.get(key) : null; + return prop && prop.evaluate ? prop.evaluate(feature, featureState, availableImages) : prop; + }); +} + function getBounds(geometry ) { var minX = Infinity; var minY = Infinity; @@ -36454,15 +36725,16 @@ Tile.prototype.prepare = function prepare (imageManager ) { // Queries non-symbol features rendered for this tile. // Symbol features are queried globally -Tile.prototype.queryRenderedFeatures = function queryRenderedFeatures (layers , +Tile.prototype.queryRenderedFeatures = function queryRenderedFeatures (layers , + serializedLayers , sourceFeatureState , queryGeometry , cameraQueryGeometry , scale , - params , + params , transform , maxPitchScaleFactor , - pixelPosMatrix ) { + pixelPosMatrix ) { if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData) { return {}; } @@ -36475,7 +36747,7 @@ Tile.prototype.queryRenderedFeatures = function queryRenderedFeatures (layers transform: transform, params: params, queryPadding: this.queryPadding * maxPitchScaleFactor - }, layers, sourceFeatureState); + }, layers, serializedLayers, sourceFeatureState); }; Tile.prototype.querySourceFeatures = function querySourceFeatures (result , params ) { @@ -36498,7 +36770,7 @@ Tile.prototype.querySourceFeatures = function querySourceFeatures (result for (var i = 0; i < layer.length; i++) { var feature = layer.feature(i); - if (filter(new EvaluationParameters(this.tileID.overscaledZ), feature)) { + if (filter.filter(new EvaluationParameters(this.tileID.overscaledZ), feature)) { var id = featureIndex.getId(feature, sourceLayer); var geojsonFeature = new Feature(feature, z, x, y, id); (geojsonFeature ).tile = coord; @@ -36585,6 +36857,8 @@ Tile.prototype.setFeatureState = function setFeatureState (states var vtLayers = this.latestFeatureIndex.loadVTLayers(); for (var id in this.buckets) { + if (!painter.style.hasLayer(id)) { continue; } + var bucket = this.buckets[id]; // Buckets are grouped by common source-layer var sourceLayerId = bucket.layers[0]['sourceLayer'] || '_geojsonTileLayer'; @@ -36788,7 +37062,6 @@ exports.SegmentVector = SegmentVector; exports.SourceFeatureState = SourceFeatureState; exports.StructArrayLayout1ui2 = StructArrayLayout1ui2; exports.StructArrayLayout2i4 = StructArrayLayout2i4; -exports.StructArrayLayout2ui4 = StructArrayLayout2ui4; exports.StructArrayLayout3ui6 = StructArrayLayout3ui6; exports.StructArrayLayout4i8 = StructArrayLayout4i8; exports.SymbolBucket = SymbolBucket; @@ -36994,7 +37267,7 @@ function groupByLayout(layers, cachedKeys) { - + var StyleLayerIndex = function StyleLayerIndex(layerConfigs ) { @@ -37079,9 +37352,9 @@ var padding = 1; - + -var GlyphAtlas = function GlyphAtlas(stacks ) { +var GlyphAtlas = function GlyphAtlas(stacks ) { var positions = {}; var bins = []; @@ -37166,7 +37439,7 @@ WorkerTile.prototype.parse = function parse (data , layerIndex var featureIndex = new performance.FeatureIndex(this.tileID, this.promoteId); featureIndex.bucketLayerIDs = []; - var buckets = {}; + var buckets = {}; var options = { featureIndex: featureIndex, @@ -37219,15 +37492,15 @@ WorkerTile.prototype.parse = function parse (data , layerIndex sourceID: this.source }); - bucket.populate(features, options); + bucket.populate(features, options, this.tileID.canonical); featureIndex.bucketLayerIDs.push(family.map(function (l) { return l.id; })); } } var error ; - var glyphMap ; - var iconMap ; - var patternMap ; + var glyphMap ; + var iconMap ; + var patternMap ; var stacks = performance.mapObject(options.glyphDependencies, function (glyphs) { return Object.keys(glyphs).map(Number); }); if (Object.keys(stacks).length) { @@ -37281,13 +37554,13 @@ WorkerTile.prototype.parse = function parse (data , layerIndex var bucket = buckets[key]; if (bucket instanceof performance.SymbolBucket) { recalculateLayers(bucket.layers, this.zoom, availableImages); - performance.performSymbolLayout(bucket, glyphMap, glyphAtlas.positions, iconMap, imageAtlas.iconPositions, this.showCollisionBoxes); + performance.performSymbolLayout(bucket, glyphMap, glyphAtlas.positions, iconMap, imageAtlas.iconPositions, this.showCollisionBoxes, this.tileID.canonical); } else if (bucket.hasPattern && (bucket instanceof performance.LineBucket || bucket instanceof performance.FillBucket || bucket instanceof performance.FillExtrusionBucket)) { recalculateLayers(bucket.layers, this.zoom, availableImages); - bucket.addFeatures(options, imageAtlas.patternPositions); + bucket.addFeatures(options, this.tileID.canonical, imageAtlas.patternPositions); } } @@ -37393,6 +37666,7 @@ var VectorTileWorkerSource = function VectorTileWorkerSource(actor , layerIn * Implements {@link WorkerSource#loadTile}. Delegates to * {@link VectorTileWorkerSource#loadVectorData} (which by default expects * a `params.url` property) for fetching and producing a VectorTile object. + * @private */ VectorTileWorkerSource.prototype.loadTile = function loadTile (params , callback ) { var this$1 = this; @@ -37444,6 +37718,7 @@ var VectorTileWorkerSource = function VectorTileWorkerSource(actor , layerIn /** * Implements {@link WorkerSource#reloadTile}. + * @private */ VectorTileWorkerSource.prototype.reloadTile = function reloadTile (params , callback ) { var this$1 = this; @@ -37482,6 +37757,7 @@ var VectorTileWorkerSource = function VectorTileWorkerSource(actor , layerIn * * @param params * @param params.uid The UID for this tile. + * @private */ VectorTileWorkerSource.prototype.abortTile = function abortTile (params , callback ) { var loading = this.loading, @@ -37498,6 +37774,7 @@ var VectorTileWorkerSource = function VectorTileWorkerSource(actor , layerIn * * @param params * @param params.uid The UID for this tile. + * @private */ VectorTileWorkerSource.prototype.removeTile = function removeTile (params , callback ) { var loaded = this.loaded, @@ -37722,12 +37999,12 @@ var toGeoJSON = performance.vectorTile.VectorTileFeature.prototype.toGeoJSON; - + - + @@ -39614,9 +39891,10 @@ var GeoJSONWorkerSource = /*@__PURE__*/(function (VectorTileWorkerSource) { * * @param params * @param callback + * @private */ GeoJSONWorkerSource.prototype.loadData = function loadData (params , callback - + ) { if (this._pendingCallback) { // Tell the foreground the previous call has been abandoned @@ -39723,6 +40001,7 @@ var GeoJSONWorkerSource = /*@__PURE__*/(function (VectorTileWorkerSource) { * * @param params * @param params.uid The UID for this tile. + * @private */ GeoJSONWorkerSource.prototype.reloadTile = function reloadTile (params , callback ) { var loaded = this.loaded, @@ -39745,6 +40024,7 @@ var GeoJSONWorkerSource = /*@__PURE__*/(function (VectorTileWorkerSource) { * @param params * @param [params.url] A URL to the remote GeoJSON data. * @param [params.data] Literal GeoJSON data. Must be provided if `params.url` is not. + * @private */ GeoJSONWorkerSource.prototype.loadGeoJSON = function loadGeoJSON (params , callback ) { // Because of same origin issues, urls must either include an explicit @@ -40387,7 +40667,7 @@ DOM.remove = function(node ) { function loadSprite(baseURL , requestManager , - callback ) { + callback ) { var json , image, error; var format = performance.browser.devicePixelRatio > 1 ? '@2x' : ''; @@ -40733,7 +41013,7 @@ var ImageManager = /*@__PURE__*/(function (Evented) { return Object.keys(this.images); }; - ImageManager.prototype.getImages = function getImages (ids , callback ) { + ImageManager.prototype.getImages = function getImages (ids , callback ) { // If the sprite has been loaded, or if all the icon dependencies are already present // (i.e. if they've been added via runtime styling), then notify the requestor immediately. // Otherwise, delay notification until the sprite is loaded. At that point, if any of the @@ -40755,7 +41035,7 @@ var ImageManager = /*@__PURE__*/(function (Evented) { } }; - ImageManager.prototype._notify = function _notify (ids , callback ) { + ImageManager.prototype._notify = function _notify (ids , callback ) { var response = {}; for (var i = 0, list = ids; i < list.length; i += 1) { @@ -40903,7 +41183,7 @@ function loadGlyphRange (fontstack , range , urlTemplate , requestManager , - callback ) { + callback ) { var begin = range * 256; var end = begin + 255; @@ -41046,7 +41326,7 @@ tinySdf.default = default_1; - + @@ -41108,7 +41388,7 @@ var GlyphManager = function GlyphManager(requestManager , localIdeo if (!requests) { requests = entry.requests[range] = []; GlyphManager.loadGlyphRange(stack, range, (this$1.url ), this$1.requestManager, - function (err, response ) { + function (err, response ) { if (response) { for (var id in response) { if (!this$1._doesCharSupportLocalGlyph(+id)) { @@ -41125,7 +41405,7 @@ var GlyphManager = function GlyphManager(requestManager , localIdeo }); } - requests.push(function (err, result ) { + requests.push(function (err, result ) { if (err) { callback(err); } else if (result) { @@ -41470,13 +41750,15 @@ LineAtlas.prototype.addDash = function addDash (dasharray , round var length = 0; for (var i = 0; i < dasharray.length; i++) { length += dasharray[i]; } - var stretch = this.width / length; - var ranges = this.getDashRanges(dasharray, this.width, stretch); + if (length !== 0) { + var stretch = this.width / length; + var ranges = this.getDashRanges(dasharray, this.width, stretch); - if (round) { - this.addRoundDash(ranges, stretch, n); - } else { - this.addRegularDash(ranges); + if (round) { + this.addRoundDash(ranges, stretch, n); + } else { + this.addRegularDash(ranges); + } } var dashEntry = { @@ -41539,6 +41821,7 @@ var Dispatcher = function Dispatcher(workerPool , parent ) { /** * Broadcast a message to all Workers. + * @private */ Dispatcher.prototype.broadcast = function broadcast (type , data , cb ) { performance.assert(this.actors.length); @@ -42528,7 +42811,7 @@ var ImageSource = /*@__PURE__*/(function (Evented) { * Updates the image URL and, optionally, the coordinates. To avoid having the image flash after changing, * set the `raster-fade-duration` paint property on the raster layer to 0. * - * @param {Object} options + * @param {Object} options Options object. * @param {string} [options.url] Required image URL. * @param {Array>} [options.coordinates] Four geographical coordinates, * represented as arrays of longitude and latitude numbers, which define the corners of the image. @@ -42810,6 +43093,7 @@ var VideoSource = /*@__PURE__*/(function (ImageSource) { /** * Sets playback to a timestamp, in seconds. + * @private */ VideoSource.prototype.seek = function seek (seconds ) { if (this.video) { @@ -42845,10 +43129,6 @@ var VideoSource = /*@__PURE__*/(function (ImageSource) { * @method setCoordinates * @instance * @memberof VideoSource - * @param {Array>} coordinates Four geographical coordinates, - * represented as arrays of longitude and latitude numbers, which define the corners of the video. - * The coordinates start at the top left corner of the video and proceed in clockwise order. - * They do not have to represent a rectangle. * @returns {VideoSource} this */ // setCoordinates inherited from ImageSource @@ -43180,7 +43460,7 @@ function getPixelPosMatrix(transform, tileID) { return performance.multiply(t, t, transform.calculatePosMatrix(tileID.toUnwrapped())); } -function queryIncludes3DLayer(layers , styleLayers , sourceID ) { +function queryIncludes3DLayer(layers , styleLayers , sourceID ) { if (layers) { for (var i = 0, list = layers; i < list.length; i += 1) { var layerID = list[i]; @@ -43202,18 +43482,17 @@ function queryIncludes3DLayer(layers , styleLayers } function queryRenderedFeatures(sourceCache , - styleLayers , + styleLayers , + serializedLayers , queryGeometry , - params , + params , transform ) { var has3DLayer = queryIncludes3DLayer(params && params.layers, styleLayers, sourceCache.id); - var maxPitchScaleFactor = transform.maxPitchScaleFactor(); var tilesIn = sourceCache.tilesIn(queryGeometry, maxPitchScaleFactor, has3DLayer); tilesIn.sort(sortTilesIn); - var renderedFeatureLayers = []; for (var i = 0, list = tilesIn; i < list.length; i += 1) { var tileIn = list[i]; @@ -43222,6 +43501,7 @@ function queryRenderedFeatures(sourceCache , wrappedTileID: tileIn.tileID.wrapped().key, queryResults: tileIn.tile.queryRenderedFeatures( styleLayers, + serializedLayers, sourceCache._state, tileIn.queryGeometry, tileIn.cameraQueryGeometry, @@ -43250,12 +43530,13 @@ function queryRenderedFeatures(sourceCache , return result; } -function queryRenderedSymbols(styleLayers , - sourceCaches , +function queryRenderedSymbols(styleLayers , + serializedLayers , + sourceCaches , queryGeometry , - params , + params , collisionIndex , - retainedQueryData ) { + retainedQueryData ) { var result = {}; var renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry); var bucketQueryData = []; @@ -43271,10 +43552,12 @@ function queryRenderedSymbols(styleLayers , var bucketSymbols = queryData.featureIndex.lookupSymbolFeatures( renderedSymbols[queryData.bucketInstanceId], + serializedLayers, queryData.bucketIndex, queryData.sourceLayerIndex, params.filter, params.layers, + params.availableImages, styleLayers); for (var layerID in bucketSymbols) { @@ -43569,6 +43852,8 @@ TileCache.prototype.setMaxSize = function setMaxSize (max ) { /** * Remove entries that do not pass a filter function. Used for removing * stale tiles from the cache. + * + * @param {function} filterFn Determines whether the tile is filtered. If the supplied function returns false, the tile will be filtered out. */ TileCache.prototype.filter = function filter (filterFn ) { var removed = []; @@ -44581,7 +44866,7 @@ var DepthAttachment = /*@__PURE__*/(function (FramebufferAttachment) { -var Framebuffer = function Framebuffer(context , width , height ) { +var Framebuffer = function Framebuffer(context , width , height , hasDepth ) { this.context = context; this.width = width; this.height = height; @@ -44589,7 +44874,10 @@ var Framebuffer = function Framebuffer(context , width , height ) { var fbo = this.framebuffer = gl.createFramebuffer(); this.colorAttachment = new ColorAttachment(context, fbo); - this.depthAttachment = new DepthAttachment(context, fbo); + if (hasDepth) { + this.depthAttachment = new DepthAttachment(context, fbo); + } + performance.assert(gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE); }; Framebuffer.prototype.destroy = function destroy () { @@ -44598,8 +44886,10 @@ Framebuffer.prototype.destroy = function destroy () { var texture = this.colorAttachment.get(); if (texture) { gl.deleteTexture(texture); } - var renderbuffer = this.depthAttachment.get(); - if (renderbuffer) { gl.deleteRenderbuffer(renderbuffer); } + if (this.depthAttachment) { + var renderbuffer = this.depthAttachment.get(); + if (renderbuffer) { gl.deleteRenderbuffer(renderbuffer); } + } gl.deleteFramebuffer(this.framebuffer); }; @@ -44827,8 +45117,8 @@ var Context = function Context(gl ) { return rbo; }; - Context.prototype.createFramebuffer = function createFramebuffer (width , height ) { - return new Framebuffer(this, width, height); + Context.prototype.createFramebuffer = function createFramebuffer (width , height , hasDepth ) { + return new Framebuffer(this, width, height, hasDepth); }; Context.prototype.clear = function clear (ref ) { @@ -45005,6 +45295,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Return true if no tile data is pending, tiles will not change unless * an additional API call is received. + * @private */ SourceCache.prototype.loaded = function loaded () { if (this._sourceErrored) { return true; } @@ -45068,6 +45359,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Return all tile ids ordered with z-order, and cast to numbers + * @private */ SourceCache.prototype.getIds = function getIds () { return (performance.values(this._tiles) ).map(function (tile ) { return tile.tileID; }).sort(compareTileId).map(function (id) { return id.key; }); @@ -45197,6 +45489,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { }; /** * Get a specific tile by TileID + * @private */ SourceCache.prototype.getTile = function getTile (tileID ) { return this.getTileByID(tileID.key); @@ -45204,6 +45497,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Get a specific tile by id + * @private */ SourceCache.prototype.getTileByID = function getTileByID (id ) { return this._tiles[id]; @@ -45212,12 +45506,13 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * For a given set of tiles, retain children that are loaded and have a zoom * between `zoom` (exclusive) and `maxCoveringZoom` (inclusive) + * @private */ SourceCache.prototype._retainLoadedChildren = function _retainLoadedChildren ( - idealTiles , + idealTiles , zoom , maxCoveringZoom , - retain + retain ) { for (var id in this._tiles) { var tile = this._tiles[id]; @@ -45257,6 +45552,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Find a loaded parent of the given tile (up to minCoveringZoom) + * @private */ SourceCache.prototype.findLoadedParent = function findLoadedParent (tileID , minCoveringZoom ) { if (tileID.key in this._loadedParentTiles) { @@ -45293,6 +45589,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { * Larger viewports use more tiles and need larger caches. Larger viewports * are more likely to be found on devices with more memory and on pages where * the map is more important. + * @private */ SourceCache.prototype.updateCacheSize = function updateCacheSize (transform ) { var widthInTiles = Math.ceil(transform.width / this._source.tileSize) + 1; @@ -45329,7 +45626,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { this._prevLng = lng; if (wrapDelta) { - var tiles = {}; + var tiles = {}; for (var key in this._tiles) { var tile = this._tiles[key]; tile.tileID = tile.tileID.unwrapTo(tile.tileID.wrap + wrapDelta); @@ -45352,6 +45649,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Removes tiles that are outside the viewport and adds new tiles that * are inside the viewport. + * @private */ SourceCache.prototype.update = function update (transform ) { var this$1 = this; @@ -45397,7 +45695,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { var retain = this._updateRetainedTiles(idealTileIDs, zoom); if (isRasterType(this._source.type)) { - var parentsForFading = {}; + var parentsForFading = {}; var fadingTiles = {}; var ids = Object.keys(retain); for (var i = 0, list = ids; i < list.length; i += 1) { @@ -45462,9 +45760,9 @@ var SourceCache = /*@__PURE__*/(function (Evented) { } }; - SourceCache.prototype._updateRetainedTiles = function _updateRetainedTiles (idealTileIDs , zoom ) { - var retain = {}; - var checked = {}; + SourceCache.prototype._updateRetainedTiles = function _updateRetainedTiles (idealTileIDs , zoom ) { + var retain = {}; + var checked = {}; var minCoveringZoom = Math.max(zoom - SourceCache.maxOverzooming, this._source.minzoom); var maxCoveringZoom = Math.max(zoom + SourceCache.maxUnderzooming, this._source.minzoom); @@ -45687,6 +45985,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { * cover the given bounds. * @param pointQueryGeometry coordinates of the corners of bounding rectangle * @returns {Array} result items have {tile, minX, maxX, minY, maxY}, where min/max bounding values are the given bounds transformed in into the coordinate space of this tile. + * @private */ SourceCache.prototype.tilesIn = function tilesIn (pointQueryGeometry , maxPitchScaleFactor , has3DLayer ) { var this$1 = this; @@ -45815,6 +46114,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Sets the set of keys that the tile depends on. This allows tiles to * be reloaded when their dependencies change. + * @private */ SourceCache.prototype.setDependencies = function setDependencies (tileKey , namespace , dependencies ) { var tile = this._tiles[tileKey]; @@ -45825,6 +46125,7 @@ var SourceCache = /*@__PURE__*/(function (Evented) { /** * Reloads all tiles that depend on the given keys. + * @private */ SourceCache.prototype.reloadTilesForDependencies = function reloadTilesForDependencies (namespaces , keys ) { for (var id in this._tiles) { @@ -47034,7 +47335,7 @@ function placeGlyphAlongLine(offsetX , lineEndIndex , lineVertexArray , labelPlaneMatrix , - projectionCache , + projectionCache , returnTileDistance ) { var combinedOffsetX = flip ? @@ -48612,7 +48913,7 @@ PauseablePlacement.prototype.isDone = function isDone () { return this._done; }; -PauseablePlacement.prototype.continuePlacement = function continuePlacement (order , layers , layerTiles ) { +PauseablePlacement.prototype.continuePlacement = function continuePlacement (order , layers , layerTiles ) { var this$1 = this; var startTime = performance.browser.now(); @@ -49008,10 +49309,12 @@ var Style = /*@__PURE__*/(function (Evented) { this.crossTileSymbolIndex = new CrossTileSymbolIndex(); this._layers = {}; + this._serializedLayers = {}; this._order = []; this.sourceCaches = {}; this.zoomHistory = new performance.ZoomHistory(); this._loaded = false; + this._availableImages = []; this._resetUpdates(); @@ -49131,12 +49434,14 @@ var Style = /*@__PURE__*/(function (Evented) { this._order = layers.map(function (layer) { return layer.id; }); this._layers = {}; + this._serializedLayers = {}; for (var i = 0, list = layers; i < list.length; i += 1) { var layer = list[i]; layer = performance.createStyleLayer(layer); layer.setEventedParent(this, {layer: {id: layer.id}}); this._layers[layer.id] = layer; + this._serializedLayers[layer.id] = layer.serialize(); } this.dispatcher.broadcast('setLayers', this._serializeLayers(this._order)); @@ -49160,7 +49465,8 @@ var Style = /*@__PURE__*/(function (Evented) { } this$1.imageManager.setLoaded(true); - this$1.dispatcher.broadcast('setImages', this$1.imageManager.listImages()); + this$1._availableImages = this$1.imageManager.listImages(); + this$1.dispatcher.broadcast('setImages', this$1._availableImages); this$1.fire(new performance.Event('data', {dataType: 'style'})); }); }; @@ -49244,6 +49550,7 @@ var Style = /*@__PURE__*/(function (Evented) { /** * Apply queued style updates in a batch and recalculate zoom-dependent paint properties. + * @private */ Style.prototype.update = function update (parameters ) { if (!this._loaded) { @@ -49283,13 +49590,12 @@ var Style = /*@__PURE__*/(function (Evented) { this.sourceCaches[sourceId].used = false; } - var availableImages = this.imageManager.listImages(); for (var i = 0, list = this._order; i < list.length; i += 1) { var layerId = list[i]; var layer = this._layers[layerId]; - layer.recalculate(parameters, availableImages); + layer.recalculate(parameters, this._availableImages); if (!layer.isHidden(parameters.zoom) && layer.source) { this.sourceCaches[layer.source].used = true; } @@ -49387,6 +49693,7 @@ var Style = /*@__PURE__*/(function (Evented) { return this.fire(new performance.ErrorEvent(new Error('An image with this name already exists.'))); } this.imageManager.addImage(id, image); + this._availableImages = this.imageManager.listImages(); this._changedImages[id] = true; this._changed = true; this.fire(new performance.Event('data', {dataType: 'style'})); @@ -49405,6 +49712,7 @@ var Style = /*@__PURE__*/(function (Evented) { return this.fire(new performance.ErrorEvent(new Error('No image with this name exists.'))); } this.imageManager.removeImage(id); + this._availableImages = this.imageManager.listImages(); this._changedImages[id] = true; this._changed = true; this.fire(new performance.Event('data', {dataType: 'style'})); @@ -49451,6 +49759,7 @@ var Style = /*@__PURE__*/(function (Evented) { * Remove a source from this stylesheet, given its id. * @param {string} id id of the source to remove * @throws {Error} if no source is found with the given ID + * @returns {Map} The {@link Map} object. */ Style.prototype.removeSource = function removeSource (id ) { this._checkLoaded(); @@ -49503,7 +49812,10 @@ var Style = /*@__PURE__*/(function (Evented) { /** * Add a layer to the map style. The layer will be inserted before the layer with * ID `before`, or appended if `before` is omitted. + * @param {Object | CustomLayerInterface} layerObject The style layer to add. * @param {string} [before] ID of an existing layer to insert before + * @param {Object} options Style setter options. + * @returns {Map} The {@link Map} object. */ Style.prototype.addLayer = function addLayer (layerObject , before , options) { if ( options === void 0 ) options = {}; @@ -49539,6 +49851,7 @@ var Style = /*@__PURE__*/(function (Evented) { this._validateLayer(layer); layer.setEventedParent(this, {layer: {id: id}}); + this._serializedLayers[layer.id] = layer.serialize(); } var index = before ? this._order.indexOf(before) : this._order.length; @@ -49635,6 +49948,7 @@ var Style = /*@__PURE__*/(function (Evented) { this._changed = true; this._removedLayers[id] = layer; delete this._layers[id]; + delete this._serializedLayers[id]; delete this._updatedLayers[id]; delete this._updatedPaintProps[id]; @@ -49653,6 +49967,16 @@ var Style = /*@__PURE__*/(function (Evented) { return this._layers[id]; }; + /** + * checks if a specific layer is present within the style. + * + * @param {string} id - id of the desired layer + * @returns {boolean} a boolean specifying if the given layer is present + */ + Style.prototype.hasLayer = function hasLayer (id ) { + return id in this._layers; + }; + Style.prototype.setLayerZoomRange = function setLayerZoomRange (layerId , minzoom , maxzoom ) { this._checkLoaded(); @@ -49981,12 +50305,15 @@ var Style = /*@__PURE__*/(function (Evented) { var sourceResults = []; + params.availableImages = this._availableImages; + for (var id in this.sourceCaches) { if (params.layers && !includedSources[id]) { continue; } sourceResults.push( queryRenderedFeatures( this.sourceCaches[id], this._layers, + this._serializedLayers, queryGeometry, params, transform) @@ -49999,6 +50326,7 @@ var Style = /*@__PURE__*/(function (Evented) { sourceResults.push( queryRenderedSymbols( this._layers, + this._serializedLayers, this.sourceCaches, queryGeometry, params, @@ -50208,7 +50536,7 @@ var Style = /*@__PURE__*/(function (Evented) { // Callbacks from web workers - Style.prototype.getImages = function getImages (mapId , params , callback ) { + Style.prototype.getImages = function getImages (mapId , params , callback ) { this.imageManager.getImages(params.icons, callback); @@ -50228,7 +50556,7 @@ var Style = /*@__PURE__*/(function (Evented) { } }; - Style.prototype.getGlyphs = function getGlyphs (mapId , params , callback ) { + Style.prototype.getGlyphs = function getGlyphs (mapId , params , callback ) { this.glyphManager.getGlyphs(params.stacks, callback); }; @@ -50285,9 +50613,9 @@ var collisionCircleFrag = "uniform float u_overscale_factor;\n\nvarying float v_ var collisionCircleVert = "attribute vec2 a_pos;\nattribute vec2 a_anchor_pos;\nattribute vec2 a_extrude;\nattribute vec2 a_placed;\n\nuniform mat4 u_matrix;\nuniform vec2 u_extrude_scale;\nuniform float u_camera_to_center_distance;\n\nvarying float v_placed;\nvarying float v_notUsed;\nvarying float v_radius;\n\nvarying vec2 v_extrude;\nvarying vec2 v_extrude_scale;\n\nvoid main() {\n vec4 projectedPoint = u_matrix * vec4(a_anchor_pos, 0, 1);\n highp float camera_to_anchor_distance = projectedPoint.w;\n highp float collision_perspective_ratio = clamp(\n 0.5 + 0.5 * (u_camera_to_center_distance / camera_to_anchor_distance),\n 0.0, // Prevents oversized near-field circles in pitched/overzoomed tiles\n 4.0);\n\n gl_Position = u_matrix * vec4(a_pos, 0.0, 1.0);\n\n highp float padding_factor = 1.2; // Pad the vertices slightly to make room for anti-alias blur\n gl_Position.xy += a_extrude * u_extrude_scale * padding_factor * gl_Position.w * collision_perspective_ratio;\n\n v_placed = a_placed.x;\n v_notUsed = a_placed.y;\n v_radius = abs(a_extrude.y); // We don't pitch the circles, so both units of the extrusion vector are equal in magnitude to the radius\n\n v_extrude = a_extrude * padding_factor;\n v_extrude_scale = u_extrude_scale * u_camera_to_center_distance * collision_perspective_ratio;\n}\n"; -var debugFrag = "uniform highp vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n"; +var debugFrag = "uniform highp vec4 u_color;\nuniform sampler2D u_overlay;\n\nvarying vec2 v_uv;\n\nvoid main() {\n vec4 overlay_color = texture2D(u_overlay, v_uv);\n gl_FragColor = mix(u_color, overlay_color, overlay_color.a);\n}\n"; -var debugVert = "attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n}\n"; +var debugVert = "attribute vec2 a_pos;\nvarying vec2 v_uv;\n\nuniform mat4 u_matrix;\nuniform float u_overlay_scale;\n\nvoid main() {\n // This vertex shader expects a EXTENT x EXTENT quad,\n // The UV co-ordinates for the overlay texture can be calculated using that knowledge\n v_uv = a_pos / 8192.0;\n gl_Position = u_matrix * vec4(a_pos * u_overlay_scale, 0, 1);\n}\n"; var fillFrag = "#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float opacity\n\n gl_FragColor = color * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; @@ -50299,19 +50627,19 @@ var fillOutlineVert = "attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\nuniform var fillOutlinePatternFrag = "\nuniform vec2 u_texsize;\nuniform sampler2D u_image;\nuniform float u_fade;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n // find distance to outline for alpha interpolation\n\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = 1.0 - smoothstep(0.0, 1.0, dist);\n\n\n gl_FragColor = mix(color1, color2, u_fade) * alpha * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; -var fillOutlinePatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_world;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform vec4 u_scale;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float pixelRatio = u_scale.x;\n float tileRatio = u_scale.y;\n float fromScale = u_scale.z;\n float toScale = u_scale.w;\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);\n vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, a_pos);\n\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"; +var fillOutlinePatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_world;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform vec3 u_scale;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float tileRatio = u_scale.x;\n float fromScale = u_scale.y;\n float toScale = u_scale.z;\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n vec2 display_size_a = (pattern_br_a - pattern_tl_a) / pixel_ratio_from;\n vec2 display_size_b = (pattern_br_b - pattern_tl_b) / pixel_ratio_to;\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, a_pos);\n\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"; var fillPatternFrag = "uniform vec2 u_texsize;\nuniform float u_fade;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n gl_FragColor = mix(color1, color2, u_fade) * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; -var fillPatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform vec4 u_scale;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float pixelRatio = u_scale.x;\n float tileZoomRatio = u_scale.y;\n float fromScale = u_scale.z;\n float toScale = u_scale.w;\n\n vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);\n vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileZoomRatio, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileZoomRatio, a_pos);\n}\n"; +var fillPatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform vec3 u_scale;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float tileZoomRatio = u_scale.x;\n float fromScale = u_scale.y;\n float toScale = u_scale.z;\n\n vec2 display_size_a = (pattern_br_a - pattern_tl_a) / pixel_ratio_from;\n vec2 display_size_b = (pattern_br_b - pattern_tl_b) / pixel_ratio_to;\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileZoomRatio, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileZoomRatio, a_pos);\n}\n"; var fillExtrusionFrag = "varying vec4 v_color;\n\nvoid main() {\n gl_FragColor = v_color;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; var fillExtrusionVert = "uniform mat4 u_matrix;\nuniform vec3 u_lightcolor;\nuniform lowp vec3 u_lightpos;\nuniform lowp float u_lightintensity;\nuniform float u_vertical_gradient;\nuniform lowp float u_opacity;\n\nattribute vec2 a_pos;\nattribute vec4 a_normal_ed;\n\nvarying vec4 v_color;\n\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n\n#pragma mapbox: define highp vec4 color\n\nvoid main() {\n #pragma mapbox: initialize highp float base\n #pragma mapbox: initialize highp float height\n #pragma mapbox: initialize highp vec4 color\n\n vec3 normal = a_normal_ed.xyz;\n\n base = max(0.0, base);\n height = max(0.0, height);\n\n float t = mod(normal.x, 2.0);\n\n gl_Position = u_matrix * vec4(a_pos, t > 0.0 ? height : base, 1);\n\n // Relative luminance (how dark/bright is the surface color?)\n float colorvalue = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;\n\n v_color = vec4(0.0, 0.0, 0.0, 1.0);\n\n // Add slight ambient lighting so no extrusions are totally black\n vec4 ambientlight = vec4(0.03, 0.03, 0.03, 1.0);\n color += ambientlight;\n\n // Calculate cos(theta), where theta is the angle between surface normal and diffuse light ray\n float directional = clamp(dot(normal / 16384.0, u_lightpos), 0.0, 1.0);\n\n // Adjust directional so that\n // the range of values for highlight/shading is narrower\n // with lower light intensity\n // and with lighter/brighter surface colors\n directional = mix((1.0 - u_lightintensity), max((1.0 - colorvalue + u_lightintensity), 1.0), directional);\n\n // Add gradient along z axis of side surfaces\n if (normal.y != 0.0) {\n // This avoids another branching statement, but multiplies by a constant of 0.84 if no vertical gradient,\n // and otherwise calculates the gradient based on base + height\n directional *= (\n (1.0 - u_vertical_gradient) +\n (u_vertical_gradient * clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0)));\n }\n\n // Assign final color based on surface + ambient light color, diffuse light directional, and light color\n // with lower bounds adjusted to hue of light\n // so that shading is tinted with the complementary (opposite) color to the light color\n v_color.r += clamp(color.r * directional * u_lightcolor.r, mix(0.0, 0.3, 1.0 - u_lightcolor.r), 1.0);\n v_color.g += clamp(color.g * directional * u_lightcolor.g, mix(0.0, 0.3, 1.0 - u_lightcolor.g), 1.0);\n v_color.b += clamp(color.b * directional * u_lightcolor.b, mix(0.0, 0.3, 1.0 - u_lightcolor.b), 1.0);\n v_color *= u_opacity;\n}\n"; -var fillExtrusionPatternFrag = "uniform vec2 u_texsize;\nuniform float u_fade;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n vec4 mixedColor = mix(color1, color2, u_fade);\n\n gl_FragColor = mixedColor * v_lighting;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; +var fillExtrusionPatternFrag = "uniform vec2 u_texsize;\nuniform float u_fade;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n vec4 mixedColor = mix(color1, color2, u_fade);\n\n gl_FragColor = mixedColor * v_lighting;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; -var fillExtrusionPatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_height_factor;\nuniform vec4 u_scale;\nuniform float u_vertical_gradient;\nuniform lowp float u_opacity;\n\nuniform vec3 u_lightcolor;\nuniform lowp vec3 u_lightpos;\nuniform lowp float u_lightintensity;\n\nattribute vec2 a_pos;\nattribute vec4 a_normal_ed;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float pixelRatio = u_scale.x;\n float tileRatio = u_scale.y;\n float fromScale = u_scale.z;\n float toScale = u_scale.w;\n\n vec3 normal = a_normal_ed.xyz;\n float edgedistance = a_normal_ed.w;\n\n vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);\n vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);\n\n base = max(0.0, base);\n height = max(0.0, height);\n\n float t = mod(normal.x, 2.0);\n float z = t > 0.0 ? height : base;\n\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n\n vec2 pos = normal.x == 1.0 && normal.y == 0.0 && normal.z == 16384.0\n ? a_pos // extrusion top\n : vec2(edgedistance, z * u_height_factor); // extrusion side\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, pos);\n\n v_lighting = vec4(0.0, 0.0, 0.0, 1.0);\n float directional = clamp(dot(normal / 16383.0, u_lightpos), 0.0, 1.0);\n directional = mix((1.0 - u_lightintensity), max((0.5 + u_lightintensity), 1.0), directional);\n\n if (normal.y != 0.0) {\n // This avoids another branching statement, but multiplies by a constant of 0.84 if no vertical gradient,\n // and otherwise calculates the gradient based on base + height\n directional *= (\n (1.0 - u_vertical_gradient) +\n (u_vertical_gradient * clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0)));\n }\n\n v_lighting.rgb += clamp(directional * u_lightcolor, mix(vec3(0.0), vec3(0.3), 1.0 - u_lightcolor), vec3(1.0));\n v_lighting *= u_opacity;\n}\n"; +var fillExtrusionPatternVert = "uniform mat4 u_matrix;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_height_factor;\nuniform vec3 u_scale;\nuniform float u_vertical_gradient;\nuniform lowp float u_opacity;\n\nuniform vec3 u_lightcolor;\nuniform lowp vec3 u_lightpos;\nuniform lowp float u_lightintensity;\n\nattribute vec2 a_pos;\nattribute vec4 a_normal_ed;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float tileRatio = u_scale.x;\n float fromScale = u_scale.y;\n float toScale = u_scale.z;\n\n vec3 normal = a_normal_ed.xyz;\n float edgedistance = a_normal_ed.w;\n\n vec2 display_size_a = (pattern_br_a - pattern_tl_a) / pixel_ratio_from;\n vec2 display_size_b = (pattern_br_b - pattern_tl_b) / pixel_ratio_to;\n\n base = max(0.0, base);\n height = max(0.0, height);\n\n float t = mod(normal.x, 2.0);\n float z = t > 0.0 ? height : base;\n\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n\n vec2 pos = normal.x == 1.0 && normal.y == 0.0 && normal.z == 16384.0\n ? a_pos // extrusion top\n : vec2(edgedistance, z * u_height_factor); // extrusion side\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, pos);\n\n v_lighting = vec4(0.0, 0.0, 0.0, 1.0);\n float directional = clamp(dot(normal / 16383.0, u_lightpos), 0.0, 1.0);\n directional = mix((1.0 - u_lightintensity), max((0.5 + u_lightintensity), 1.0), directional);\n\n if (normal.y != 0.0) {\n // This avoids another branching statement, but multiplies by a constant of 0.84 if no vertical gradient,\n // and otherwise calculates the gradient based on base + height\n directional *= (\n (1.0 - u_vertical_gradient) +\n (u_vertical_gradient * clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0)));\n }\n\n v_lighting.rgb += clamp(directional * u_lightcolor, mix(vec3(0.0), vec3(0.3), 1.0 - u_lightcolor), vec3(1.0));\n v_lighting *= u_opacity;\n}\n"; var hillshadePrepareFrag = "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D u_image;\nvarying vec2 v_pos;\nuniform vec2 u_dimension;\nuniform float u_zoom;\nuniform float u_maxzoom;\nuniform vec4 u_unpack;\n\nfloat getElevation(vec2 coord, float bias) {\n // Convert encoded elevation value to meters\n vec4 data = texture2D(u_image, coord) * 255.0;\n data.a = -1.0;\n return dot(data, u_unpack) / 4.0;\n}\n\nvoid main() {\n vec2 epsilon = 1.0 / u_dimension;\n\n // queried pixels:\n // +-----------+\n // | | | |\n // | a | b | c |\n // | | | |\n // +-----------+\n // | | | |\n // | d | e | f |\n // | | | |\n // +-----------+\n // | | | |\n // | g | h | i |\n // | | | |\n // +-----------+\n\n float a = getElevation(v_pos + vec2(-epsilon.x, -epsilon.y), 0.0);\n float b = getElevation(v_pos + vec2(0, -epsilon.y), 0.0);\n float c = getElevation(v_pos + vec2(epsilon.x, -epsilon.y), 0.0);\n float d = getElevation(v_pos + vec2(-epsilon.x, 0), 0.0);\n float e = getElevation(v_pos, 0.0);\n float f = getElevation(v_pos + vec2(epsilon.x, 0), 0.0);\n float g = getElevation(v_pos + vec2(-epsilon.x, epsilon.y), 0.0);\n float h = getElevation(v_pos + vec2(0, epsilon.y), 0.0);\n float i = getElevation(v_pos + vec2(epsilon.x, epsilon.y), 0.0);\n\n // here we divide the x and y slopes by 8 * pixel size\n // where pixel size (aka meters/pixel) is:\n // circumference of the world / (pixels per tile * number of tiles)\n // which is equivalent to: 8 * 40075016.6855785 / (512 * pow(2, u_zoom))\n // which can be reduced to: pow(2, 19.25619978527 - u_zoom)\n // we want to vertically exaggerate the hillshading though, because otherwise\n // it is barely noticeable at low zooms. to do this, we multiply this by some\n // scale factor pow(2, (u_zoom - u_maxzoom) * a) where a is an arbitrary value\n // Here we use a=0.3 which works out to the expression below. see \n // nickidlugash's awesome breakdown for more info\n // https://github.com/mapbox/mapbox-gl-js/pull/5286#discussion_r148419556\n float exaggeration = u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;\n\n vec2 deriv = vec2(\n (c + f + f + i) - (a + d + d + g),\n (g + h + h + i) - (a + b + b + c)\n ) / pow(2.0, (u_zoom - u_maxzoom) * exaggeration + 19.2562 - u_zoom);\n\n gl_FragColor = clamp(vec4(\n deriv.x / 2.0 + 0.5,\n deriv.y / 2.0 + 0.5,\n 1.0,\n 1.0), 0.0, 1.0);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; @@ -50329,9 +50657,9 @@ var lineGradientFrag = "uniform lowp float u_device_pixel_ratio;\nuniform sample var lineGradientVert = "\n// the attribute conveying progress along a line is scaled to [0, 2^15)\n#define MAX_LINE_DISTANCE 32767.0\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\nattribute vec2 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform lowp float u_device_pixel_ratio;\nuniform vec2 u_units_to_pixels;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_gamma_scale;\nvarying highp float v_lineprogress;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float width\n\n // the distance over which the line edge fades out.\n // Retina devices need a smaller distance to avoid aliasing.\n float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0;\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n\n v_lineprogress = (floor(a_data.z / 4.0) + a_data.w * 64.0) * 2.0 / MAX_LINE_DISTANCE;\n\n vec2 pos = floor(a_pos_normal * 0.5);\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n // We store these in the least significant bit of a_pos_normal\n mediump vec2 normal = a_pos_normal - 2.0 * pos;\n normal.y = normal.y * 2.0 - 1.0;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + (halfwidth == 0.0 ? 0.0 : ANTIALIASING);\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_width2 = vec2(outset, inset);\n}\n"; -var linePatternFrag = "uniform lowp float u_device_pixel_ratio;\nuniform vec2 u_texsize;\nuniform float u_fade;\nuniform mediump vec4 u_scale;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float pixelRatio = u_scale.x;\n float tileZoomRatio = u_scale.y;\n float fromScale = u_scale.z;\n float toScale = u_scale.w;\n\n vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);\n vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);\n\n vec2 pattern_size_a = vec2(display_size_a.x * fromScale / tileZoomRatio, display_size_a.y);\n vec2 pattern_size_b = vec2(display_size_b.x * toScale / tileZoomRatio, display_size_b.y);\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n float x_a = mod(v_linesofar / pattern_size_a.x, 1.0);\n float x_b = mod(v_linesofar / pattern_size_b.x, 1.0);\n\n // v_normal.y is 0 at the midpoint of the line, -1 at the lower edge, 1 at the upper edge\n // we clamp the line width outset to be between 0 and half the pattern height plus padding (2.0)\n // to ensure we don't sample outside the designated symbol on the sprite sheet.\n // 0.5 is added to shift the component to be bounded between 0 and 1 for interpolation of\n // the texture coordinate\n float y_a = 0.5 + (v_normal.y * clamp(v_width2.s, 0.0, (pattern_size_a.y + 2.0) / 2.0) / pattern_size_a.y);\n float y_b = 0.5 + (v_normal.y * clamp(v_width2.s, 0.0, (pattern_size_b.y + 2.0) / 2.0) / pattern_size_b.y);\n vec2 pos_a = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, vec2(x_a, y_a));\n vec2 pos_b = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, vec2(x_b, y_b));\n\n vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);\n\n gl_FragColor = color * alpha * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; +var linePatternFrag = "uniform lowp float u_device_pixel_ratio;\nuniform vec2 u_texsize;\nuniform float u_fade;\nuniform mediump vec3 u_scale;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\nvarying float v_width;\n\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n vec2 pattern_tl_a = pattern_from.xy;\n vec2 pattern_br_a = pattern_from.zw;\n vec2 pattern_tl_b = pattern_to.xy;\n vec2 pattern_br_b = pattern_to.zw;\n\n float tileZoomRatio = u_scale.x;\n float fromScale = u_scale.y;\n float toScale = u_scale.z;\n\n vec2 display_size_a = (pattern_br_a - pattern_tl_a) / pixel_ratio_from;\n vec2 display_size_b = (pattern_br_b - pattern_tl_b) / pixel_ratio_to;\n\n vec2 pattern_size_a = vec2(display_size_a.x * fromScale / tileZoomRatio, display_size_a.y);\n vec2 pattern_size_b = vec2(display_size_b.x * toScale / tileZoomRatio, display_size_b.y);\n\n float aspect_a = display_size_a.y / v_width;\n float aspect_b = display_size_b.y / v_width;\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n float x_a = mod(v_linesofar / pattern_size_a.x * aspect_a, 1.0);\n float x_b = mod(v_linesofar / pattern_size_b.x * aspect_b, 1.0);\n\n float y = 0.5 * v_normal.y + 0.5;\n\n vec2 texel_size = 1.0 / u_texsize;\n\n vec2 pos_a = mix(pattern_tl_a * texel_size - texel_size, pattern_br_a * texel_size + texel_size, vec2(x_a, y));\n vec2 pos_b = mix(pattern_tl_b * texel_size - texel_size, pattern_br_b * texel_size + texel_size, vec2(x_b, y));\n\n vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);\n\n gl_FragColor = color * alpha * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; -var linePatternVert = "// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\nattribute vec2 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform vec2 u_units_to_pixels;\nuniform mediump float u_ratio;\nuniform lowp float u_device_pixel_ratio;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize mediump float width\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n\n // the distance over which the line edge fades out.\n // Retina devices need a smaller distance to avoid aliasing.\n float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0;\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n // float tileRatio = u_scale.y;\n vec2 pos = floor(a_pos_normal * 0.5);\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n // We store these in the least significant bit of a_pos_normal\n mediump vec2 normal = a_pos_normal - 2.0 * pos;\n normal.y = normal.y * 2.0 - 1.0;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + (halfwidth == 0.0 ? 0.0 : ANTIALIASING);\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_linesofar = a_linesofar;\n v_width2 = vec2(outset, inset);\n}\n"; +var linePatternVert = "// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\nattribute vec2 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform vec2 u_units_to_pixels;\nuniform mediump float u_ratio;\nuniform lowp float u_device_pixel_ratio;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\nvarying float v_width;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float pixel_ratio_from\n#pragma mapbox: define lowp float pixel_ratio_to\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize mediump float width\n #pragma mapbox: initialize lowp float floorwidth\n #pragma mapbox: initialize mediump vec4 pattern_from\n #pragma mapbox: initialize mediump vec4 pattern_to\n #pragma mapbox: initialize lowp float pixel_ratio_from\n #pragma mapbox: initialize lowp float pixel_ratio_to\n\n // the distance over which the line edge fades out.\n // Retina devices need a smaller distance to avoid aliasing.\n float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0;\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n // float tileRatio = u_scale.x;\n vec2 pos = floor(a_pos_normal * 0.5);\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n // We store these in the least significant bit of a_pos_normal\n mediump vec2 normal = a_pos_normal - 2.0 * pos;\n normal.y = normal.y * 2.0 - 1.0;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + (halfwidth == 0.0 ? 0.0 : ANTIALIASING);\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_linesofar = a_linesofar;\n v_width2 = vec2(outset, inset);\n v_width = floorwidth;\n}\n"; var lineSDFFrag = "\nuniform lowp float u_device_pixel_ratio;\nuniform sampler2D u_image;\nuniform float u_sdfgamma;\nuniform float u_mix;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying vec2 v_tex_a;\nvarying vec2 v_tex_b;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float width\n #pragma mapbox: initialize lowp float floorwidth\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n float sdfdist_a = texture2D(u_image, v_tex_a).a;\n float sdfdist_b = texture2D(u_image, v_tex_b).a;\n float sdfdist = mix(sdfdist_a, sdfdist_b, u_mix);\n alpha *= smoothstep(0.5 - u_sdfgamma / floorwidth, 0.5 + u_sdfgamma / floorwidth, sdfdist);\n\n gl_FragColor = color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n"; @@ -50814,8 +51142,7 @@ function patternUniformValues(crossfade , painter , return { 'u_image': 0, 'u_texsize': tile.imageAtlasTexture.size, - // this assumes all images in the icon atlas texture have the same pixel ratio - 'u_scale': [performance.browser.devicePixelRatio, tileRatio, crossfade.fromScale, crossfade.toScale], + 'u_scale': [tileRatio, crossfade.fromScale, crossfade.toScale], 'u_fade': crossfade.t, // split the pixel coord into two pairs of 16 bit numbers. The glsl spec only guarantees 16 bits of precision. 'u_pixel_coord_upper': [pixelX >> 16, pixelY >> 16], @@ -50914,7 +51241,7 @@ var fillExtrusionPatternUniforms = function (context , locations 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_pixel_coord_upper': new performance.Uniform2f(context, locations.u_pixel_coord_upper), 'u_pixel_coord_lower': new performance.Uniform2f(context, locations.u_pixel_coord_lower), - 'u_scale': new performance.Uniform4f(context, locations.u_scale), + 'u_scale': new performance.Uniform3f(context, locations.u_scale), 'u_fade': new performance.Uniform1f(context, locations.u_fade), 'u_opacity': new performance.Uniform1f(context, locations.u_opacity) }); }; @@ -51012,7 +51339,7 @@ var fillPatternUniforms = function (context , locations 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_pixel_coord_upper': new performance.Uniform2f(context, locations.u_pixel_coord_upper), 'u_pixel_coord_lower': new performance.Uniform2f(context, locations.u_pixel_coord_lower), - 'u_scale': new performance.Uniform4f(context, locations.u_scale), + 'u_scale': new performance.Uniform3f(context, locations.u_scale), 'u_fade': new performance.Uniform1f(context, locations.u_fade) }); }; @@ -51029,7 +51356,7 @@ var fillOutlinePatternUniforms = function (context , locations 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_pixel_coord_upper': new performance.Uniform2f(context, locations.u_pixel_coord_upper), 'u_pixel_coord_lower': new performance.Uniform2f(context, locations.u_pixel_coord_lower), - 'u_scale': new performance.Uniform4f(context, locations.u_scale), + 'u_scale': new performance.Uniform3f(context, locations.u_scale), 'u_fade': new performance.Uniform1f(context, locations.u_fade) }); }; @@ -51169,18 +51496,28 @@ var collisionUniformValues = function ( - + + + var debugUniforms = function (context , locations ) { return ({ 'u_color': new performance.UniformColor(context, locations.u_color), - 'u_matrix': new performance.UniformMatrix4f(context, locations.u_matrix) + 'u_matrix': new performance.UniformMatrix4f(context, locations.u_matrix), + 'u_overlay': new performance.Uniform1i(context, locations.u_overlay), + 'u_overlay_scale': new performance.Uniform1f(context, locations.u_overlay_scale), }); }; -var debugUniformValues = function (matrix , color ) { return ({ +var debugUniformValues = function (matrix , color , scaleRatio) { + if ( scaleRatio === void 0 ) scaleRatio = 1; + + return ({ 'u_matrix': matrix, - 'u_color': color -}); }; + 'u_color': color, + 'u_overlay': 0, + 'u_overlay_scale': scaleRatio +}); +}; // @@ -51442,7 +51779,7 @@ var linePatternUniforms = function (context , locations 'u_device_pixel_ratio': new performance.Uniform1f(context, locations.u_device_pixel_ratio), 'u_image': new performance.Uniform1i(context, locations.u_image), 'u_units_to_pixels': new performance.Uniform2f(context, locations.u_units_to_pixels), - 'u_scale': new performance.Uniform4f(context, locations.u_scale), + 'u_scale': new performance.Uniform3f(context, locations.u_scale), 'u_fade': new performance.Uniform1f(context, locations.u_fade) }); }; @@ -51503,8 +51840,7 @@ var linePatternUniformValues = function ( 'u_ratio': 1 / pixelsToTileUnits(tile, 1, transform.zoom), 'u_device_pixel_ratio': performance.browser.devicePixelRatio, 'u_image': 0, - // this assumes all images in the icon atlas texture have the same pixel ratio - 'u_scale': [performance.browser.devicePixelRatio, tileZoomRatio, crossfade.fromScale, crossfade.toScale], + 'u_scale': [tileZoomRatio, crossfade.fromScale, crossfade.toScale], 'u_fade': crossfade.t, 'u_units_to_pixels': [ 1 / transform.pixelsToGLUnits[0], @@ -51723,7 +52059,7 @@ var symbolIconUniforms = function (context , locations 'u_matrix': new performance.UniformMatrix4f(context, locations.u_matrix), 'u_label_plane_matrix': new performance.UniformMatrix4f(context, locations.u_label_plane_matrix), 'u_coord_matrix': new performance.UniformMatrix4f(context, locations.u_coord_matrix), - 'u_is_text': new performance.Uniform1f(context, locations.u_is_text), + 'u_is_text': new performance.Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new performance.Uniform1i(context, locations.u_pitch_with_map), 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_texture': new performance.Uniform1i(context, locations.u_texture) @@ -51742,13 +52078,13 @@ var symbolSDFUniforms = function (context , locations ) 'u_matrix': new performance.UniformMatrix4f(context, locations.u_matrix), 'u_label_plane_matrix': new performance.UniformMatrix4f(context, locations.u_label_plane_matrix), 'u_coord_matrix': new performance.UniformMatrix4f(context, locations.u_coord_matrix), - 'u_is_text': new performance.Uniform1f(context, locations.u_is_text), + 'u_is_text': new performance.Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new performance.Uniform1i(context, locations.u_pitch_with_map), 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_texture': new performance.Uniform1i(context, locations.u_texture), 'u_gamma_scale': new performance.Uniform1f(context, locations.u_gamma_scale), 'u_device_pixel_ratio': new performance.Uniform1f(context, locations.u_device_pixel_ratio), - 'u_is_halo': new performance.Uniform1f(context, locations.u_is_halo) + 'u_is_halo': new performance.Uniform1i(context, locations.u_is_halo) }); }; var symbolTextAndIconUniforms = function (context , locations ) { return ({ @@ -51764,7 +52100,7 @@ var symbolTextAndIconUniforms = function (context , locations 'u_matrix': new performance.UniformMatrix4f(context, locations.u_matrix), 'u_label_plane_matrix': new performance.UniformMatrix4f(context, locations.u_label_plane_matrix), 'u_coord_matrix': new performance.UniformMatrix4f(context, locations.u_coord_matrix), - 'u_is_text': new performance.Uniform1f(context, locations.u_is_text), + 'u_is_text': new performance.Uniform1i(context, locations.u_is_text), 'u_pitch_with_map': new performance.Uniform1i(context, locations.u_pitch_with_map), 'u_texsize': new performance.Uniform2f(context, locations.u_texsize), 'u_texsize_icon': new performance.Uniform2f(context, locations.u_texsize_icon), @@ -51772,7 +52108,7 @@ var symbolTextAndIconUniforms = function (context , locations 'u_texture_icon': new performance.Uniform1i(context, locations.u_texture_icon), 'u_gamma_scale': new performance.Uniform1f(context, locations.u_gamma_scale), 'u_device_pixel_ratio': new performance.Uniform1f(context, locations.u_device_pixel_ratio), - 'u_is_halo': new performance.Uniform1f(context, locations.u_is_halo) + 'u_is_halo': new performance.Uniform1i(context, locations.u_is_halo) }); }; var symbolIconUniformValues = function ( @@ -52027,7 +52363,7 @@ var identityMat4 = performance.identity(new Float32Array(16)); -function drawSymbols(painter , sourceCache , layer , coords , variableOffsets ) { +function drawSymbols(painter , sourceCache , layer , coords , variableOffsets ) { if (painter.renderPass !== 'translucent') { return; } // Disable the stencil test so that labels aren't clipped to tile boundaries. @@ -52496,7 +52832,6 @@ function drawHeatmap(painter , sourceCache , layer var context = painter.context; var gl = context.gl; - var depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly); // Allow kernels to be drawn across boundaries, so that // large kernels are not clipped to tiles var stencilMode = StencilMode.disabled; @@ -52524,7 +52859,7 @@ function drawHeatmap(painter , sourceCache , layer var ref = painter.transform; var zoom = ref.zoom; - program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, + program.draw(context, gl.TRIANGLES, DepthMode.disabled, stencilMode, colorMode, CullFaceMode.disabled, heatmapUniformValues(coord.posMatrix, tile, zoom, layer.paint.get('heatmap-intensity')), layer.id, bucket.layoutVertexBuffer, bucket.indexBuffer, @@ -52557,7 +52892,7 @@ function bindFramebuffer(context, painter, layer) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - fbo = layer.heatmapFbo = context.createFramebuffer(painter.width / 4, painter.height / 4); + fbo = layer.heatmapFbo = context.createFramebuffer(painter.width / 4, painter.height / 4, false); bindTextureToFramebuffer(context, painter, texture, fbo); @@ -52971,7 +53306,7 @@ function prepareHillshade(painter, tile, layer, sourceMaxZoom, depthMode, stenci var renderTexture = new performance.Texture(context, {width: tileSize, height: tileSize, data: null}, gl.RGBA); renderTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE); - fbo = tile.fbo = context.createFramebuffer(tileSize, tileSize); + fbo = tile.fbo = context.createFramebuffer(tileSize, tileSize, true); fbo.colorAttachment.set(renderTexture.texture); } @@ -53150,6 +53485,55 @@ function drawBackground(painter , sourceCache , layer // +var topColor = new performance.Color(1, 0, 0, 1); +var btmColor = new performance.Color(0, 1, 0, 1); +var leftColor = new performance.Color(0, 0, 1, 1); +var rightColor = new performance.Color(1, 0, 1, 1); +var centerColor = new performance.Color(0, 1, 1, 1); + +function drawDebugPadding(painter ) { + var padding = painter.transform.padding; + var lineWidth = 3; + // Top + drawHorizontalLine(painter, painter.transform.height - (padding.top || 0), lineWidth, topColor); + // Bottom + drawHorizontalLine(painter, padding.bottom || 0, lineWidth, btmColor); + // Left + drawVerticalLine(painter, padding.left || 0, lineWidth, leftColor); + // Right + drawVerticalLine(painter, painter.transform.width - (padding.right || 0), lineWidth, rightColor); + // Center + var center = painter.transform.centerPoint; + drawCrosshair(painter, center.x, painter.transform.height - center.y, centerColor); +} + +function drawCrosshair(painter , x , y , color ) { + var size = 20; + var lineWidth = 2; + //Vertical line + drawDebugSSRect(painter, x - lineWidth / 2, y - size / 2, lineWidth, size, color); + //Horizontal line + drawDebugSSRect(painter, x - size / 2, y - lineWidth / 2, size, lineWidth, color); +} + +function drawHorizontalLine(painter , y , lineWidth , color ) { + drawDebugSSRect(painter, 0, y + lineWidth / 2, painter.transform.width, lineWidth, color); +} + +function drawVerticalLine(painter , x , lineWidth , color ) { + drawDebugSSRect(painter, x - lineWidth / 2, 0, lineWidth, painter.transform.height, color); +} + +function drawDebugSSRect(painter , x , y , width , height , color ) { + var context = painter.context; + var gl = context.gl; + + gl.enable(gl.SCISSOR_TEST); + gl.scissor(x * performance.browser.devicePixelRatio, y * performance.browser.devicePixelRatio, width * performance.browser.devicePixelRatio, height * performance.browser.devicePixelRatio); + context.clear({color: color}); + gl.disable(gl.SCISSOR_TEST); +} + function drawDebug(painter , sourceCache , coords ) { for (var i = 0; i < coords.length; i++) { drawDebugTile(painter, sourceCache, coords[i]); @@ -53168,6 +53552,10 @@ function drawDebugTile(painter, sourceCache, coord ) { var colorMode = painter.colorModeForRenderPass(); var id = '$debug'; + context.activeTexture.set(gl.TEXTURE0); + // Bind the empty texture for drawing outlines + painter.emptyTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE); + program.draw(context, gl.LINE_STRIP, depthMode, stencilMode, colorMode, CullFaceMode.disabled, debugUniformValues(posMatrix, performance.Color.red), id, painter.debugBuffer, painter.tileBorderIndexBuffer, painter.debugSegments); @@ -53176,188 +53564,37 @@ function drawDebugTile(painter, sourceCache, coord ) { var tileByteLength = (tileRawData && tileRawData.byteLength) || 0; var tileSizeKb = Math.floor(tileByteLength / 1024); var tileSize = sourceCache.getTile(coord).tileSize; - var scaleRatio = 512 / Math.min(tileSize, 512); + var scaleRatio = (512 / Math.min(tileSize, 512) * (coord.overscaledZ / painter.transform.zoom)) * 0.5; var tileIdText = coord.canonical.toString(); if (coord.overscaledZ !== coord.canonical.z) { tileIdText += " => " + (coord.overscaledZ); } - var vertices = createTextVertices((tileIdText + " " + tileSizeKb + "kb"), 50, 200 * scaleRatio, 5 * scaleRatio); - var debugTextArray = new performance.StructArrayLayout2i4(); - var debugTextIndices = new performance.StructArrayLayout2ui4(); - for (var v = 0; v < vertices.length; v += 2) { - debugTextArray.emplaceBack(vertices[v], vertices[v + 1]); - debugTextIndices.emplaceBack(v, v + 1); - } - var debugTextBuffer = context.createVertexBuffer(debugTextArray, posAttributes.members); - var debugTextIndexBuffer = context.createIndexBuffer(debugTextIndices); - var debugTextSegment = performance.SegmentVector.simpleSegment(0, 0, debugTextArray.length / 2, debugTextArray.length / 2); - - // Draw the halo with multiple 1px lines instead of one wider line because - // the gl spec doesn't guarantee support for lines with width > 1. - var onePixel = performance.EXTENT / (Math.pow(2, painter.transform.zoom - coord.overscaledZ) * tileSize * scaleRatio); - - var haloWidth = 1; - var translations = []; - for (var x = -haloWidth; x <= haloWidth; x++) { - for (var y = -haloWidth; y <= haloWidth; y++) { - if (x === 0 && y === 0) { - // don't draw the halo at 0,0 since the text is drawn there - break; - } + var tileLabel = tileIdText + " " + tileSizeKb + "kb"; + drawTextToOverlay(painter, tileLabel); - translations.push([x, y]); - } - } - - for (var i = 0; i < translations.length; i++) { - var translation = translations[i]; - - program.draw(context, gl.LINES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - debugUniformValues( - performance.translate([], posMatrix, [ - onePixel * translation[0], - onePixel * translation[1], 0]), - performance.Color.white), - id, debugTextBuffer, debugTextIndexBuffer, debugTextSegment); - } - - program.draw(context, gl.LINES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - debugUniformValues(posMatrix, performance.Color.black), id, - debugTextBuffer, debugTextIndexBuffer, debugTextSegment); - - debugTextBuffer.destroy(); - debugTextIndexBuffer.destroy(); - debugTextSegment.destroy(); -} - -// Font data From Hershey Simplex Font -// http://paulbourke.net/dataformats/hershey/ -var simplexFont = { - " ": [16, []], - "!": [10, [5, 21, 5, 7, -1, -1, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2]], - "\"": [16, [4, 21, 4, 14, -1, -1, 12, 21, 12, 14]], - "#": [21, [11, 25, 4, -7, -1, -1, 17, 25, 10, -7, -1, -1, 4, 12, 18, 12, -1, -1, 3, 6, 17, 6]], - "$": [20, [8, 25, 8, -4, -1, -1, 12, 25, 12, -4, -1, -1, 17, 18, 15, 20, 12, 21, 8, 21, 5, 20, 3, 18, 3, 16, 4, 14, 5, 13, 7, 12, 13, 10, 15, 9, 16, 8, 17, 6, 17, 3, 15, 1, 12, 0, 8, 0, 5, 1, 3, 3]], - "%": [24, [21, 21, 3, 0, -1, -1, 8, 21, 10, 19, 10, 17, 9, 15, 7, 14, 5, 14, 3, 16, 3, 18, 4, 20, 6, 21, 8, 21, 10, 20, 13, 19, 16, 19, 19, 20, 21, 21, -1, -1, 17, 7, 15, 6, 14, 4, 14, 2, 16, 0, 18, 0, 20, 1, 21, 3, 21, 5, 19, 7, 17, 7]], - "&": [26, [23, 12, 23, 13, 22, 14, 21, 14, 20, 13, 19, 11, 17, 6, 15, 3, 13, 1, 11, 0, 7, 0, 5, 1, 4, 2, 3, 4, 3, 6, 4, 8, 5, 9, 12, 13, 13, 14, 14, 16, 14, 18, 13, 20, 11, 21, 9, 20, 8, 18, 8, 16, 9, 13, 11, 10, 16, 3, 18, 1, 20, 0, 22, 0, 23, 1, 23, 2]], - "'": [10, [5, 19, 4, 20, 5, 21, 6, 20, 6, 18, 5, 16, 4, 15]], - "(": [14, [11, 25, 9, 23, 7, 20, 5, 16, 4, 11, 4, 7, 5, 2, 7, -2, 9, -5, 11, -7]], - ")": [14, [3, 25, 5, 23, 7, 20, 9, 16, 10, 11, 10, 7, 9, 2, 7, -2, 5, -5, 3, -7]], - "*": [16, [8, 21, 8, 9, -1, -1, 3, 18, 13, 12, -1, -1, 13, 18, 3, 12]], - "+": [26, [13, 18, 13, 0, -1, -1, 4, 9, 22, 9]], - ",": [10, [6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6, -1, 5, -3, 4, -4]], - "-": [26, [4, 9, 22, 9]], - ".": [10, [5, 2, 4, 1, 5, 0, 6, 1, 5, 2]], - "/": [22, [20, 25, 2, -7]], - "0": [20, [9, 21, 6, 20, 4, 17, 3, 12, 3, 9, 4, 4, 6, 1, 9, 0, 11, 0, 14, 1, 16, 4, 17, 9, 17, 12, 16, 17, 14, 20, 11, 21, 9, 21]], - "1": [20, [6, 17, 8, 18, 11, 21, 11, 0]], - "2": [20, [4, 16, 4, 17, 5, 19, 6, 20, 8, 21, 12, 21, 14, 20, 15, 19, 16, 17, 16, 15, 15, 13, 13, 10, 3, 0, 17, 0]], - "3": [20, [5, 21, 16, 21, 10, 13, 13, 13, 15, 12, 16, 11, 17, 8, 17, 6, 16, 3, 14, 1, 11, 0, 8, 0, 5, 1, 4, 2, 3, 4]], - "4": [20, [13, 21, 3, 7, 18, 7, -1, -1, 13, 21, 13, 0]], - "5": [20, [15, 21, 5, 21, 4, 12, 5, 13, 8, 14, 11, 14, 14, 13, 16, 11, 17, 8, 17, 6, 16, 3, 14, 1, 11, 0, 8, 0, 5, 1, 4, 2, 3, 4]], - "6": [20, [16, 18, 15, 20, 12, 21, 10, 21, 7, 20, 5, 17, 4, 12, 4, 7, 5, 3, 7, 1, 10, 0, 11, 0, 14, 1, 16, 3, 17, 6, 17, 7, 16, 10, 14, 12, 11, 13, 10, 13, 7, 12, 5, 10, 4, 7]], - "7": [20, [17, 21, 7, 0, -1, -1, 3, 21, 17, 21]], - "8": [20, [8, 21, 5, 20, 4, 18, 4, 16, 5, 14, 7, 13, 11, 12, 14, 11, 16, 9, 17, 7, 17, 4, 16, 2, 15, 1, 12, 0, 8, 0, 5, 1, 4, 2, 3, 4, 3, 7, 4, 9, 6, 11, 9, 12, 13, 13, 15, 14, 16, 16, 16, 18, 15, 20, 12, 21, 8, 21]], - "9": [20, [16, 14, 15, 11, 13, 9, 10, 8, 9, 8, 6, 9, 4, 11, 3, 14, 3, 15, 4, 18, 6, 20, 9, 21, 10, 21, 13, 20, 15, 18, 16, 14, 16, 9, 15, 4, 13, 1, 10, 0, 8, 0, 5, 1, 4, 3]], - ":": [10, [5, 14, 4, 13, 5, 12, 6, 13, 5, 14, -1, -1, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2]], - ";": [10, [5, 14, 4, 13, 5, 12, 6, 13, 5, 14, -1, -1, 6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6, -1, 5, -3, 4, -4]], - "<": [24, [20, 18, 4, 9, 20, 0]], - "=": [26, [4, 12, 22, 12, -1, -1, 4, 6, 22, 6]], - ">": [24, [4, 18, 20, 9, 4, 0]], - "?": [18, [3, 16, 3, 17, 4, 19, 5, 20, 7, 21, 11, 21, 13, 20, 14, 19, 15, 17, 15, 15, 14, 13, 13, 12, 9, 10, 9, 7, -1, -1, 9, 2, 8, 1, 9, 0, 10, 1, 9, 2]], - "@": [27, [18, 13, 17, 15, 15, 16, 12, 16, 10, 15, 9, 14, 8, 11, 8, 8, 9, 6, 11, 5, 14, 5, 16, 6, 17, 8, -1, -1, 12, 16, 10, 14, 9, 11, 9, 8, 10, 6, 11, 5, -1, -1, 18, 16, 17, 8, 17, 6, 19, 5, 21, 5, 23, 7, 24, 10, 24, 12, 23, 15, 22, 17, 20, 19, 18, 20, 15, 21, 12, 21, 9, 20, 7, 19, 5, 17, 4, 15, 3, 12, 3, 9, 4, 6, 5, 4, 7, 2, 9, 1, 12, 0, 15, 0, 18, 1, 20, 2, 21, 3, -1, -1, 19, 16, 18, 8, 18, 6, 19, 5]], - "A": [18, [9, 21, 1, 0, -1, -1, 9, 21, 17, 0, -1, -1, 4, 7, 14, 7]], - "B": [21, [4, 21, 4, 0, -1, -1, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 15, 17, 13, 16, 12, 13, 11, -1, -1, 4, 11, 13, 11, 16, 10, 17, 9, 18, 7, 18, 4, 17, 2, 16, 1, 13, 0, 4, 0]], - "C": [21, [18, 16, 17, 18, 15, 20, 13, 21, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5]], - "D": [21, [4, 21, 4, 0, -1, -1, 4, 21, 11, 21, 14, 20, 16, 18, 17, 16, 18, 13, 18, 8, 17, 5, 16, 3, 14, 1, 11, 0, 4, 0]], - "E": [19, [4, 21, 4, 0, -1, -1, 4, 21, 17, 21, -1, -1, 4, 11, 12, 11, -1, -1, 4, 0, 17, 0]], - "F": [18, [4, 21, 4, 0, -1, -1, 4, 21, 17, 21, -1, -1, 4, 11, 12, 11]], - "G": [21, [18, 16, 17, 18, 15, 20, 13, 21, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 18, 8, -1, -1, 13, 8, 18, 8]], - "H": [22, [4, 21, 4, 0, -1, -1, 18, 21, 18, 0, -1, -1, 4, 11, 18, 11]], - "I": [8, [4, 21, 4, 0]], - "J": [16, [12, 21, 12, 5, 11, 2, 10, 1, 8, 0, 6, 0, 4, 1, 3, 2, 2, 5, 2, 7]], - "K": [21, [4, 21, 4, 0, -1, -1, 18, 21, 4, 7, -1, -1, 9, 12, 18, 0]], - "L": [17, [4, 21, 4, 0, -1, -1, 4, 0, 16, 0]], - "M": [24, [4, 21, 4, 0, -1, -1, 4, 21, 12, 0, -1, -1, 20, 21, 12, 0, -1, -1, 20, 21, 20, 0]], - "N": [22, [4, 21, 4, 0, -1, -1, 4, 21, 18, 0, -1, -1, 18, 21, 18, 0]], - "O": [22, [9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 19, 8, 19, 13, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21]], - "P": [21, [4, 21, 4, 0, -1, -1, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 14, 17, 12, 16, 11, 13, 10, 4, 10]], - "Q": [22, [9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 19, 8, 19, 13, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21, -1, -1, 12, 4, 18, -2]], - "R": [21, [4, 21, 4, 0, -1, -1, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 15, 17, 13, 16, 12, 13, 11, 4, 11, -1, -1, 11, 11, 18, 0]], - "S": [20, [17, 18, 15, 20, 12, 21, 8, 21, 5, 20, 3, 18, 3, 16, 4, 14, 5, 13, 7, 12, 13, 10, 15, 9, 16, 8, 17, 6, 17, 3, 15, 1, 12, 0, 8, 0, 5, 1, 3, 3]], - "T": [16, [8, 21, 8, 0, -1, -1, 1, 21, 15, 21]], - "U": [22, [4, 21, 4, 6, 5, 3, 7, 1, 10, 0, 12, 0, 15, 1, 17, 3, 18, 6, 18, 21]], - "V": [18, [1, 21, 9, 0, -1, -1, 17, 21, 9, 0]], - "W": [24, [2, 21, 7, 0, -1, -1, 12, 21, 7, 0, -1, -1, 12, 21, 17, 0, -1, -1, 22, 21, 17, 0]], - "X": [20, [3, 21, 17, 0, -1, -1, 17, 21, 3, 0]], - "Y": [18, [1, 21, 9, 11, 9, 0, -1, -1, 17, 21, 9, 11]], - "Z": [20, [17, 21, 3, 0, -1, -1, 3, 21, 17, 21, -1, -1, 3, 0, 17, 0]], - "[": [14, [4, 25, 4, -7, -1, -1, 5, 25, 5, -7, -1, -1, 4, 25, 11, 25, -1, -1, 4, -7, 11, -7]], - "\\": [14, [0, 21, 14, -3]], - "]": [14, [9, 25, 9, -7, -1, -1, 10, 25, 10, -7, -1, -1, 3, 25, 10, 25, -1, -1, 3, -7, 10, -7]], - "^": [16, [6, 15, 8, 18, 10, 15, -1, -1, 3, 12, 8, 17, 13, 12, -1, -1, 8, 17, 8, 0]], - "_": [16, [0, -2, 16, -2]], - "`": [10, [6, 21, 5, 20, 4, 18, 4, 16, 5, 15, 6, 16, 5, 17]], - "a": [19, [15, 14, 15, 0, -1, -1, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "b": [19, [4, 21, 4, 0, -1, -1, 4, 11, 6, 13, 8, 14, 11, 14, 13, 13, 15, 11, 16, 8, 16, 6, 15, 3, 13, 1, 11, 0, 8, 0, 6, 1, 4, 3]], - "c": [18, [15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "d": [19, [15, 21, 15, 0, -1, -1, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "e": [18, [3, 8, 15, 8, 15, 10, 14, 12, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "f": [12, [10, 21, 8, 21, 6, 20, 5, 17, 5, 0, -1, -1, 2, 14, 9, 14]], - "g": [19, [15, 14, 15, -2, 14, -5, 13, -6, 11, -7, 8, -7, 6, -6, -1, -1, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "h": [19, [4, 21, 4, 0, -1, -1, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0]], - "i": [8, [3, 21, 4, 20, 5, 21, 4, 22, 3, 21, -1, -1, 4, 14, 4, 0]], - "j": [10, [5, 21, 6, 20, 7, 21, 6, 22, 5, 21, -1, -1, 6, 14, 6, -3, 5, -6, 3, -7, 1, -7]], - "k": [17, [4, 21, 4, 0, -1, -1, 14, 14, 4, 4, -1, -1, 8, 8, 15, 0]], - "l": [8, [4, 21, 4, 0]], - "m": [30, [4, 14, 4, 0, -1, -1, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0, -1, -1, 15, 10, 18, 13, 20, 14, 23, 14, 25, 13, 26, 10, 26, 0]], - "n": [19, [4, 14, 4, 0, -1, -1, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0]], - "o": [19, [8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3, 16, 6, 16, 8, 15, 11, 13, 13, 11, 14, 8, 14]], - "p": [19, [4, 14, 4, -7, -1, -1, 4, 11, 6, 13, 8, 14, 11, 14, 13, 13, 15, 11, 16, 8, 16, 6, 15, 3, 13, 1, 11, 0, 8, 0, 6, 1, 4, 3]], - "q": [19, [15, 14, 15, -7, -1, -1, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3]], - "r": [13, [4, 14, 4, 0, -1, -1, 4, 8, 5, 11, 7, 13, 9, 14, 12, 14]], - "s": [17, [14, 11, 13, 13, 10, 14, 7, 14, 4, 13, 3, 11, 4, 9, 6, 8, 11, 7, 13, 6, 14, 4, 14, 3, 13, 1, 10, 0, 7, 0, 4, 1, 3, 3]], - "t": [12, [5, 21, 5, 4, 6, 1, 8, 0, 10, 0, -1, -1, 2, 14, 9, 14]], - "u": [19, [4, 14, 4, 4, 5, 1, 7, 0, 10, 0, 12, 1, 15, 4, -1, -1, 15, 14, 15, 0]], - "v": [16, [2, 14, 8, 0, -1, -1, 14, 14, 8, 0]], - "w": [22, [3, 14, 7, 0, -1, -1, 11, 14, 7, 0, -1, -1, 11, 14, 15, 0, -1, -1, 19, 14, 15, 0]], - "x": [17, [3, 14, 14, 0, -1, -1, 14, 14, 3, 0]], - "y": [16, [2, 14, 8, 0, -1, -1, 14, 14, 8, 0, 6, -4, 4, -6, 2, -7, 1, -7]], - "z": [17, [14, 14, 3, 0, -1, -1, 3, 14, 14, 14, -1, -1, 3, 0, 14, 0]], - "{": [14, [9, 25, 7, 24, 6, 23, 5, 21, 5, 19, 6, 17, 7, 16, 8, 14, 8, 12, 6, 10, -1, -1, 7, 24, 6, 22, 6, 20, 7, 18, 8, 17, 9, 15, 9, 13, 8, 11, 4, 9, 8, 7, 9, 5, 9, 3, 8, 1, 7, 0, 6, -2, 6, -4, 7, -6, -1, -1, 6, 8, 8, 6, 8, 4, 7, 2, 6, 1, 5, -1, 5, -3, 6, -5, 7, -6, 9, -7]], - "|": [8, [4, 25, 4, -7]], - "}": [14, [5, 25, 7, 24, 8, 23, 9, 21, 9, 19, 8, 17, 7, 16, 6, 14, 6, 12, 8, 10, -1, -1, 7, 24, 8, 22, 8, 20, 7, 18, 6, 17, 5, 15, 5, 13, 6, 11, 10, 9, 6, 7, 5, 5, 5, 3, 6, 1, 7, 0, 8, -2, 8, -4, 7, -6, -1, -1, 8, 8, 6, 6, 6, 4, 7, 2, 8, 1, 9, -1, 9, -3, 8, -5, 7, -6, 5, -7]], - "~": [24, [3, 6, 3, 8, 4, 11, 6, 12, 8, 12, 10, 11, 14, 8, 16, 7, 18, 7, 20, 8, 21, 10, -1, -1, 3, 8, 4, 10, 6, 11, 8, 11, 10, 10, 14, 7, 16, 6, 18, 6, 20, 7, 21, 10, 21, 12]] -}; - -function createTextVertices(text, left, baseline, scale) { - scale = scale || 1; - - var strokes = []; - var i, len, j, len2, glyph, x, y, prev; - - for (i = 0, len = text.length; i < len; i++) { - glyph = simplexFont[text[i]]; - if (!glyph) { continue; } - prev = null; - - for (j = 0, len2 = glyph[1].length; j < len2; j += 2) { - if (glyph[1][j] === -1 && glyph[1][j + 1] === -1) { - prev = null; + program.draw(context, gl.TRIANGLES, depthMode, stencilMode, ColorMode.alphaBlended, CullFaceMode.disabled, + debugUniformValues(posMatrix, performance.Color.transparent, scaleRatio), id, + painter.debugBuffer, painter.quadTriangleIndexBuffer, painter.debugSegments); +} - } else { - x = left + glyph[1][j] * scale; - y = baseline - glyph[1][j + 1] * scale; - if (prev) { - strokes.push(prev.x, prev.y, x, y); - } - prev = {x: x, y: y}; - } - } - left += glyph[0] * scale; - } +function drawTextToOverlay(painter , text ) { + painter.initDebugOverlayCanvas(); + var canvas = painter.debugOverlayCanvas; + var gl = painter.context.gl; + var ctx2d = painter.debugOverlayCanvas.getContext('2d'); + ctx2d.clearRect(0, 0, canvas.width, canvas.height); - return strokes; + ctx2d.shadowColor = 'white'; + ctx2d.shadowBlur = 2; + ctx2d.lineWidth = 1.5; + ctx2d.strokeStyle = 'white'; + ctx2d.textBaseline = 'top'; + ctx2d.font = "bold " + (36) + "px Open Sans, sans-serif"; + ctx2d.fillText(text, 5, 5); + ctx2d.strokeText(text, 5, 5); + + painter.debugOverlayTexture.update(canvas); + painter.debugOverlayTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE); } // @@ -53440,6 +53677,7 @@ var draw$1 = { + @@ -53465,8 +53703,6 @@ var Painter = function Painter(gl , transform ) { this.numSublayers = SourceCache.maxUnderzooming + SourceCache.maxOverzooming + 1; this.depthEpsilon = 1 / Math.pow(2, 16); - this.depthRboNeedsClear = true; - this.crossTileSymbolIndex = new CrossTileSymbolIndex(); this.gpuTimers = {}; @@ -53477,8 +53713,6 @@ var Painter = function Painter(gl , transform ) { * for a new width and height value. */ Painter.prototype.resize = function resize (width , height ) { - var gl = this.context.gl; - this.width = width * performance.browser.devicePixelRatio; this.height = height * performance.browser.devicePixelRatio; this.context.viewport.set([0, 0, this.width, this.height]); @@ -53490,11 +53724,6 @@ Painter.prototype.resize = function resize (width , height ) { this.style._layers[layerId].resize(); } } - - if (this.depthRbo) { - gl.deleteRenderbuffer(this.depthRbo); - this.depthRbo = null; - } }; Painter.prototype.setup = function setup () { @@ -53545,6 +53774,12 @@ Painter.prototype.setup = function setup () { quadTriangleIndices.emplaceBack(2, 1, 3); this.quadTriangleIndexBuffer = context.createIndexBuffer(quadTriangleIndices); + this.emptyTexture = new performance.Texture(context, { + width: 1, + height: 1, + data: new Uint8Array([0, 0, 0, 0]) + }, context.gl.RGBA); + var gl = this.context.gl; this.stencilClearMode = new StencilMode({func: gl.ALWAYS, mask: 0}, 0x0, 0xFF, gl.ZERO, gl.ZERO, gl.ZERO); }; @@ -53637,7 +53872,7 @@ Painter.prototype.stencilModeForClipping = function stencilModeForClipping (tile * * Returns [StencilMode for tile overscaleZ map, sortedCoords]. */ -Painter.prototype.stencilConfigForOverlap = function stencilConfigForOverlap (tileIDs ) { +Painter.prototype.stencilConfigForOverlap = function stencilConfigForOverlap (tileIDs ) { var obj; var gl = this.context.gl; @@ -53714,9 +53949,9 @@ Painter.prototype.render = function render (style , options ) { } } - var coordsAscending = {}; - var coordsDescending = {}; - var coordsDescendingSymbol = {}; + var coordsAscending = {}; + var coordsDescending = {}; + var coordsDescendingSymbol = {}; for (var id$1 in sourceCaches) { var sourceCache$1 = sourceCaches[id$1]; @@ -53739,7 +53974,6 @@ Painter.prototype.render = function render (style , options ) { // framebuffer, and then save those for rendering back to the map // later: in doing this we avoid doing expensive framebuffer restores. this.renderPass = 'offscreen'; - this.depthRboNeedsClear = true; for (var i$1 = 0, list = layerIds; i$1 < list.length; i$1 += 1) { var layerId$1 = list[i$1]; @@ -53813,19 +54047,15 @@ Painter.prototype.render = function render (style , options ) { } } + if (this.options.showPadding) { + drawDebugPadding(this); + } + // Set defaults for most GL values so that anyone using the state after the render // encounters more expected values. this.context.setDefault(); }; -Painter.prototype.setupOffscreenDepthRenderbuffer = function setupOffscreenDepthRenderbuffer () { - var context = this.context; - // All of the 3D textures will use the same depth renderbuffer. - if (!this.depthRbo) { - this.depthRbo = context.createRenderbuffer(context.gl.DEPTH_COMPONENT16, this.width, this.height); - } -}; - Painter.prototype.renderLayer = function renderLayer (painter , sourceCache , layer , coords ) { if (layer.isHidden(this.transform.zoom)) { return; } if (layer.type !== 'background' && layer.type !== 'custom' && !coords.length) { return; } @@ -53867,7 +54097,7 @@ Painter.prototype.collectGpuTimers = function collectGpuTimers () { return currentLayerTimers; }; -Painter.prototype.queryGpuTimers = function queryGpuTimers (gpuTimers ) { +Painter.prototype.queryGpuTimers = function queryGpuTimers (gpuTimers ) { var layers = {}; for (var layerId in gpuTimers) { var gpuTimer = gpuTimers[layerId]; @@ -53883,6 +54113,7 @@ Painter.prototype.queryGpuTimers = function queryGpuTimers (gpuTimers * Transform a matrix to incorporate the *-translate and *-translate-anchor properties into it. * @param inViewportPixelUnitsUnits True when the units accepted by the matrix are in viewport pixels instead of tile units. * @returns {Float32Array} matrix + * @private */ Painter.prototype.translatePosMatrix = function translatePosMatrix (matrix , tile , translate , translateAnchor , inViewportPixelUnitsUnits ) { if (!translate[0] && !translate[1]) { return matrix; } @@ -53929,6 +54160,7 @@ Painter.prototype.getTileTexture = function getTileTexture (size ) { * Checks whether a pattern image is needed, and if it is, whether it is not loaded. * * @returns true if a needed image is missing and rendering needs to be skipped. + * @private */ Painter.prototype.isPatternMissing = function isPatternMissing (image ) { if (!image) { return false; } @@ -53975,6 +54207,23 @@ Painter.prototype.setBaseState = function setBaseState () { this.context.blendEquation.set(gl.FUNC_ADD); }; +Painter.prototype.initDebugOverlayCanvas = function initDebugOverlayCanvas () { + if (this.debugOverlayCanvas == null) { + this.debugOverlayCanvas = performance.window.document.createElement('canvas'); + this.debugOverlayCanvas.width = 512; + this.debugOverlayCanvas.height = 512; + var gl = this.context.gl; + this.debugOverlayTexture = new performance.Texture(this.context, this.debugOverlayCanvas, gl.RGBA); + } +}; + +Painter.prototype.destroy = function destroy () { + this.emptyTexture.destroy(); + if (this.debugOverlayTexture) { + this.debugOverlayTexture.destroy(); + } +}; + // var Frustum = function Frustum(points_ , planes_ ) { @@ -54105,6 +54354,101 @@ Aabb.prototype.intersects = function intersects (frustum ) { // +/** + * An `EdgeInset` object represents screen space padding applied to the edges of the viewport. + * This shifts the apprent center or the vanishing point of the map. This is useful for adding floating UI elements + * on top of the map and having the vanishing point shift as UI elements resize. + * + * @param {number} [top=0] + * @param {number} [bottom=0] + * @param {number} [left=0] + * @param {number} [right=0] + */ +var EdgeInsets = function EdgeInsets(top, bottom, left, right) { + if ( top === void 0 ) top = 0; + if ( bottom === void 0 ) bottom = 0; + if ( left === void 0 ) left = 0; + if ( right === void 0 ) right = 0; + + if (isNaN(top) || top < 0 || + isNaN(bottom) || bottom < 0 || + isNaN(left) || left < 0 || + isNaN(right) || right < 0 + ) { + throw new Error('Invalid value for edge-insets, top, bottom, left and right must all be numbers'); + } + + this.top = top; + this.bottom = bottom; + this.left = left; + this.right = right; +}; + +/** + * Interpolates the inset in-place. + * This maintains the current inset value for any inset not present in `target`. + * + * @param {PaddingOptions} target + * @param {number} t + * @returns {EdgeInsets} + * @memberof EdgeInsets + */ +EdgeInsets.prototype.interpolate = function interpolate (start , target , t ) { + if (target.top != null && start.top != null) { this.top = performance.number(start.top, target.top, t); } + if (target.bottom != null && start.bottom != null) { this.bottom = performance.number(start.bottom, target.bottom, t); } + if (target.left != null && start.left != null) { this.left = performance.number(start.left, target.left, t); } + if (target.right != null && start.right != null) { this.right = performance.number(start.right, target.right, t); } + + return this; +}; + +/** + * Utility method that computes the new apprent center or vanishing point after applying insets. + * This is in pixels and with the top left being (0.0) and +y being downwards. + * + * @param {number} width + * @param {number} height + * @returns {Point} + * @memberof EdgeInsets + */ +EdgeInsets.prototype.getCenter = function getCenter (width , height ) { + // Clamp insets so they never overflow width/height and always calculate a valid center + var x = performance.clamp((this.left + width - this.right) / 2, 0, width); + var y = performance.clamp((this.top + height - this.bottom) / 2, 0, height); + + return new performance.Point(x, y); +}; + +EdgeInsets.prototype.equals = function equals (other ) { + return this.top === other.top && + this.bottom === other.bottom && + this.left === other.left && + this.right === other.right; +}; + +EdgeInsets.prototype.clone = function clone () { + return new EdgeInsets(this.top, this.bottom, this.left, this.right); +}; + +/** + * Returns the current sdtate as json, useful when you want to have a + * read-only representation of the inset. + * + * @returns {PaddingOptions} + * @memberof EdgeInsets + */ +EdgeInsets.prototype.toJSON = function toJSON () { + return { + top: this.top, + bottom: this.bottom, + left: this.left, + right: this.right + }; +}; + +// + + /** * A single transform, generally used for a single tile to be * scaled, rotated, and zoomed. @@ -54131,11 +54475,12 @@ var Transform = function Transform(minZoom , maxZoom , minPitch , ma this._fov = 0.6435011087932844; this._pitch = 0; this._unmodified = true; + this._edgeInsets = new EdgeInsets(); this._posMatrixCache = {}; this._alignedPosMatrixCache = {}; }; -var prototypeAccessors = { minZoom: { configurable: true },maxZoom: { configurable: true },minPitch: { configurable: true },maxPitch: { configurable: true },renderWorldCopies: { configurable: true },worldSize: { configurable: true },centerPoint: { configurable: true },size: { configurable: true },bearing: { configurable: true },pitch: { configurable: true },fov: { configurable: true },zoom: { configurable: true },center: { configurable: true },unmodified: { configurable: true },point: { configurable: true } }; +var prototypeAccessors = { minZoom: { configurable: true },maxZoom: { configurable: true },minPitch: { configurable: true },maxPitch: { configurable: true },renderWorldCopies: { configurable: true },worldSize: { configurable: true },centerOffset: { configurable: true },size: { configurable: true },bearing: { configurable: true },pitch: { configurable: true },fov: { configurable: true },zoom: { configurable: true },center: { configurable: true },padding: { configurable: true },centerPoint: { configurable: true },unmodified: { configurable: true },point: { configurable: true } }; Transform.prototype.clone = function clone () { var clone = new Transform(this._minZoom, this._maxZoom, this._minPitch, this.maxPitch, this._renderWorldCopies); @@ -54149,6 +54494,7 @@ Transform.prototype.clone = function clone () { clone._fov = this._fov; clone._pitch = this._pitch; clone._unmodified = this._unmodified; + clone._edgeInsets = this._edgeInsets.clone(); clone._calcMatrices(); return clone; }; @@ -54196,8 +54542,8 @@ prototypeAccessors.worldSize.get = function () { return this.tileSize * this.scale; }; -prototypeAccessors.centerPoint.get = function () { - return this.size._div(2); +prototypeAccessors.centerOffset.get = function () { + return this.centerPoint._sub(this.size._div(2)); }; prototypeAccessors.size.get = function () { @@ -54263,12 +54609,58 @@ prototypeAccessors.center.set = function (center ) { this._calcMatrices(); }; +prototypeAccessors.padding.get = function () { return this._edgeInsets.toJSON(); }; +prototypeAccessors.padding.set = function (padding ) { + if (this._edgeInsets.equals(padding)) { return; } + this._unmodified = false; + //Update edge-insets inplace + this._edgeInsets.interpolate(this._edgeInsets, padding, 1); + this._calcMatrices(); +}; + +/** + * The center of the screen in pixels with the top-left corner being (0,0) + * and +y axis pointing downwards. This accounts for padding. + * + * @readonly + * @type {Point} + * @memberof Transform + */ +prototypeAccessors.centerPoint.get = function () { + return this._edgeInsets.getCenter(this.width, this.height); +}; + +/** + * Returns if the padding params match + * + * @param {PaddingOptions} padding + * @returns {boolean} + * @memberof Transform + */ +Transform.prototype.isPaddingEqual = function isPaddingEqual (padding ) { + return this._edgeInsets.equals(padding); +}; + +/** + * Helper method to upadte edge-insets inplace + * + * @param {PaddingOptions} target + * @param {number} t + * @memberof Transform + */ +Transform.prototype.interpolatePadding = function interpolatePadding (start , target , t ) { + this._unmodified = false; + this._edgeInsets.interpolate(start, target, t); + this._constrain(); + this._calcMatrices(); +}; + /** * Return a zoom level that will cover all tiles the transform - * @param {Object} options - * @param {number} options.tileSize - * @param {boolean} options.roundZoom - * @returns {number} zoom level + * @param {Object} options options + * @param {number} options.tileSize Tile size, expressed in screen pixels. + * @param {boolean} options.roundZoom Target zoom level. If true, the value will be rounded to the closest integer. Otherwise the value will be floored. + * @returns {number} zoom level An integer zoom level at which all tiles will be visible. */ Transform.prototype.coveringZoomLevel = function coveringZoomLevel (options ) { var z = (options.roundZoom ? Math.round : Math.floor)( @@ -54318,6 +54710,7 @@ Transform.prototype.getVisibleUnwrappedCoordinates = function getVisibleUnwrappe * @param {boolean} options.reparseOverscaled * @param {boolean} options.renderWorldCopies * @returns {Array} OverscaledTileIDs + * @private */ Transform.prototype.coveringTiles = function coveringTiles ( options @@ -54340,9 +54733,10 @@ Transform.prototype.coveringTiles = function coveringTiles ( var centerPoint = [numTiles * centerCoord.x, numTiles * centerCoord.y, 0]; var cameraFrustum = Frustum.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, z); - // No change of LOD behavior for pitch lower than 60: return only tile ids from the requested zoom level + // No change of LOD behavior for pitch lower than 60 and when there is no top padding: return only tile ids from the requested zoom level var minZoom = options.minzoom || 0; - if (this.pitch <= 60.0) + // Use 0.1 as an epsilon to avoid for explicit == 0.0 floating point checks + if (this.pitch <= 60.0 && this._edgeInsets.top < 0.1) { minZoom = z; } // There should always be a certain number of maximum zoom level tiles surrounding the center location @@ -54467,6 +54861,7 @@ Transform.prototype.setLocationAtPoint = function setLocationAtPoint (lnglat * Given a location, return the screen point that corresponds to it * @param {LngLat} lnglat location * @returns {Point} screen point + * @private */ Transform.prototype.locationPoint = function locationPoint (lnglat ) { return this.coordinatePoint(this.locationCoordinate(lnglat)); @@ -54476,6 +54871,7 @@ Transform.prototype.locationPoint = function locationPoint (lnglat ) { * Given a point on screen, return its lnglat * @param {Point} p screen point * @returns {LngLat} lnglat location + * @private */ Transform.prototype.pointLocation = function pointLocation (p ) { return this.coordinateLocation(this.pointCoordinate(p)); @@ -54486,6 +54882,7 @@ Transform.prototype.pointLocation = function pointLocation (p ) { * coordinate that represents it at this transform's zoom level. * @param {LngLat} lnglat * @returns {Coordinate} + * @private */ Transform.prototype.locationCoordinate = function locationCoordinate (lnglat ) { return performance.MercatorCoordinate.fromLngLat(lnglat); @@ -54495,6 +54892,7 @@ Transform.prototype.locationCoordinate = function locationCoordinate (lnglat * Given a Coordinate, return its geographical position. * @param {Coordinate} coord * @returns {LngLat} lnglat + * @private */ Transform.prototype.coordinateLocation = function coordinateLocation (coord ) { return coord.toLngLat(); @@ -54532,6 +54930,7 @@ Transform.prototype.pointCoordinate = function pointCoordinate (p ) { * Given a coordinate, return the screen point that corresponds to it * @param {Coordinate} coord * @returns {Point} screen point + * @private */ Transform.prototype.coordinatePoint = function coordinatePoint (coord ) { var p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1]; @@ -54542,6 +54941,7 @@ Transform.prototype.coordinatePoint = function coordinatePoint (coord /** * Returns the map's geographical bounds. When the bearing or pitch is non-zero, the visible region is not * an axis-aligned rectangle, and the result is the smallest bounds that encompasses the visible region. + * @returns {LngLatBounds} Returns a {@link LngLatBounds} object describing the map's geographical bounds. */ Transform.prototype.getBounds = function getBounds () { return new performance.LngLatBounds() @@ -54553,6 +54953,7 @@ Transform.prototype.getBounds = function getBounds () { /** * Returns the maximum geographical bounds the map is constrained to, or `null` if none set. + * @returns {LngLatBounds} {@link LngLatBounds} */ Transform.prototype.getMaxBounds = function getMaxBounds () { if (!this.latRange || this.latRange.length !== 2 || @@ -54563,6 +54964,7 @@ Transform.prototype.getMaxBounds = function getMaxBounds () { /** * Sets or clears the map's geographical constraints. + * @param {LngLatBounds} bounds A {@link LngLatBounds} object describing the new geographic boundaries of the map. */ Transform.prototype.setMaxBounds = function setMaxBounds (bounds ) { if (bounds) { @@ -54578,6 +54980,7 @@ Transform.prototype.setMaxBounds = function setMaxBounds (bounds ) { /** * Calculate the posMatrix that, given a tile coordinate, would be used to display the tile on a map. * @param {UnwrappedTileID} unwrappedTileID; + * @private */ Transform.prototype.calculatePosMatrix = function calculatePosMatrix (unwrappedTileID , aligned) { if ( aligned === void 0 ) aligned = false; @@ -54677,15 +55080,17 @@ Transform.prototype._constrain = function _constrain () { Transform.prototype._calcMatrices = function _calcMatrices () { if (!this.height) { return; } - this.cameraToCenterDistance = 0.5 / Math.tan(this._fov / 2) * this.height; + var halfFov = this._fov / 2; + var offset = this.centerOffset; + this.cameraToCenterDistance = 0.5 / Math.tan(halfFov) * this.height; - // Find the distance from the center point [width/2, height/2] to the - // center top point [width/2, 0] in Z units, using the law of sines. + // Find the distance from the center point [width/2 + offset.x, height/2 + offset.y] to the + // center top point [width/2 + offset.x, 0] in Z units, using the law of sines. // 1 Z unit is equivalent to 1 horizontal px at the center of the map // (the distance between[width/2, height/2] and [width/2 + 1, height/2]) - var halfFov = this._fov / 2; var groundAngle = Math.PI / 2 + this._pitch; - var topHalfSurfaceDistance = Math.sin(halfFov) * this.cameraToCenterDistance / Math.sin(performance.clamp(Math.PI - groundAngle - halfFov, 0.01, Math.PI - 0.01)); + var fovAboveCenter = this._fov * (0.5 + offset.y / this.height); + var topHalfSurfaceDistance = Math.sin(fovAboveCenter) * this.cameraToCenterDistance / Math.sin(performance.clamp(Math.PI - groundAngle - fovAboveCenter, 0.01, Math.PI - 0.01)); var point = this.point; var x = point.x, y = point.y; @@ -54707,6 +55112,10 @@ Transform.prototype._calcMatrices = function _calcMatrices () { var m = new Float64Array(16); performance.perspective(m, this._fov, this.width / this.height, nearZ, farZ); + //Apply center of perspective offset + m[8] = -offset.x * 2 / this.width; + m[9] = offset.y * 2 / this.height; + performance.scale(m, m, [1, -1, 1]); performance.translate(m, m, [0, 0, -this.cameraToCenterDistance]); performance.rotateX(m, m, this._pitch); @@ -55025,6 +55434,7 @@ var MapMouseEvent = /*@__PURE__*/(function (Event) { /** * `true` if `preventDefault` has been called. + * @private */ prototypeAccessors.defaultPrevented.get = function () { return this._defaultPrevented; @@ -55063,6 +55473,7 @@ var MapTouchEvent = /*@__PURE__*/(function (Event) { /** * `true` if `preventDefault` has been called. + * @private */ prototypeAccessors$1.defaultPrevented.get = function () { return this._defaultPrevented; @@ -55095,6 +55506,7 @@ var MapWheelEvent = /*@__PURE__*/(function (Event) { /** * `true` if `preventDefault` has been called. + * @private */ prototypeAccessors$2.defaultPrevented.get = function () { return this._defaultPrevented; @@ -55181,7 +55593,7 @@ var ScrollZoomHandler = function ScrollZoomHandler(map ) { /** * Set the zoom rate of a trackpad - * @param {number} [zoomRate = 1/100] + * @param {number} [zoomRate=1/100] The rate used to scale trackpad movement to a zoom value. */ ScrollZoomHandler.prototype.setZoomRate = function setZoomRate (zoomRate ) { this._defaultZoomRate = zoomRate; @@ -55189,7 +55601,7 @@ ScrollZoomHandler.prototype.setZoomRate = function setZoomRate (zoomRate ) { /** * Set the zoom rate of a mouse wheel - * @param {number} [wheelZoomRate = 1/450] + * @param {number} [wheelZoomRate=1/450] The rate used to scale mouse wheel movement to a zoom value. */ ScrollZoomHandler.prototype.setWheelZoomRate = function setWheelZoomRate (wheelZoomRate ) { this._wheelZoomRate = wheelZoomRate; @@ -55219,7 +55631,7 @@ ScrollZoomHandler.prototype.isZooming = function isZooming () { /** * Enables the "scroll to zoom" interaction. * - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {string} [options.around] If "center" is passed, map will zoom around center of map * * @example @@ -55988,7 +56400,7 @@ DragPanHandler.prototype.isActive = function isActive () { /** * Enables the "drag to pan" interaction. * - * @param {Object} [options] + * @param {Object} [options] Options object * @param {number} [options.linearity=0] factor used to scale the drag velocity * @param {Function} [options.easing=bezier(0, 0, 0.3, 1)] easing function applled to `map.panTo` when applying the drag. * @param {number} [options.maxSpeed=1400] the maximum value of the drag velocity. @@ -56637,7 +57049,7 @@ TouchZoomRotateHandler.prototype.isEnabled = function isEnabled () { /** * Enables the "pinch to rotate and zoom" interaction. * - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {string} [options.around] If "center" is passed, map will zoom around the center * * @example @@ -56688,8 +57100,7 @@ TouchZoomRotateHandler.prototype.enableRotation = function enableRotation () { /** * Returns true if the handler is enabled and has detected the start of a zoom/rotate gesture. - * - * @returns {boolean} + * @returns {boolean} //eslint-disable-line * @memberof TouchZoomRotateHandler */ TouchZoomRotateHandler.prototype.isActive = function isActive () { @@ -57069,6 +57480,7 @@ function bindHandlers(map , options + /** * Options common to {@link Map#jumpTo}, {@link Map#easeTo}, and {@link Map#flyTo}, controlling the desired location, @@ -57082,13 +57494,15 @@ function bindHandlers(map , options * is "up"; for example, a bearing of 90° orients the map so that east is up. * @property {number} pitch The desired pitch, in degrees. * @property {LngLatLike} around If `zoom` is specified, `around` determines the point around which the zoom is centered. + * @property {PaddingOptions} padding Dimensions in pixels applied on eachs side of the viewport for shifting the vanishing point. */ - + + /** @@ -57107,7 +57521,7 @@ function bindHandlers(map , options */ - + @@ -57168,7 +57582,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * * @memberof Map# * @param offset `x` and `y` coordinates by which to pan the map. - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57185,7 +57599,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * * @memberof Map# * @param lnglat The location to pan the map to. - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57232,7 +57646,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * * @memberof Map# * @param zoom The zoom level to transition to. - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires zoomstart @@ -57252,7 +57666,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * Increases the map's zoom level by 1. * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires zoomstart @@ -57271,7 +57685,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * Decreases the map's zoom level by 1. * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires zoomstart @@ -57317,13 +57731,41 @@ var Camera = /*@__PURE__*/(function (Evented) { return this; }; + /** + * Returns the current padding applied around the map viewport. + * + * @memberof Map# + * @returns The current padding around the map viewport. + */ + Camera.prototype.getPadding = function getPadding () { return this.transform.padding; }; + + /** + * Sets the padding in pixels around the viewport. + * + * Equivalent to `jumpTo({padding: padding})`. + * + * @memberof Map# + * @param padding The desired padding. Format: { left: number, right: number, top: number, bottom: number } + * @param eventData Additional properties to be added to event objects of events triggered by this method. + * @fires movestart + * @fires moveend + * @returns {Map} `this` + * @example + * // Sets a left padding of 300px, and a top padding of 50px + * map.setPadding({ left: 300, top: 50 }); + */ + Camera.prototype.setPadding = function setPadding (padding , eventData ) { + this.jumpTo({padding: padding}, eventData); + return this; + }; + /** * Rotates the map to the specified bearing, with an animated transition. The bearing is the compass direction * that is \"up\"; for example, a bearing of 90° orients the map so that east is up. * * @memberof Map# * @param bearing The desired bearing. - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57339,7 +57781,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * Rotates the map so that north is up (0° bearing), with an animated transition. * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57354,7 +57796,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * Rotates and pitches the map so that north is up (0° bearing) and pitch is 0°, with an animated transition. * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57374,7 +57816,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * `bearingSnap` threshold). * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires moveend @@ -57413,10 +57855,10 @@ var Camera = /*@__PURE__*/(function (Evented) { /** * @memberof Map# - * @param {LatLngBoundsLike} bounds Calculate the center for these bounds in the viewport and use + * @param {LngLatBoundsLike} bounds Calculate the center for these bounds in the viewport and use * the highest zoom level up to and including `Map#getMaxZoom()` that fits * in the viewport. LatLngBounds represent a box that is always axis-aligned with bearing 0. - * @param options + * @param options Options object * @param {number | PaddingOptions} [options.padding] The amount of padding in pixels to add to the given bounds. * @param {PointLike} [options.offset=[0, 0]] The center of the given bounds relative to the map's center, measured in pixels. * @param {number} [options.maxZoom] The maximum zoom level to allow when the camera would transition to the specified bounds. @@ -57457,13 +57899,14 @@ var Camera = /*@__PURE__*/(function (Evented) { * }); */ Camera.prototype._cameraForBoxAndBearing = function _cameraForBoxAndBearing (p0 , p1 , bearing , options ) { + var defaultPadding = { + top: 0, + bottom: 0, + right: 0, + left: 0 + }; options = performance.extend({ - padding: { - top: 0, - bottom: 0, - right: 0, - left: 0 - }, + padding: defaultPadding, offset: [0, 0], maxZoom: this.transform.maxZoom }, options); @@ -57477,18 +57920,10 @@ var Camera = /*@__PURE__*/(function (Evented) { left: p }; } - if (!performance.deepEqual(Object.keys(options.padding).sort(function (a, b) { - if (a < b) { return -1; } - if (a > b) { return 1; } - return 0; - }), ["bottom", "left", "right", "top"])) { - performance.warnOnce( - "options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'" - ); - return; - } + options.padding = performance.extend(defaultPadding, options.padding); var tr = this.transform; + var edgePadding = tr.padding; // We want to calculate the upper right and lower left of the box defined by p0 and p1 // in a coordinate system rotate to match the destination bearing. @@ -57502,8 +57937,8 @@ var Camera = /*@__PURE__*/(function (Evented) { // Calculate zoom: consider the original bbox and padding. var size = upperRight.sub(lowerLeft); - var scaleX = (tr.width - options.padding.left - options.padding.right) / size.x; - var scaleY = (tr.height - options.padding.top - options.padding.bottom) / size.y; + var scaleX = (tr.width - (edgePadding.left + edgePadding.right + options.padding.left + options.padding.right)) / size.x; + var scaleY = (tr.height - (edgePadding.top + edgePadding.bottom + options.padding.top + options.padding.bottom)) / size.y; if (scaleY < 0 || scaleX < 0) { performance.warnOnce( @@ -57572,7 +58007,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * @param p0 First point on screen, in pixel coordinates * @param p1 Second point on screen, in pixel coordinates * @param bearing Desired map bearing at end of animation, in degrees - * @param options + * @param options Options object * @param {number | PaddingOptions} [options.padding] The amount of padding in pixels to add to the given bounds. * @param {boolean} [options.linear=false] If `true`, the map transitions using * {@link Map#easeTo}. If `false`, the map transitions using {@link Map#flyTo}. See @@ -57620,7 +58055,7 @@ var Camera = /*@__PURE__*/(function (Evented) { * details not specified in `options`. * * @memberof Map# - * @param options + * @param options Options object * @param eventData Additional properties to be added to event objects of events triggered by this method. * @fires movestart * @fires zoomstart @@ -57661,6 +58096,10 @@ var Camera = /*@__PURE__*/(function (Evented) { tr.pitch = +options.pitch; } + if (options.padding != null && !tr.isPaddingEqual(options.padding)) { + tr.padding = options.padding; + } + this.fire(new performance.Event('movestart', eventData)) .fire(new performance.Event('move', eventData)); @@ -57686,7 +58125,7 @@ var Camera = /*@__PURE__*/(function (Evented) { }; /** - * Changes any combination of center, zoom, bearing, and pitch, with an animated transition + * Changes any combination of center, zoom, bearing, pitch, and padding with an animated transition * between old and new values. The map will retain its current values for any * details not specified in `options`. * @@ -57728,12 +58167,15 @@ var Camera = /*@__PURE__*/(function (Evented) { startZoom = this.getZoom(), startBearing = this.getBearing(), startPitch = this.getPitch(), + startPadding = this.getPadding(), zoom = 'zoom' in options ? +options.zoom : startZoom, bearing = 'bearing' in options ? this._normalizeBearing(options.bearing, startBearing) : startBearing, - pitch = 'pitch' in options ? +options.pitch : startPitch; + pitch = 'pitch' in options ? +options.pitch : startPitch, + padding = 'padding' in options ? options.padding : tr.padding; - var pointAtOffset = tr.centerPoint.add(performance.Point.convert(options.offset)); + var offsetAsPoint = performance.Point.convert(options.offset); + var pointAtOffset = tr.centerPoint.add(offsetAsPoint); var locationAtOffset = tr.pointLocation(pointAtOffset); var center = performance.LngLat.convert(options.center || locationAtOffset); this._normalizeCenter(center); @@ -57752,6 +58194,7 @@ var Camera = /*@__PURE__*/(function (Evented) { this._zooming = (zoom !== startZoom); this._rotating = (startBearing !== bearing); this._pitching = (pitch !== startPitch); + this._padding = !tr.isPaddingEqual(padding); this._prepareEase(eventData, options.noMoveStart); @@ -57767,6 +58210,12 @@ var Camera = /*@__PURE__*/(function (Evented) { if (this$1._pitching) { tr.pitch = performance.number(startPitch, pitch, k); } + if (this$1._padding) { + tr.interpolatePadding(startPadding, padding, k); + // When padding is being applied, Transform#centerPoint is changing continously, + // thus we need to recalculate offsetPoint every fra,e + pointAtOffset = tr.centerPoint.add(offsetAsPoint); + } if (around) { tr.setLocationAtPoint(around, aroundPoint); @@ -57831,6 +58280,7 @@ var Camera = /*@__PURE__*/(function (Evented) { this._zooming = false; this._rotating = false; this._pitching = false; + this._padding = false; if (wasZooming) { this.fire(new performance.Event('zoomend', eventData)); @@ -57932,14 +58382,17 @@ var Camera = /*@__PURE__*/(function (Evented) { var tr = this.transform, startZoom = this.getZoom(), startBearing = this.getBearing(), - startPitch = this.getPitch(); + startPitch = this.getPitch(), + startPadding = this.getPadding(); var zoom = 'zoom' in options ? performance.clamp(+options.zoom, tr.minZoom, tr.maxZoom) : startZoom; var bearing = 'bearing' in options ? this._normalizeBearing(options.bearing, startBearing) : startBearing; var pitch = 'pitch' in options ? +options.pitch : startPitch; + var padding = 'padding' in options ? options.padding : tr.padding; var scale = tr.zoomScale(zoom - startZoom); - var pointAtOffset = tr.centerPoint.add(performance.Point.convert(options.offset)); + var offsetAsPoint = performance.Point.convert(options.offset); + var pointAtOffset = tr.centerPoint.add(offsetAsPoint); var locationAtOffset = tr.pointLocation(pointAtOffset); var center = performance.LngLat.convert(options.center || locationAtOffset); this._normalizeCenter(center); @@ -57988,13 +58441,13 @@ var Camera = /*@__PURE__*/(function (Evented) { // w(s): Returns the visible span on the ground, measured in pixels with respect to the // initial scale. Assumes an angular field of view of 2 arctan ½ ≈ 53°. - var w = function (s) { + var w = function (s) { return (cosh(r0) / cosh(r0 + rho * s)); }; // u(s): Returns the distance along the flight path as projected onto the ground plane, // measured in pixels from the world image origin at the initial scale. - var u = function (s) { + var u = function (s) { return w0 * ((cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2) / u1; }; @@ -58027,6 +58480,7 @@ var Camera = /*@__PURE__*/(function (Evented) { this._zooming = true; this._rotating = (startBearing !== bearing); this._pitching = (pitch !== startPitch); + this._padding = !tr.isPaddingEqual(padding); this._prepareEase(eventData, false); @@ -58042,6 +58496,12 @@ var Camera = /*@__PURE__*/(function (Evented) { if (this$1._pitching) { tr.pitch = performance.number(startPitch, pitch, k); } + if (this$1._padding) { + tr.interpolatePadding(startPadding, padding, k); + // When padding is being applied, Transform#centerPoint is changing continously, + // thus we need to recalculate offsetPoint every frame + pointAtOffset = tr.centerPoint.add(offsetAsPoint); + } var newCenter = k === 1 ? center : tr.unproject(from.add(delta.mult(u(s))).mult(scale)); tr.setLocationAtPoint(tr.renderWorldCopies ? newCenter.wrap() : newCenter, pointAtOffset); @@ -58081,9 +58541,9 @@ var Camera = /*@__PURE__*/(function (Evented) { return this; }; - Camera.prototype._ease = function _ease (frame , + Camera.prototype._ease = function _ease (frame , finish , - options ) { + options ) { if (options.animate === false || options.duration === 0) { frame(1); finish(); @@ -58814,7 +59274,7 @@ var Map = /*@__PURE__*/(function (Camera) { Map.prototype = Object.create( Camera && Camera.prototype ); Map.prototype.constructor = Map; - var prototypeAccessors = { showTileBoundaries: { configurable: true },showCollisionBoxes: { configurable: true },showOverdrawInspector: { configurable: true },repaint: { configurable: true },vertices: { configurable: true },version: { configurable: true } }; + var prototypeAccessors = { showTileBoundaries: { configurable: true },showPadding: { configurable: true },showCollisionBoxes: { configurable: true },showOverdrawInspector: { configurable: true },repaint: { configurable: true },vertices: { configurable: true },version: { configurable: true } }; /* * Returns a unique number for this map instance which is used for the MapLoadEvent @@ -58922,6 +59382,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns the map's geographical bounds. When the bearing or pitch is non-zero, the visible region is not * an axis-aligned rectangle, and the result is the smallest bounds that encompasses the visible region. + * @returns {LngLatBounds} The geographical bounds of the map as {@link LngLatBounds}. * @example * var bounds = map.getBounds(); */ @@ -58931,6 +59392,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns the maximum geographical bounds the map is constrained to, or `null` if none set. + * @returns The map object. * @example * var maxBounds = map.getMaxBounds(); */ @@ -59174,6 +59636,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns true if the map is panning, zooming, rotating, or pitching due to a camera animation or user gesture. + * @returns {boolean} True if the map is moving. * @example * var isMoving = map.isMoving(); */ @@ -59186,6 +59649,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns true if the map is zooming due to a camera animation or user gesture. + * @returns {boolean} True if the map is zooming. * @example * var isZooming = map.isZooming(); */ @@ -59196,6 +59660,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns true if the map is rotating due to a camera animation or user gesture. + * @returns {boolean} True if the map is rotating. * @example * map.isRotating(); */ @@ -59405,10 +59870,10 @@ var Map = /*@__PURE__*/(function (Camera) { * Omitting this parameter (i.e. calling {@link Map#queryRenderedFeatures} with zero arguments, * or with only a `options` argument) is equivalent to passing a bounding box encompassing the entire * map viewport. - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {Array} [options.layers] An array of [style layer IDs](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layer-id) for the query to inspect. * Only features within these layers will be returned. If this parameter is undefined, all layers will be checked. - * @param {Array} [options.filter] A [filter](https://www.mapbox.com/mapbox-gl-js/style-spec/#other-filter) + * @param {Array} [options.filter] A [filter](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#filter) * to limit query results. * @param {boolean} [options.validate=true] Whether to check if the [options.filter] conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @@ -59514,10 +59979,10 @@ var Map = /*@__PURE__*/(function (Camera) { * representing features within the specified vector tile or GeoJSON source that satisfy the query parameters. * * @param {string} sourceId The ID of the vector tile or GeoJSON source to query. - * @param {Object} [parameters] + * @param {Object} [parameters] Options object. * @param {string} [parameters.sourceLayer] The name of the [source layer](https://docs.mapbox.com/help/glossary/source-layer/) * to query. *For vector tile sources, this parameter is required.* For GeoJSON sources, it is ignored. - * @param {Array} [parameters.filter] A [filter](https://www.mapbox.com/mapbox-gl-js/style-spec/#other-filter) + * @param {Array} [parameters.filter] A [filter](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#filter) * to limit query results. * @param {boolean} [parameters.validate=true] Whether to check if the [parameters.filter] conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @@ -59561,7 +60026,7 @@ var Map = /*@__PURE__*/(function (Camera) { * * @param style A JSON object conforming to the schema described in the * [Mapbox Style Specification](https://mapbox.com/mapbox-gl-style-spec/), or a URL to such JSON. - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {boolean} [options.diff=true] If false, force a 'full' update, removing the current style * and building the given one instead of attempting a diff-based update. * @param {string} [options.localIdeographFontFamily='sans-serif'] Defines a CSS @@ -59808,6 +60273,7 @@ var Map = /*@__PURE__*/(function (Camera) { return this.style.getSource(id); }; + // eslint-disable-next-line jsdoc/require-returns /** * Add an image to the style. This image can be displayed on the map like any other icon in the style's * [sprite](https://docs.mapbox.com/help/glossary/sprite/) using the image's ID with @@ -59820,7 +60286,7 @@ var Map = /*@__PURE__*/(function (Camera) { * @param id The ID of the image. * @param image The image as an `HTMLImageElement`, `ImageData`, `ImageBitmap` or object with `width`, `height`, and `data` * properties with the same format as `ImageData`. - * @param options + * @param options Options object. * @param options.pixelRatio The ratio of pixels in the image to physical pixels on the screen * @param options.sdf Whether the image should be interpreted as an SDF image * @param options.content `[x1, y1, x2, y2]` If `icon-text-fit` is used in a layer with this image, this option defines the part of the image that can be covered by the content in `text-field`. @@ -59899,6 +60365,7 @@ var Map = /*@__PURE__*/(function (Camera) { } }; + // eslint-disable-next-line jsdoc/require-returns /** * Update an existing image in a style. This image can be displayed on the map like any other icon in the style's * [sprite](https://docs.mapbox.com/help/glossary/sprite/) using the image's ID with @@ -59949,7 +60416,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Check whether or not an image with a specific ID exists in the style. This checks both images * in the style's original [sprite](https://docs.mapbox.com/help/glossary/sprite/) and any images - * that have been added at runtime using {@link addImage}. + * that have been added at runtime using {@link Map#addImage}. * * @param id The ID of the image. * @@ -59971,7 +60438,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Remove an image from a style. This can be an image from the style's original * [sprite](https://docs.mapbox.com/help/glossary/sprite/) or any images - * that have been added at runtime using {@link addImage}. + * that have been added at runtime using {@link Map#addImage}. * * @param id The ID of the image. * @@ -59985,7 +60452,7 @@ var Map = /*@__PURE__*/(function (Camera) { }; /** - * Load an image from an external URL to be used with `Map#addImage`. External + * Load an image from an external URL to be used with {@link Map#addImage}. External * domains must support [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). * * @param {string} url The URL of the image file. Image file must be in png, webp, or jpg format. @@ -60008,7 +60475,7 @@ var Map = /*@__PURE__*/(function (Camera) { /** * Returns an Array of strings containing the IDs of all images currently available in the map. * This includes both images from the style's original [sprite](https://docs.mapbox.com/help/glossary/sprite/) - * and any images that have been added at runtime using {@link addImage}. + * and any images that have been added at runtime using {@link Map#addImage}. * * @returns {Array} An Array of strings containing the names of all sprites/images currently available in the map. * @@ -60079,6 +60546,7 @@ var Map = /*@__PURE__*/(function (Camera) { return this._update(true); }; + // eslint-disable-next-line jsdoc/require-returns /** * Removes the layer with the given ID from the map's style. * @@ -60143,8 +60611,8 @@ var Map = /*@__PURE__*/(function (Camera) { * * @param {string} layerId The ID of the layer to which the filter will be applied. * @param {Array | null | undefined} filter The filter, conforming to the Mapbox Style Specification's - * [filter definition](https://www.mapbox.com/mapbox-gl-js/style-spec/#other-filter). If `null` or `undefined` is provided, the function removes any existing filter from the layer. - * @param {Object} [options] + * [filter definition](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#filter). If `null` or `undefined` is provided, the function removes any existing filter from the layer. + * @param {Object} [options] Options object. * @param {boolean} [options.validate=true] Whether to check if the filter conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * * @returns {Map} `this` @@ -60179,7 +60647,7 @@ var Map = /*@__PURE__*/(function (Camera) { * @param {string} name The name of the paint property to set. * @param {*} value The value of the paint property to set. * Must be of a type appropriate for the property, as defined in the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {boolean} [options.validate=true] Whether to check if `value` conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` * @example @@ -60212,7 +60680,7 @@ var Map = /*@__PURE__*/(function (Camera) { * @param {string} layerId The ID of the layer to set the layout property in. * @param {string} name The name of the layout property to set. * @param {*} value The value of the layout property. Must be of a type appropriate for the property, as defined in the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {boolean} [options.validate=true] Whether to check if `value` conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` * @example @@ -60240,7 +60708,7 @@ var Map = /*@__PURE__*/(function (Camera) { * Sets the any combination of light values. * * @param light Light properties to set. Must conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/#light). - * @param {Object} [options] + * @param {Object} [options] Options object. * @param {boolean} [options.validate=true] Whether to check if the filter conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` */ @@ -60261,6 +60729,7 @@ var Map = /*@__PURE__*/(function (Camera) { return this.style.getLight(); }; + // eslint-disable-next-line jsdoc/require-returns /** * Sets the state of a feature. The `state` object is merged in with the existing state of the feature. * Features are identified by their `id` attribute, which must be an integer or a string that can be @@ -60278,12 +60747,14 @@ var Map = /*@__PURE__*/(function (Camera) { * feature ids, set the `generateId` option in the `GeoJSONSourceSpecification` to auto-assign them. This * option assigns ids based on a feature's index in the source data. If you change feature data using * `map.getSource('some id').setData(..)`, you may need to re-apply state taking into account updated `id` values. + * @see [Create a hover effect](https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/) */ Map.prototype.setFeatureState = function setFeatureState (feature , state ) { this.style.setFeatureState(feature, state); return this._update(); }; + // eslint-disable-next-line jsdoc/require-returns /** * Removes feature state, setting it back to the default behavior. If only * source is specified, removes all states of that source. If @@ -60396,7 +60867,6 @@ var Map = /*@__PURE__*/(function (Camera) { } this._canvas = DOM.create('canvas', 'mapboxgl-canvas', canvasContainer); - this._canvas.style.position = 'absolute'; this._canvas.addEventListener('webglcontextlost', this._contextLost, false); this._canvas.addEventListener('webglcontextrestored', this._contextRestored, false); this._canvas.setAttribute('tabindex', '0'); @@ -60578,8 +61048,9 @@ var Map = /*@__PURE__*/(function (Camera) { rotating: this.isRotating(), zooming: this.isZooming(), moving: this.isMoving(), + fadeDuration: this._fadeDuration, + showPadding: this.showPadding, gpuTiming: !!this.listens('gpu-timing-layer'), - fadeDuration: this._fadeDuration }); this.fire(new performance.Event('render')); @@ -60671,6 +61142,7 @@ var Map = /*@__PURE__*/(function (Camera) { this._frame = null; } this._renderTaskQueue.clear(); + this.painter.destroy(); this.setStyle(null); if (typeof performance.window !== 'undefined') { performance.window.removeEventListener('resize', this._onWindowResize, false); @@ -60735,6 +61207,22 @@ var Map = /*@__PURE__*/(function (Camera) { this._update(); }; + /** + * Gets and sets a Boolean indicating whether the map will visualize + * the padding offsets. + * + * @name showPadding + * @type {boolean} + * @instance + * @memberof Map + */ + prototypeAccessors.showPadding.get = function () { return !!this._showPadding; }; + prototypeAccessors.showPadding.set = function (value ) { + if (this._showPadding === value) { return; } + this._showPadding = value; + this._update(); + }; + /** * Gets and sets a Boolean indicating whether the map will render boxes * around all symbols in the data source, revealing which symbols @@ -61127,7 +61615,7 @@ function smartWrap(lngLat , priorPos , transform ) -var anchorTranslate = { +var anchorTranslate = { 'center': 'translate(-50%,-50%)', 'top': 'translate(-50%,0)', 'top-left': 'translate(0,0)', @@ -61348,7 +61836,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Attaches the marker to a map - * @param {Map} map + * @param {Map} map The Mapbox GL JS map to add the marker to. * @returns {Marker} `this` */ Marker.prototype.addTo = function addTo (map ) { @@ -61400,7 +61888,7 @@ var Marker = /*@__PURE__*/(function (Evented) { * set by `setLngLat` because `Marker` wraps the anchor longitude across copies of the world to keep * the marker on screen. * - * @returns {LngLat} + * @returns {LngLat} A {@link LngLat} describing the marker's location. */ Marker.prototype.getLngLat = function getLngLat () { return this._lngLat; @@ -61408,6 +61896,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Set the marker's geographical position and move it. + * @param {LngLat} lnglat A {@link LngLat} describing where the marker should be located. * @returns {Marker} `this` */ Marker.prototype.setLngLat = function setLngLat (lnglat ) { @@ -61549,7 +62038,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Get the marker's offset. - * @returns {Point} + * @returns {Point} The marker's screen coordinates in pixels. */ Marker.prototype.getOffset = function getOffset () { return this._offset; @@ -61672,7 +62161,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Returns true if the marker can be dragged - * @returns {boolean} + * @returns {boolean} True if the marker is draggable. */ Marker.prototype.isDraggable = function isDraggable () { return this._draggable; @@ -61691,7 +62180,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Returns the current rotation angle of the marker (in degrees). - * @returns {number} + * @returns {number} The current rotation angle of the marker. */ Marker.prototype.getRotation = function getRotation () { return this._rotation; @@ -61710,7 +62199,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Returns the current `rotationAlignment` property of the marker. - * @returns {string} + * @returns {string} The current rotational alignment of the marker. */ Marker.prototype.getRotationAlignment = function getRotationAlignment () { return this._rotationAlignment; @@ -61729,7 +62218,7 @@ var Marker = /*@__PURE__*/(function (Evented) { /** * Returns the current `pitchAlignment` property of the marker. - * @returns {string} + * @returns {string} The current pitch alignment of the marker in degrees. */ Marker.prototype.getPitchAlignment = function getPitchAlignment () { return this._pitchAlignment; @@ -61802,10 +62291,12 @@ var noTimeout = false; * * The zoom level applied will depend on the accuracy of the geolocation provided by the device. * - * The GeolocateControl has two modes. If `trackUserLocation` is `false` (default) the control acts as a button, which when pressed will set the map's camera to target the user location. If the user moves, the map won't update. This is most suited for the desktop. If `trackUserLocation` is `true` the control acts as a toggle button that when active the user's location is actively monitored for changes. In this mode the GeolocateControl has three states: - * * active - the map's camera automatically updates as the user's location changes, keeping the location dot in the center. - * * passive - the user's location dot automatically updates, but the map's camera does not. - * * disabled + * The GeolocateControl has two modes. If `trackUserLocation` is `false` (default) the control acts as a button, which when pressed will set the map's camera to target the user location. If the user moves, the map won't update. This is most suited for the desktop. If `trackUserLocation` is `true` the control acts as a toggle button that when active the user's location is actively monitored for changes. In this mode the GeolocateControl has three interaction states: + * * active - the map's camera automatically updates as the user's location changes, keeping the location dot in the center. Initial state and upon clicking the `GeolocateControl` button. + * * passive - the user's location dot automatically updates, but the map's camera does not. Occurs upon the user initiating a map movement. + * * disabled - occurs if Geolocation is not available, disabled or denied. + * + * These interaction states can't be controlled programmatically, rather they are set based on user interactions. * * @implements {IControl} * @param {Object} [options] @@ -62591,7 +63082,7 @@ var defaultOptions$4 = { maxWidth: "240px" }; - + @@ -62878,7 +63369,7 @@ var Popup = /*@__PURE__*/(function (Evented) { * @returns {string} The maximum width of the popup. */ Popup.prototype.getMaxWidth = function getMaxWidth () { - return this._container.style.maxWidth; + return this._container && this._container.style.maxWidth; }; /** @@ -62925,7 +63416,9 @@ var Popup = /*@__PURE__*/(function (Evented) { * popup.addClassName('some-class') */ Popup.prototype.addClassName = function addClassName (className ) { - this._container.classList.add(className); + if (this._container) { + this._container.classList.add(className); + } }; /** @@ -62938,7 +63431,9 @@ var Popup = /*@__PURE__*/(function (Evented) { * popup.removeClassName('some-class') */ Popup.prototype.removeClassName = function removeClassName (className ) { - this._container.classList.remove(className); + if (this._container) { + this._container.classList.remove(className); + } }; /** @@ -62953,7 +63448,9 @@ var Popup = /*@__PURE__*/(function (Evented) { * popup.toggleClassName('toggleClass') */ Popup.prototype.toggleClassName = function toggleClassName (className ) { - return this._container.classList.toggle(className); + if (this._container) { + return this._container.classList.toggle(className); + } }; Popup.prototype._createContent = function _createContent () { @@ -63137,6 +63634,7 @@ var exported = { * Gets and sets the map's [access token](https://www.mapbox.com/help/define-access-token/). * * @var {string} accessToken + * @returns {string} The currently set access token. * @example * mapboxgl.accessToken = myAccessToken; * @see [Display a map](https://www.mapbox.com/mapbox-gl-js/examples/) @@ -63153,6 +63651,7 @@ var exported = { * Gets and sets the map's default API URL for requesting tiles, styles, sprites, and glyphs * * @var {string} baseApiUrl + * @returns {string} The current base API URL. * @example * mapboxgl.baseApiUrl = 'https://api.mapbox.com'; */ @@ -63170,6 +63669,7 @@ var exported = { * Make sure to set this property before creating any map instances for it to have effect. * * @var {string} workerCount + * @returns {number} Number of workers currently configured. * @example * mapboxgl.workerCount = 2; */ @@ -63186,6 +63686,7 @@ var exported = { * which affects performance in raster-heavy maps. 16 by default. * * @var {string} maxParallelImageRequests + * @returns {number} Number of parallel requests currently configured. * @example * mapboxgl.maxParallelImageRequests = 10; */ @@ -63234,4 +63735,4 @@ return exported; return mapboxgl; }))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsLmpzIiwiLi4vc3JjL3V0aWwvdXRpbC5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIuanMiLCIuLi9zcmMvdXRpbC9jb25maWcuanMiLCIuLi9zcmMvdXRpbC93ZWJwX3N1cHBvcnRlZC5qcyIsIi4uL3NyYy91dGlsL3NrdV90b2tlbi5qcyIsIi4uL3NyYy91dGlsL21hcGJveC5qcyIsIi4uL3NyYy91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkLmpzIiwiLi4vc3JjL3V0aWwvYWpheC5qcyIsIi4uL3NyYy91dGlsL2V2ZW50ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9leHRlbmQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL3VuYnVuZGxlX2pzb25saW50LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9wYXJzaW5nX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zY29wZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY3NzY29sb3JwYXJzZXIvY3NzY29sb3JwYXJzZXIuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9jb2xsYXRvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdmFsdWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9saXRlcmFsLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9ydW50aW1lX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9hc3NlcnRpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvZXJjaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9ldmFsdWF0aW9uX2NvbnRleHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2NvbXBvdW5kX2V4cHJlc3Npb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvbGxhdG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pc19jb25zdGFudC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvdmFyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9wYXJzaW5nX2NvbnRleHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3N0b3BzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9zdGVwLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvY29sb3Jfc3BhY2VzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29hbGVzY2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2xldC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvYXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2luLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9tYXRjaC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY2FzZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc3RyaW5nLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoM19nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL211cm11cmhhc2gyX2djLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX3Bvc2l0aW9uX21hcC5qcyIsIi4uL3NyYy9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nLmpzIiwiLi4vc3JjL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uLmpzIiwiLi4vc3JjL2RhdGEvZXh0ZW50LmpzIiwiLi4vc3JjL2RhdGEvbG9hZF9nZW9tZXRyeS5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzLmpzIiwiLi4vc3JjL3N0eWxlL3F1ZXJ5X3V0aWxzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vY29tbW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0My5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9xdWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3V0aWwvY29sb3JfcmFtcC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZWFyY3V0L3NyYy9lYXJjdXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcXVpY2tzZWxlY3QvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9jbGFzc2lmeV9yaW5ncy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVsYXllci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3N5bWJvbC90cmFuc2Zvcm1fdGV4dC5qcyIsIi4uL3NyYy9zeW1ib2wvbWVyZ2VsaW5lcy5qcyIsIi4uL3NyYy91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9vbmVfZW0uanMiLCIuLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wYmYvaW5kZXguanMiLCIuLi9zcmMvc3R5bGUvcGFyc2VfZ2x5cGhfcGJmLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BvdHBhY2svaW5kZXgubWpzIiwiLi4vc3JjL3JlbmRlci9pbWFnZV9hdGxhcy5qcyIsIi4uL3NyYy9zeW1ib2wvc2hhcGluZy5qcyIsIi4uL3NyYy9zeW1ib2wvYW5jaG9yLmpzIiwiLi4vc3JjL3N5bWJvbC9zeW1ib2xfc2l6ZS5qcyIsIi4uL3NyYy9zeW1ib2wvY2hlY2tfbWF4X2FuZ2xlLmpzIiwiLi4vc3JjL3N5bWJvbC9nZXRfYW5jaG9ycy5qcyIsIi4uL3NyYy9zeW1ib2wvY2xpcF9saW5lLmpzIiwiLi4vc3JjL3N5bWJvbC9xdWFkcy5qcyIsIi4uL3NyYy9zeW1ib2wvY29sbGlzaW9uX2ZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvdGlueXF1ZXVlL2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvZmluZF9wb2xlX29mX2luYWNjZXNzaWJpbGl0eS5qcyIsIi4uL3NyYy9zeW1ib2wvc3ltYm9sX2xheW91dC5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvcmVzb2x2ZV90b2tlbnMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdF9zZWN0aW9uX292ZXJyaWRlLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL2NyZWF0ZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9yZW5kZXIvdGV4dHVyZS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlZF9pbnZva2VyLmpzIiwiLi4vc3JjL3V0aWwvYWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC93aG9vdHMtanMvaW5kZXgubWpzIiwiLi4vc3JjL2dlby9sbmdfbGF0X2JvdW5kcy5qcyIsIi4uL3NyYy9nZW8vbG5nX2xhdC5qcyIsIi4uL3NyYy9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZS5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9pZC5qcyIsIi4uL3NyYy9kYXRhL2RlbV9kYXRhLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvZGljdGlvbmFyeV9jb2Rlci5qcyIsIi4uL3NyYy91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbi5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX3N0YXRlLmpzIiwiLi4vc3JjL2RhdGEvZmVhdHVyZV9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVmX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvdXRpbC9wZXJmb3JtYW5jZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2dyb3VwX2J5X2xheW91dC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllcl9pbmRleC5qcyIsIi4uL3NyYy9yZW5kZXIvZ2x5cGhfYXRsYXMuanMiLCIuLi9zcmMvc291cmNlL3dvcmtlcl90aWxlLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfZGVtX3RpbGVfd29ya2VyX3NvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy93Z3M4NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tYXJlYS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L2dlb2pzb24tcmV3aW5kL2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2xpYi9nZW9qc29uX3dyYXBwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvdnQtcGJmL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvc29ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9rZGJ1c2gvc3JjL3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvd2l0aGluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc3VwZXJjbHVzdGVyL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3NpbXBsaWZ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2ZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvY29udmVydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3dyYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL3RpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd29ya2VyX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZC9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2RvbS5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX3Nwcml0ZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9pbWFnZS5qcyIsIi4uL3NyYy9yZW5kZXIvaW1hZ2VfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9sb2FkX2dseXBoX3JhbmdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdGlueS1zZGYvaW5kZXguanMiLCIuLi9zcmMvcmVuZGVyL2dseXBoX21hbmFnZXIuanMiLCIuLi9zcmMvc3R5bGUvbGlnaHQuanMiLCIuLi9zcmMvcmVuZGVyL2xpbmVfYXRsYXMuanMiLCIuLi9zcmMvdXRpbC9kaXNwYXRjaGVyLmpzIiwiLi4vc3JjL3NvdXJjZS9sb2FkX3RpbGVqc29uLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2JvdW5kcy5qcyIsIi4uL3NyYy9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fc291cmNlLmpzIiwiLi4vc3JjL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3NvdXJjZS9pbWFnZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3ZpZGVvX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvY2FudmFzX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9xdWVyeV9mZWF0dXJlcy5qcyIsIi4uL3NyYy9zb3VyY2UvdGlsZV9jYWNoZS5qcyIsIi4uL3NyYy9nbC9pbmRleF9idWZmZXIuanMiLCIuLi9zcmMvZ2wvdmVydGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92YWx1ZS5qcyIsIi4uL3NyYy9nbC9mcmFtZWJ1ZmZlci5qcyIsIi4uL3NyYy9nbC9kZXB0aF9tb2RlLmpzIiwiLi4vc3JjL2dsL3N0ZW5jaWxfbW9kZS5qcyIsIi4uL3NyYy9nbC9jb2xvcl9tb2RlLmpzIiwiLi4vc3JjL2dsL2N1bGxfZmFjZV9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbnRleHQuanMiLCIuLi9zcmMvc291cmNlL3NvdXJjZV9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIvd2ViX3dvcmtlci5qcyIsIi4uL3NyYy91dGlsL3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3V0aWwvZ2xvYmFsX3dvcmtlcl9wb29sLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGVyZWYuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9lbXB0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2RpZmYuanMiLCIuLi9zcmMvc3ltYm9sL2dyaWRfaW5kZXguanMiLCIuLi9zcmMvc3ltYm9sL3Byb2plY3Rpb24uanMiLCIuLi9zcmMvc3ltYm9sL2NvbGxpc2lvbl9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMuanMiLCIuLi9zcmMvc3ltYm9sL3BsYWNlbWVudC5qcyIsIi4uL3NyYy9zdHlsZS9wYXVzZWFibGVfcGxhY2VtZW50LmpzIiwiLi4vc3JjL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZS5qcyIsIi4uL3NyYy9kYXRhL3Bvc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3NoYWRlcnMvc2hhZGVycy5qcyIsIi4uL3NyYy9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdC5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9wYXR0ZXJuLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vZmlsbF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2RlYnVnX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2hlYXRtYXBfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9oaWxsc2hhZGVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9saW5lX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcmFzdGVyX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY29sbGlzaW9uX2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3N5bWJvbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jaXJjbGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGVhdG1hcC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19saW5lLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2ZpbGwuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbF9leHRydXNpb24uanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGlsbHNoYWRlLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3Jhc3Rlci5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19iYWNrZ3JvdW5kLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2N1c3RvbS5qcyIsIi4uL3NyYy9yZW5kZXIvcGFpbnRlci5qcyIsIi4uL3NyYy91dGlsL3ByaW1pdGl2ZXMuanMiLCIuLi9zcmMvZ2VvL3RyYW5zZm9ybS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlLmpzIiwiLi4vc3JjL3VpL2hhc2guanMiLCIuLi9zcmMvdWkvZXZlbnRzLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2Nyb2xsX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RyYWdfcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvZHJhZ19wYW4uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9rZXlib2FyZC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RibGNsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZS5qcyIsIi4uL3NyYy91aS9iaW5kX2hhbmRsZXJzLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy91dGlsL2RlYnVnLmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vcm9sbHVwL21hcGJveGdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIGNvbXBhcmUgYW5kIGlzQnVmZmVyIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvYmxvYi82ODBlOWU1ZTQ4OGYyMmFhYzI3NTk5YTU3ZGM4NDRhNjMxNTkyOGRkL2luZGV4LmpzXG4vLyBvcmlnaW5hbCBub3RpY2U6XG5cbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHggPSBhLmxlbmd0aDtcbiAgdmFyIHkgPSBiLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXTtcbiAgICAgIHkgPSBiW2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gaXNCdWZmZXIoYikge1xuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiB0eXBlb2YgZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGIpO1xuICB9XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpO1xufVxuXG4vLyBiYXNlZCBvbiBub2RlIGFzc2VydCwgb3JpZ2luYWwgbm90aWNlOlxuLy8gTkI6IFRoZSBVUkwgdG8gdGhlIENvbW1vbkpTIHNwZWMgaXMga2VwdCBqdXN0IGZvciB0cmFkaXRpb24uXG4vLyAgICAgbm9kZS1hc3NlcnQgaGFzIGV2b2x2ZWQgYSBsb3Qgc2luY2UgdGhlbiwgYm90aCBpbiBBUEkgYW5kIGJlaGF2aW9yLlxuXG4vLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsLycpO1xudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb28oKSB7fS5uYW1lID09PSAnZm9vJztcbn0oKSk7XG5mdW5jdGlvbiBwVG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5mdW5jdGlvbiBpc1ZpZXcoYXJyYnVmKSB7XG4gIGlmIChpc0J1ZmZlcihhcnJidWYpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnJidWYpO1xuICB9XG4gIGlmICghYXJyYnVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnJidWYgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhcnJidWYuYnVmZmVyICYmIGFycmJ1Zi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIDEuIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcblxuLy8gMi4gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gYXNzZXJ0LlxuLy8gbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6IG1lc3NhZ2UsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWwsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pXG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2Jsb2IvYWRlZWVlYzhiZmNjNjA2OGIxODdkN2Q5ZmIzZDViYjFkM2EzMDg5OS9pbXBsZW1lbnRhdGlvbi5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmdW5jKSB7XG4gIGlmICghdXRpbC5pc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcbiAgICByZXR1cm4gZnVuYy5uYW1lO1xuICB9XG4gIHZhciBzdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIHZhciBtYXRjaCA9IHN0ci5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn1cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgdGhpcy5hY3R1YWwgPSBvcHRpb25zLmFjdHVhbDtcbiAgdGhpcy5leHBlY3RlZCA9IG9wdGlvbnMuZXhwZWN0ZWQ7XG4gIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yO1xuICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWVzc2FnZSA9IGdldE1lc3NhZ2UodGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTtcbiAgfVxuICB2YXIgc3RhY2tTdGFydEZ1bmN0aW9uID0gb3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb24gfHwgZmFpbDtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBub24gdjggYnJvd3NlcnMgc28gd2UgY2FuIGhhdmUgYSBzdGFja3RyYWNlXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7XG5cbiAgICAgIC8vIHRyeSB0byBzdHJpcCB1c2VsZXNzIGZyYW1lc1xuICAgICAgdmFyIGZuX25hbWUgPSBnZXROYW1lKHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7XG4gIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc3BlY3Qoc29tZXRoaW5nKSB7XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMgfHwgIXV0aWwuaXNGdW5jdGlvbihzb21ldGhpbmcpKSB7XG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChzb21ldGhpbmcpO1xuICB9XG4gIHZhciByYXduYW1lID0gZ2V0TmFtZShzb21ldGhpbmcpO1xuICB2YXIgbmFtZSA9IHJhd25hbWUgPyAnOiAnICsgcmF3bmFtZSA6ICcnO1xuICByZXR1cm4gJ1tGdW5jdGlvbicgKyAgbmFtZSArICddJztcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZikge1xuICByZXR1cm4gdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmFjdHVhbCksIDEyOCkgKyAnICcgK1xuICAgICAgICAgc2VsZi5vcGVyYXRvciArICcgJyArXG4gICAgICAgICB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuZXhwZWN0ZWQpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwRXF1YWwnLCBhc3NlcnQuZGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBTdHJpY3RFcXVhbCcsIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAmJiBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSA9PT0gMDtcblxuICAvLyA3LjIuIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIERhdGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBzYW1lIHRpbWUuXG4gIH0gZWxzZSBpZiAodXRpbC5pc0RhdGUoYWN0dWFsKSAmJiB1dGlsLmlzRGF0ZShleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMyBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIFJlZ0V4cCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kXG4gIC8vIHByb3BlcnRpZXMgKGBnbG9iYWxgLCBgbXVsdGlsaW5lYCwgYGxhc3RJbmRleGAsIGBpZ25vcmVDYXNlYCkuXG4gIH0gZWxzZSBpZiAodXRpbC5pc1JlZ0V4cChhY3R1YWwpICYmIHV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJlxuICAgICAgICAgICBhY3R1YWwuZ2xvYmFsID09PSBleHBlY3RlZC5nbG9iYWwgJiZcbiAgICAgICAgICAgYWN0dWFsLm11bHRpbGluZSA9PT0gZXhwZWN0ZWQubXVsdGlsaW5lICYmXG4gICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJlxuICAgICAgICAgICBhY3R1YWwuaWdub3JlQ2FzZSA9PT0gZXhwZWN0ZWQuaWdub3JlQ2FzZTtcblxuICAvLyA3LjQuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JykgJiZcbiAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IG51bGwgfHwgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyBJZiBib3RoIHZhbHVlcyBhcmUgaW5zdGFuY2VzIG9mIHR5cGVkIGFycmF5cywgd3JhcCB0aGVpciB1bmRlcmx5aW5nXG4gIC8vIEFycmF5QnVmZmVycyBpbiBhIEJ1ZmZlciBlYWNoIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlXG4gIC8vIFRoaXMgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHRoZSBhcnJheXMgdG8gaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGNoZWNrZWQgYnlcbiAgLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoYWthIHBUb1N0cmluZykuIE5ldmVyIHBlcmZvcm0gYmluYXJ5XG4gIC8vIGNvbXBhcmlzb25zIGZvciBGbG9hdCpBcnJheXMsIHRob3VnaCwgc2luY2UgZS5nLiArMCA9PT0gLTAgYnV0IHRoZWlyXG4gIC8vIGJpdCBwYXR0ZXJucyBhcmUgbm90IGlkZW50aWNhbC5cbiAgfSBlbHNlIGlmIChpc1ZpZXcoYWN0dWFsKSAmJiBpc1ZpZXcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgcFRvU3RyaW5nKGFjdHVhbCkgPT09IHBUb1N0cmluZyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICAhKGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgICAgICAgICAgICAgYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSkge1xuICAgIHJldHVybiBjb21wYXJlKG5ldyBVaW50OEFycmF5KGFjdHVhbC5idWZmZXIpLFxuICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGV4cGVjdGVkLmJ1ZmZlcikpID09PSAwO1xuXG4gIC8vIDcuNSBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAhPT0gaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIG1lbW9zID0gbWVtb3MgfHwge2FjdHVhbDogW10sIGV4cGVjdGVkOiBbXX07XG5cbiAgICB2YXIgYWN0dWFsSW5kZXggPSBtZW1vcy5hY3R1YWwuaW5kZXhPZihhY3R1YWwpO1xuICAgIGlmIChhY3R1YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gbWVtb3MuZXhwZWN0ZWQuaW5kZXhPZihleHBlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb3MuYWN0dWFsLnB1c2goYWN0dWFsKTtcbiAgICBtZW1vcy5leHBlY3RlZC5wdXNoKGV4cGVjdGVkKTtcblxuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSB7XG4gIGlmIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSBudWxsIHx8IGIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoc3RyaWN0ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKTtcbiAgdmFyIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYiwgc3RyaWN0KTtcbiAgfVxuICB2YXIga2EgPSBvYmplY3RLZXlzKGEpO1xuICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB2YXIga2V5LCBpO1xuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIV9kZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyA4LiBUaGUgbm9uLWVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBmb3IgYW55IGRlZXAgaW5lcXVhbGl0eS5cbi8vIGFzc2VydC5ub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gbm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5mdW5jdGlvbiBub3REZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBTdHJpY3RFcXVhbCcsIG5vdERlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn1cblxuXG4vLyA5LiBUaGUgc3RyaWN0IGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzdHJpY3QgZXF1YWxpdHksIGFzIGRldGVybWluZWQgYnkgPT09LlxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09PScsIGFzc2VydC5zdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDEwLiBUaGUgc3RyaWN0IG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHN0cmljdCBpbmVxdWFsaXR5LCBhc1xuLy8gZGV0ZXJtaW5lZCBieSAhPT0uICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT09JywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlLiAgVGhlIGluc3RhbmNlb2YgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBhcnJvdyBmdW5jdGlvbnMuXG4gIH1cblxuICBpZiAoRXJyb3IuaXNQcm90b3R5cGVPZihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXhwZWN0ZWQuY2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3RyeUJsb2NrKGJsb2NrKSB7XG4gIHZhciBlcnJvcjtcbiAgdHJ5IHtcbiAgICBibG9jaygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHR5cGVvZiBibG9jayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIGFjdHVhbCA9IF90cnlCbG9jayhibG9jayk7XG5cbiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArXG4gICAgICAgICAgICAobWVzc2FnZSA/ICcgJyArIG1lc3NhZ2UgOiAnLicpO1xuXG4gIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICB2YXIgdXNlclByb3ZpZGVkTWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJztcbiAgdmFyIGlzVW53YW50ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgdXRpbC5pc0Vycm9yKGFjdHVhbCk7XG4gIHZhciBpc1VuZXhwZWN0ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmICFleHBlY3RlZDtcblxuICBpZiAoKGlzVW53YW50ZWRFeGNlcHRpb24gJiZcbiAgICAgIHVzZXJQcm92aWRlZE1lc3NhZ2UgJiZcbiAgICAgIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fFxuICAgICAgaXNVbmV4cGVjdGVkRXhjZXB0aW9uKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnR290IHVud2FudGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICgoc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmIGV4cGVjdGVkICYmXG4gICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkge1xuICAgIHRocm93IGFjdHVhbDtcbiAgfVxufVxuXG4vLyAxMS4gRXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3I6XG4vLyBhc3NlcnQudGhyb3dzKGJsb2NrLCBFcnJvcl9vcHQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKHRydWUsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyhmYWxzZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHRocm93IGVycjsgfTtcblxuLy8gRXhwb3NlIGEgc3RyaWN0IG9ubHkgdmFyaWFudCBvZiBhc3NlcnRcbmZ1bmN0aW9uIHN0cmljdCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBzdHJpY3QpO1xufVxuYXNzZXJ0LnN0cmljdCA9IG9iamVjdEFzc2lnbihzdHJpY3QsIGFzc2VydCwge1xuICBlcXVhbDogYXNzZXJ0LnN0cmljdEVxdWFsLFxuICBkZWVwRXF1YWw6IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwsXG4gIG5vdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gIG5vdERlZXBFcXVhbDogYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbFxufSk7XG5hc3NlcnQuc3RyaWN0LnN0cmljdCA9IGFzc2VydC5zdHJpY3Q7XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAqIGFyZSBtZXQ6XG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSXG4gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIFBvcnRlZCBmcm9tIFdlYmtpdFxuICogaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1VuaXRCZXppZXIuaFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gVW5pdEJlemllcjtcblxuZnVuY3Rpb24gVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzLCBpbXBsaWNpdCBmaXJzdCBhbmQgbGFzdCBjb250cm9sIHBvaW50cyBhcmUgKDAsMCkgYW5kICgxLDEpLlxuICAgIHRoaXMuY3ggPSAzLjAgKiBwMXg7XG4gICAgdGhpcy5ieCA9IDMuMCAqIChwMnggLSBwMXgpIC0gdGhpcy5jeDtcbiAgICB0aGlzLmF4ID0gMS4wIC0gdGhpcy5jeCAtIHRoaXMuYng7XG5cbiAgICB0aGlzLmN5ID0gMy4wICogcDF5O1xuICAgIHRoaXMuYnkgPSAzLjAgKiAocDJ5IC0gcDF5KSAtIHRoaXMuY3k7XG4gICAgdGhpcy5heSA9IDEuMCAtIHRoaXMuY3kgLSB0aGlzLmJ5O1xuXG4gICAgdGhpcy5wMXggPSBwMXg7XG4gICAgdGhpcy5wMXkgPSBwMnk7XG4gICAgdGhpcy5wMnggPSBwMng7XG4gICAgdGhpcy5wMnkgPSBwMnk7XG59XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlWCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAvLyBgYXggdF4zICsgYnggdF4yICsgY3ggdCcgZXhwYW5kZWQgdXNpbmcgSG9ybmVyJ3MgcnVsZS5cbiAgICByZXR1cm4gKCh0aGlzLmF4ICogdCArIHRoaXMuYngpICogdCArIHRoaXMuY3gpICogdDtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlWSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKCh0aGlzLmF5ICogdCArIHRoaXMuYnkpICogdCArIHRoaXMuY3kpICogdDtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgzLjAgKiB0aGlzLmF4ICogdCArIDIuMCAqIHRoaXMuYngpICogdCArIHRoaXMuY3g7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZUN1cnZlWCA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICBpZiAodHlwZW9mIGVwc2lsb24gPT09ICd1bmRlZmluZWQnKSBlcHNpbG9uID0gMWUtNjtcblxuICAgIHZhciB0MCwgdDEsIHQyLCB4MiwgaTtcblxuICAgIC8vIEZpcnN0IHRyeSBhIGZldyBpdGVyYXRpb25zIG9mIE5ld3RvbidzIG1ldGhvZCAtLSBub3JtYWxseSB2ZXJ5IGZhc3QuXG4gICAgZm9yICh0MiA9IHgsIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cbiAgICAgICAgeDIgPSB0aGlzLnNhbXBsZUN1cnZlWCh0MikgLSB4O1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIpIDwgZXBzaWxvbikgcmV0dXJuIHQyO1xuXG4gICAgICAgIHZhciBkMiA9IHRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWCh0Mik7XG4gICAgICAgIGlmIChNYXRoLmFicyhkMikgPCAxZS02KSBicmVhaztcblxuICAgICAgICB0MiA9IHQyIC0geDIgLyBkMjtcbiAgICB9XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGJpc2VjdGlvbiBtZXRob2QgZm9yIHJlbGlhYmlsaXR5LlxuICAgIHQwID0gMC4wO1xuICAgIHQxID0gMS4wO1xuICAgIHQyID0geDtcblxuICAgIGlmICh0MiA8IHQwKSByZXR1cm4gdDA7XG4gICAgaWYgKHQyID4gdDEpIHJldHVybiB0MTtcblxuICAgIHdoaWxlICh0MCA8IHQxKSB7XG5cbiAgICAgICAgeDIgPSB0aGlzLnNhbXBsZUN1cnZlWCh0Mik7XG4gICAgICAgIGlmIChNYXRoLmFicyh4MiAtIHgpIDwgZXBzaWxvbikgcmV0dXJuIHQyO1xuXG4gICAgICAgIGlmICh4ID4geDIpIHtcbiAgICAgICAgICAgIHQwID0gdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0MSA9IHQyO1xuICAgICAgICB9XG5cbiAgICAgICAgdDIgPSAodDEgLSB0MCkgKiAwLjUgKyB0MDtcbiAgICB9XG5cbiAgICAvLyBGYWlsdXJlLlxuICAgIHJldHVybiB0Mjtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNvbHZlID0gZnVuY3Rpb24oeCwgZXBzaWxvbikge1xuICAgIHJldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHgsIGVwc2lsb24pKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQSBzdGFuZGFsb25lIHBvaW50IGdlb21ldHJ5IHdpdGggdXNlZnVsIGFjY2Vzc29yLCBjb21wYXJpc29uLCBhbmRcbiAqIG1vZGlmaWNhdGlvbiBtZXRob2RzLlxuICpcbiAqIEBjbGFzcyBQb2ludFxuICogQHBhcmFtIHtOdW1iZXJ9IHggdGhlIHgtY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsb25naXR1ZGUgb3Igc2NyZWVuXG4gKiBwaXhlbHMsIG9yIGFueSBvdGhlciBzb3J0IG9mIHVuaXQuXG4gKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlLiB0aGlzIGNvdWxkIGJlIGxhdGl0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgtNzcsIDM4KTtcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbn1cblxuUG9pbnQucHJvdG90eXBlID0ge1xuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgdGhpcyBwb2ludCwgcmV0dXJuaW5nIGEgbmV3IHBvaW50IHRoYXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICogd2l0aG91dCBhZmZlY3RpbmcgdGhlIG9sZCBvbmUuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHRoZSBjbG9uZVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGFub3RoZXIgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgYWRkOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgdG8gZnJvbSBwb2ludCxcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBzdWI6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3N1YihwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBwb2ludCxcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBtdWx0QnlQb2ludDogICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgZGl2QnlQb2ludDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2QnlQb2ludChwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBtdWx0OiAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX211bHQoayk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IGEgZmFjdG9yLFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IGsgZmFjdG9yXG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdjogICAgIGZ1bmN0aW9uKGspIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHRoaXMgcG9pbnQgYXJvdW5kIHRoZSAwLCAwIG9yaWdpbiBieSBhbiBhbmdsZSBhLFxuICAgICAqIGdpdmVuIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYSBhbmdsZSB0byByb3RhdGUgYXJvdW5kLCBpbiByYWRpYW5zXG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIHJvdGF0ZTogIGZ1bmN0aW9uKGEpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKGEpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHRoaXMgcG9pbnQgYXJvdW5kIHAgcG9pbnQgYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgUG9pbnQgdG8gcm90YXRlIGFyb3VuZFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGVBcm91bmQ6ICBmdW5jdGlvbihhLHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKGEscCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50IGJ5IGEgNHgxIHRyYW5zZm9ybWF0aW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPn0gbSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbWF0TXVsdDogZnVuY3Rpb24obSkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KG0pOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoaXMgcG9pbnQgYnV0IGFzIGEgdW5pdCB2ZWN0b3IgZnJvbSAwLCAwLCBtZWFuaW5nXG4gICAgICogdGhhdCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmVzdWx0aW5nIHBvaW50IHRvIHRoZSAwLCAwXG4gICAgICogY29vcmRpbmF0ZSB3aWxsIGJlIGVxdWFsIHRvIDEgYW5kIHRoZSBhbmdsZSBmcm9tIHRoZSByZXN1bHRpbmdcbiAgICAgKiBwb2ludCB0byB0aGUgMCwgMCBjb29yZGluYXRlIHdpbGwgYmUgdGhlIHNhbWUgYXMgYmVmb3JlLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB1bml0IHZlY3RvciBwb2ludFxuICAgICAqL1xuICAgIHVuaXQ6ICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIGEgcGVycGVuZGljdWxhciBwb2ludCwgd2hlcmUgdGhlIG5ldyB5IGNvb3JkaW5hdGVcbiAgICAgKiBpcyB0aGUgb2xkIHggY29vcmRpbmF0ZSBhbmQgdGhlIG5ldyB4IGNvb3JkaW5hdGUgaXMgdGhlIG9sZCB5XG4gICAgICogY29vcmRpbmF0ZSBtdWx0aXBsaWVkIGJ5IC0xXG4gICAgICogQHJldHVybiB7UG9pbnR9IHBlcnBlbmRpY3VsYXIgcG9pbnRcbiAgICAgKi9cbiAgICBwZXJwOiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGlzIHBvaW50IHdpdGggdGhlIHggJiB5IGNvb3JkaW5hdGVzXG4gICAgICogcm91bmRlZCB0byBpbnRlZ2Vycy5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gcm91bmRlZCBwb2ludFxuICAgICAqL1xuICAgIHJvdW5kOiAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBtYWdpdHVkZSBvZiB0aGlzIHBvaW50OiB0aGlzIGlzIHRoZSBFdWNsaWRlYW5cbiAgICAgKiBkaXN0YW5jZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCdzIHggYW5kIHlcbiAgICAgKiBjb29yZGluYXRlcy5cbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1hZ25pdHVkZVxuICAgICAqL1xuICAgIG1hZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSnVkZ2Ugd2hldGhlciB0aGlzIHBvaW50IGlzIGVxdWFsIHRvIGFub3RoZXIgcG9pbnQsIHJldHVybmluZ1xuICAgICAqIHRydWUgb3IgZmFsc2UuXG4gICAgICogQHBhcmFtIHtQb2ludH0gb3RoZXIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcG9pbnRzIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueCA9PT0gb3RoZXIueCAmJlxuICAgICAgICAgICAgICAgdGhpcy55ID09PSBvdGhlci55O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50XG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAgICovXG4gICAgZGlzdDogZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcihwKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgZnJvbSB0aGlzIHBvaW50IHRvIGFub3RoZXIgcG9pbnQsXG4gICAgICogd2l0aG91dCB0aGUgc3F1YXJlIHJvb3Qgc3RlcC4gVXNlZnVsIGlmIHlvdSdyZSBjb21wYXJpbmdcbiAgICAgKiByZWxhdGl2ZSBkaXN0YW5jZXMuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAgICovXG4gICAgZGlzdFNxcjogZnVuY3Rpb24ocCkge1xuICAgICAgICB2YXIgZHggPSBwLnggLSB0aGlzLngsXG4gICAgICAgICAgICBkeSA9IHAueSAtIHRoaXMueTtcbiAgICAgICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGZyb20gdGhlIDAsIDAgY29vcmRpbmF0ZSB0byB0aGlzIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55LCB0aGlzLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtQb2ludH0gYiB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gICAgICovXG4gICAgYW5nbGVUbzogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzLnkgLSBiLnksIHRoaXMueCAtIGIueCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0aGlzIHBvaW50IGFuZCBhbm90aGVyIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtQb2ludH0gYiB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gICAgICovXG4gICAgYW5nbGVXaXRoOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFuZ2xlV2l0aFNlcChiLngsIGIueSk7XG4gICAgfSxcblxuICAgIC8qXG4gICAgICogRmluZCB0aGUgYW5nbGUgb2YgdGhlIHR3byB2ZWN0b3JzLCBzb2x2aW5nIHRoZSBmb3JtdWxhIGZvclxuICAgICAqIHRoZSBjcm9zcyBwcm9kdWN0IGEgeCBiID0gfGF8fGJ8c2luKMOOwrgpIGZvciDDjsK4LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGVcbiAgICAgKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlXG4gICAgICogQHJldHVybiB7TnVtYmVyfSB0aGUgYW5nbGUgaW4gcmFkaWFuc1xuICAgICAqL1xuICAgIGFuZ2xlV2l0aFNlcDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihcbiAgICAgICAgICAgIHRoaXMueCAqIHkgLSB0aGlzLnkgKiB4LFxuICAgICAgICAgICAgdGhpcy54ICogeCArIHRoaXMueSAqIHkpO1xuICAgIH0sXG5cbiAgICBfbWF0TXVsdDogZnVuY3Rpb24obSkge1xuICAgICAgICB2YXIgeCA9IG1bMF0gKiB0aGlzLnggKyBtWzFdICogdGhpcy55LFxuICAgICAgICAgICAgeSA9IG1bMl0gKiB0aGlzLnggKyBtWzNdICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2FkZDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggKz0gcC54O1xuICAgICAgICB0aGlzLnkgKz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3N1YjogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLT0gcC54O1xuICAgICAgICB0aGlzLnkgLT0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54ICo9IGs7XG4gICAgICAgIHRoaXMueSAqPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2RpdjogZnVuY3Rpb24oaykge1xuICAgICAgICB0aGlzLnggLz0gaztcbiAgICAgICAgdGhpcy55IC89IGs7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfbXVsdEJ5UG9pbnQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICo9IHAueDtcbiAgICAgICAgdGhpcy55ICo9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXZCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAvPSBwLng7XG4gICAgICAgIHRoaXMueSAvPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfdW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2Rpdih0aGlzLm1hZygpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9wZXJwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XG4gICAgICAgIHRoaXMueSA9IHRoaXMueDtcbiAgICAgICAgdGhpcy54ID0gLXk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm90YXRlOiBmdW5jdGlvbihhbmdsZSkge1xuICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgeCA9IGNvcyAqIHRoaXMueCAtIHNpbiAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBzaW4gKiB0aGlzLnggKyBjb3MgKiB0aGlzLnk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm90YXRlQXJvdW5kOiBmdW5jdGlvbihhbmdsZSwgcCkge1xuICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgeCA9IHAueCArIGNvcyAqICh0aGlzLnggLSBwLngpIC0gc2luICogKHRoaXMueSAtIHAueSksXG4gICAgICAgICAgICB5ID0gcC55ICsgc2luICogKHRoaXMueCAtIHAueCkgKyBjb3MgKiAodGhpcy55IC0gcC55KTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9yb3VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcbiAgICAgICAgdGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdCBhIHBvaW50IGZyb20gYW4gYXJyYXkgaWYgbmVjZXNzYXJ5LCBvdGhlcndpc2UgaWYgdGhlIGlucHV0XG4gKiBpcyBhbHJlYWR5IGEgUG9pbnQsIG9yIGFuIHVua25vd24gdHlwZSwgcmV0dXJuIGl0IHVuY2hhbmdlZFxuICogQHBhcmFtIHtBcnJheTxOdW1iZXI+fFBvaW50fCp9IGEgYW55IGtpbmQgb2YgaW5wdXQgdmFsdWVcbiAqIEByZXR1cm4ge1BvaW50fSBjb25zdHJ1Y3RlZCBwb2ludCwgb3IgcGFzc2VkLXRocm91Z2ggdmFsdWUuXG4gKiBAZXhhbXBsZVxuICogLy8gdGhpc1xuICogdmFyIHBvaW50ID0gUG9pbnQuY29udmVydChbMCwgMV0pO1xuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogdmFyIHBvaW50ID0gbmV3IFBvaW50KDAsIDEpO1xuICovXG5Qb2ludC5jb252ZXJ0ID0gZnVuY3Rpb24gKGEpIHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFBvaW50KSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KGFbMF0sIGFbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gYTtcbn07XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIERlZXBseSBjb21wYXJlcyB0d28gb2JqZWN0IGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbChhOiA/bWl4ZWQsIGI6ID9taXhlZCk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh0eXBlb2YgYiA9PT0gJ29iamVjdCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhID09PSBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWVwRXF1YWw7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbi8qKlxuICogQG1vZHVsZSB1dGlsXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBgdGAgdGhhdCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAxLCByZXR1cm5cbiAqIGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBlYXNlcyBiZXR3ZWVuIDAgYW5kIDEgaW4gYSBwbGVhc2luZ1xuICogY3ViaWMgaW4tb3V0IGZhc2hpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhc2VDdWJpY0luT3V0KHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHQgPD0gMCkgcmV0dXJuIDA7XG4gICAgaWYgKHQgPj0gMSkgcmV0dXJuIDE7XG4gICAgY29uc3QgdDIgPSB0ICogdCxcbiAgICAgICAgdDMgPSB0MiAqIHQ7XG4gICAgcmV0dXJuIDQgKiAodCA8IDAuNSA/IHQzIDogMyAqICh0IC0gdDIpICsgdDMgLSAwLjc1KTtcbn1cblxuLyoqXG4gKiBHaXZlbiBnaXZlbiAoeCwgeSksICh4MSwgeTEpIGNvbnRyb2wgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSxcbiAqIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgaW50ZXJwb2xhdGVzIGFsb25nIHRoYXQgY3VydmUuXG4gKlxuICogQHBhcmFtIHAxeCBjb250cm9sIHBvaW50IDEgeCBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDF5IGNvbnRyb2wgcG9pbnQgMSB5IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnggY29udHJvbCBwb2ludCAyIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAyeSBjb250cm9sIHBvaW50IDIgeSBjb29yZGluYXRlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBiZXppZXIgPSBuZXcgVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEEgZGVmYXVsdCBiZXppZXItY3VydmUgcG93ZXJlZCBlYXNpbmcgZnVuY3Rpb24gd2l0aFxuICogY29udHJvbCBwb2ludHMgKDAuMjUsIDAuMSkgYW5kICgwLjI1LCAxKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBlYXNlID0gYmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSk7XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlIHZpYSBtaW4gKyBtYXhcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBuKSk7XG59XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlLCBleGNsdWRpbmcgdGhlIG1pbmltdW0sIHZpYSBtb2R1bGFyIGFyaXRobWV0aWNcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlIHRvIGJlIHJldHVybmVkLCBpbmNsdXNpdmVcbiAqIEByZXR1cm5zIGNvbnN0cmFpbmVkIG51bWJlclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgY29uc3QgdyA9ICgobiAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xuICAgIHJldHVybiAodyA9PT0gbWluKSA/IG1heCA6IHc7XG59XG5cbi8qXG4gKiBDYWxsIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvbiBhbiBhcnJheSBvZiBhcmd1bWVudHMsXG4gKiBjYWxsaW5nIGBjYWxsYmFja2Agd2l0aCB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgYWxsIGNhbGxzLlxuICpcbiAqIEBwYXJhbSBhcnJheSBpbnB1dCB0byBlYWNoIGNhbGwgb2YgdGhlIGFzeW5jIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZuIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChkYXRhLCBjYWxsYmFjaylcbiAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGxiYWNrIHJ1biBhZnRlciBhbGwgYXN5bmMgd29yayBpcyBkb25lLlxuICogY2FsbGVkIHdpdGggYW4gYXJyYXksIGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMgb2YgZWFjaCBhc3luYyBjYWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jQWxsPEl0ZW0sIFJlc3VsdD4oXG4gICAgYXJyYXk6IEFycmF5PEl0ZW0+LFxuICAgIGZuOiAoaXRlbTogSXRlbSwgZm5DYWxsYmFjazogQ2FsbGJhY2s8UmVzdWx0PikgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8UmVzdWx0Pj5cbikge1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSB7IHJldHVybiBjYWxsYmFjayhudWxsLCBbXSk7IH1cbiAgICBsZXQgcmVtYWluaW5nID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgZm4oaXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAoKHJlc3VsdDogYW55KTogUmVzdWx0KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIxMjNcbiAgICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkgY2FsbGJhY2soZXJyb3IsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLypcbiAqIFBvbHlmaWxsIGZvciBPYmplY3QudmFsdWVzLiBOb3QgZnVsbHkgc3BlYyBjb21wbGlhbnQsIGJ1dCB3ZSBkb24ndFxuICogbmVlZCBpdCB0byBiZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzPFQ+KG9iajoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLypcbiAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUga2V5cyBpbiBvbmUgb2JqZWN0IGFuZCB0aGUga2V5c1xuICogaW4gYW5vdGhlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMga2V5cyBkaWZmZXJlbmNlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c0RpZmZlcmVuY2U8UywgVD4ob2JqOiB7W2tleTogc3RyaW5nXTogU30sIG90aGVyOiB7W2tleTogc3RyaW5nXTogVH0pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gW107XG4gICAgZm9yIChjb25zdCBpIGluIG9iaikge1xuICAgICAgICBpZiAoIShpIGluIG90aGVyKSkge1xuICAgICAgICAgICAgZGlmZmVyZW5jZS5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgZGVzdGluYXRpb24gb2JqZWN0IGFuZCBvcHRpb25hbGx5IG1hbnkgc291cmNlIG9iamVjdHMsXG4gKiBjb3B5IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBvYmplY3RzIGludG8gdGhlIGRlc3RpbmF0aW9uLlxuICogVGhlIGxhc3Qgc291cmNlIG9iamVjdCBnaXZlbiBvdmVycmlkZXMgcHJvcGVydGllcyBmcm9tIHByZXZpb3VzXG4gKiBzb3VyY2Ugb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZGVzdCBkZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBzb3VyY2VzIHNvdXJjZXMgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSBwdWxsZWRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCAuLi5zb3VyY2VzOiBBcnJheTw/T2JqZWN0Pik6IE9iamVjdCB7XG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc3JjKSB7XG4gICAgICAgICAgICBkZXN0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9iamVjdCBhbmQgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhcyBzdHJpbmdzLCByZXR1cm4gdmVyc2lvblxuICogb2YgdGhhdCBvYmplY3Qgd2l0aCBvbmx5IHRob3NlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHNyYyB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydGllcyBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBjaG9zZW5cbiAqIHRvIGFwcGVhciBvbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm5zIG9iamVjdCB3aXRoIGxpbWl0ZWQgcHJvcGVydGllcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZm9vID0geyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMTAgfTtcbiAqIHZhciBqdXN0TmFtZSA9IHBpY2soZm9vLCBbJ25hbWUnXSk7XG4gKiAvLyBqdXN0TmFtZSA9IHsgbmFtZTogJ0NoYXJsaWUnIH1cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNyYzogT2JqZWN0LCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KTogT2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgayA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIGlmIChrIGluIHNyYykge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmxldCBpZCA9IDE7XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pcXVlIG51bWVyaWMgaWQsIHN0YXJ0aW5nIGF0IDEgYW5kIGluY3JlbWVudGluZyB3aXRoXG4gKiBlYWNoIGNhbGwuXG4gKlxuICogQHJldHVybnMgdW5pcXVlIG51bWVyaWMgaWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaWQrKztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSByYW5kb20gVVVJRCAodjQpLiBUYWtlbiBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qZWQvOTgyODgzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIGIoYSkge1xuICAgICAgICByZXR1cm4gYSA/IChhIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGEgLyA0KS50b1N0cmluZygxNikgOlxuICAgICAgICAvLyRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIHRoZSBpbXBsaWVkIGFycmF5IGxpdGVyYWwgY29udmVyc2lvbiBoZXJlXG4gICAgICAgICAgICAoWzFlN10gKyAtWzFlM10gKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBiKTtcbiAgICB9XG4gICAgcmV0dXJuIGIoKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHN0cmluZyB0byBtYXRjaCBVVUlEKHY0KSBvZiB0aGVcbiAqIGZvcm06IHh4eHh4eHh4LXh4eHgtNHh4eC1bODlhYl14eHgteHh4eHh4eHh4eHh4XG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byB2YWxpZGF0ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVV1aWQoc3RyOiA/c3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ciA/IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3Qoc3RyKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzLCByZXBsYWNlIGFsbCBvZiB0aGVtXG4gKiB3aXRoIGJvdW5kIHZlcnNpb25zIHRoYXQgd2lsbCBhbHdheXMgcmVmZXIgdG8gYGNvbnRleHRgIGFzIGB0aGlzYC4gVGhpc1xuICogaXMgdXNlZnVsIGZvciBjbGFzc2VzIHdoZXJlIG90aGVyd2lzZSBldmVudCBiaW5kaW5ncyB3b3VsZCByZWFzc2lnblxuICogYHRoaXNgIHRvIHRoZSBldmVudGVkIG9iamVjdCBvciBzb21lIG90aGVyIHZhbHVlOiB0aGlzIGxldHMgeW91IGVuc3VyZVxuICogdGhlIGB0aGlzYCB2YWx1ZSBhbHdheXMuXG4gKlxuICogQHBhcmFtIGZucyBsaXN0IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lc1xuICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBNeUNsYXNzKCkge1xuICogICBiaW5kQWxsKFsnb250aW1lciddLCB0aGlzKTtcbiAqICAgdGhpcy5uYW1lID0gJ1RvbSc7XG4gKiB9XG4gKiBNeUNsYXNzLnByb3RvdHlwZS5vbnRpbWVyID0gZnVuY3Rpb24oKSB7XG4gKiAgIGFsZXJ0KHRoaXMubmFtZSk7XG4gKiB9O1xuICogdmFyIG15Q2xhc3MgPSBuZXcgTXlDbGFzcygpO1xuICogc2V0VGltZW91dChteUNsYXNzLm9udGltZXIsIDEwMCk7XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZEFsbChmbnM6IEFycmF5PHN0cmluZz4sIGNvbnRleHQ6IE9iamVjdCk6IHZvaWQge1xuICAgIGZucy5mb3JFYWNoKChmbikgPT4ge1xuICAgICAgICBpZiAoIWNvbnRleHRbZm5dKSB7IHJldHVybjsgfVxuICAgICAgICBjb250ZXh0W2ZuXSA9IGNvbnRleHRbZm5dLmJpbmQoY29udGV4dCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBhIHBhcnRpY3VsYXIgc3Vic3RyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZzogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzdWZmaXgsIHN0cmluZy5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSAhPT0gLTE7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBtYXBwaW5nIGFsbCB0aGUgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCB3aGlsZVxuICogcHJlc2VydmluZyB0aGVpciBrZXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3QoaW5wdXQ6IE9iamVjdCwgaXRlcmF0b3I6IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogT2JqZWN0IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGJ5IGZpbHRlcmluZyBvdXQgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwnO1xuZXhwb3J0IHtkZWVwRXF1YWx9O1xuXG4vKipcbiAqIERlZXBseSBjbG9uZXMgdHdvIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lPFQ+KGlucHV0OiBUKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoY2xvbmUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gKChtYXBPYmplY3QoaW5wdXQsIGNsb25lKTogYW55KTogVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gYXJyYXlzIGhhdmUgYXQgbGVhc3Qgb25lIGNvbW1vbiBlbGVtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheXNJbnRlcnNlY3Q8VD4oYTogQXJyYXk8VD4sIGI6IEFycmF5PFQ+KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBhLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGlmIChiLmluZGV4T2YoYVtsXSkgPj0gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBhbmQgZW5zdXJlIGR1cGxpY2F0ZSB3YXJuaW5nIG1lc3NhZ2VzXG4gKiBhcmUgbm90IHByaW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgd2Fybk9uY2VIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdKSB7XG4gICAgICAgIC8vIGNvbnNvbGUgaXNuJ3QgZGVmaW5lZCBpbiBzb21lIFdlYldvcmtlcnMsIHNlZSAjMjU1OFxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdID0gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIGlmIHRoZSBwcm92aWRlZCBQb2ludHMgYXJlIGluIGEgY291bnRlciBjbG9ja3dpc2UgKHRydWUpIG9yIGNsb2Nrd2lzZSAoZmFsc2UpIG9yZGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHRydWUgZm9yIGEgY291bnRlciBjbG9ja3dpc2Ugc2V0IG9mIHBvaW50c1xuICovXG4vLyBodHRwOi8vYnJ5Y2Vib2UuY29tLzIwMDYvMTAvMjMvbGluZS1zZWdtZW50LWludGVyc2VjdGlvbi1hbGdvcml0aG0vXG5leHBvcnQgZnVuY3Rpb24gaXNDb3VudGVyQ2xvY2t3aXNlKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGMueSAtIGEueSkgKiAoYi54IC0gYS54KSA+IChiLnkgLSBhLnkpICogKGMueCAtIGEueCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2lnbmVkIGFyZWEgZm9yIHRoZSBwb2x5Z29uIHJpbmcuICBQb3N0aXZlIGFyZWFzIGFyZSBleHRlcmlvciByaW5ncyBhbmRcbiAqIGhhdmUgYSBjbG9ja3dpc2Ugd2luZGluZy4gIE5lZ2F0aXZlIGFyZWFzIGFyZSBpbnRlcmlvciByaW5ncyBhbmQgaGF2ZSBhIGNvdW50ZXIgY2xvY2t3aXNlXG4gKiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHJpbmcgRXh0ZXJpb3Igb3IgaW50ZXJpb3IgcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nOiBBcnJheTxQb2ludD4pOiBudW1iZXIge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDEsIHAxLCBwMjsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBwMSA9IHJpbmdbaV07XG4gICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgc3VtICs9IChwMi54IC0gcDEueCkgKiAocDEueSArIHAyLnkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIERldGVjdHMgY2xvc2VkIHBvbHlnb25zLCBmaXJzdCArIGxhc3QgcG9pbnQgYXJlIGVxdWFsXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBwb2ludHMgYXJyYXkgb2YgcG9pbnRzXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBvaW50cyBhcmUgYSBjbG9zZWQgcG9seWdvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDbG9zZWRQb2x5Z29uKHBvaW50czogQXJyYXk8UG9pbnQ+KTogYm9vbGVhbiB7XG4gICAgLy8gSWYgaXQgaXMgMiBwb2ludHMgdGhhdCBhcmUgdGhlIHNhbWUgdGhlbiBpdCBpcyBhIHBvaW50XG4gICAgLy8gSWYgaXQgaXMgMyBwb2ludHMgd2l0aCBzdGFydCBhbmQgZW5kIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBsaW5lXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwMSA9IHBvaW50c1swXTtcbiAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoTWF0aC5hYnMocDEueCAtIHAyLngpID4gMCB8fFxuICAgICAgICBNYXRoLmFicyhwMS55IC0gcDIueSkgPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwb2x5Z29uIHNpbXBsaWZpY2F0aW9uIGNhbiBwcm9kdWNlIHBvbHlnb25zIHdpdGggemVybyBhcmVhIGFuZCBtb3JlIHRoYW4gMyBwb2ludHNcbiAgICByZXR1cm4gTWF0aC5hYnMoY2FsY3VsYXRlU2lnbmVkQXJlYShwb2ludHMpKSA+IDAuMDE7XG59XG5cbi8qKlxuICogQ29udmVydHMgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIHRvIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNwaGVyaWNhbCBTcGhlcmljYWwgY29vcmRpbmF0ZXMsIGluIFtyYWRpYWwsIGF6aW11dGhhbCwgcG9sYXJdXG4gKiBAcmV0dXJuIGNhcnRlc2lhbiBjb29yZGluYXRlcyBpbiBbeCwgeSwgel1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oW3IsIGF6aW11dGhhbCwgcG9sYXJdOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0ge1xuICAgIC8vIFdlIGFic3RyYWN0IFwibm9ydGhcIi9cInVwXCIgKGNvbXBhc3Mtd2lzZSkgdG8gYmUgMMOCwrAgd2hlbiByZWFsbHkgdGhpcyBpcyA5MMOCwrAgKMOPwoAvMik6XG4gICAgLy8gY29ycmVjdCBmb3IgdGhhdCBoZXJlXG4gICAgYXppbXV0aGFsICs9IDkwO1xuXG4gICAgLy8gQ29udmVydCBhemltdXRoYWwgYW5kIHBvbGFyIGFuZ2xlcyB0byByYWRpYW5zXG4gICAgYXppbXV0aGFsICo9IE1hdGguUEkgLyAxODA7XG4gICAgcG9sYXIgKj0gTWF0aC5QSSAvIDE4MDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHIgKiBNYXRoLmNvcyhhemltdXRoYWwpICogTWF0aC5zaW4ocG9sYXIpLFxuICAgICAgICB5OiByICogTWF0aC5zaW4oYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgejogciAqIE1hdGguY29zKHBvbGFyKVxuICAgIH07XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuLyoqXG4gKiAgUmV0dW5zIHRydWUgaWYgdGhlIHdoZW4gcnVuIGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgZGF0YSBmcm9tICdDYWNoZS1Db250cm9sJyBoZWFkZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY2FjaGVDb250cm9sIFZhbHVlIG9mICdDYWNoZS1Db250cm9sJyBoZWFkZXJcbiAqIEByZXR1cm4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyc2VkIGhlYWRlciBpbmZvLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbChjYWNoZUNvbnRyb2w6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgLy8gVGFrZW4gZnJvbSBbV3JlY2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvd3JlY2spXG4gICAgY29uc3QgcmUgPSAvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2c7XG5cbiAgICBjb25zdCBoZWFkZXIgPSB7fTtcbiAgICBjYWNoZUNvbnRyb2wucmVwbGFjZShyZSwgKCQwLCAkMSwgJDIsICQzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJDIgfHwgJDM7XG4gICAgICAgIGhlYWRlclskMV0gPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyWydtYXgtYWdlJ10pIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gcGFyc2VJbnQoaGVhZGVyWydtYXgtYWdlJ10sIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG1heEFnZSkpIGRlbGV0ZSBoZWFkZXJbJ21heC1hZ2UnXTtcbiAgICAgICAgZWxzZSBoZWFkZXJbJ21heC1hZ2UnXSA9IG1heEFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyO1xufVxuXG5sZXQgX2lzU2FmYXJpID0gbnVsbDtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBydW4gaW4gV2ViS2l0IGRlcml2ZWQgYnJvd3NlcnMuXG4gKiBUaGlzIGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIFNhZmFyaSBjYXVzZWQgYnkgdXNpbmcgVHJhbnNmZXJhYmxlIG9iamVjdHMgdG9cbiAqIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBXZWJXb3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvODc3MVxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgdW5kZXJseWluZyBTYWZhcmkgaXNzdWUgaXMgZml4ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzY29wZSB7V2luZG93T3JXb3JrZXJHbG9iYWxTY29wZX0gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIGFuZCBXZWJXb3JrZXIgY29udGV4dCxcbiAqICAgICAgbGV0IHRoZSBjYWxsaW5nIHNjb3BlIHBhc3MgaW4gdGhlIGdsb2JhbCBzY29wZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKHNjb3BlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoX2lzU2FmYXJpID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdXNlckFnZW50ID0gc2NvcGUubmF2aWdhdG9yID8gc2NvcGUubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gICAgICAgIF9pc1NhZmFyaSA9ICEhc2NvcGUuc2FmYXJpIHx8XG4gICAgICAgICEhKHVzZXJBZ2VudCAmJiAoL1xcYihpUGFkfGlQaG9uZXxpUG9kKVxcYi8udGVzdCh1c2VyQWdlbnQpIHx8ICghIXVzZXJBZ2VudC5tYXRjaCgnU2FmYXJpJykgJiYgIXVzZXJBZ2VudC5tYXRjaCgnQ2hyb21lJykpKSk7XG4gICAgfVxuICAgIHJldHVybiBfaXNTYWZhcmk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46IChwYWludFN0YXJ0VGltZXN0YW1wOiBudW1iZXIpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGlsZVVSTCAmJiAhaXNNYXBib3hVUkwodGlsZVVSTCkpIHJldHVybiB0aWxlVVJMO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHRpbGVVUkwpO1xuICAgICAgICBjb25zdCBpbWFnZUV4dGVuc2lvblJlID0gLyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLztcbiAgICAgICAgY29uc3QgdGlsZVVSTEFQSVByZWZpeFJlID0gL14uK1xcL3Y0XFwvLztcblxuICAgICAgICAvLyBUaGUgdjQgbWFwYm94IHRpbGUgQVBJIHN1cHBvcnRzIDUxMng1MTIgaW1hZ2UgdGlsZXMgb25seSB3aGVuIEAyeFxuICAgICAgICAvLyBpcyBhcHBlbmRlZCB0byB0aGUgdGlsZSBVUkwuIElmIGB0aWxlU2l6ZTogNTEyYCBpcyBzcGVjaWZpZWQgZm9yXG4gICAgICAgIC8vIGEgTWFwYm94IHJhc3RlciBzb3VyY2UgZm9yY2UgdGhlIEAyeCBzdWZmaXggZXZlbiBpZiBhIG5vbiBoaWRwaSBkZXZpY2UuXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyIHx8IHRpbGVTaXplID09PSA1MTIgPyAnQDJ4JyA6ICcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCA/ICcud2VicCcgOiAnJDEnO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UoaW1hZ2VFeHRlbnNpb25SZSwgYCR7c3VmZml4fSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UodGlsZVVSTEFQSVByZWZpeFJlLCAnLycpO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAvdjQke3VybE9iamVjdC5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBnZXRBY2Nlc3NUb2tlbih1cmxPYmplY3QucGFyYW1zKSB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIGFjY2Vzc1Rva2VuICYmIHRoaXMuX3NrdVRva2VuKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYHNrdT0ke3RoaXMuX3NrdVRva2VufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsaXplVGlsZVVSTCh1cmw6IHN0cmluZywgcmVtb3ZlQWNjZXNzVG9rZW46IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBsZXQgcGFyYW1zID0gdXJsT2JqZWN0LnBhcmFtcztcbiAgICAgICAgaWYgKHJlbW92ZUFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuZmlsdGVyKHAgPT4gIXAubWF0Y2goL15hY2Nlc3NfdG9rZW49LykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSByZXN1bHQgKz0gYD8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjYW5vbmljYWxpemVUaWxlc2V0KHRpbGVKU09OOiBUaWxlSlNPTiwgc291cmNlVVJMPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUFjY2Vzc1Rva2VuID0gc291cmNlVVJMID8gaXNNYXBib3hVUkwoc291cmNlVVJMKSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdGlsZUpTT04udGlsZXMgfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHRoaXMuY2Fub25pY2FsaXplVGlsZVVSTCh1cmwsIHJlbW92ZUFjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKHBhcmFtczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxuLy8gV2UncmUgdXNpbmcgYSBnbG9iYWwgc2hhcmVkIGNhY2hlIG9iamVjdC4gTm9ybWFsbHksIHJlcXVlc3RpbmcgYWQtaG9jIENhY2hlIG9iamVjdHMgaXMgZmluZSwgYnV0XG4vLyBTYWZhcmkgaGFzIGEgbWVtb3J5IGxlYWsgaW4gd2hpY2ggaXQgZmFpbHMgdG8gcmVsZWFzZSBtZW1vcnkgd2hlbiByZXF1ZXN0aW5nIGtleXMoKSBmcm9tIGEgQ2FjaGVcbi8vIG9iamVjdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5OTEgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5sZXQgc2hhcmVkQ2FjaGU6ID9Qcm9taXNlPENhY2hlPjtcblxuZnVuY3Rpb24gY2FjaGVPcGVuKCkge1xuICAgIGlmICh3aW5kb3cuY2FjaGVzICYmICFzaGFyZWRDYWNoZSkge1xuICAgICAgICBzaGFyZWRDYWNoZSA9IHdpbmRvdy5jYWNoZXMub3BlbihDQUNIRV9OQU1FKTtcbiAgICB9XG59XG5cbi8vIFdlJ3JlIG5ldmVyIGNsb3NpbmcgdGhlIGNhY2hlLCBidXQgb3VyIHVuaXQgdGVzdHMgcmVseSBvbiBjaGFuZ2luZyBvdXQgdGhlIGdsb2JhbCB3aW5kb3cuY2FjaGVzXG4vLyBvYmplY3QsIHNvIHdlIGhhdmUgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHVuaXQgdGVzdHMgdGhhdCBhbGxvd3MgcmVzZXR0aW5nIHRoZSBzaGFyZWQgY2FjaGUuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVDbG9zZSgpIHtcbiAgICBzaGFyZWRDYWNoZSA9IHVuZGVmaW5lZDtcbn1cblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFJlc3BvbnNlT3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IG5ldyB3aW5kb3cuSGVhZGVycygpXG4gICAgfTtcbiAgICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHYsIGspID0+IG9wdGlvbnMuaGVhZGVycy5zZXQoaywgdikpO1xuXG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbm8tc3RvcmUnXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KCdFeHBpcmVzJywgbmV3IERhdGUocmVxdWVzdFRpbWUgKyBjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSAqIDEwMDApLnRvVVRDU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IG5ldyBEYXRlKG9wdGlvbnMuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSkuZ2V0VGltZSgpIC0gcmVxdWVzdFRpbWU7XG4gICAgaWYgKHRpbWVVbnRpbEV4cGlyeSA8IE1JTl9USU1FX1VOVElMX0VYUElSWSkgcmV0dXJuO1xuXG4gICAgcHJlcGFyZUJvZHkocmVzcG9uc2UsIGJvZHkgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IG5ldyB3aW5kb3cuUmVzcG9uc2UoYm9keSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY2FjaGVPcGVuKCk7XG4gICAgICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcbiAgICAgICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgIGNvbnN0IHN0cmlwcGVkVVJMID0gc3RyaXBRdWVyeVBhcmFtZXRlcnMocmVxdWVzdC51cmwpO1xuXG4gICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlc2ggPSBpc0ZyZXNoKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWluc2VydCBpbnRvIGNhY2hlIHNvIHRoYXQgb3JkZXIgb2Yga2V5cyBpbiB0aGUgY2FjaGUgaXMgdGhlIG9yZGVyIG9mIGFjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIG1ha2VzIHRoZSBjYWNoZSBhIExSVSBpbnN0ZWFkIG9mIGEgRklGTyBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKHN0cmlwcGVkVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXQoc3RyaXBwZWRVUkwsIHJlc3BvbnNlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UsIGZyZXNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSB8fCAwKTtcbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICByZXR1cm4gZXhwaXJlcyA+IERhdGUubm93KCkgJiYgIWNhY2hlQ29udHJvbFsnbm8tY2FjaGUnXTtcbn1cblxuLy8gYEluZmluaXR5YCB0cmlnZ2VycyBhIGNhY2hlIGNoZWNrIGFmdGVyIHRoZSBmaXJzdCB0aWxlIGlzIGxvYWRlZFxuLy8gc28gdGhhdCBhIGNoZWNrIGlzIHJ1biBhdCBsZWFzdCBvbmNlIG9uIGVhY2ggcGFnZSBsb2FkLlxubGV0IGdsb2JhbEVudHJ5Q291bnRlciA9IEluZmluaXR5O1xuXG4vLyBUaGUgY2FjaGUgY2hlY2sgZ2V0cyBydW4gb24gYSB3b3JrZXIuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdFxuLy8gcHJvZmlsaW5nIHNvbWV0aW1lcyBzaG93cyB0aGlzIGFzIHRha2luZyB1cCBzaWduaWZpY2FudCB0aW1lIG9uIHRoZVxuLy8gdGhyZWFkIGl0IGdldHMgY2FsbGVkIGZyb20uIEFuZCBzb21ldGltZXMgaXQgZG9lc24ndC4gSXQgKm1heSogYmVcbi8vIGZpbmUgdG8gcnVuIHRoaXMgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBvdXQgb2YgY2F1dGlvbiB0aGlzIGlzIGJlaW5nXG4vLyBkaXNwYXRjaGVkIG9uIGEgd29ya2VyLiBUaGlzIGNhbiBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBpbiB0aGUgZnV0dXJlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgICBnbG9iYWxFbnRyeUNvdW50ZXIrKztcbiAgICBpZiAoZ2xvYmFsRW50cnlDb3VudGVyID4gY2FjaGVDaGVja1RocmVzaG9sZCkge1xuICAgICAgICBkaXNwYXRjaGVyLmdldEFjdG9yKCkuc2VuZCgnZW5mb3JjZUNhY2hlU2l6ZUxpbWl0JywgY2FjaGVMaW1pdCk7XG4gICAgICAgIGdsb2JhbEVudHJ5Q291bnRlciA9IDA7XG4gICAgfVxufVxuXG4vLyBydW5zIG9uIHdvcmtlciwgc2VlIGFib3ZlIGNvbW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQ6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIHNoYXJlZENhY2hlXG4gICAgICAgIC50aGVuKGNhY2hlID0+IHtcbiAgICAgICAgICAgIGNhY2hlLmtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSBsaW1pdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRpbGVDYWNoZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByb21pc2UgPSB3aW5kb3cuY2FjaGVzLmRlbGV0ZShDQUNIRV9OQU1FKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS5jYXRjaChjYWxsYmFjaykudGhlbigoKSA9PiBjYWxsYmFjaygpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgY2FjaGVMaW1pdCA9IGxpbWl0O1xuICAgIGNhY2hlQ2hlY2tUaHJlc2hvbGQgPSBjaGVja1RocmVzaG9sZDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxubGV0IHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzOiA/Ym9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBwb3J0c09mZnNjcmVlbkNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgIHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzID0gd2luZG93Lk9mZnNjcmVlbkNhbnZhcyAmJlxuICAgICAgICAgICAgbmV3IHdpbmRvdy5PZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdy5jcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9ydHNPZmZzY3JlZW5DYW52YXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCB3YXJuT25jZSwgaXNXb3JrZXJ9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCBmcm9tICcuL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWRlbnRpYWxzIGAnc2FtZS1vcmlnaW4nfCdpbmNsdWRlJ2AgVXNlICdpbmNsdWRlJyB0byBzZW5kIGNvb2tpZXMgd2l0aCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM/OiBPYmplY3QsXG4gICAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyxcbiAgICBib2R5Pzogc3RyaW5nLFxuICAgIHR5cGU/OiAnc3RyaW5nJyB8ICdqc29uJyB8ICdhcnJheUJ1ZmZlcicsXG4gICAgY3JlZGVudGlhbHM/OiAnc2FtZS1vcmlnaW4nIHwgJ2luY2x1ZGUnLFxuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZz86IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ2FsbGJhY2s8VD4gPSAoZXJyb3I6ID9FcnJvciwgZGF0YTogP1QsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4gdm9pZDtcblxuY2xhc3MgQUpBWEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwMSAmJiBpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSAnOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vUmljaC1IYXJyaXMvYnVibGUvaXNzdWVzLzQwXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLnN0YXR1c30pOiAke3RoaXMudXJsfWA7XG4gICAgfVxufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSdyZSBzZW5kaW5nIHRoZSBjb3JyZWN0IHJlZmVycmVyIGZyb20gYmxvYiBVUkwgd29ya2VyIGJ1bmRsZXMuXG4vLyBGb3IgZmlsZXMgbG9hZGVkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLCBgbG9jYXRpb24ub3JpZ2luYCB3aWxsIGJlIHNldFxuLy8gdG8gdGhlIHN0cmluZyghKSBcIm51bGxcIiAoRmlyZWZveCksIG9yIFwiZmlsZTovL1wiIChDaHJvbWUsIFNhZmFyaSwgRWRnZSwgSUUpLFxuLy8gYW5kIHdlIHdpbGwgc2V0IGFuIGVtcHR5IHJlZmVycmVyLiBPdGhlcndpc2UsIHdlJ3JlIHVzaW5nIHRoZSBkb2N1bWVudCdzIFVSTC5cbi8qIGdsb2JhbCBzZWxmICovXG5leHBvcnQgY29uc3QgZ2V0UmVmZXJyZXIgPSBpc1dvcmtlcigpID9cbiAgICAoKSA9PiBzZWxmLndvcmtlciAmJiBzZWxmLndvcmtlci5yZWZlcnJlciA6XG4gICAgKCkgPT4gKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2Jsb2I6JyA/IHdpbmRvdy5wYXJlbnQgOiB3aW5kb3cpLmxvY2F0aW9uLmhyZWY7XG5cbi8vIERldGVybWluZXMgd2hldGhlciBhIFVSTCBpcyBhIGZpbGU6Ly8gVVJMLiBUaGlzIGlzIG9idmlvdXNseSB0aGUgY2FzZSBpZiBpdCBiZWdpbnNcbi8vIHdpdGggZmlsZTovLy4gUmVsYXRpdmUgVVJMcyBhcmUgYWxzbyBmaWxlOi8vIFVSTHMgaWZmIHRoZSBvcmlnaW5hbCBkb2N1bWVudCB3YXMgbG9hZGVkXG4vLyB2aWEgYSBmaWxlOi8vIFVSTC5cbmNvbnN0IGlzRmlsZVVSTCA9IHVybCA9PiAvXmZpbGU6Ly50ZXN0KHVybCkgfHwgKC9eZmlsZTovLnRlc3QoZ2V0UmVmZXJyZXIoKSkgJiYgIS9eXFx3KzovLnRlc3QodXJsKSk7XG5cbmZ1bmN0aW9uIG1ha2VGZXRjaFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyB3aW5kb3cuQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycy51cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0UGFyYW1ldGVycy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGJvZHk6IHJlcXVlc3RQYXJhbWV0ZXJzLmJvZHksXG4gICAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVycyxcbiAgICAgICAgcmVmZXJyZXI6IGdldFJlZmVycmVyKCksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbiAgICB9KTtcbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2FjaGVJZ25vcmluZ1NlYXJjaCA9IGhhc0NhY2hlRGVmZWF0aW5nU2t1KHJlcXVlc3QudXJsKTtcblxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9yRmV0Y2ggPSAoZXJyLCBjYWNoZWRSZXNwb25zZSwgcmVzcG9uc2VJc0ZyZXNoKSA9PiB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gRG8gZmV0Y2ggaW4gY2FzZSBvZiBjYWNoZSBlcnJvci5cbiAgICAgICAgICAgIC8vIEhUVFAgcGFnZXMgaW4gRWRnZSB0cmlnZ2VyIGEgc2VjdXJpdHkgZXJyb3IgdGhhdCBjYW4gYmUgaWdub3JlZC5cbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1NlY3VyaXR5RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSAmJiByZXNwb25zZUlzRnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5pc2hSZXF1ZXN0KGNhY2hlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZG8gcmV2YWxpZGF0aW9uIHdpdGggJ0lmLU5vbmUtTWF0Y2gnIGJlY2F1c2UgdGhlbiB0aGVcbiAgICAgICAgICAgIC8vIHJlcXVlc3QgZG9lc24ndCBoYXZlIHNpbXBsZSBjb3JzIGhlYWRlcnMuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgd2luZG93LmZldGNoKHJlcXVlc3QpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVhYmxlUmVzcG9uc2UgPSBjYWNoZUlnbm9yaW5nU2VhcmNoID8gcmVzcG9uc2UuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaFJlcXVlc3QocmVzcG9uc2UsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgcmVzcG9uc2Uuc3RhdHVzLCByZXF1ZXN0UGFyYW1ldGVycy51cmwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDIwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2lsZW5jZSBleHBlY3RlZCBBYm9ydEVycm9yXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmlzaFJlcXVlc3QgPSAocmVzcG9uc2UsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSkgPT4ge1xuICAgICAgICAoXG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnYXJyYXlCdWZmZXInID8gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSA6XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicgPyByZXNwb25zZS5qc29uKCkgOlxuICAgICAgICAgICAgcmVzcG9uc2UudGV4dCgpXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjYWNoZWFibGVSZXNwb25zZSAmJiByZXF1ZXN0VGltZSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZSBhZnRlciBpdCBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICAgICAgICAgICAgLy8gVW50aWwgaXQgaXMgZnVsbHkgbG9hZGVkIHRoZXJlIGlzIGEgY2hhbmNlIGl0IHdpbGwgYmUgYWJvcnRlZC4gQWJvcnRpbmcgd2hpbGVcbiAgICAgICAgICAgICAgICAvLyByZWFkaW5nIHRoZSBib2R5IGNhbiBjYXVzZSB0aGUgY2FjaGUgaW5zZXJ0aW9uIHRvIGVycm9yLiBXZSBjb3VsZCBjYXRjaCB0aGlzIGVycm9yXG4gICAgICAgICAgICAgICAgLy8gaW4gbW9zdCBicm93c2VycyBidXQgaW4gRmlyZWZveCBpdCBzZWVtcyB0byBzb21ldGltZXMgY3Jhc2ggdGhlIHRhYi4gQWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gaXQgdG8gdGhlIGNhY2hlIGhlcmUgYXZvaWRzIHRoYXQgZXJyb3IuXG4gICAgICAgICAgICAgICAgY2FjaGVQdXQocmVxdWVzdCwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSk7XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoIWFib3J0ZWQpIGNhbGxiYWNrKG5ldyBFcnJvcihlcnIubWVzc2FnZSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKGNhY2hlSWdub3JpbmdTZWFyY2gpIHtcbiAgICAgICAgY2FjaGVHZXQocmVxdWVzdCwgdmFsaWRhdGVPckZldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0ZU9yRmV0Y2gobnVsbCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIGlmICghY29tcGxldGUpIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9fTtcbn1cblxuZnVuY3Rpb24gbWFrZVhNTEh0dHBSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgPSBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0UGFyYW1ldGVycy5tZXRob2QgfHwgJ0dFVCcsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCwgdHJ1ZSk7XG4gICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgfVxuICAgIGZvciAoY29uc3QgayBpbiByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGssIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnNba10pO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIH1cbiAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gcmVxdWVzdFBhcmFtZXRlcnMuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJztcbiAgICB4aHIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKHhoci5zdGF0dXNUZXh0KSk7XG4gICAgfTtcbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAoKCh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB8fCB4aHIuc3RhdHVzID09PSAwKSAmJiB4aHIucmVzcG9uc2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBkYXRhOiBtaXhlZCA9IHhoci5yZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBtYW51YWxseSBwYXJzaW5nIEpTT04gaGVyZSB0byBnZXQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGEsIHhoci5nZXRSZXNwb25zZUhlYWRlcignQ2FjaGUtQ29udHJvbCcpLCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0V4cGlyZXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgQUpBWEVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIuc3RhdHVzLCByZXF1ZXN0UGFyYW1ldGVycy51cmwpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgeGhyLnNlbmQocmVxdWVzdFBhcmFtZXRlcnMuYm9keSk7XG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHhoci5hYm9ydCgpfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1ha2VSZXF1ZXN0ID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgLy8gV2UncmUgdHJ5aW5nIHRvIHVzZSB0aGUgRmV0Y2ggQVBJIGlmIHBvc3NpYmxlLiBIb3dldmVyLCBpbiBzb21lIHNpdHVhdGlvbnMgd2UgY2FuJ3QgdXNlIGl0OlxuICAgIC8vIC0gSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXQgYXQgYWxsLiBJbiB0aGlzIGNhc2UsIHdlIGRpc3BhdGNoIHRoZSByZXF1ZXN0IHRvIHRoZSBtYWluIHRocmVhZCBzb1xuICAgIC8vICAgdGhhdCB3ZSBjYW4gZ2V0IGFuIGFjY3J1YXRlIHJlZmVycmVyIGhlYWRlci5cbiAgICAvLyAtIFNhZmFyaSBleHBvc2VzIHdpbmRvdy5BYm9ydENvbnRyb2xsZXIsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYWN0dWFsbHkgYWJvcnQgYW55IHJlcXVlc3RzIGluXG4gICAgLy8gICBzb21lIHZlcnNpb25zIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDk4MCNjMilcbiAgICAvLyAtIFJlcXVlc3RzIGZvciByZXNvdXJjZXMgd2l0aCB0aGUgZmlsZTovLyBVUkkgc2NoZW1lIGRvbid0IHdvcmsgd2l0aCB0aGUgRmV0Y2ggQVBJIGVpdGhlci4gSW5cbiAgICAvLyAgIHRoaXMgY2FzZSB3ZSB1bmNvbmRpdGlvbmFsbHkgdXNlIFhIUiBvbiB0aGUgY3VycmVudCB0aHJlYWQgc2luY2UgcmVmZXJyZXJzIGRvbid0IG1hdHRlci5cbiAgICBpZiAoIWlzRmlsZVVSTChyZXF1ZXN0UGFyYW1ldGVycy51cmwpKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmV0Y2ggJiYgd2luZG93LlJlcXVlc3QgJiYgd2luZG93LkFib3J0Q29udHJvbGxlciAmJiB3aW5kb3cuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ3NpZ25hbCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUZldGNoUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dvcmtlcigpICYmIHNlbGYud29ya2VyICYmIHNlbGYud29ya2VyLmFjdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBxdWV1ZU9uTWFpblRocmVhZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53b3JrZXIuYWN0b3Iuc2VuZCgnZ2V0UmVzb3VyY2UnLCByZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2ssIHVuZGVmaW5lZCwgcXVldWVPbk1haW5UaHJlYWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRKU09OID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxPYmplY3Q+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdqc29uJ30pLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXJyYXlCdWZmZXIgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPEFycmF5QnVmZmVyPik6IENhbmNlbGFibGUge1xuICAgIHJldHVybiBtYWtlUmVxdWVzdChleHRlbmQocmVxdWVzdFBhcmFtZXRlcnMsIHt0eXBlOiAnYXJyYXlCdWZmZXInfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3N0RGF0YSA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8c3RyaW5nPik6IENhbmNlbGFibGUge1xuICAgIHJldHVybiBtYWtlUmVxdWVzdChleHRlbmQocmVxdWVzdFBhcmFtZXRlcnMsIHttZXRob2Q6ICdQT1NUJ30pLCBjYWxsYmFjayk7XG59O1xuXG5mdW5jdGlvbiBzYW1lT3JpZ2luKHVybCkge1xuICAgIGNvbnN0IGE6IEhUTUxBbmNob3JFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGEucHJvdG9jb2wgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCAmJiBhLmhvc3QgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xufVxuXG5jb25zdCB0cmFuc3BhcmVudFBuZ1VybCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0nO1xuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvSW1hZ2UoZGF0YTogQXJyYXlCdWZmZXIsIGNhbGxiYWNrOiAoZXJyOiA/RXJyb3IsIGltYWdlOiA/SFRNTEltYWdlRWxlbWVudCkgPT4gdm9pZCwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSB7XG4gICAgY29uc3QgaW1nOiBIVE1MSW1hZ2VFbGVtZW50ID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuICAgIGNvbnN0IFVSTCA9IHdpbmRvdy5VUkw7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgaW1nKTtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTtcbiAgICB9O1xuICAgIGltZy5vbmVycm9yID0gKCkgPT4gY2FsbGJhY2sobmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBpbWFnZS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbCA9IGNhY2hlQ29udHJvbDtcbiAgICAoaW1nOiBhbnkpLmV4cGlyZXMgPSBleHBpcmVzO1xuICAgIGltZy5zcmMgPSBkYXRhLmJ5dGVMZW5ndGggPyBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIDogdHJhbnNwYXJlbnRQbmdVcmw7XG59XG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9JbWFnZUJpdG1hcChkYXRhOiBBcnJheUJ1ZmZlciwgY2FsbGJhY2s6IChlcnI6ID9FcnJvciwgaW1hZ2U6ID9JbWFnZUJpdG1hcCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGJsb2I6IEJsb2IgPSBuZXcgd2luZG93LkJsb2IoW25ldyBVaW50OEFycmF5KGRhdGEpXSwge3R5cGU6ICdpbWFnZS9wbmcnfSk7XG4gICAgd2luZG93LmNyZWF0ZUltYWdlQml0bWFwKGJsb2IpLnRoZW4oKGltZ0JpdG1hcCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBpbWdCaXRtYXApO1xuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgaW1hZ2UgYmVjYXVzZSBvZiAke2UubWVzc2FnZX0uIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuYCkpO1xuICAgIH0pO1xufVxuXG5sZXQgaW1hZ2VRdWV1ZSwgbnVtSW1hZ2VSZXF1ZXN0cztcbmV4cG9ydCBjb25zdCByZXNldEltYWdlUmVxdWVzdFF1ZXVlID0gKCkgPT4ge1xuICAgIGltYWdlUXVldWUgPSBbXTtcbiAgICBudW1JbWFnZVJlcXVlc3RzID0gMDtcbn07XG5yZXNldEltYWdlUmVxdWVzdFF1ZXVlKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZSA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IENhbGxiYWNrPEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcD4pOiBDYW5jZWxhYmxlIHtcbiAgICBpZiAod2VicFN1cHBvcnRlZC5zdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzKSB7XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVycy5hY2NlcHQgPSAnaW1hZ2Uvd2VicCwqLyonO1xuICAgIH1cblxuICAgIC8vIGxpbWl0IGNvbmN1cnJlbnQgaW1hZ2UgbG9hZHMgdG8gaGVscCB3aXRoIHJhc3RlciBzb3VyY2VzIHBlcmZvcm1hbmNlIG9uIGJpZyBzY3JlZW5zXG4gICAgaWYgKG51bUltYWdlUmVxdWVzdHMgPj0gY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUykge1xuICAgICAgICBjb25zdCBxdWV1ZWQgPSB7XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycyxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbCgpIHsgdGhpcy5jYW5jZWxsZWQgPSB0cnVlOyB9XG4gICAgICAgIH07XG4gICAgICAgIGltYWdlUXVldWUucHVzaChxdWV1ZWQpO1xuICAgICAgICByZXR1cm4gcXVldWVkO1xuICAgIH1cbiAgICBudW1JbWFnZVJlcXVlc3RzKys7XG5cbiAgICBsZXQgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICBjb25zdCBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhZHZhbmNlZCkgcmV0dXJuO1xuICAgICAgICBhZHZhbmNlZCA9IHRydWU7XG4gICAgICAgIG51bUltYWdlUmVxdWVzdHMtLTtcbiAgICAgICAgYXNzZXJ0KG51bUltYWdlUmVxdWVzdHMgPj0gMCk7XG4gICAgICAgIHdoaWxlIChpbWFnZVF1ZXVlLmxlbmd0aCAmJiBudW1JbWFnZVJlcXVlc3RzIDwgY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gaW1hZ2VRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qge3JlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaywgY2FuY2VsbGVkfSA9IHJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuY2FuY2VsID0gZ2V0SW1hZ2UocmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrKS5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gcmVxdWVzdCB0aGUgaW1hZ2Ugd2l0aCBYSFIgdG8gd29yayBhcm91bmQgY2FjaGluZyBpc3N1ZXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzE0NzBcbiAgICBjb25zdCByZXF1ZXN0ID0gZ2V0QXJyYXlCdWZmZXIocmVxdWVzdFBhcmFtZXRlcnMsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpID0+IHtcblxuICAgICAgICBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGFycmF5QnVmZmVyVG9JbWFnZUJpdG1hcChkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5QnVmZmVyVG9JbWFnZShkYXRhLCBjYWxsYmFjaywgY2FjaGVDb250cm9sLCBleHBpcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvID0gZnVuY3Rpb24odXJsczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPEhUTUxWaWRlb0VsZW1lbnQ+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcbiAgICB2aWRlby5tdXRlZCA9IHRydWU7XG4gICAgdmlkZW8ub25sb2Fkc3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdmlkZW8pO1xuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHM6IEhUTUxTb3VyY2VFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuICAgICAgICBpZiAoIXNhbWVPcmlnaW4odXJsc1tpXSkpIHtcbiAgICAgICAgICAgIHZpZGVvLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICAgIH1cbiAgICAgICAgcy5zcmMgPSB1cmxzW2ldO1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHt9fTtcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi91dGlsJztcblxudHlwZSBMaXN0ZW5lciA9IChPYmplY3QpID0+IGFueTtcbnR5cGUgTGlzdGVuZXJzID0geyBbc3RyaW5nXTogQXJyYXk8TGlzdGVuZXI+IH07XG5cbmZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IExpc3RlbmVyLCBsaXN0ZW5lckxpc3Q6IExpc3RlbmVycykge1xuICAgIGNvbnN0IGxpc3RlbmVyRXhpc3RzID0gbGlzdGVuZXJMaXN0W3R5cGVdICYmIGxpc3RlbmVyTGlzdFt0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSAhPT0gLTE7XG4gICAgaWYgKCFsaXN0ZW5lckV4aXN0cykge1xuICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0gPSBsaXN0ZW5lckxpc3RbdHlwZV0gfHwgW107XG4gICAgICAgIGxpc3RlbmVyTGlzdFt0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IExpc3RlbmVyLCBsaXN0ZW5lckxpc3Q6IExpc3RlbmVycykge1xuICAgIGlmIChsaXN0ZW5lckxpc3QgJiYgbGlzdGVuZXJMaXN0W3R5cGVdKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJMaXN0W3R5cGVdLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50IHtcbiAgICArdHlwZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBleHRlbmQodGhpcywgZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgRXJyb3JMaWtlIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIGVycm9yOiBFcnJvckxpa2U7XG5cbiAgICBjb25zdHJ1Y3RvcihlcnJvcjogRXJyb3JMaWtlLCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBzdXBlcignZXJyb3InLCBleHRlbmQoe2Vycm9yfSwgZGF0YSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBNZXRob2RzIG1peGVkIGluIHRvIG90aGVyIGNsYXNzZXMgZm9yIGV2ZW50IGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAbWl4aW4gRXZlbnRlZFxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRlZCB7XG4gICAgX2xpc3RlbmVyczogTGlzdGVuZXJzO1xuICAgIF9vbmVUaW1lTGlzdGVuZXJzOiBMaXN0ZW5lcnM7XG4gICAgX2V2ZW50ZWRQYXJlbnQ6ID9FdmVudGVkO1xuICAgIF9ldmVudGVkUGFyZW50RGF0YTogPyhPYmplY3QgfCAoKSA9PiBPYmplY3QpO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBhZGQgYSBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvbih0eXBlOiAqLCBsaXN0ZW5lcjogTGlzdGVuZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fbGlzdGVuZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gcmVtb3ZlIGxpc3RlbmVycyBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvZmYodHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKSB7XG4gICAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9saXN0ZW5lcnMpO1xuICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgZmlyc3QgdGltZSB0aGUgZXZlbnQgZmlyZXMgYWZ0ZXIgdGhlIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQgdGhlIGZpcnN0IHRpbWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb25jZSh0eXBlOiAqLCBsaXN0ZW5lcjogTGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fb25lVGltZUxpc3RlbmVycyA9IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgfHwge307XG4gICAgICAgIF9hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmaXJlKGV2ZW50OiBFdmVudCwgcHJvcGVydGllcz86IE9iamVjdCkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IHdpdGggKHR5cGU6IHN0cmluZywgcHJvcGVydGllczogT2JqZWN0KSBzaWduYXR1cmUgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82NTIyLFxuICAgICAgICAvLyAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtZHJhdy9pc3N1ZXMvNzY2XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChldmVudCwgcHJvcGVydGllcyB8fCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlID0gZXZlbnQudHlwZTtcblxuICAgICAgICBpZiAodGhpcy5saXN0ZW5zKHR5cGUpKSB7XG4gICAgICAgICAgICAoZXZlbnQ6IGFueSkudGFyZ2V0ID0gdGhpcztcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFkZGluZyBvciByZW1vdmluZyBsaXN0ZW5lcnMgaW5zaWRlIG90aGVyIGxpc3RlbmVycyB3b24ndCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMgJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdID8gdGhpcy5fbGlzdGVuZXJzW3R5cGVdLnNsaWNlKCkgOiBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9uZVRpbWVMaXN0ZW5lcnMgPSB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzICYmIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0gPyB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdLnNsaWNlKCkgOiBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2Ygb25lVGltZUxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZXZlbnRlZFBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBleHRlbmQoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5fZXZlbnRlZFBhcmVudERhdGEgPT09ICdmdW5jdGlvbicgPyB0aGlzLl9ldmVudGVkUGFyZW50RGF0YSgpIDogdGhpcy5fZXZlbnRlZFBhcmVudERhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudC5maXJlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCBubyBlcnJvciBldmVudHMgYXJlIGRyb3BwZWQsIHByaW50IHRoZW0gdG8gdGhlXG4gICAgICAgIC8vIGNvbnNvbGUgaWYgdGhleSBoYXZlIG5vIGxpc3RlbmVycy5cbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRydWUgaWYgdGhpcyBpbnN0YW5jZSBvZiBFdmVudGVkIG9yIGFueSBmb3J3YXJkZWVkIGluc3RhbmNlcyBvZiBFdmVudGVkIGhhdmUgYSBsaXN0ZW5lciBmb3IgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSByZWdpc3RlcmVkIGxpc3RlbmVyIGZvciBzcGVjaWZpZWQgZXZlbnQgdHlwZSwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxpc3RlbnModHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5fbGlzdGVuZXJzICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXSAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9vbmVUaW1lTGlzdGVuZXJzICYmIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0gJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX2V2ZW50ZWRQYXJlbnQgJiYgdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHR5cGUpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1YmJsZSBhbGwgZXZlbnRzIGZpcmVkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgRXZlbnRlZCB0byB0aGlzIHBhcmVudCBpbnN0YW5jZSBvZiBFdmVudGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldEV2ZW50ZWRQYXJlbnQocGFyZW50OiA/RXZlbnRlZCwgZGF0YT86IE9iamVjdCB8ICgpID0+IE9iamVjdCkge1xuICAgICAgICB0aGlzLl9ldmVudGVkUGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLl9ldmVudGVkUGFyZW50RGF0YSA9IGRhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuLy8gTm90ZTogRG8gbm90IGluaGVyaXQgZnJvbSBFcnJvci4gSXQgYnJlYWtzIHdoZW4gdHJhbnNwaWxpbmcgdG8gRVM1LlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBpZGVudGlmaWVyOiA/c3RyaW5nO1xuICAgIGxpbmU6ID9udW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihrZXk6ID9zdHJpbmcsIHZhbHVlOiA/eyBfX2xpbmVfXzogbnVtYmVyIH0sIG1lc3NhZ2U6IHN0cmluZywgaWRlbnRpZmllcjogP3N0cmluZykge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAoa2V5ID8gYCR7a2V5fTogYCA6ICcnKSArIG1lc3NhZ2U7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLl9fbGluZV9fKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmUgPSB2YWx1ZS5fX2xpbmVfXztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb25zdGFudHMob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICBpZiAoY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGNvbnN0YW50cywgJ2NvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCcpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG91dHB1dDogYW55LCAuLi5pbnB1dHM6IEFycmF5PGFueT4pIHtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG91dHB1dFtrXSA9IGlucHV0W2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvLyBAZmxvd1xuXG4vLyBUdXJuIGpzb25saW50LWxpbmVzLXByaW1pdGl2ZXMgb2JqZWN0cyBpbnRvIHByaW1pdGl2ZSBvYmplY3RzXG5leHBvcnQgZnVuY3Rpb24gdW5idW5kbGUodmFsdWU6IG1peGVkKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwVW5idW5kbGUodmFsdWU6IG1peGVkKTogbWl4ZWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGRlZXBVbmJ1bmRsZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikpIHtcbiAgICAgICAgY29uc3QgdW5idW5kbGVkVmFsdWU6IHsgW2tleTogc3RyaW5nXTogbWl4ZWQgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgdW5idW5kbGVkVmFsdWVba2V5XSA9IGRlZXBVbmJ1bmRsZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5idW5kbGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuYnVuZGxlKHZhbHVlKTtcbn1cbiIsIi8vIEBmbG93XG5cbmNsYXNzIFBhcnNpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Ioa2V5OiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzaW5nRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcblxuLyoqXG4gKiBUcmFja3MgYGxldGAgYmluZGluZ3MgZHVyaW5nIGV4cHJlc3Npb24gcGFyc2luZy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNjb3BlIHtcbiAgICBwYXJlbnQ6ID9TY29wZTtcbiAgICBiaW5kaW5nczoge1tzdHJpbmddOiBFeHByZXNzaW9ufTtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBTY29wZSwgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiA9IFtdKSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJlc3Npb25dIG9mIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzW25hbWVdID0gZXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbmNhdChiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NvcGUodGhpcywgYmluZGluZ3MpO1xuICAgIH1cblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBFeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3NbbmFtZV0pIHsgcmV0dXJuIHRoaXMuYmluZGluZ3NbbmFtZV07IH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7IHJldHVybiB0aGlzLnBhcmVudC5nZXQobmFtZSk7IH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG5vdCBmb3VuZCBpbiBzY29wZS5gKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW25hbWVdKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaGFzKG5hbWUpIDogZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY29wZTtcbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIE51bGxUeXBlVCA9IHsga2luZDogJ251bGwnIH07XG5leHBvcnQgdHlwZSBOdW1iZXJUeXBlVCA9IHsga2luZDogJ251bWJlcicgfTtcbmV4cG9ydCB0eXBlIFN0cmluZ1R5cGVUID0geyBraW5kOiAnc3RyaW5nJyB9O1xuZXhwb3J0IHR5cGUgQm9vbGVhblR5cGVUID0geyBraW5kOiAnYm9vbGVhbicgfTtcbmV4cG9ydCB0eXBlIENvbG9yVHlwZVQgPSB7IGtpbmQ6ICdjb2xvcicgfTtcbmV4cG9ydCB0eXBlIE9iamVjdFR5cGVUID0geyBraW5kOiAnb2JqZWN0JyB9O1xuZXhwb3J0IHR5cGUgVmFsdWVUeXBlVCA9IHsga2luZDogJ3ZhbHVlJyB9O1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlVCA9IHsga2luZDogJ2Vycm9yJyB9O1xuZXhwb3J0IHR5cGUgQ29sbGF0b3JUeXBlVCA9IHsga2luZDogJ2NvbGxhdG9yJyB9O1xuZXhwb3J0IHR5cGUgRm9ybWF0dGVkVHlwZVQgPSB7IGtpbmQ6ICdmb3JtYXR0ZWQnIH07XG5leHBvcnQgdHlwZSBSZXNvbHZlZEltYWdlVHlwZVQgPSB7IGtpbmQ6ICdyZXNvbHZlZEltYWdlJyB9O1xuXG5leHBvcnQgdHlwZSBFdmFsdWF0aW9uS2luZCA9ICdjb25zdGFudCcgfCAnc291cmNlJyB8ICdjYW1lcmEnIHwgJ2NvbXBvc2l0ZSc7XG5cbmV4cG9ydCB0eXBlIFR5cGUgPVxuICAgIE51bGxUeXBlVCB8XG4gICAgTnVtYmVyVHlwZVQgfFxuICAgIFN0cmluZ1R5cGVUIHxcbiAgICBCb29sZWFuVHlwZVQgfFxuICAgIENvbG9yVHlwZVQgfFxuICAgIE9iamVjdFR5cGVUIHxcbiAgICBWYWx1ZVR5cGVUIHxcbiAgICBBcnJheVR5cGUgfCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgRXJyb3JUeXBlVCB8XG4gICAgQ29sbGF0b3JUeXBlVCB8XG4gICAgRm9ybWF0dGVkVHlwZVQgfFxuICAgIFJlc29sdmVkSW1hZ2VUeXBlVFxuXG5leHBvcnQgdHlwZSBBcnJheVR5cGUgPSB7XG4gICAga2luZDogJ2FycmF5JyxcbiAgICBpdGVtVHlwZTogVHlwZSxcbiAgICBOOiA/bnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBOdWxsVHlwZSA9IHtraW5kOiAnbnVsbCd9O1xuZXhwb3J0IGNvbnN0IE51bWJlclR5cGUgPSB7a2luZDogJ251bWJlcid9O1xuZXhwb3J0IGNvbnN0IFN0cmluZ1R5cGUgPSB7a2luZDogJ3N0cmluZyd9O1xuZXhwb3J0IGNvbnN0IEJvb2xlYW5UeXBlID0ge2tpbmQ6ICdib29sZWFuJ307XG5leHBvcnQgY29uc3QgQ29sb3JUeXBlID0ge2tpbmQ6ICdjb2xvcid9O1xuZXhwb3J0IGNvbnN0IE9iamVjdFR5cGUgPSB7a2luZDogJ29iamVjdCd9O1xuZXhwb3J0IGNvbnN0IFZhbHVlVHlwZSA9IHtraW5kOiAndmFsdWUnfTtcbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSB7a2luZDogJ2Vycm9yJ307XG5leHBvcnQgY29uc3QgQ29sbGF0b3JUeXBlID0ge2tpbmQ6ICdjb2xsYXRvcid9O1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZFR5cGUgPSB7a2luZDogJ2Zvcm1hdHRlZCd9O1xuZXhwb3J0IGNvbnN0IFJlc29sdmVkSW1hZ2VUeXBlID0ge2tpbmQ6ICdyZXNvbHZlZEltYWdlJ307XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShpdGVtVHlwZTogVHlwZSwgTjogP251bWJlcik6IEFycmF5VHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ2FycmF5JyxcbiAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgIE5cbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodHlwZTogVHlwZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGUua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHRvU3RyaW5nKHR5cGUuaXRlbVR5cGUpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHR5cGUuTiA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgYGFycmF5PCR7aXRlbVR5cGV9LCAke3R5cGUuTn0+YCA6XG4gICAgICAgICAgICB0eXBlLml0ZW1UeXBlLmtpbmQgPT09ICd2YWx1ZScgPyAnYXJyYXknIDogYGFycmF5PCR7aXRlbVR5cGV9PmA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZDtcbiAgICB9XG59XG5cbmNvbnN0IHZhbHVlTWVtYmVyVHlwZXMgPSBbXG4gICAgTnVsbFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBGb3JtYXR0ZWRUeXBlLFxuICAgIE9iamVjdFR5cGUsXG4gICAgYXJyYXkoVmFsdWVUeXBlKSxcbiAgICBSZXNvbHZlZEltYWdlVHlwZVxuXTtcblxuLyoqXG4gKiBSZXR1cm5zIG51bGwgaWYgYHRgIGlzIGEgc3VidHlwZSBvZiBgZXhwZWN0ZWRgOyBvdGhlcndpc2UgcmV0dXJucyBhblxuICogZXJyb3IgbWVzc2FnZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1N1YnR5cGUoZXhwZWN0ZWQ6IFR5cGUsIHQ6IFR5cGUpOiA/c3RyaW5nIHtcbiAgICBpZiAodC5raW5kID09PSAnZXJyb3InKSB7XG4gICAgICAgIC8vIEVycm9yIGlzIGEgc3VidHlwZSBvZiBldmVyeSB0eXBlXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAodC5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAoKHQuTiA9PT0gMCAmJiB0Lml0ZW1UeXBlLmtpbmQgPT09ICd2YWx1ZScpIHx8ICFjaGVja1N1YnR5cGUoZXhwZWN0ZWQuaXRlbVR5cGUsIHQuaXRlbVR5cGUpKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBleHBlY3RlZC5OICE9PSAnbnVtYmVyJyB8fCBleHBlY3RlZC5OID09PSB0Lk4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gdC5raW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICBmb3IgKGNvbnN0IG1lbWJlclR5cGUgb2YgdmFsdWVNZW1iZXJUeXBlcykge1xuICAgICAgICAgICAgaWYgKCFjaGVja1N1YnR5cGUobWVtYmVyVHlwZSwgdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgRXhwZWN0ZWQgJHt0b1N0cmluZyhleHBlY3RlZCl9IGJ1dCBmb3VuZCAke3RvU3RyaW5nKHQpfSBpbnN0ZWFkLmA7XG59XG4iLCIvLyAoYykgRGVhbiBNY05hbWVlIDxkZWFuQGdtYWlsLmNvbT4sIDIwMTIuXG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RlYW5tL2Nzcy1jb2xvci1wYXJzZXItanNcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuLy8gSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yL1xudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICBcInRyYW5zcGFyZW50XCI6IFswLDAsMCwwXSwgXCJhbGljZWJsdWVcIjogWzI0MCwyNDgsMjU1LDFdLFxuICBcImFudGlxdWV3aGl0ZVwiOiBbMjUwLDIzNSwyMTUsMV0sIFwiYXF1YVwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImFxdWFtYXJpbmVcIjogWzEyNywyNTUsMjEyLDFdLCBcImF6dXJlXCI6IFsyNDAsMjU1LDI1NSwxXSxcbiAgXCJiZWlnZVwiOiBbMjQ1LDI0NSwyMjAsMV0sIFwiYmlzcXVlXCI6IFsyNTUsMjI4LDE5NiwxXSxcbiAgXCJibGFja1wiOiBbMCwwLDAsMV0sIFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwyMzUsMjA1LDFdLFxuICBcImJsdWVcIjogWzAsMCwyNTUsMV0sIFwiYmx1ZXZpb2xldFwiOiBbMTM4LDQzLDIyNiwxXSxcbiAgXCJicm93blwiOiBbMTY1LDQyLDQyLDFdLCBcImJ1cmx5d29vZFwiOiBbMjIyLDE4NCwxMzUsMV0sXG4gIFwiY2FkZXRibHVlXCI6IFs5NSwxNTgsMTYwLDFdLCBcImNoYXJ0cmV1c2VcIjogWzEyNywyNTUsMCwxXSxcbiAgXCJjaG9jb2xhdGVcIjogWzIxMCwxMDUsMzAsMV0sIFwiY29yYWxcIjogWzI1NSwxMjcsODAsMV0sXG4gIFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwxNDksMjM3LDFdLCBcImNvcm5zaWxrXCI6IFsyNTUsMjQ4LDIyMCwxXSxcbiAgXCJjcmltc29uXCI6IFsyMjAsMjAsNjAsMV0sIFwiY3lhblwiOiBbMCwyNTUsMjU1LDFdLFxuICBcImRhcmtibHVlXCI6IFswLDAsMTM5LDFdLCBcImRhcmtjeWFuXCI6IFswLDEzOSwxMzksMV0sXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LDEzNCwxMSwxXSwgXCJkYXJrZ3JheVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2dyZWVuXCI6IFswLDEwMCwwLDFdLCBcImRhcmtncmV5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJra2hha2lcIjogWzE4OSwxODMsMTA3LDFdLCBcImRhcmttYWdlbnRhXCI6IFsxMzksMCwxMzksMV0sXG4gIFwiZGFya29saXZlZ3JlZW5cIjogWzg1LDEwNyw0NywxXSwgXCJkYXJrb3JhbmdlXCI6IFsyNTUsMTQwLDAsMV0sXG4gIFwiZGFya29yY2hpZFwiOiBbMTUzLDUwLDIwNCwxXSwgXCJkYXJrcmVkXCI6IFsxMzksMCwwLDFdLFxuICBcImRhcmtzYWxtb25cIjogWzIzMywxNTAsMTIyLDFdLCBcImRhcmtzZWFncmVlblwiOiBbMTQzLDE4OCwxNDMsMV0sXG4gIFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsNjEsMTM5LDFdLCBcImRhcmtzbGF0ZWdyYXlcIjogWzQ3LDc5LDc5LDFdLFxuICBcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LDc5LDc5LDFdLCBcImRhcmt0dXJxdW9pc2VcIjogWzAsMjA2LDIwOSwxXSxcbiAgXCJkYXJrdmlvbGV0XCI6IFsxNDgsMCwyMTEsMV0sIFwiZGVlcHBpbmtcIjogWzI1NSwyMCwxNDcsMV0sXG4gIFwiZGVlcHNreWJsdWVcIjogWzAsMTkxLDI1NSwxXSwgXCJkaW1ncmF5XCI6IFsxMDUsMTA1LDEwNSwxXSxcbiAgXCJkaW1ncmV5XCI6IFsxMDUsMTA1LDEwNSwxXSwgXCJkb2RnZXJibHVlXCI6IFszMCwxNDQsMjU1LDFdLFxuICBcImZpcmVicmlja1wiOiBbMTc4LDM0LDM0LDFdLCBcImZsb3JhbHdoaXRlXCI6IFsyNTUsMjUwLDI0MCwxXSxcbiAgXCJmb3Jlc3RncmVlblwiOiBbMzQsMTM5LDM0LDFdLCBcImZ1Y2hzaWFcIjogWzI1NSwwLDI1NSwxXSxcbiAgXCJnYWluc2Jvcm9cIjogWzIyMCwyMjAsMjIwLDFdLCBcImdob3N0d2hpdGVcIjogWzI0OCwyNDgsMjU1LDFdLFxuICBcImdvbGRcIjogWzI1NSwyMTUsMCwxXSwgXCJnb2xkZW5yb2RcIjogWzIxOCwxNjUsMzIsMV0sXG4gIFwiZ3JheVwiOiBbMTI4LDEyOCwxMjgsMV0sIFwiZ3JlZW5cIjogWzAsMTI4LDAsMV0sXG4gIFwiZ3JlZW55ZWxsb3dcIjogWzE3MywyNTUsNDcsMV0sIFwiZ3JleVwiOiBbMTI4LDEyOCwxMjgsMV0sXG4gIFwiaG9uZXlkZXdcIjogWzI0MCwyNTUsMjQwLDFdLCBcImhvdHBpbmtcIjogWzI1NSwxMDUsMTgwLDFdLFxuICBcImluZGlhbnJlZFwiOiBbMjA1LDkyLDkyLDFdLCBcImluZGlnb1wiOiBbNzUsMCwxMzAsMV0sXG4gIFwiaXZvcnlcIjogWzI1NSwyNTUsMjQwLDFdLCBcImtoYWtpXCI6IFsyNDAsMjMwLDE0MCwxXSxcbiAgXCJsYXZlbmRlclwiOiBbMjMwLDIzMCwyNTAsMV0sIFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LDI0MCwyNDUsMV0sXG4gIFwibGF3bmdyZWVuXCI6IFsxMjQsMjUyLDAsMV0sIFwibGVtb25jaGlmZm9uXCI6IFsyNTUsMjUwLDIwNSwxXSxcbiAgXCJsaWdodGJsdWVcIjogWzE3MywyMTYsMjMwLDFdLCBcImxpZ2h0Y29yYWxcIjogWzI0MCwxMjgsMTI4LDFdLFxuICBcImxpZ2h0Y3lhblwiOiBbMjI0LDI1NSwyNTUsMV0sIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwyNTAsMjEwLDFdLFxuICBcImxpZ2h0Z3JheVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRncmVlblwiOiBbMTQ0LDIzOCwxNDQsMV0sXG4gIFwibGlnaHRncmV5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodHBpbmtcIjogWzI1NSwxODIsMTkzLDFdLFxuICBcImxpZ2h0c2FsbW9uXCI6IFsyNTUsMTYwLDEyMiwxXSwgXCJsaWdodHNlYWdyZWVuXCI6IFszMiwxNzgsMTcwLDFdLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LDIwNiwyNTAsMV0sIFwibGlnaHRzbGF0ZWdyYXlcIjogWzExOSwxMzYsMTUzLDFdLFxuICBcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksMTM2LDE1MywxXSwgXCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LDE5NiwyMjIsMV0sXG4gIFwibGlnaHR5ZWxsb3dcIjogWzI1NSwyNTUsMjI0LDFdLCBcImxpbWVcIjogWzAsMjU1LDAsMV0sXG4gIFwibGltZWdyZWVuXCI6IFs1MCwyMDUsNTAsMV0sIFwibGluZW5cIjogWzI1MCwyNDAsMjMwLDFdLFxuICBcIm1hZ2VudGFcIjogWzI1NSwwLDI1NSwxXSwgXCJtYXJvb25cIjogWzEyOCwwLDAsMV0sXG4gIFwibWVkaXVtYXF1YW1hcmluZVwiOiBbMTAyLDIwNSwxNzAsMV0sIFwibWVkaXVtYmx1ZVwiOiBbMCwwLDIwNSwxXSxcbiAgXCJtZWRpdW1vcmNoaWRcIjogWzE4Niw4NSwyMTEsMV0sIFwibWVkaXVtcHVycGxlXCI6IFsxNDcsMTEyLDIxOSwxXSxcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBbNjAsMTc5LDExMywxXSwgXCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywxMDQsMjM4LDFdLFxuICBcIm1lZGl1bXNwcmluZ2dyZWVuXCI6IFswLDI1MCwxNTQsMV0sIFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwyMDksMjA0LDFdLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LDIxLDEzMywxXSwgXCJtaWRuaWdodGJsdWVcIjogWzI1LDI1LDExMiwxXSxcbiAgXCJtaW50Y3JlYW1cIjogWzI0NSwyNTUsMjUwLDFdLCBcIm1pc3R5cm9zZVwiOiBbMjU1LDIyOCwyMjUsMV0sXG4gIFwibW9jY2FzaW5cIjogWzI1NSwyMjgsMTgxLDFdLCBcIm5hdmFqb3doaXRlXCI6IFsyNTUsMjIyLDE3MywxXSxcbiAgXCJuYXZ5XCI6IFswLDAsMTI4LDFdLCBcIm9sZGxhY2VcIjogWzI1MywyNDUsMjMwLDFdLFxuICBcIm9saXZlXCI6IFsxMjgsMTI4LDAsMV0sIFwib2xpdmVkcmFiXCI6IFsxMDcsMTQyLDM1LDFdLFxuICBcIm9yYW5nZVwiOiBbMjU1LDE2NSwwLDFdLCBcIm9yYW5nZXJlZFwiOiBbMjU1LDY5LDAsMV0sXG4gIFwib3JjaGlkXCI6IFsyMTgsMTEyLDIxNCwxXSwgXCJwYWxlZ29sZGVucm9kXCI6IFsyMzgsMjMyLDE3MCwxXSxcbiAgXCJwYWxlZ3JlZW5cIjogWzE1MiwyNTEsMTUyLDFdLCBcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwyMzgsMjM4LDFdLFxuICBcInBhbGV2aW9sZXRyZWRcIjogWzIxOSwxMTIsMTQ3LDFdLCBcInBhcGF5YXdoaXBcIjogWzI1NSwyMzksMjEzLDFdLFxuICBcInBlYWNocHVmZlwiOiBbMjU1LDIxOCwxODUsMV0sIFwicGVydVwiOiBbMjA1LDEzMyw2MywxXSxcbiAgXCJwaW5rXCI6IFsyNTUsMTkyLDIwMywxXSwgXCJwbHVtXCI6IFsyMjEsMTYwLDIyMSwxXSxcbiAgXCJwb3dkZXJibHVlXCI6IFsxNzYsMjI0LDIzMCwxXSwgXCJwdXJwbGVcIjogWzEyOCwwLDEyOCwxXSxcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsNTEsMTUzLDFdLFxuICBcInJlZFwiOiBbMjU1LDAsMCwxXSwgXCJyb3N5YnJvd25cIjogWzE4OCwxNDMsMTQzLDFdLFxuICBcInJveWFsYmx1ZVwiOiBbNjUsMTA1LDIyNSwxXSwgXCJzYWRkbGVicm93blwiOiBbMTM5LDY5LDE5LDFdLFxuICBcInNhbG1vblwiOiBbMjUwLDEyOCwxMTQsMV0sIFwic2FuZHlicm93blwiOiBbMjQ0LDE2NCw5NiwxXSxcbiAgXCJzZWFncmVlblwiOiBbNDYsMTM5LDg3LDFdLCBcInNlYXNoZWxsXCI6IFsyNTUsMjQ1LDIzOCwxXSxcbiAgXCJzaWVubmFcIjogWzE2MCw4Miw0NSwxXSwgXCJzaWx2ZXJcIjogWzE5MiwxOTIsMTkyLDFdLFxuICBcInNreWJsdWVcIjogWzEzNSwyMDYsMjM1LDFdLCBcInNsYXRlYmx1ZVwiOiBbMTA2LDkwLDIwNSwxXSxcbiAgXCJzbGF0ZWdyYXlcIjogWzExMiwxMjgsMTQ0LDFdLCBcInNsYXRlZ3JleVwiOiBbMTEyLDEyOCwxNDQsMV0sXG4gIFwic25vd1wiOiBbMjU1LDI1MCwyNTAsMV0sIFwic3ByaW5nZ3JlZW5cIjogWzAsMjU1LDEyNywxXSxcbiAgXCJzdGVlbGJsdWVcIjogWzcwLDEzMCwxODAsMV0sIFwidGFuXCI6IFsyMTAsMTgwLDE0MCwxXSxcbiAgXCJ0ZWFsXCI6IFswLDEyOCwxMjgsMV0sIFwidGhpc3RsZVwiOiBbMjE2LDE5MSwyMTYsMV0sXG4gIFwidG9tYXRvXCI6IFsyNTUsOTksNzEsMV0sIFwidHVycXVvaXNlXCI6IFs2NCwyMjQsMjA4LDFdLFxuICBcInZpb2xldFwiOiBbMjM4LDEzMCwyMzgsMV0sIFwid2hlYXRcIjogWzI0NSwyMjIsMTc5LDFdLFxuICBcIndoaXRlXCI6IFsyNTUsMjU1LDI1NSwxXSwgXCJ3aGl0ZXNtb2tlXCI6IFsyNDUsMjQ1LDI0NSwxXSxcbiAgXCJ5ZWxsb3dcIjogWzI1NSwyNTUsMCwxXSwgXCJ5ZWxsb3dncmVlblwiOiBbMTU0LDIwNSw1MCwxXX1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2J5dGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDI1NS5cbiAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xufVxuXG5mdW5jdGlvbiBjbGFtcF9jc3NfZmxvYXQoZikgeyAgLy8gQ2xhbXAgdG8gZmxvYXQgMC4wIC4uIDEuMC5cbiAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2Nzc19pbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2J5dGUocGFyc2VGbG9hdChzdHIpIC8gMTAwICogMjU1KTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlSW50KHN0cikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfZmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxuICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJyUnKVxuICAgIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcbiAgcmV0dXJuIGNsYW1wX2Nzc19mbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgpIHtcbiAgaWYgKGggPCAwKSBoICs9IDE7XG4gIGVsc2UgaWYgKGggPiAxKSBoIC09IDE7XG5cbiAgaWYgKGggKiA2IDwgMSkgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogaCAqIDY7XG4gIGlmIChoICogMiA8IDEpIHJldHVybiBtMjtcbiAgaWYgKGggKiAzIDwgMikgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNTU0NvbG9yKGNzc19zdHIpIHtcbiAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gIHZhciBzdHIgPSBjc3Nfc3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ29sb3Iga2V5d29yZHMgKGFuZCB0cmFuc3BhcmVudCkgbG9va3VwLlxuICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSByZXR1cm4ga0NTU0NvbG9yVGFibGVbc3RyXS5zbGljZSgpOyAgLy8gZHVwLlxuXG4gIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICBpZiAoc3RyWzBdID09PSAnIycpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcbiAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZikgfCAoKGl2ICYgMHhmKSA8PCA0KSxcbiAgICAgICAgICAgICAgMV07XG4gICAgfSBlbHNlIGlmIChzdHIubGVuZ3RoID09PSA3KSB7XG4gICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cbiAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSByZXR1cm4gbnVsbDsgIC8vIENvdmVycyBOYU4uXG4gICAgICByZXR1cm4gWyhpdiAmIDB4ZmYwMDAwKSA+PiAxNixcbiAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwKSA+PiA4LFxuICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgIDFdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xuICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgIHZhciBmbmFtZSA9IHN0ci5zdWJzdHIoMCwgb3ApO1xuICAgIHZhciBwYXJhbXMgPSBzdHIuc3Vic3RyKG9wKzEsIGVwLShvcCsxKSkuc3BsaXQoJywnKTtcbiAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICBzd2l0Y2ggKGZuYW1lKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICAgICAgICBhbHBoYSA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXMucG9wKCkpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBbcGFyc2VfY3NzX2ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgIHBhcnNlX2Nzc19pbnQocGFyYW1zWzFdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1syXSksXG4gICAgICAgICAgICAgICAgYWxwaGFdO1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQocGFyYW1zWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxuICAgICAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAgICAgLy8gcGVyY2VudGFnZXMsIGJ1dCB3ZSBkb24ndCBib3RoZXIgYW5kIGxldCBmbG9hdCBvciBwZXJjZW50YWdlLlxuICAgICAgICB2YXIgcyA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMV0pO1xuICAgICAgICB2YXIgbCA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXNbMl0pO1xuICAgICAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcbiAgICAgICAgcmV0dXJuIFtjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgrMS8zKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoLTEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG50cnkgeyBleHBvcnRzLnBhcnNlQ1NTQ29sb3IgPSBwYXJzZUNTU0NvbG9yIH0gY2F0Y2goZSkgeyB9XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuLyoqXG4gKiBBbiBSR0JBIGNvbG9yIHZhbHVlLiBDcmVhdGUgaW5zdGFuY2VzIGZyb20gY29sb3Igc3RyaW5ncyB1c2luZyB0aGUgc3RhdGljXG4gKiBtZXRob2QgYENvbG9yLnBhcnNlYC4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgUkdCIGNoYW5uZWwgdmFsdWVzIGluIHRoZSByYW5nZVxuICogYFswLCAxXWAsIHByZW11bHRpcGxpZWQgYnkgQS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gciBUaGUgcmVkIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gZyBUaGUgZ3JlZW4gY2hhbm5lbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIFRoZSBibHVlIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgYWxwaGEgY2hhbm5lbC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbG9yIHtcbiAgICByOiBudW1iZXI7XG4gICAgZzogbnVtYmVyO1xuICAgIGI6IG51bWJlcjtcbiAgICBhOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuZyA9IGc7XG4gICAgICAgIHRoaXMuYiA9IGI7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGJsYWNrOiBDb2xvcjtcbiAgICBzdGF0aWMgd2hpdGU6IENvbG9yO1xuICAgIHN0YXRpYyB0cmFuc3BhcmVudDogQ29sb3I7XG4gICAgc3RhdGljIHJlZDogQ29sb3I7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdmFsaWQgQ1NTIGNvbG9yIHN0cmluZ3MgYW5kIHJldHVybnMgYSBgQ29sb3JgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIEEgYENvbG9yYCBpbnN0YW5jZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGlucHV0IGlzIG5vdCBhIHZhbGlkIGNvbG9yIHN0cmluZy5cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UoaW5wdXQ/OiBzdHJpbmcgfCBDb2xvciB8IG51bGwpOiBDb2xvciB8IHZvaWQge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiYSA9IHBhcnNlQ1NTQ29sb3IoaW5wdXQpO1xuICAgICAgICBpZiAoIXJnYmEpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICAgICAgcmdiYVswXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzFdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbMl0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVszXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gUkdCQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2xvciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFuIFJHQkEgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHB1cnBsZSA9IG5ldyBDb2xvci5wYXJzZSgncHVycGxlJyk7XG4gICAgICogcHVycGxlLnRvU3RyaW5nOyAvLyA9IFwicmdiYSgxMjgsMCwxMjgsMSlcIlxuICAgICAqIHZhciB0cmFuc2x1Y2VudEdyZWVuID0gbmV3IENvbG9yLnBhcnNlKCdyZ2JhKDI2LCAyMDcsIDI2LCAuNzMpJyk7XG4gICAgICogdHJhbnNsdWNlbnRHcmVlbi50b1N0cmluZygpOyAvLyA9IFwicmdiYSgyNiwyMDcsMjYsMC43MylcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IFtyLCBnLCBiLCBhXSA9IHRoaXMudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gYHJnYmEoJHtNYXRoLnJvdW5kKHIpfSwke01hdGgucm91bmQoZyl9LCR7TWF0aC5yb3VuZChiKX0sJHthfSlgO1xuICAgIH1cblxuICAgIHRvQXJyYXkoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCB7ciwgZywgYiwgYX0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYSA9PT0gMCA/IFswLCAwLCAwLCAwXSA6IFtcbiAgICAgICAgICAgIHIgKiAyNTUgLyBhLFxuICAgICAgICAgICAgZyAqIDI1NSAvIGEsXG4gICAgICAgICAgICBiICogMjU1IC8gYSxcbiAgICAgICAgICAgIGFcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbkNvbG9yLmJsYWNrID0gbmV3IENvbG9yKDAsIDAsIDAsIDEpO1xuQ29sb3Iud2hpdGUgPSBuZXcgQ29sb3IoMSwgMSwgMSwgMSk7XG5Db2xvci50cmFuc3BhcmVudCA9IG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbkNvbG9yLnJlZCA9IG5ldyBDb2xvcigxLCAwLCAwLCAxKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3I7XG4iLCIvLyBAZmxvd1xuXG4vLyBGbG93IHR5cGUgZGVjbGFyYXRpb25zIGZvciBJbnRsIGNyaWJiZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzEyNzBcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIENvbGxhdG9yOiBDbGFzczxJbnRsJENvbGxhdG9yPlxufTtcblxuZGVjbGFyZSBjbGFzcyBJbnRsJENvbGxhdG9yIHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IENvbGxhdG9yT3B0aW9uc1xuICAgICk6IEludGwkQ29sbGF0b3I7XG5cbiAgICBzdGF0aWMgKFxuICAgICAgICBsb2NhbGVzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM/OiBDb2xsYXRvck9wdGlvbnNcbiAgICApOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29tcGFyZSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIENvbGxhdG9yT3B0aW9ucyA9IHtcbiAgICBsb2NhbGVNYXRjaGVyPzogJ2xvb2t1cCcgfCAnYmVzdCBmaXQnLFxuICAgIHVzYWdlPzogJ3NvcnQnIHwgJ3NlYXJjaCcsXG4gICAgc2Vuc2l0aXZpdHk/OiAnYmFzZScgfCAnYWNjZW50JyB8ICdjYXNlJyB8ICd2YXJpYW50JyxcbiAgICBpZ25vcmVQdW5jdHVhdGlvbj86IGJvb2xlYW4sXG4gICAgbnVtZXJpYz86IGJvb2xlYW4sXG4gICAgY2FzZUZpcnN0PzogJ3VwcGVyJyB8ICdsb3dlcicgfCAnZmFsc2UnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxhdG9yIHtcbiAgICBsb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gICAgc2Vuc2l0aXZpdHk6ICdiYXNlJyB8ICdhY2NlbnQnIHwgJ2Nhc2UnIHwgJ3ZhcmlhbnQnO1xuICAgIGNvbGxhdG9yOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiwgZGlhY3JpdGljU2Vuc2l0aXZlOiBib29sZWFuLCBsb2NhbGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ3ZhcmlhbnQnIDogJ2Nhc2UnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gZGlhY3JpdGljU2Vuc2l0aXZlID8gJ2FjY2VudCcgOiAnYmFzZSc7XG5cbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10sXG4gICAgICAgICAgICB7c2Vuc2l0aXZpdHk6IHRoaXMuc2Vuc2l0aXZpdHksIHVzYWdlOiAnc2VhcmNoJ30pO1xuICAgIH1cblxuICAgIGNvbXBhcmUobGhzOiBzdHJpbmcsIHJoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZShsaHMsIHJocyk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gV2UgY3JlYXRlIGEgQ29sbGF0b3Igd2l0aG91dCBcInVzYWdlOiBzZWFyY2hcIiBiZWNhdXNlIHdlIGRvbid0IHdhbnRcbiAgICAgICAgLy8gdGhlIHNlYXJjaCBvcHRpb25zIGVuY29kZWQgaW4gb3VyIHJlc3VsdCAoZS5nLiBcImVuLXUtY28tc2VhcmNoXCIpXG4gICAgICAgIHJldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlIDogW10pXG4gICAgICAgICAgICAucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi91dGlsL2NvbG9yJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0dGVkU2VjdGlvbiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGltYWdlOiBSZXNvbHZlZEltYWdlIHwgbnVsbDtcbiAgICBzY2FsZTogbnVtYmVyIHwgbnVsbDtcbiAgICBmb250U3RhY2s6IHN0cmluZyB8IG51bGw7XG4gICAgdGV4dENvbG9yOiBDb2xvciB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcih0ZXh0OiBzdHJpbmcsIGltYWdlOiBSZXNvbHZlZEltYWdlIHwgbnVsbCwgc2NhbGU6IG51bWJlciB8IG51bGwsIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbCwgdGV4dENvbG9yOiBDb2xvciB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB0aGlzLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIHRoaXMuZm9udFN0YWNrID0gZm9udFN0YWNrO1xuICAgICAgICB0aGlzLnRleHRDb2xvciA9IHRleHRDb2xvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlZCB7XG4gICAgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb24+O1xuXG4gICAgY29uc3RydWN0b3Ioc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb24+KSB7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0cmluZyh1bmZvcm1hdHRlZDogc3RyaW5nKTogRm9ybWF0dGVkIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXR0ZWQoW25ldyBGb3JtYXR0ZWRTZWN0aW9uKHVuZm9ybWF0dGVkLCBudWxsLCBudWxsLCBudWxsLCBudWxsKV0pO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhdGhpcy5zZWN0aW9ucy5zb21lKHNlY3Rpb24gPT4gc2VjdGlvbi50ZXh0Lmxlbmd0aCAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlY3Rpb24uaW1hZ2UgJiYgc2VjdGlvbi5pbWFnZS5uYW1lLmxlbmd0aCAhPT0gMCkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmYWN0b3J5KHRleHQ6IEZvcm1hdHRlZCB8IHN0cmluZyk6IEZvcm1hdHRlZCB7XG4gICAgICAgIGlmICh0ZXh0IGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWQuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiBzZWN0aW9uLnRleHQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBBcnJheTxtaXhlZD4gPSBbXCJmb3JtYXRcIl07XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5pbWFnZSkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChbXCJpbWFnZVwiLCBzZWN0aW9uLmltYWdlLm5hbWVdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChzZWN0aW9uLnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBtaXhlZCB9ID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250U3RhY2spIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW1widGV4dC1mb250XCJdID0gW1wibGl0ZXJhbFwiLCBzZWN0aW9uLmZvbnRTdGFjay5zcGxpdCgnLCcpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnNjYWxlKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcImZvbnQtc2NhbGVcIl0gPSBzZWN0aW9uLnNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRleHQtY29sb3JcIl0gPSAoW1wicmdiYVwiXTogQXJyYXk8bWl4ZWQ+KS5jb25jYXQoc2VjdGlvbi50ZXh0Q29sb3IudG9BcnJheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEltYWdlT3B0aW9ucyA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmxlOiBib29sZWFuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbHZlZEltYWdlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb2x2ZWRJbWFnZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZSA9IG9wdGlvbnMuYXZhaWxhYmxlO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdHJpbmcobmFtZTogc3RyaW5nKTogUmVzb2x2ZWRJbWFnZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRJbWFnZSh7bmFtZSwgYXZhaWxhYmxlOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sbGF0b3IgZnJvbSAnLi90eXBlcy9jb2xsYXRvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHtOdWxsVHlwZSwgTnVtYmVyVHlwZSwgU3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbG9yVHlwZSwgT2JqZWN0VHlwZSwgVmFsdWVUeXBlLCBDb2xsYXRvclR5cGUsIEZvcm1hdHRlZFR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlLCBhcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUkdCQShyOiBtaXhlZCwgZzogbWl4ZWQsIGI6IG1peGVkLCBhPzogbWl4ZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIHIgPT09ICdudW1iZXInICYmIHIgPj0gMCAmJiByIDw9IDI1NSAmJlxuICAgICAgICB0eXBlb2YgZyA9PT0gJ251bWJlcicgJiYgZyA+PSAwICYmIGcgPD0gMjU1ICYmXG4gICAgICAgIHR5cGVvZiBiID09PSAnbnVtYmVyJyAmJiBiID49IDAgJiYgYiA8PSAyNTVcbiAgICApKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGEgPT09ICdudW1iZXInID8gW3IsIGcsIGIsIGFdIDogW3IsIGcsIGJdO1xuICAgICAgICByZXR1cm4gYEludmFsaWQgcmdiYSB2YWx1ZSBbJHt2YWx1ZS5qb2luKCcsICcpfV06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuYDtcbiAgICB9XG5cbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnIHx8ICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgYSA+PSAwICYmIGEgPD0gMSlcbiAgICApKSB7XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZ2JhIHZhbHVlIFske1tyLCBnLCBiLCBhXS5qb2luKCcsICcpfV06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5gO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgQ29sb3IgfCBDb2xsYXRvciB8IEZvcm1hdHRlZCB8IFJlc29sdmVkSW1hZ2UgfCAkUmVhZE9ubHlBcnJheTxWYWx1ZT4gfCB7ICtbc3RyaW5nXTogVmFsdWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZShtaXhlZDogbWl4ZWQpOiBib29sZWFuIHtcbiAgICBpZiAobWl4ZWQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgQ29sbGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWl4ZWQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKG1peGVkW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsdWU6IFZhbHVlKTogVHlwZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBOdWxsVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZ1R5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gQm9vbGVhblR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXJUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gQ29sb3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xsYXRvcikge1xuICAgICAgICByZXR1cm4gQ29sbGF0b3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuIEZvcm1hdHRlZFR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXRlbVR5cGU6IFR5cGUgfCB0eXBlb2YgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHR5cGVPZihpdGVtKTtcbiAgICAgICAgICAgIGlmICghaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSB0KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5KGl0ZW1UeXBlIHx8IFZhbHVlVHlwZSwgbGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBWYWx1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IgfHwgdmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQge0NvbG9yLCBDb2xsYXRvcn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2lzVmFsdWUsIHR5cGVPZiwgQ29sb3J9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9ICBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcblxuY2xhc3MgTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgdmFsdWU6IFZhbHVlO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgdmFsdWU6IFZhbHVlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBpZiAoIWlzVmFsdWUoYXJnc1sxXSkpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgaW52YWxpZCB2YWx1ZWApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGFyZ3NbMV06IGFueSk7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZU9mKHZhbHVlKTtcblxuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGluZmVyIHRoZSBpdGVtIHR5cGUgaWYgcG9zc2libGUgZm9yIHplcm8tbGVuZ3RoIGFycmF5c1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIHR5cGUuTiA9PT0gMCAmJlxuICAgICAgICAgICAgZXhwZWN0ZWQgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZXhwZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdhcnJheScgfHwgdGhpcy50eXBlLmtpbmQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gW1wibGl0ZXJhbFwiLCB0aGlzLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIC8vIENvbnN0YW50LWZvbGRpbmcgY2FuIGdlbmVyYXRlIExpdGVyYWwgZXhwcmVzc2lvbnMgdGhhdCB5b3VcbiAgICAgICAgICAgIC8vIGNvdWxkbid0IGFjdHVhbGx5IGdlbmVyYXRlIHdpdGggYSBcImxpdGVyYWxcIiBleHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBpbXBsZW1lbnQgYW4gZXF1aXZhbGVudCBzZXJpYWxpemF0aW9uIGhlcmVcbiAgICAgICAgICAgIHJldHVybiBbXCJyZ2JhXCJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgLy8gU2FtZSBhcyBDb2xvclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc2VyaWFsaXplKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXRlcmFsO1xuIiwiLy8gQGZsb3dcblxuY2xhc3MgUnVudGltZUVycm9yIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSdW50aW1lRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gICAgT2JqZWN0VHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBOdW1iZXJUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIGNoZWNrU3VidHlwZSxcbiAgICB0b1N0cmluZyxcbiAgICBhcnJheVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgc3RyaW5nOiBTdHJpbmdUeXBlLFxuICAgIG51bWJlcjogTnVtYmVyVHlwZSxcbiAgICBib29sZWFuOiBCb29sZWFuVHlwZSxcbiAgICBvYmplY3Q6IE9iamVjdFR5cGVcbn07XG5cbmNsYXNzIEFzc2VydGlvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBhcmdzOiBBcnJheTxFeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgIGxldCB0eXBlO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGV0IGl0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgISh0eXBlIGluIHR5cGVzKSB8fCB0eXBlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgXCJhcnJheVwiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywgMSk7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSB0eXBlc1t0eXBlXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgTjtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc1syXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGFyZ3NbMl0gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAhPT0gTWF0aC5mbG9vcihhcmdzWzJdKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gXCJhcnJheVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTiA9IGFyZ3NbMl07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0eXBlID0gYXJyYXkoaXRlbVR5cGUsIE4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KHR5cGVzW25hbWVdLCBuYW1lKTtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlc1tuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0eXBlLCBwYXJzZWQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5hcmdzW2ldLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZSh0aGlzLnR5cGUsIHR5cGVPZih2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGhpcy5hcmdzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICR7dG9TdHJpbmcodGhpcy50eXBlKX0sIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZih2YWx1ZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMuYXJncy5tYXAoKGFyZykgPT4gYXJnLnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbdHlwZS5raW5kXTtcbiAgICAgICAgaWYgKHR5cGUua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSB0eXBlLml0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGl0ZW1UeXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUua2luZCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZS5raW5kID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goaXRlbVR5cGUua2luZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgTiA9IHR5cGUuTjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE4gPT09ICdudW1iZXInIHx8IHRoaXMuYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChOKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQuY29uY2F0KHRoaXMuYXJncy5tYXAoYXJnID0+IGFyZy5zZXJpYWxpemUoKSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXNzZXJ0aW9uO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlLCBWYWx1ZVR5cGUsIEZvcm1hdHRlZFR5cGUsIGFycmF5LCBTdHJpbmdUeXBlLCBDb2xvclR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgRm9ybWF0dGVkLCB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCB7dG9TdHJpbmcsIHR5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uID0ge1xuICAgIC8vIENvbnRlbnQgb2YgYSBzZWN0aW9uIG1heSBiZSBJbWFnZSBleHByZXNzaW9uIG9yIG90aGVyXG4gICAgLy8gdHlwZSBvZiBleHByZXNzaW9uIHRoYXQgaXMgY29lcmNhYmxlIHRvICdzdHJpbmcnLlxuICAgIGNvbnRlbnQ6IEV4cHJlc3Npb24sXG4gICAgc2NhbGU6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIGZvbnQ6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIHRleHRDb2xvcjogRXhwcmVzc2lvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEZvcm1hdHRlZFR5cGU7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXJnID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpcnN0QXJnKSAmJiB0eXBlb2YgZmlyc3RBcmcgPT09ICdvYmplY3QnKSAge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gaW1hZ2Ugb3IgdGV4dCBzZWN0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPiA9IFtdO1xuICAgICAgICBsZXQgbmV4dFRva2VuTWF5QmVPYmplY3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYXJncy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IChhcmdzW2ldOiBhbnkpO1xuXG4gICAgICAgICAgICBpZiAobmV4dFRva2VuTWF5QmVPYmplY3QgJiYgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgbmV4dFRva2VuTWF5QmVPYmplY3QgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBzY2FsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1snZm9udC1zY2FsZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gY29udGV4dC5wYXJzZShhcmdbJ2ZvbnQtc2NhbGUnXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBmb250ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWyd0ZXh0LWZvbnQnXSkge1xuICAgICAgICAgICAgICAgICAgICBmb250ID0gY29udGV4dC5wYXJzZShhcmdbJ3RleHQtZm9udCddLCAxLCBhcnJheShTdHJpbmdUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9udCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRDb2xvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1sndGV4dC1jb2xvciddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvciA9IGNvbnRleHQucGFyc2UoYXJnWyd0ZXh0LWNvbG9yJ10sIDEsIENvbG9yVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGV4dENvbG9yKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXhwcmVzc2lvbiA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGxhc3RFeHByZXNzaW9uLnNjYWxlID0gc2NhbGU7XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24uZm9udCA9IGZvbnQ7XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24udGV4dENvbG9yID0gdGV4dENvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBraW5kID0gY29udGVudC50eXBlLmtpbmQ7XG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT09ICdzdHJpbmcnICYmIGtpbmQgIT09ICd2YWx1ZScgJiYga2luZCAhPT0gJ251bGwnICYmIGtpbmQgIT09ICdyZXNvbHZlZEltYWdlJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuYCk7XG5cbiAgICAgICAgICAgICAgICBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VjdGlvbnMucHVzaCh7Y29udGVudCwgc2NhbGU6IG51bGwsIGZvbnQ6IG51bGwsIHRleHRDb2xvcjogbnVsbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRFeHByZXNzaW9uKHNlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlU2VjdGlvbiA9IHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkQ29udGVudCA9IHNlY3Rpb24uY29udGVudC5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgaWYgKHR5cGVPZihldmFsdWF0ZWRDb250ZW50KSA9PT0gUmVzb2x2ZWRJbWFnZVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZFNlY3Rpb24oJycsIGV2YWx1YXRlZENvbnRlbnQsIG51bGwsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZFNlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nKGV2YWx1YXRlZENvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNjYWxlID8gc2VjdGlvbi5zY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5mb250ID8gc2VjdGlvbi5mb250LmV2YWx1YXRlKGN0eCkuam9pbignLCcpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi50ZXh0Q29sb3IgPyBzZWN0aW9uLnRleHRDb2xvci5ldmFsdWF0ZShjdHgpIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZCh0aGlzLnNlY3Rpb25zLm1hcChldmFsdWF0ZVNlY3Rpb24pKTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBmbihzZWN0aW9uLmNvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2NhbGUpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnNjYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLmZvbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgZm4oc2VjdGlvbi50ZXh0Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgY29tYmluYXRvcmljIHNldCBvZiBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gVXN1YWxseSwgdGhpcy50ZXh0IHdpbGwgYmUgdW5kZWZpbmVkIGFueXdheVxuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24uY29udGVudC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSA9IHNlY3Rpb24uc2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1sndGV4dC1mb250J10gPSBzZWN0aW9uLmZvbnQuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWyd0ZXh0LWNvbG9yJ10gPSBzZWN0aW9uLnRleHRDb2xvci5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1Jlc29sdmVkSW1hZ2VUeXBlLCBTdHJpbmdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gY29udGV4dC5lcnJvcihgTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbihuYW1lKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEltYWdlTmFtZSA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdHguYXZhaWxhYmxlSW1hZ2VzICYmIGN0eC5hdmFpbGFibGVJbWFnZXMuaW5kZXhPZihldmFsdWF0ZWRJbWFnZU5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkSW1hZ2Uoe25hbWU6IGV2YWx1YXRlZEltYWdlTmFtZSwgYXZhaWxhYmxlfSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIC8vIFRoZSBvdXRwdXQgb2YgaW1hZ2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgaW1hZ2VzIGluIHRoZSBldmFsdWF0aW9uIGNvbnRleHRcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgQ29sb3JUeXBlLCBOdW1iZXJUeXBlLCBTdHJpbmdUeXBlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q29sb3IsIHRvU3RyaW5nIGFzIHZhbHVlVG9TdHJpbmcsIHZhbGlkYXRlUkdCQX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9mb3JtYXQnO1xuaW1wb3J0IEltYWdlRXhwcmVzc2lvbiBmcm9tICcuLi9kZWZpbml0aW9ucy9pbWFnZSc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgJ3RvLWJvb2xlYW4nOiBCb29sZWFuVHlwZSxcbiAgICAndG8tY29sb3InOiBDb2xvclR5cGUsXG4gICAgJ3RvLW51bWJlcic6IE51bWJlclR5cGUsXG4gICAgJ3RvLXN0cmluZyc6IFN0cmluZ1R5cGVcbn07XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBlcnJvci1jb2FsZXNjaW5nIGNvZXJjaW9uIGV4cHJlc3Npb25zIFwidG8tbnVtYmVyXCIsXG4gKiBcInRvLWNvbG9yXCIuICBTaW5jZSB0aGVzZSBjb2VyY2lvbnMgY2FuIGZhaWwgYXQgcnVudGltZSwgdGhleSBhY2NlcHQgbXVsdGlwbGVcbiAqIGFyZ3VtZW50cywgb25seSBldmFsdWF0aW5nIG9uZSBhdCBhIHRpbWUgdW50aWwgb25lIHN1Y2NlZWRzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvZXJjaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBhc3NlcnQodHlwZXNbbmFtZV0sIG5hbWUpO1xuXG4gICAgICAgIGlmICgobmFtZSA9PT0gJ3RvLWJvb2xlYW4nIHx8IG5hbWUgPT09ICd0by1zdHJpbmcnKSAmJiBhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIHBhcnNlZCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBsZXQgaW5wdXQ7XG4gICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBjdHgucGFyc2VDb2xvcihpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjKSByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAzIHx8IGlucHV0Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gYEludmFsaWQgcmJnYSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGlucHV0KX06IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuYDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdmFsaWRhdGVSR0JBKGlucHV0WzBdLCBpbnB1dFsxXSwgaW5wdXRbMl0sIGlucHV0WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKChpbnB1dFswXTogYW55KSAvIDI1NSwgKGlucHV0WzFdOiBhbnkpIC8gMjU1LCAoaW5wdXRbMl06IGFueSkgLyAyNTUsIChpbnB1dFszXTogYW55KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGVycm9yIHx8IGBDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnJHt0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gaW5wdXQgOiBTdHJpbmcoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKX0nYCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gdG8gbnVtYmVyLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gZXhwbGljaXQgJ3RvLWZvcm1hdHRlZCcgYnV0IHRoaXMgY29lcmNpb24gY2FuIGJlIGltcGxpY2l0bHlcbiAgICAgICAgICAgIC8vIGNyZWF0ZWQgYnkgcHJvcGVydGllcyB0aGF0IGV4cGVjdCB0aGUgJ2Zvcm1hdHRlZCcgdHlwZS5cbiAgICAgICAgICAgIHJldHVybiBGb3JtYXR0ZWQuZnJvbVN0cmluZyh2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyh2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQoLi4udGhpcy5hcmdzLm1hcCgoYXJnKSA9PiBhcmcucG9zc2libGVPdXRwdXRzKCkpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0RXhwcmVzc2lvbihbe2NvbnRlbnQ6IHRoaXMuYXJnc1swXSwgc2NhbGU6IG51bGwsIGZvbnQ6IG51bGwsIHRleHRDb2xvcjogbnVsbH1dKS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ3Jlc29sdmVkSW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbih0aGlzLmFyZ3NbMF0pLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtgdG8tJHt0aGlzLnR5cGUua2luZH1gXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2VyY2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q29sb3J9IGZyb20gJy4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgdHlwZSB7R2xvYmFsUHJvcGVydGllcywgRmVhdHVyZSwgRmVhdHVyZVN0YXRlfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgZ2VvbWV0cnlUeXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQge1xuICAgIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXM7XG4gICAgZmVhdHVyZTogP0ZlYXR1cmU7XG4gICAgZmVhdHVyZVN0YXRlOiA/RmVhdHVyZVN0YXRlO1xuICAgIGZvcm1hdHRlZFNlY3Rpb246ID9Gb3JtYXR0ZWRTZWN0aW9uO1xuICAgIGF2YWlsYWJsZUltYWdlczogP0FycmF5PHN0cmluZz47XG5cbiAgICBfcGFyc2VDb2xvckNhY2hlOiB7W3N0cmluZ106ID9Db2xvcn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gKG51bGw6IGFueSk7XG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmVhdHVyZVN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRTZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyc2VDb2xvckNhY2hlID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiAnaWQnIGluIHRoaXMuZmVhdHVyZSA/IHRoaXMuZmVhdHVyZS5pZCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2VvbWV0cnlUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlID8gdHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlID09PSAnbnVtYmVyJyA/IGdlb21ldHJ5VHlwZXNbdGhpcy5mZWF0dXJlLnR5cGVdIDogdGhpcy5mZWF0dXJlLnR5cGUgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgdGhpcy5mZWF0dXJlLnByb3BlcnRpZXMgfHwge307XG4gICAgfVxuXG4gICAgcGFyc2VDb2xvcihpbnB1dDogc3RyaW5nKTogP0NvbG9yIHtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuX3BhcnNlQ29sb3JDYWNoZVtpbnB1dF07XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSB0aGlzLl9wYXJzZUNvbG9yQ2FjaGVbaW5wdXRdID0gQ29sb3IucGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uQ29udGV4dDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dG9TdHJpbmd9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi92YWx1ZXMnO1xuXG5leHBvcnQgdHlwZSBWYXJhcmdzID0ge3wgdHlwZTogVHlwZSB8fTtcbnR5cGUgU2lnbmF0dXJlID0gQXJyYXk8VHlwZT4gfCBWYXJhcmdzO1xudHlwZSBFdmFsdWF0ZSA9IChFdmFsdWF0aW9uQ29udGV4dCwgQXJyYXk8RXhwcmVzc2lvbj4pID0+IFZhbHVlO1xudHlwZSBEZWZpbml0aW9uID0gW1R5cGUsIFNpZ25hdHVyZSwgRXZhbHVhdGVdIHxcbiAgICB7fHR5cGU6IFR5cGUsIG92ZXJsb2FkczogQXJyYXk8W1NpZ25hdHVyZSwgRXZhbHVhdGVdPnx9O1xuXG5jbGFzcyBDb21wb3VuZEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVHlwZTtcbiAgICBfZXZhbHVhdGU6IEV2YWx1YXRlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgc3RhdGljIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGUsIGV2YWx1YXRlOiBFdmFsdWF0ZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdGUgPSBldmFsdWF0ZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0ZShjdHgsIHRoaXMuYXJncyk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChhcmcgPT4gYXJnLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGNvbnN0IG9wOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IENvbXBvdW5kRXhwcmVzc2lvbi5kZWZpbml0aW9uc1tvcF07XG4gICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gZXhwcmVzc2lvbiBcIiR7b3B9XCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3cgY2hlY2sgYXJndW1lbnQgdHlwZXMgYWdhaW5zdCBlYWNoIHNpZ25hdHVyZVxuICAgICAgICBjb25zdCB0eXBlID0gQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSA/XG4gICAgICAgICAgICBkZWZpbml0aW9uWzBdIDogZGVmaW5pdGlvbi50eXBlO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZU92ZXJsb2FkcyA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgP1xuICAgICAgICAgICAgW1tkZWZpbml0aW9uWzFdLCBkZWZpbml0aW9uWzJdXV0gOlxuICAgICAgICAgICAgZGVmaW5pdGlvbi5vdmVybG9hZHM7XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxvYWRzID0gYXZhaWxhYmxlT3ZlcmxvYWRzLmZpbHRlcigoW3NpZ25hdHVyZV0pID0+IChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNpZ25hdHVyZSkgfHwgLy8gdmFyYWdzXG4gICAgICAgICAgICBzaWduYXR1cmUubGVuZ3RoID09PSBhcmdzLmxlbmd0aCAtIDEgLy8gY29ycmVjdCBwYXJhbSBjb3VudFxuICAgICAgICApKTtcblxuICAgICAgICBsZXQgc2lnbmF0dXJlQ29udGV4dDogUGFyc2luZ0NvbnRleHQgPSAobnVsbDogYW55KTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXJhbXMsIGV2YWx1YXRlXSBvZiBvdmVybG9hZHMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBhIGZyZXNoIGNvbnRleHQgZm9yIGVhY2ggYXR0ZW1wdGVkIHNpZ25hdHVyZSBzbyB0aGF0LCBpZlxuICAgICAgICAgICAgLy8gd2UgZXZlbnR1YWxseSBzdWNjZWVkLCB3ZSBoYXZlbid0IHBvbGx1dGVkIGBjb250ZXh0LmVycm9yc2AuXG4gICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0ID0gbmV3IFBhcnNpbmdDb250ZXh0KGNvbnRleHQucmVnaXN0cnksIGNvbnRleHQucGF0aCwgbnVsbCwgY29udGV4dC5zY29wZSk7XG5cbiAgICAgICAgICAgIC8vIEZpcnN0IHBhcnNlIGFsbCB0aGUgYXJncywgcG90ZW50aWFsbHkgY29lcmNpbmcgdG8gdGhlXG4gICAgICAgICAgICAvLyB0eXBlcyBleHBlY3RlZCBieSB0aGlzIG92ZXJsb2FkLlxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJnczogQXJyYXk8RXhwcmVzc2lvbj4gPSBbXTtcbiAgICAgICAgICAgIGxldCBhcmdQYXJzZUZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgP1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaSAtIDFdIDpcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnR5cGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBzaWduYXR1cmVDb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBleHBlY3RlZFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ1BhcnNlRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ1BhcnNlRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29lcmNlIGFyZ3Mgb2YgdGhpcyBvdmVybG9hZCB0byBleHBlY3RlZCB0eXBlLCBtb3ZlXG4gICAgICAgICAgICAgICAgLy8gb24gdG8gbmV4dCBvbmUuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gcGFyc2VkQXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dC5lcnJvcihgRXhwZWN0ZWQgJHtwYXJhbXMubGVuZ3RofSBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke3BhcnNlZEFyZ3MubGVuZ3RofSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkQXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zW2ldIDogcGFyYW1zLnR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnID0gcGFyc2VkQXJnc1tpXTtcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0LmNvbmNhdChpICsgMSkuY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCBhcmcudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVDb250ZXh0LmVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBvdW5kRXhwcmVzc2lvbihvcCwgdHlwZSwgZXZhbHVhdGUsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KCFzaWduYXR1cmVDb250ZXh0IHx8IHNpZ25hdHVyZUNvbnRleHQuZXJyb3JzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgIGlmIChvdmVybG9hZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5wdXNoKC4uLnNpZ25hdHVyZUNvbnRleHQuZXJyb3JzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gb3ZlcmxvYWRzLmxlbmd0aCA/IG92ZXJsb2FkcyA6IGF2YWlsYWJsZU92ZXJsb2FkcztcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBleHBlY3RlZFxuICAgICAgICAgICAgICAgIC5tYXAoKFtwYXJhbXNdKSA9PiBzdHJpbmdpZnlTaWduYXR1cmUocGFyYW1zKSlcbiAgICAgICAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbFR5cGVzID0gW107XG4gICAgICAgICAgICAvLyBGb3IgZXJyb3IgbWVzc2FnZSwgcmUtcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgdHJ5aW5nIHRvXG4gICAgICAgICAgICAvLyBhcHBseSBhbnkgY29lcmNpb25zXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIDEgKyBhY3R1YWxUeXBlcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBhY3R1YWxUeXBlcy5wdXNoKHRvU3RyaW5nKHBhcnNlZC50eXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAke3NpZ25hdHVyZXN9LCBidXQgZm91bmQgKCR7YWN0dWFsVHlwZXMuam9pbignLCAnKX0pIGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIGRlZmluaXRpb25zOiB7IFtzdHJpbmddOiBEZWZpbml0aW9uIH1cbiAgICApIHtcbiAgICAgICAgYXNzZXJ0KCFDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMpO1xuICAgICAgICBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICByZWdpc3RyeVtuYW1lXSA9IENvbXBvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIHJldHVybiBgKCR7c2lnbmF0dXJlLm1hcCh0b1N0cmluZykuam9pbignLCAnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCgke3RvU3RyaW5nKHNpZ25hdHVyZS50eXBlKX0uLi4pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvdW5kRXhwcmVzc2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7U3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4uL3R5cGVzL2NvbGxhdG9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvckV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGNhc2VTZW5zaXRpdmU6IEV4cHJlc3Npb247XG4gICAgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBkaWFjcml0aWNTZW5zaXRpdmU6IEV4cHJlc3Npb24sIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gQ29sbGF0b3JUeXBlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUgPSBkaWFjcml0aWNTZW5zaXRpdmU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSBjb250ZXh0LnBhcnNlKFxuICAgICAgICAgICAgb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGlhY3JpdGljU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10sIDEsIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgaWYgKCFkaWFjcml0aWNTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvckV4cHJlc3Npb24oY2FzZVNlbnNpdGl2ZSwgZGlhY3JpdGljU2Vuc2l0aXZlLCBsb2NhbGUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvcih0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmNhc2VTZW5zaXRpdmUpO1xuICAgICAgICBmbih0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgc2V0IG9mIHBvc3NpYmxlIG91dHB1dHMgaXMgdGhlIGNvbWJpbmF0b3JpYyBzZXQgb2YgQ29sbGF0b3JzIHByb2R1Y2VkXG4gICAgICAgIC8vIGJ5IGFsbCBwb3NzaWJsZU91dHB1dHMgb2YgbG9jYWxlL2Nhc2VTZW5zaXRpdmUvZGlhY3JpdGljU2Vuc2l0aXZlXG4gICAgICAgIC8vIEJ1dCBmb3IgdGhlIHByaW1hcnkgdXNlIG9mIENvbGxhdG9ycyBpbiBjb21wYXJpc29uIG9wZXJhdG9ycywgd2UgaWdub3JlIHRoZSBDb2xsYXRvcidzXG4gICAgICAgIC8vIHBvc3NpYmxlT3V0cHV0cyBhbnl3YXksIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcgdGhpcyB1bmRlZmluZWQgZm9yIG5vdy5cbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddID0gdGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10gPSB0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBvcHRpb25zWydsb2NhbGUnXSA9IHRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJjb2xsYXRvclwiLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24uanMnO1xuXG5mdW5jdGlvbiBpc0ZlYXR1cmVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2dldCcgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5uYW1lID09PSAnaGFzJyAmJiBlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlLm5hbWUgPT09ICdwcm9wZXJ0aWVzJyB8fFxuICAgICAgICAgICAgZS5uYW1lID09PSAnZ2VvbWV0cnktdHlwZScgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2lkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXmZpbHRlci0vLnRlc3QoZS5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoYXJnKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoYXJnID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNTdGF0ZUNvbnN0YW50KGFyZykpIHsgcmVzdWx0ID0gZmFsc2U7IH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZTogRXhwcmVzc2lvbiwgcHJvcGVydGllczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIHByb3BlcnRpZXMuaW5kZXhPZihlLm5hbWUpID49IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgZS5lYWNoQ2hpbGQoKGFyZykgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoYXJnLCBwcm9wZXJ0aWVzKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7aXNGZWF0dXJlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNTdGF0ZUNvbnN0YW50fTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgIGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5cbmNsYXNzIFZhciBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJvdW5kRXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgYm91bmRFeHByZXNzaW9uOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IGJvdW5kRXhwcmVzc2lvbi50eXBlO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmJvdW5kRXhwcmVzc2lvbiA9IGJvdW5kRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIgfHwgdHlwZW9mIGFyZ3NbMV0gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCd2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbMV07XG4gICAgICAgIGlmICghY29udGV4dC5zY29wZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIHZhcmlhYmxlIFwiJHtuYW1lfVwiLiBNYWtlIHN1cmUgXCIke25hbWV9XCIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nIFwibGV0XCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFZhcihuYW1lLCBjb250ZXh0LnNjb3BlLmdldChuYW1lKSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1widmFyXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge2NoZWNrU3VidHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2RlZmluaXRpb25zL2Fzc2VydGlvbic7XG5pbXBvcnQgQ29lcmNpb24gZnJvbSAnLi9kZWZpbml0aW9ucy9jb2VyY2lvbic7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvbGxhdG9yJztcbmltcG9ydCB7aXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc0ZlYXR1cmVDb25zdGFudH0gZnJvbSAnLi9pc19jb25zdGFudCc7XG5pbXBvcnQgVmFyIGZyb20gJy4vZGVmaW5pdGlvbnMvdmFyJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb24sIEV4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTdGF0ZSBhc3NvY2lhdGVkIHBhcnNpbmcgYXQgYSBnaXZlbiBwb2ludCBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeTtcbiAgICBwYXRoOiBBcnJheTxudW1iZXI+O1xuICAgIGtleTogc3RyaW5nO1xuICAgIHNjb3BlOiBTY29wZTtcbiAgICBlcnJvcnM6IEFycmF5PFBhcnNpbmdFcnJvcj47XG5cbiAgICAvLyBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uIFByb3ZpZGVkIG9ubHkgdG8gYWxsb3cgRXhwcmVzc2lvblxuICAgIC8vIGltcGxlbWVudGF0aW9ucyB0byBpbmZlciBhcmd1bWVudCB0eXBlczogRXhwcmVzc2lvbiNwYXJzZSgpIG5lZWQgbm90XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHBhcnNlZCBleHByZXNzaW9uIG1hdGNoZXNcbiAgICAvLyBgZXhwZWN0ZWRUeXBlYC5cbiAgICBleHBlY3RlZFR5cGU6ID9UeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnksXG4gICAgICAgIHBhdGg6IEFycmF5PG51bWJlcj4gPSBbXSxcbiAgICAgICAgZXhwZWN0ZWRUeXBlOiA/VHlwZSxcbiAgICAgICAgc2NvcGU6IFNjb3BlID0gbmV3IFNjb3BlKCksXG4gICAgICAgIGVycm9yczogQXJyYXk8UGFyc2luZ0Vycm9yPiA9IFtdXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5rZXkgPSBwYXRoLm1hcChwYXJ0ID0+IGBbJHtwYXJ0fV1gKS5qb2luKCcnKTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5leHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGV4cHIgdGhlIEpTT04gZXhwcmVzc2lvbiB0byBwYXJzZVxuICAgICAqIEBwYXJhbSBpbmRleCB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaW5kZXggaWYgdGhpcyBleHByZXNzaW9uIGlzIGFuIGFyZ3VtZW50IG9mIGEgcGFyZW50IGV4cHJlc3Npb24gdGhhdCdzIGJlaW5nIHBhcnNlZFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMub21pdFR5cGVBbm5vdGF0aW9ucyBzZXQgdHJ1ZSB0byBvbWl0IGluZmVycmVkIHR5cGUgYW5ub3RhdGlvbnMuICBDYWxsZXIgYmV3YXJlOiB3aXRoIHRoaXMgb3B0aW9uIHNldCwgdGhlIHBhcnNlZCBleHByZXNzaW9uJ3MgdHlwZSB3aWxsIE5PVCBzYXRpc2Z5IGBleHBlY3RlZFR5cGVgIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIHdyYXBwZWQgaW4gYW4gaW5mZXJyZWQgYW5ub3RhdGlvbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHBhcnNlKFxuICAgICAgICBleHByOiBtaXhlZCxcbiAgICAgICAgaW5kZXg/OiBudW1iZXIsXG4gICAgICAgIGV4cGVjdGVkVHlwZT86ID9UeXBlLFxuICAgICAgICBiaW5kaW5ncz86IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPixcbiAgICAgICAgb3B0aW9uczoge3R5cGVBbm5vdGF0aW9uPzogJ2Fzc2VydCcgfCAnY29lcmNlJyB8ICdvbWl0J30gPSB7fVxuICAgICk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25jYXQoaW5kZXgsIGV4cGVjdGVkVHlwZSwgYmluZGluZ3MpLl9wYXJzZShleHByLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2UoZXhwciwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgX3BhcnNlKGV4cHI6IG1peGVkLCBvcHRpb25zOiB7dHlwZUFubm90YXRpb24/OiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnfSk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGV4cHIgPT09IG51bGwgfHwgdHlwZW9mIGV4cHIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBleHByID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGV4cHIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBleHByID0gWydsaXRlcmFsJywgZXhwcl07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhbm5vdGF0ZShwYXJzZWQsIHR5cGUsIHR5cGVBbm5vdGF0aW9uOiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZUFubm90YXRpb24gPT09ICdhc3NlcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odHlwZSwgW3BhcnNlZF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlQW5ub3RhdGlvbiA9PT0gJ2NvZXJjZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvZXJjaW9uKHR5cGUsIFtwYXJzZWRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIpKSB7XG4gICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFtdXS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3AgPSBleHByWzBdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGBFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kICR7dHlwZW9mIG9wfSBpbnN0ZWFkLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBFeHByID0gdGhpcy5yZWdpc3RyeVtvcF07XG4gICAgICAgICAgICBpZiAoRXhwcikge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWQgPSBFeHByLnBhcnNlKGV4cHIsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuZXhwZWN0ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBwYXJzZWQudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGV4cGVjdCBhIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBvciBhcnJheSBidXQgaGF2ZSBhIHZhbHVlLCB3cmFwIGl0IGluIGFuIGFzc2VydGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBleHBlY3QgYSBjb2xvciBvciBmb3JtYXR0ZWQgc3RyaW5nLCBidXQgaGF2ZSBhIHN0cmluZyBvciB2YWx1ZSwgd3JhcCBpdCBpbiBhIGNvZXJjaW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGRvIHN0YXRpYyB0eXBlLWNoZWNraW5nLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBiZWhhdmlvcnMgYXJlIG92ZXJyaWRhYmxlIGZvcjpcbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFRoZSBcImNvYWxlc2NlXCIgb3BlcmF0b3IsIHdoaWNoIG5lZWRzIHRvIG9taXQgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgLy8gICAqIFN0cmluZy12YWx1ZWQgcHJvcGVydGllcyAoZS5nLiBgdGV4dC1maWVsZGApLCB3aGVyZSBjb2VyY2lvbiBpcyBtb3JlIGNvbnZlbmllbnQgdGhhbiBhc3NlcnRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ3N0cmluZycgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ251bWJlcicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2Jvb2xlYW4nIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdvYmplY3QnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScpICYmIGFjdHVhbC5raW5kID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBhbm5vdGF0ZShwYXJzZWQsIGV4cGVjdGVkLCBvcHRpb25zLnR5cGVBbm5vdGF0aW9uIHx8ICdhc3NlcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZXhwZWN0ZWQua2luZCA9PT0gJ2NvbG9yJyB8fCBleHBlY3RlZC5raW5kID09PSAnZm9ybWF0dGVkJyB8fCBleHBlY3RlZC5raW5kID09PSAncmVzb2x2ZWRJbWFnZScpICYmIChhY3R1YWwua2luZCA9PT0gJ3ZhbHVlJyB8fCBhY3R1YWwua2luZCA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBhbm5vdGF0ZShwYXJzZWQsIGV4cGVjdGVkLCBvcHRpb25zLnR5cGVBbm5vdGF0aW9uIHx8ICdjb2VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrU3VidHlwZShleHBlY3RlZCwgYWN0dWFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBleHByZXNzaW9uJ3MgYXJndW1lbnRzIGFyZSBhbGwgbGl0ZXJhbHMsIHdlIGNhbiBldmFsdWF0ZVxuICAgICAgICAgICAgICAgIC8vIGl0IGltbWVkaWF0ZWx5IGFuZCByZXBsYWNlIGl0IHdpdGggYSBsaXRlcmFsIHZhbHVlIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHBhcnNlZC9jb21waWxlZCByZXN1bHQuIEV4cHJlc3Npb25zIHRoYXQgZXhwZWN0IGFuIGltYWdlIHNob3VsZFxuICAgICAgICAgICAgICAgIC8vIG5vdCBiZSByZXNvbHZlZCBoZXJlIHNvIHdlIGNhbiBsYXRlciBnZXQgdGhlIGF2YWlsYWJsZSBpbWFnZXMuXG4gICAgICAgICAgICAgICAgaWYgKCEocGFyc2VkIGluc3RhbmNlb2YgTGl0ZXJhbCkgJiYgKHBhcnNlZC50eXBlLmtpbmQgIT09ICdyZXNvbHZlZEltYWdlJykgJiYgaXNDb25zdGFudChwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVjID0gbmV3IEV2YWx1YXRpb25Db250ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBuZXcgTGl0ZXJhbChwYXJzZWQudHlwZSwgcGFyc2VkLmV2YWx1YXRlKGVjKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYFVua25vd24gZXhwcmVzc2lvbiBcIiR7b3B9XCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC5gKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFtcImxpdGVyYWxcIiwgey4uLn1dIGluc3RlYWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAke3R5cGVvZiBleHByfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBjb250ZXh0IHN1aXRhYmxlIGZvciBwYXJzaW5nIHRoZSBzdWJleHByZXNzaW9uIGF0XG4gICAgICogaW5kZXggYGluZGV4YCwgb3B0aW9uYWxseSBhcHBlbmRpbmcgdG8gJ2xldCcgYmluZGluZyBtYXAuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYGVycm9yc2AgcHJvcGVydHksIGludGVuZGVkIGZvciBjb2xsZWN0aW5nIGVycm9ycyB3aGlsZVxuICAgICAqIHBhcnNpbmcsIGlzIGNvcGllZCBieSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gY2xvbmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uY2F0KGluZGV4OiBudW1iZXIsIGV4cGVjdGVkVHlwZT86ID9UeXBlLCBiaW5kaW5ncz86IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPikge1xuICAgICAgICBjb25zdCBwYXRoID0gdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJyA/IHRoaXMucGF0aC5jb25jYXQoaW5kZXgpIDogdGhpcy5wYXRoO1xuICAgICAgICBjb25zdCBzY29wZSA9IGJpbmRpbmdzID8gdGhpcy5zY29wZS5jb25jYXQoYmluZGluZ3MpIDogdGhpcy5zY29wZTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzaW5nQ29udGV4dChcbiAgICAgICAgICAgIHRoaXMucmVnaXN0cnksXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVzaCBhIHBhcnNpbmcgKG9yIHR5cGUgY2hlY2tpbmcpIGVycm9yIGludG8gdGhlIGB0aGlzLmVycm9yc2BcbiAgICAgKiBAcGFyYW0gZXJyb3IgVGhlIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbGx5IHNwZWNpZnkgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgYXQgYSBjaGlsZFxuICAgICAqIG9mIHRoZSBjdXJyZW50IGV4cHJlc3Npb24gYXQgYHRoaXMua2V5YC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGVycm9yKGVycm9yOiBzdHJpbmcsIC4uLmtleXM6IEFycmF5PG51bWJlcj4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGhpcy5rZXl9JHtrZXlzLm1hcChrID0+IGBbJHtrfV1gKS5qb2luKCcnKX1gO1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBQYXJzaW5nRXJyb3Ioa2V5LCBlcnJvcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbnVsbCBpZiBgdGAgaXMgYSBzdWJ0eXBlIG9mIGBleHBlY3RlZGA7IG90aGVyd2lzZSByZXR1cm5zIGFuXG4gICAgICogZXJyb3IgbWVzc2FnZSBhbmQgYWxzbyBwdXNoZXMgaXQgdG8gYHRoaXMuZXJyb3JzYC5cbiAgICAgKi9cbiAgICBjaGVja1N1YnR5cGUoZXhwZWN0ZWQ6IFR5cGUsIHQ6IFR5cGUpOiA/c3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjaGVja1N1YnR5cGUoZXhwZWN0ZWQsIHQpO1xuICAgICAgICBpZiAoZXJyb3IpIHRoaXMuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzaW5nQ29udGV4dDtcblxuZnVuY3Rpb24gaXNDb25zdGFudChleHByZXNzaW9uOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBWYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbi5ib3VuZEV4cHJlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLm5hbWUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvbGxhdG9yRXhwcmVzc2lvbikge1xuICAgICAgICAvLyBBbHRob3VnaCB0aGUgcmVzdWx0cyBvZiBhIENvbGxhdG9yIGV4cHJlc3Npb24gd2l0aCBmaXhlZCBhcmd1bWVudHNcbiAgICAgICAgLy8gZ2VuZXJhbGx5IHNob3VsZG4ndCBjaGFuZ2UgYmV0d2VlbiBleGVjdXRpb25zLCB3ZSBjYW4ndCBzZXJpYWxpemUgdGhlbVxuICAgICAgICAvLyBhcyBjb25zdGFudCBleHByZXNzaW9ucyBiZWNhdXNlIHJlc3VsdHMgY2hhbmdlIGJhc2VkIG9uIGVudmlyb25tZW50LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlQW5ub3RhdGlvbiA9IGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb2VyY2lvbiB8fFxuICAgICAgICBleHByZXNzaW9uIGluc3RhbmNlb2YgQXNzZXJ0aW9uO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29uc3RhbnQgPSB0cnVlO1xuICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKGNoaWxkID0+IHtcbiAgICAgICAgLy8gV2UgY2FuIF9hbG1vc3RfIGFzc3VtZSB0aGF0IGlmIGBleHByZXNzaW9uc2AgY2hpbGRyZW4gYXJlIGNvbnN0YW50LFxuICAgICAgICAvLyB0aGV5IHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGV2YWx1YXRlZCB0byBMaXRlcmFsIHZhbHVlcyB3aGVuIHRoZXlcbiAgICAgICAgLy8gd2VyZSBwYXJzZWQuICBUeXBlIGFubm90YXRpb25zIGFyZSB0aGUgZXhjZXB0aW9uLCBiZWNhdXNlIHRoZXkgbWlnaHRcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGluZmVycmVkIGFuZCBhZGRlZCBhZnRlciBhIGNoaWxkIHdhcyBwYXJzZWQuXG5cbiAgICAgICAgLy8gU28gd2UgcmVjdXJzZSBpbnRvIGlzQ29uc3RhbnQoKSBmb3IgdGhlIGNoaWxkcmVuIG9mIHR5cGUgYW5ub3RhdGlvbnMsXG4gICAgICAgIC8vIGJ1dCBvdGhlcndpc2Ugc2ltcGx5IGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgTGl0ZXJhbHMuXG4gICAgICAgIGlmIChpc1R5cGVBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICBjaGlsZHJlbkNvbnN0YW50ID0gY2hpbGRyZW5Db25zdGFudCAmJiBpc0NvbnN0YW50KGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkcmVuQ29uc3RhbnQgPSBjaGlsZHJlbkNvbnN0YW50ICYmIGNoaWxkIGluc3RhbmNlb2YgTGl0ZXJhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghY2hpbGRyZW5Db25zdGFudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRmVhdHVyZUNvbnN0YW50KGV4cHJlc3Npb24pICYmXG4gICAgICAgIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudChleHByZXNzaW9uLCBbJ3pvb20nLCAnaGVhdG1hcC1kZW5zaXR5JywgJ2xpbmUtcHJvZ3Jlc3MnLCAnYWNjdW11bGF0ZWQnLCAnaXMtc3VwcG9ydGVkLXNjcmlwdCddKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIFN0b3BzID0gQXJyYXk8W251bWJlciwgRXhwcmVzc2lvbl0+O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0b3AgPD0gaW5wdXQsIG9yIDAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKHN0b3BzOiBBcnJheTxudW1iZXI+LCBpbnB1dDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBsZXQgbG93ZXJJbmRleCA9IDA7XG4gICAgbGV0IHVwcGVySW5kZXggPSBsYXN0SW5kZXg7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJlbnRWYWx1ZSwgbmV4dFZhbHVlO1xuXG4gICAgd2hpbGUgKGxvd2VySW5kZXggPD0gdXBwZXJJbmRleCkge1xuICAgICAgICBjdXJyZW50SW5kZXggPSBNYXRoLmZsb29yKChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyKTtcbiAgICAgICAgY3VycmVudFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4XTtcbiAgICAgICAgbmV4dFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA8PSBpbnB1dCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGFzdEluZGV4IHx8IGlucHV0IDwgbmV4dFZhbHVlKSB7IC8vIFNlYXJjaCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvd2VySW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSA+IGlucHV0KSB7XG4gICAgICAgICAgICB1cHBlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoJ0lucHV0IGlzIG5vdCBhIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vc3RvcHMnO1xuXG5pbXBvcnQgdHlwZSB7U3RvcHN9IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgU3RlcCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc3RvcHM6IFN0b3BzID0gW107XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gLUluZmluaXR5IDogYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDE7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RvcHMubGVuZ3RoICYmIHN0b3BzW3N0b3BzLmxlbmd0aCAtIDFdWzBdID49IGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RlcChvdXRwdXRUeXBlLCBpbnB1dCwgc3RvcHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLm91dHB1dHM7XG5cbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBpZiAodmFsdWUgPD0gbGFiZWxzWzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RvcENvdW50ID0gbGFiZWxzLmxlbmd0aDtcbiAgICAgICAgaWYgKHZhbHVlID49IGxhYmVsc1tzdG9wQ291bnQgLSAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbc3RvcENvdW50IC0gMV0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhsYWJlbHMsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgZm4oZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQoLi4udGhpcy5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQucG9zc2libGVPdXRwdXRzKCkpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJzdGVwXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5sYWJlbHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tpXS5zZXJpYWxpemUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGVwO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gKGEgKiAoMSAtIHQpKSArIChiICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcihmcm9tOiBDb2xvciwgdG86IENvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICBudW1iZXIoZnJvbS5yLCB0by5yLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uZywgdG8uZywgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5hLCB0by5hLCB0KVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShmcm9tOiBBcnJheTxudW1iZXI+LCB0bzogQXJyYXk8bnVtYmVyPiwgdDogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGZyb20ubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBudW1iZXIoZCwgdG9baV0sIHQpO1xuICAgIH0pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZU51bWJlcn0gZnJvbSAnLi9pbnRlcnBvbGF0ZSc7XG5cbnR5cGUgTEFCQ29sb3IgPSB7XG4gICAgbDogbnVtYmVyLFxuICAgIGE6IG51bWJlcixcbiAgICBiOiBudW1iZXIsXG4gICAgYWxwaGE6IG51bWJlclxufTtcblxudHlwZSBIQ0xDb2xvciA9IHtcbiAgICBoOiBudW1iZXIsXG4gICAgYzogbnVtYmVyLFxuICAgIGw6IG51bWJlcixcbiAgICBhbHBoYTogbnVtYmVyXG59O1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IFhuID0gMC45NTA0NzAsIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFluID0gMSxcbiAgICBabiA9IDEuMDg4ODMwLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDEsXG4gICAgZGVnMnJhZCA9IE1hdGguUEkgLyAxODAsXG4gICAgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG5cbi8vIFV0aWxpdGllc1xuZnVuY3Rpb24geHl6MmxhYih0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIHh5ejJyZ2IoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeDogbnVtYmVyKSB7XG4gICAgeCAvPSAyNTU7XG4gICAgcmV0dXJuIHggPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbi8vIExBQlxuZnVuY3Rpb24gcmdiVG9MYWIocmdiQ29sb3I6IENvbG9yKTogTEFCQ29sb3Ige1xuICAgIGNvbnN0IGIgPSByZ2IyeHl6KHJnYkNvbG9yLnIpLFxuICAgICAgICBhID0gcmdiMnh5eihyZ2JDb2xvci5nKSxcbiAgICAgICAgbCA9IHJnYjJ4eXoocmdiQ29sb3IuYiksXG4gICAgICAgIHggPSB4eXoybGFiKCgwLjQxMjQ1NjQgKiBiICsgMC4zNTc1NzYxICogYSArIDAuMTgwNDM3NSAqIGwpIC8gWG4pLFxuICAgICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSxcbiAgICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsOiAxMTYgKiB5IC0gMTYsXG4gICAgICAgIGE6IDUwMCAqICh4IC0geSksXG4gICAgICAgIGI6IDIwMCAqICh5IC0geiksXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGFiVG9SZ2IobGFiQ29sb3I6IExBQkNvbG9yKTogQ29sb3Ige1xuICAgIGxldCB5ID0gKGxhYkNvbG9yLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTihsYWJDb2xvci5hKSA/IHkgOiB5ICsgbGFiQ29sb3IuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKGxhYkNvbG9yLmIpID8geSA6IHkgLSBsYWJDb2xvci5iIC8gMjAwO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejJyZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KSwgLy8gRDY1IC0+IHNSR0JcbiAgICAgICAgeHl6MnJnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KSxcbiAgICAgICAgeHl6MnJnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopLFxuICAgICAgICBsYWJDb2xvci5hbHBoYVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlTGFiKGZyb206IExBQkNvbG9yLCB0bzogTEFCQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYSwgdG8uYSwgdCksXG4gICAgICAgIGI6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYiwgdG8uYiwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG4vLyBIQ0xcbmZ1bmN0aW9uIHJnYlRvSGNsKHJnYkNvbG9yOiBDb2xvcik6IEhDTENvbG9yIHtcbiAgICBjb25zdCB7bCwgYSwgYn0gPSByZ2JUb0xhYihyZ2JDb2xvcik7XG4gICAgY29uc3QgaCA9IE1hdGguYXRhbjIoYiwgYSkgKiByYWQyZGVnO1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGggPCAwID8gaCArIDM2MCA6IGgsXG4gICAgICAgIGM6IE1hdGguc3FydChhICogYSArIGIgKiBiKSxcbiAgICAgICAgbCxcbiAgICAgICAgYWxwaGE6IHJnYkNvbG9yLmFcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBoY2xUb1JnYihoY2xDb2xvcjogSENMQ29sb3IpOiBDb2xvciB7XG4gICAgY29uc3QgaCA9IGhjbENvbG9yLmggKiBkZWcycmFkLFxuICAgICAgICBjID0gaGNsQ29sb3IuYyxcbiAgICAgICAgbCA9IGhjbENvbG9yLmw7XG4gICAgcmV0dXJuIGxhYlRvUmdiKHtcbiAgICAgICAgbCxcbiAgICAgICAgYTogTWF0aC5jb3MoaCkgKiBjLFxuICAgICAgICBiOiBNYXRoLnNpbihoKSAqIGMsXG4gICAgICAgIGFscGhhOiBoY2xDb2xvci5hbHBoYVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUh1ZShhOiBudW1iZXIsIGI6IG51bWJlciwgdDogbnVtYmVyKSB7XG4gICAgY29uc3QgZCA9IGIgLSBhO1xuICAgIHJldHVybiBhICsgdCAqIChkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIY2woZnJvbTogSENMQ29sb3IsIHRvOiBIQ0xDb2xvciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaDogaW50ZXJwb2xhdGVIdWUoZnJvbS5oLCB0by5oLCB0KSxcbiAgICAgICAgYzogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5jLCB0by5jLCB0KSxcbiAgICAgICAgbDogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5sLCB0by5sLCB0KSxcbiAgICAgICAgYWxwaGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYWxwaGEsIHRvLmFscGhhLCB0KVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBsYWIgPSB7XG4gICAgZm9yd2FyZDogcmdiVG9MYWIsXG4gICAgcmV2ZXJzZTogbGFiVG9SZ2IsXG4gICAgaW50ZXJwb2xhdGU6IGludGVycG9sYXRlTGFiXG59O1xuXG5leHBvcnQgY29uc3QgaGNsID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvSGNsLFxuICAgIHJldmVyc2U6IGhjbFRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUhjbFxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBVbml0QmV6aWVyIGZyb20gJ0BtYXBib3gvdW5pdGJlemllcic7XG5cbmltcG9ydCAqIGFzIGludGVycG9sYXRlIGZyb20gJy4uLy4uL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHt0b1N0cmluZywgTnVtYmVyVHlwZSwgQ29sb3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB7aGNsLCBsYWJ9IGZyb20gJy4uLy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcblxuaW1wb3J0IHR5cGUge1N0b3BzfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEludGVycG9sYXRpb25UeXBlID1cbiAgICB7IG5hbWU6ICdsaW5lYXInIH0gfFxuICAgIHsgbmFtZTogJ2V4cG9uZW50aWFsJywgYmFzZTogbnVtYmVyIH0gfFxuICAgIHsgbmFtZTogJ2N1YmljLWJlemllcicsIGNvbnRyb2xQb2ludHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIH07XG5cbmNsYXNzIEludGVycG9sYXRlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcblxuICAgIG9wZXJhdG9yOiAnaW50ZXJwb2xhdGUnIHwgJ2ludGVycG9sYXRlLWhjbCcgfCAnaW50ZXJwb2xhdGUtbGFiJztcbiAgICBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYicsIGludGVycG9sYXRpb246IEludGVycG9sYXRpb25UeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgZXhwcmVzc2lvbl0gb2Ygc3RvcHMpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRzLnB1c2goZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaW50ZXJwb2xhdGlvbkZhY3RvcihpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikge1xuICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIHQgPSBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGludGVycG9sYXRpb24uYmFzZSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCAxLCBsb3dlciwgdXBwZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb24ubmFtZSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBpbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHM7XG4gICAgICAgICAgICBjb25zdCB1YiA9IG5ldyBVbml0QmV6aWVyKGNbMF0sIGNbMV0sIGNbMl0sIGNbM10pO1xuICAgICAgICAgICAgdCA9IHViLnNvbHZlKGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgbGV0IFtvcGVyYXRvciwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIC4uLnJlc3RdID0gYXJncztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW50ZXJwb2xhdGlvbikgfHwgaW50ZXJwb2xhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi5gLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uWzBdID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtuYW1lOiAnbGluZWFyJ307XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGludGVycG9sYXRpb25bMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09ICdudW1iZXInKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLmAsIDEsIDEpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXhwb25lbnRpYWwnLFxuICAgICAgICAgICAgICAgIGJhc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludHMgPSBpbnRlcnBvbGF0aW9uLnNsaWNlKDEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMubGVuZ3RoICE9PSA0IHx8XG4gICAgICAgICAgICAgICAgY29udHJvbFBvaW50cy5zb21lKHQgPT4gdHlwZW9mIHQgIT09ICdudW1iZXInIHx8IHQgPCAwIHx8IHQgPiAxKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0N1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLicsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjdWJpYy1iZXppZXInLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHM6IChjb250cm9sUG9pbnRzOiBhbnkpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICR7U3RyaW5nKGludGVycG9sYXRpb25bMF0pfWAsIDEsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gY29udGV4dC5wYXJzZShpbnB1dCwgMiwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHN0b3BzOiBTdG9wcyA9IFtdO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcgfHwgb3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1sYWInKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gQ29sb3JUeXBlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0W2kgKyAxXTtcblxuICAgICAgICAgICAgY29uc3QgbGFiZWxLZXkgPSBpICsgMztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDQ7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0b3BzLmxlbmd0aCAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXVswXSA+PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UodmFsdWUsIHZhbHVlS2V5LCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgc3RvcHMucHVzaChbbGFiZWwsIHBhcnNlZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dHB1dFR5cGUua2luZCAhPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIG91dHB1dFR5cGUua2luZCAhPT0gJ2NvbG9yJyAmJlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLml0ZW1UeXBlLmtpbmQgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG91dHB1dFR5cGUuTiA9PT0gJ251bWJlcidcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVHlwZSAke3RvU3RyaW5nKG91dHB1dFR5cGUpfSBpcyBub3QgaW50ZXJwb2xhdGFibGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEludGVycG9sYXRlKG91dHB1dFR5cGUsIChvcGVyYXRvcjogYW55KSwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIHN0b3BzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5vdXRwdXRzO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGxhYmVsc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3BDb3VudCA9IGxhYmVscy5sZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA+PSBsYWJlbHNbc3RvcENvdW50IC0gMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzW3N0b3BDb3VudCAtIDFdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8obGFiZWxzLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgY29uc3QgdXBwZXIgPSBsYWJlbHNbaW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgdCA9IEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLCB2YWx1ZSwgbG93ZXIsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRMb3dlciA9IG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFVwcGVyID0gb3V0cHV0c1tpbmRleCArIDFdLmV2YWx1YXRlKGN0eCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiAoaW50ZXJwb2xhdGVbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV06IGFueSkob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBoY2wucmV2ZXJzZShoY2wuaW50ZXJwb2xhdGUoaGNsLmZvcndhcmQob3V0cHV0TG93ZXIpLCBoY2wuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsYWIucmV2ZXJzZShsYWIuaW50ZXJwb2xhdGUobGFiLmZvcndhcmQob3V0cHV0TG93ZXIpLCBsYWIuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbiBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGZuKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW10uY29uY2F0KC4uLnRoaXMub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gb3V0cHV0LnBvc3NpYmxlT3V0cHV0cygpKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0aW9uO1xuICAgICAgICBpZiAodGhpcy5pbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wibGluZWFyXCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICBpZiAgKHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImV4cG9uZW50aWFsXCIsIHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJjdWJpYy1iZXppZXJcIiBdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW3RoaXMub3BlcmF0b3IsIGludGVycG9sYXRpb24sIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dHNbaV0uc2VyaWFsaXplKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByYXRpbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gZXhwb25lbnRpYWwgZnVuY3Rpb25cbiAqIHN0b3BzLlxuICogSG93IGl0IHdvcmtzOiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWwgZnVuY3Rpb24gYGYoeCkgPSBhICogYmFzZV54ICsgYmAsIHdoZXJlIGBiYXNlYCBpcyB0aGUgdXNlci1zcGVjaWZpZWQgYmFzZSxcbiAqIGFuZCBgYWAgYW5kIGBiYCBhcmUgY29uc3RhbnRzIGFmZm9yZGluZyBzdWZmaWNpZW50IGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBmaXRcbiAqIHRoZSBmdW5jdGlvbiB0byB0aGUgZ2l2ZW4gc3RvcHMuXG4gKlxuICogSGVyZSdzIGEgYml0IG9mIGFsZ2VicmEgdGhhdCBsZXRzIHVzIGNvbXB1dGUgYGYoeClgIGRpcmVjdGx5IGZyb20gdGhlIHN0b3BcbiAqIHZhbHVlcyB3aXRob3V0IGV4cGxpY2l0bHkgc29sdmluZyBmb3IgYGFgIGFuZCBgYmA6XG4gKlxuICogRmlyc3Qgc3RvcCB2YWx1ZTogYGYoeDApID0geTAgPSBhICogYmFzZV54MCArIGJgXG4gKiBTZWNvbmQgc3RvcCB2YWx1ZTogYGYoeDEpID0geTEgPSBhICogYmFzZV54MSArIGJgXG4gKiA9PiBgeTEgLSB5MCA9IGEoYmFzZV54MSAtIGJhc2VeeDApYFxuICogPT4gYGEgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqXG4gKiBEZXNpcmVkIHZhbHVlOiBgZih4KSA9IHkgPSBhICogYmFzZV54ICsgYmBcbiAqID0+IGBmKHgpID0geTAgKyBhICogKGJhc2VeeCAtIGJhc2VeeDApYFxuICpcbiAqIEZyb20gdGhlIGFib3ZlLCB3ZSBjYW4gcmVwbGFjZSB0aGUgYGFgIGluIGBhICogKGJhc2VeeCAtIGJhc2VeeDApYCBhbmQgZG8gYVxuICogbGl0dGxlIGFsZ2VicmE6XG4gKiBgYGBcbiAqIGEgKiAoYmFzZV54IC0gYmFzZV54MCkgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKSAqIChiYXNlXnggLSBiYXNlXngwKVxuICogICAgICAgICAgICAgICAgICAgICA9ICh5MSAtIHkwKSAqIChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIC0gYmFzZV54MClcbiAqIGBgYFxuICpcbiAqIElmIHdlIGxldCBgKGJhc2VeeCAtIGJhc2VeeDApIC8gKGJhc2VeeDEgYmFzZV54MClgLCB0aGVuIHdlIGhhdmVcbiAqIGBmKHgpID0geTAgKyAoeTEgLSB5MCkgKiByYXRpb2AuICBJbiBvdGhlciB3b3JkcywgYHJhdGlvYCBtYXkgYmUgdHJlYXRlZCBhc1xuICogYW4gaW50ZXJwb2xhdGlvbiBmYWN0b3IgYmV0d2VlbiB0aGUgdHdvIHN0b3BzJyBvdXRwdXQgdmFsdWVzLlxuICpcbiAqIChOb3RlOiBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtIGZvciBgcmF0aW9gLFxuICogYChiYXNlXih4LXgwKSAtIDEpIC8gKGJhc2VeKHgxLXgwKSAtIDEpIGAsIGlzIGVxdWl2YWxlbnQsIGJ1dCByZXF1aXJlcyBmZXdlclxuICogZXhwZW5zaXZlIGBNYXRoLnBvdygpYCBvcGVyYXRpb25zLilcbiAqXG4gKiBAcHJpdmF0ZVxuKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVycG9sYXRlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge2NoZWNrU3VidHlwZSwgVmFsdWVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgQ29hbGVzY2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihcIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIGlmIChleHBlY3RlZFR5cGUgJiYgZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3Muc2xpY2UoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UoYXJnLCAxICsgcGFyc2VkQXJncy5sZW5ndGgsIG91dHB1dFR5cGUsIHVuZGVmaW5lZCwge3R5cGVBbm5vdGF0aW9uOiAnb21pdCd9KTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgcGFyc2VkQXJncy5wdXNoKHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KG91dHB1dFR5cGUpO1xuXG4gICAgICAgIC8vIEFib3ZlLCB3ZSBwYXJzZSBhcmd1bWVudHMgd2l0aG91dCBpbmZlcnJlZCB0eXBlIGFubm90YXRpb24gc28gdGhhdFxuICAgICAgICAvLyB0aGV5IGRvbid0IHByb2R1Y2UgYSBydW50aW1lIGVycm9yIGZvciBgbnVsbGAgaW5wdXQsIHdoaWNoIHdvdWxkXG4gICAgICAgIC8vIHByZWVtcHQgdGhlIGRlc2lyZWQgbnVsbC1jb2FsZXNjaW5nIGJlaGF2aW9yLlxuICAgICAgICAvLyBUaHVzLCBpZiBhbnkgb2Ygb3VyIGFyZ3VtZW50cyB3b3VsZCBoYXZlIG5lZWRlZCBhbiBhbm5vdGF0aW9uLCB3ZVxuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgdGhlIGVuY2xvc2luZyBjb2FsZXNjZSBleHByZXNzaW9uIHdpdGggaXQgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgbmVlZHNBbm5vdGF0aW9uID0gZXhwZWN0ZWRUeXBlICYmXG4gICAgICAgICAgICBwYXJzZWRBcmdzLnNvbWUoYXJnID0+IGNoZWNrU3VidHlwZShleHBlY3RlZFR5cGUsIGFyZy50eXBlKSk7XG5cbiAgICAgICAgcmV0dXJuIG5lZWRzQW5ub3RhdGlvbiA/XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoVmFsdWVUeXBlLCBwYXJzZWRBcmdzKSA6XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoKG91dHB1dFR5cGU6IGFueSksIHBhcnNlZEFyZ3MpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGxldCBhcmdDb3VudCA9IDA7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRJbWFnZU5hbWU7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgYXJnQ291bnQrKztcbiAgICAgICAgICAgIHJlc3VsdCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBmaXJzdCByZXF1ZXN0ZWQgaW1hZ2UgaW4gYSBjb2FsZXNjZSBzdGF0ZW1lbnRcbiAgICAgICAgICAgIC8vIGlmIGNvYWxlc2NlIGNhbid0IGZpbmQgYSB2YWxpZCBpbWFnZSwgd2UgcmV0dXJuIHRoZSBmaXJzdCBpbWFnZSBuYW1lIHNvIHN0eWxlaW1hZ2VtaXNzaW5nIGNhbiBmaXJlXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UgJiYgIXJlc3VsdC5hdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RlZEltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJbWFnZU5hbWUgPSByZXN1bHQubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT09IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWVzdGVkSW1hZ2VOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQoLi4udGhpcy5hcmdzLm1hcCgoYXJnKSA9PiBhcmcucG9zc2libGVPdXRwdXRzKCkpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJjb2FsZXNjZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2FsZXNjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgIGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5cbmNsYXNzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPjtcbiAgICByZXN1bHQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+LCByZXN1bHQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gcmVzdWx0LnR5cGU7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSBbXS5jb25jYXQoYmluZGluZ3MpO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIHRoaXMuYmluZGluZ3MpIHtcbiAgICAgICAgICAgIGZuKGJpbmRpbmdbMV0pO1xuICAgICAgICB9XG4gICAgICAgIGZuKHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYXJnc1tpXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAke3R5cGVvZiBuYW1lfSBpbnN0ZWFkLmAsIGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoL1teYS16QS1aMC05X10vLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVmFyaWFibGUgbmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgJ18nLmAsIGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRleHQucGFyc2UoYXJnc1tpICsgMV0sIGkgKyAxKTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBiaW5kaW5ncy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgY29udGV4dC5leHBlY3RlZFR5cGUsIGJpbmRpbmdzKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBuZXcgTGV0KGJpbmRpbmdzLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImxldFwiXTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZXhwcl0gb2YgdGhpcy5iaW5kaW5ncykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG5hbWUsIGV4cHIuc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGV0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHthcnJheSwgVmFsdWVUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGUsIEFycmF5VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5jbGFzcyBBdCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5kZXg6IEV4cHJlc3Npb247XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbmRleDogRXhwcmVzc2lvbiwgaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgYXJyYXkoY29udGV4dC5leHBlY3RlZFR5cGUgfHwgVmFsdWVUeXBlKSk7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHQ6IEFycmF5VHlwZSA9IChpbnB1dC50eXBlOiBhbnkpO1xuICAgICAgICByZXR1cm4gbmV3IEF0KHQuaXRlbVR5cGUsIGluZGV4LCBpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbmRleCA9ICgodGhpcy5pbmRleC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBjb25zdCBhcnJheSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBBcnJheTxWYWx1ZT4pO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9IDwgMC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA+PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9ID4gJHthcnJheS5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCAhPT0gTWF0aC5mbG9vcihpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kICR7aW5kZXh9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXlbaW5kZXhdO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbmRleCk7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImF0XCIsIHRoaXMuaW5kZXguc2VyaWFsaXplKCksIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1ZhbHVlVHlwZSwgQm9vbGVhblR5cGUsIHRvU3RyaW5nfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcblxuZnVuY3Rpb24gaXNDb21wYXJhYmxlVHlwZSh0eXBlOiBUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgIHR5cGUua2luZCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGFyYWJsZVJ1bnRpbWVWYWx1ZShuZWVkbGU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuZWVkbGUgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgICB0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICB0eXBlb2YgbmVlZGxlID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNTZWFyY2hhYmxlUnVudGltZVZhbHVlKGhheXN0YWNrOiBBcnJheTxWYWx1ZT4gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShoYXlzdGFjaykgfHxcbiAgICAgICAgICAgdHlwZW9mIGhheXN0YWNrID09PSAnc3RyaW5nJztcbn1cblxuY2xhc3MgSW4gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG5lZWRsZTogRXhwcmVzc2lvbjtcbiAgICBoYXlzdGFjazogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKG5lZWRsZTogRXhwcmVzc2lvbiwgaGF5c3RhY2s6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgIHRoaXMubmVlZGxlID0gbmVlZGxlO1xuICAgICAgICB0aGlzLmhheXN0YWNrID0gaGF5c3RhY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRsZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcblxuICAgICAgICBjb25zdCBoYXlzdGFjayA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgVmFsdWVUeXBlKTtcblxuICAgICAgICBpZiAoIW5lZWRsZSB8fCAhaGF5c3RhY2spIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmICghaXNDb21wYXJhYmxlVHlwZShuZWVkbGUudHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKG5lZWRsZS50eXBlKX0gaW5zdGVhZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbihuZWVkbGUsIGhheXN0YWNrKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IG5lZWRsZSA9ICh0aGlzLm5lZWRsZS5ldmFsdWF0ZShjdHgpOiBhbnkpO1xuICAgICAgICBjb25zdCBoYXlzdGFjayA9ICh0aGlzLmhheXN0YWNrLmV2YWx1YXRlKGN0eCk6IGFueSk7XG5cbiAgICAgICAgaWYgKCFuZWVkbGUgfHwgIWhheXN0YWNrKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVSdW50aW1lVmFsdWUobmVlZGxlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcgb3IgbnVtYmVyLCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YobmVlZGxlKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VhcmNoYWJsZVJ1bnRpbWVWYWx1ZShoYXlzdGFjaykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGhheXN0YWNrKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpID49IDA7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm5lZWRsZSk7XG4gICAgICAgIGZuKHRoaXMuaGF5c3RhY2spO1xuICAgIH1cblxuICAgIHBvc3NpYmxlT3V0cHV0cygpIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCBmYWxzZV07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1wiaW5cIiwgdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksIHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW47XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHtWYWx1ZVR5cGUsIHR5cGUgVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcblxuLy8gTWFwIGlucHV0IGxhYmVsIHZhbHVlcyB0byBvdXRwdXQgZXhwcmVzc2lvbiBpbmRleFxudHlwZSBDYXNlcyA9IHtbbnVtYmVyIHwgc3RyaW5nXTogbnVtYmVyfTtcblxuY2xhc3MgTWF0Y2ggaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0VHlwZTogVHlwZTtcblxuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuICAgIGNhc2VzOiBDYXNlcztcbiAgICBvdXRwdXRzOiBBcnJheTxFeHByZXNzaW9uPjtcbiAgICBvdGhlcndpc2U6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dFR5cGU6IFR5cGUsIG91dHB1dFR5cGU6IFR5cGUsIGlucHV0OiBFeHByZXNzaW9uLCBjYXNlczogQ2FzZXMsIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+LCBvdGhlcndpc2U6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5pbnB1dFR5cGUgPSBpbnB1dFR5cGU7XG4gICAgICAgIHRoaXMudHlwZSA9IG91dHB1dFR5cGU7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5jYXNlcyA9IGNhc2VzO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBvdXRwdXRzO1xuICAgICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA1KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAlIDIgIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLmApO1xuXG4gICAgICAgIGxldCBpbnB1dFR5cGU7XG4gICAgICAgIGxldCBvdXRwdXRUeXBlO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhc2VzID0ge307XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgbGV0IGxhYmVscyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSArIDFdO1xuXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGFiZWxzKSkge1xuICAgICAgICAgICAgICAgIGxhYmVscyA9IFtsYWJlbHNdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYWJlbENvbnRleHQgPSBjb250ZXh0LmNvbmNhdChpKTtcbiAgICAgICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcignRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGJyYW5jaCBsYWJlbC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoYEJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGFiZWwgPT09ICdudW1iZXInICYmIE1hdGguYWJzKGxhYmVsKSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoYEJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VycyBubyBsYXJnZXIgdGhhbiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfS5gKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxhYmVsID09PSAnbnVtYmVyJyAmJiBNYXRoLmZsb29yKGxhYmVsKSAhPT0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgTnVtZXJpYyBicmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlciB2YWx1ZXMuYCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRUeXBlID0gdHlwZU9mKGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhYmVsQ29udGV4dC5jaGVja1N1YnR5cGUoaW5wdXRUeXBlLCB0eXBlT2YobGFiZWwpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhc2VzW1N0cmluZyhsYWJlbCldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKCdCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2VzW1N0cmluZyhsYWJlbCldID0gb3V0cHV0cy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UodmFsdWUsIGksIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcmVzdWx0LnR5cGU7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBvdGhlcndpc2UgPSBjb250ZXh0LnBhcnNlKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgYXJncy5sZW5ndGggLSAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgaWYgKCFvdGhlcndpc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGFzc2VydChpbnB1dFR5cGUgJiYgb3V0cHV0VHlwZSk7XG5cbiAgICAgICAgaWYgKGlucHV0LnR5cGUua2luZCAhPT0gJ3ZhbHVlJyAmJiBjb250ZXh0LmNvbmNhdCgxKS5jaGVja1N1YnR5cGUoKGlucHV0VHlwZTogYW55KSwgaW5wdXQudHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaCgoaW5wdXRUeXBlOiBhbnkpLCAob3V0cHV0VHlwZTogYW55KSwgaW5wdXQsIGNhc2VzLCBvdXRwdXRzLCBvdGhlcndpc2UpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSAodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSAodHlwZU9mKGlucHV0KSA9PT0gdGhpcy5pbnB1dFR5cGUgJiYgdGhpcy5vdXRwdXRzW3RoaXMuY2FzZXNbaW5wdXRdXSkgfHwgdGhpcy5vdGhlcndpc2U7XG4gICAgICAgIHJldHVybiBvdXRwdXQuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgICAgICB0aGlzLm91dHB1dHMuZm9yRWFjaChmbik7XG4gICAgICAgIGZuKHRoaXMub3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKTogQXJyYXk8VmFsdWUgfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgLmNvbmNhdCguLi50aGlzLm91dHB1dHMubWFwKChvdXQpID0+IG91dC5wb3NzaWJsZU91dHB1dHMoKSkpXG4gICAgICAgICAgICAuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcIm1hdGNoXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIC8vIFNvcnQgc28gc2VyaWFsaXphdGlvbiBoYXMgYW4gYXJiaXRyYXJ5IGRlZmluZWQgb3JkZXIsIGV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGJyYW5jaCBvcmRlciBkb2Vzbid0IGFmZmVjdCBldmFsdWF0aW9uXG4gICAgICAgIGNvbnN0IHNvcnRlZExhYmVscyA9IE9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtcblxuICAgICAgICAvLyBHcm91cCBicmFuY2hlcyBieSB1bmlxdWUgbWF0Y2ggZXhwcmVzc2lvbiB0byBzdXBwb3J0IGNvbmRlbnNlZFxuICAgICAgICAvLyBzZXJpYWxpemF0aW9ucyBvZiB0aGUgZm9ybSBbY2FzZTEsIGNhc2UyLCAuLi5dIC0+IG1hdGNoRXhwcmVzc2lvblxuICAgICAgICBjb25zdCBncm91cGVkQnlPdXRwdXQ6IEFycmF5PFtudW1iZXIsIEFycmF5PG51bWJlciB8IHN0cmluZz5dPiA9IFtdO1xuICAgICAgICBjb25zdCBvdXRwdXRMb29rdXA6IHtbaW5kZXg6IG51bWJlcl06IG51bWJlcn0gPSB7fTsgLy8gbG9va3VwIGluZGV4IGludG8gZ3JvdXBlZEJ5T3V0cHV0IGZvciBhIGdpdmVuIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygc29ydGVkTGFiZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgb3V0cHV0LCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZ3JvdXBlZCBsaXN0XG4gICAgICAgICAgICAgICAgb3V0cHV0TG9va3VwW3RoaXMuY2FzZXNbbGFiZWxdXSA9IGdyb3VwZWRCeU91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0LnB1c2goW3RoaXMuY2FzZXNbbGFiZWxdLCBbbGFiZWxdXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBleHByZXNzaW9uIGJlZm9yZSwgYWRkIHRoZSBsYWJlbCB0byB0aGF0IG91dHB1dCdzIGdyb3VwXG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0W291dHB1dEluZGV4XVsxXS5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZXJjZUxhYmVsID0gKGxhYmVsKSA9PiB0aGlzLmlucHV0VHlwZS5raW5kID09PSAnbnVtYmVyJyA/IE51bWJlcihsYWJlbCkgOiBsYWJlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgbGFiZWxzXSBvZiBncm91cGVkQnlPdXRwdXQpIHtcbiAgICAgICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhIHNpbmdsZSBsYWJlbCBtYXRjaGVzIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goY29lcmNlTGFiZWwobGFiZWxzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFycmF5IG9mIGxpdGVyYWwgbGFiZWxzIHBvaW50aW5nIHRvIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gobGFiZWxzLm1hcChjb2VyY2VMYWJlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tvdXRwdXRJbmRleF0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm90aGVyd2lzZS5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEJyYW5jaGVzID0gQXJyYXk8W0V4cHJlc3Npb24sIEV4cHJlc3Npb25dPjtcblxuY2xhc3MgQ2FzZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBicmFuY2hlczogQnJhbmNoZXM7XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYnJhbmNoZXM6IEJyYW5jaGVzLCBvdGhlcndpc2U6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IGJyYW5jaGVzO1xuICAgICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6ID9UeXBlO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdGVzdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgQm9vbGVhblR5cGUpO1xuICAgICAgICAgICAgaWYgKCF0ZXN0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2kgKyAxXSwgaSArIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBicmFuY2hlcy5wdXNoKFt0ZXN0LCByZXN1bHRdKTtcblxuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcmVzdWx0LnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdGhlcndpc2UgPSBjb250ZXh0LnBhcnNlKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgYXJncy5sZW5ndGggLSAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgaWYgKCFvdGhlcndpc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlKChvdXRwdXRUeXBlOiBhbnkpLCBicmFuY2hlcywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0LmV2YWx1YXRlKGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbdGVzdCwgZXhwcmVzc2lvbl0gb2YgdGhpcy5icmFuY2hlcykge1xuICAgICAgICAgICAgZm4odGVzdCk7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIC5jb25jYXQoLi4udGhpcy5icmFuY2hlcy5tYXAoKFtfLCBvdXRdKSA9PiBvdXQucG9zc2libGVPdXRwdXRzKCkpKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY2FzZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt0b1N0cmluZywgVmFsdWVUeXBlLCBCb29sZWFuVHlwZSwgQ29sbGF0b3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9ICc9PScgfCAnIT0nIHwgJzwnIHwgJz4nIHwgJzw9JyB8ICc+PScgO1xuXG5mdW5jdGlvbiBpc0NvbXBhcmFibGVUeXBlKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIHR5cGU6IFR5cGUpIHtcbiAgICBpZiAob3AgPT09ICc9PScgfHwgb3AgPT09ICchPScpIHtcbiAgICAgICAgLy8gZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9yZGVyaW5nIG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPT09IGI7IH1cbmZ1bmN0aW9uIG5lcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgIT09IGI7IH1cbmZ1bmN0aW9uIGx0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA8IGI7IH1cbmZ1bmN0aW9uIGd0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA+IGI7IH1cbmZ1bmN0aW9uIGx0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhIDw9IGI7IH1cbmZ1bmN0aW9uIGd0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID49IGI7IH1cblxuZnVuY3Rpb24gZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID09PSAwOyB9XG5mdW5jdGlvbiBuZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gIWVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpOyB9XG5mdW5jdGlvbiBsdENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPCAwOyB9XG5mdW5jdGlvbiBndENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPiAwOyB9XG5mdW5jdGlvbiBsdGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA8PSAwOyB9XG5mdW5jdGlvbiBndGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA+PSAwOyB9XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycywgaW1wbGVtZW50aW5nIHRoZSBzaWduYXR1cmVzOlxuICogLSAoVCwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtIChULCB2YWx1ZSwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtICh2YWx1ZSwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKlxuICogRm9yIGluZXF1YWxpdGllcywgVCBtdXN0IGJlIGVpdGhlciB2YWx1ZSwgc3RyaW5nLCBvciBudW1iZXIuIEZvciA9PS8hPSwgaXRcbiAqIGNhbiBhbHNvIGJlIGJvb2xlYW4gb3IgbnVsbC5cbiAqXG4gKiBFcXVhbGl0eSBzZW1hbnRpY3MgYXJlIGVxdWl2YWxlbnQgdG8gSmF2YXNjcmlwdCdzIHN0cmljdCBlcXVhbGl0eSAoPT09LyE9PSlcbiAqIC0tIGkuZS4sIHdoZW4gdGhlIGFyZ3VtZW50cycgdHlwZXMgZG9uJ3QgbWF0Y2gsID09IGV2YWx1YXRlcyB0byBmYWxzZSwgIT0gdG9cbiAqIHRydWUuXG4gKlxuICogV2hlbiB0eXBlcyBkb24ndCBtYXRjaCBpbiBhbiBvcmRlcmluZyBjb21wYXJpc29uLCBhIHJ1bnRpbWUgZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VDb21wYXJpc29uKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIGNvbXBhcmVCYXNpYywgY29tcGFyZVdpdGhDb2xsYXRvcikge1xuICAgIGNvbnN0IGlzT3JkZXJDb21wYXJpc29uID0gb3AgIT09ICc9PScgJiYgb3AgIT09ICchPSc7XG5cbiAgICByZXR1cm4gY2xhc3MgQ29tcGFyaXNvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgICAgICB0eXBlOiBUeXBlO1xuICAgICAgICBsaHM6IEV4cHJlc3Npb247XG4gICAgICAgIHJoczogRXhwcmVzc2lvbjtcbiAgICAgICAgY29sbGF0b3I6ID9FeHByZXNzaW9uO1xuICAgICAgICBoYXNVbnR5cGVkQXJndW1lbnQ6IGJvb2xlYW47XG5cbiAgICAgICAgY29uc3RydWN0b3IobGhzOiBFeHByZXNzaW9uLCByaHM6IEV4cHJlc3Npb24sIGNvbGxhdG9yOiA/RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICAgICAgdGhpcy5jb2xsYXRvciA9IGNvbGxhdG9yO1xuICAgICAgICAgICAgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQgPSBsaHMudHlwZS5raW5kID09PSAndmFsdWUnIHx8IHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMyAmJiBhcmdzLmxlbmd0aCAhPT0gNClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICAgICAgY29uc3Qgb3A6IENvbXBhcmlzb25PcGVyYXRvciA9IChhcmdzWzBdOiBhbnkpO1xuXG4gICAgICAgICAgICBsZXQgbGhzID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFsaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCBsaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMSkuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhsaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByaHMgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJocykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQ29tcGFyYWJsZVR5cGUob3AsIHJocy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbmNhdCgyKS5lcnJvcihgXCIke29wfVwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGhzLnR5cGUua2luZCAhPT0gcmhzLnR5cGUua2luZCAmJlxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAndmFsdWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScgYW5kICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBpbmcgcnVsZXMgc3BlY2lmaWMgdG8gbGVzcy9ncmVhdGVyIHRoYW4gb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgaWYgKGxocy50eXBlLmtpbmQgPT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAodmFsdWUsIFQpXG4gICAgICAgICAgICAgICAgICAgIGxocyA9IG5ldyBBc3NlcnRpb24ocmhzLnR5cGUsIFtsaHNdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAoVCwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJocyA9IG5ldyBBc3NlcnRpb24obGhzLnR5cGUsIFtyaHNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb2xsYXRvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbGxhdG9yID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBDb2xsYXRvclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sbGF0b3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb24obGhzLCByaHMsIGNvbGxhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxocyA9IHRoaXMubGhzLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocy5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24gJiYgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsdCA9IHR5cGVPZihsaHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ0ID0gdHlwZU9mKHJocyk7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0eXBlIGlzIHN0cmluZyBvciBudW1iZXIsIGFuZCBlcXVhbFxuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSBydC5raW5kIHx8ICEobHQua2luZCA9PT0gJ3N0cmluZycgfHwgbHQua2luZCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgXCIke29wfVwiIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgke2x0LmtpbmR9LCAke3J0LmtpbmR9KSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IgJiYgIWlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSAnc3RyaW5nJyB8fCBydC5raW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IgP1xuICAgICAgICAgICAgICAgIGNvbXBhcmVXaXRoQ29sbGF0b3IoY3R4LCBsaHMsIHJocywgdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShjdHgpKSA6XG4gICAgICAgICAgICAgICAgY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICAgICAgZm4odGhpcy5saHMpO1xuICAgICAgICAgICAgZm4odGhpcy5yaHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IpIHtcbiAgICAgICAgICAgICAgICBmbih0aGlzLmNvbGxhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBvc3NpYmxlT3V0cHV0cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgZmFsc2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VyaWFsaXplKCkge1xuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtvcF07XG4gICAgICAgICAgICB0aGlzLmVhY2hDaGlsZChjaGlsZCA9PiB7IHNlcmlhbGl6ZWQucHVzaChjaGlsZC5zZXJpYWxpemUoKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgRXF1YWxzID0gbWFrZUNvbXBhcmlzb24oJz09JywgZXEsIGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTm90RXF1YWxzID0gbWFrZUNvbXBhcmlzb24oJyE9JywgbmVxLCBuZXFDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbiA9IG1ha2VDb21wYXJpc29uKCc8JywgbHQsIGx0Q29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW4gPSBtYWtlQ29tcGFyaXNvbignPicsIGd0LCBndENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IExlc3NUaGFuT3JFcXVhbCA9IG1ha2VDb21wYXJpc29uKCc8PScsIGx0ZXEsIGx0ZXFDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBHcmVhdGVyVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPj0nLCBndGVxLCBndGVxQ29sbGF0ZSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1N0cmluZ1R5cGUsIE51bWJlclR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5kZWNsYXJlIHZhciBJbnRsOiB7XG4gICAgTnVtYmVyRm9ybWF0OiBDbGFzczxJbnRsJE51bWJlckZvcm1hdD5cbn07XG5cbmRlY2xhcmUgY2xhc3MgSW50bCROdW1iZXJGb3JtYXQge1xuICAgIGNvbnN0cnVjdG9yIChcbiAgICAgICAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvcHRpb25zPzogTnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICk6IEludGwkTnVtYmVyRm9ybWF0O1xuXG4gICAgc3RhdGljIChcbiAgICAgICAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvcHRpb25zPzogTnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICk6IEludGwkTnVtYmVyRm9ybWF0O1xuXG4gICAgZm9ybWF0KGE6IG51bWJlcik6IHN0cmluZztcblxuICAgIHJlc29sdmVkT3B0aW9ucygpOiBhbnk7XG59XG5cbnR5cGUgTnVtYmVyRm9ybWF0T3B0aW9ucyA9IHtcbiAgICBzdHlsZT86ICdkZWNpbWFsJyB8ICdjdXJyZW5jeScgfCAncGVyY2VudCc7XG4gICAgY3VycmVuY3k/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG4gICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzPzogbnVsbCB8IHN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE51bWJlckZvcm1hdCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgbnVtYmVyOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7ICAgLy8gQkNQIDQ3IGxhbmd1YWdlIHRhZ1xuICAgIGN1cnJlbmN5OiBFeHByZXNzaW9uIHwgbnVsbDsgLy8gSVNPIDQyMTcgY3VycmVuY3kgY29kZSwgcmVxdWlyZWQgaWYgc3R5bGU9Y3VycmVuY3lcbiAgICBtaW5GcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgMFxuICAgIG1heEZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbDsgLy8gRGVmYXVsdCAzXG5cbiAgICBjb25zdHJ1Y3RvcihudW1iZXI6IEV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgbG9jYWxlOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnR5cGUgPSBTdHJpbmdUeXBlO1xuICAgICAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuY3VycmVuY3kgPSBjdXJyZW5jeTtcbiAgICAgICAgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA9IG1pbkZyYWN0aW9uRGlnaXRzO1xuICAgICAgICB0aGlzLm1heEZyYWN0aW9uRGlnaXRzID0gbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0d28gYXJndW1lbnRzLmApO1xuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghbnVtYmVyKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0gKGFyZ3NbMl06IGFueSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG9wdGlvbnMpKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYE51bWJlckZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2N1cnJlbmN5J10pIHtcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gY29udGV4dC5wYXJzZShvcHRpb25zWydjdXJyZW5jeSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghY3VycmVuY3kpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1pbkZyYWN0aW9uRGlnaXRzID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ21pbi1mcmFjdGlvbi1kaWdpdHMnXSkge1xuICAgICAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ21pbi1mcmFjdGlvbi1kaWdpdHMnXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICBpZiAoIW1pbkZyYWN0aW9uRGlnaXRzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXhGcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtYXgtZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtYXgtZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtYXhGcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE51bWJlckZvcm1hdChudW1iZXIsIGxvY2FsZSwgY3VycmVuY3ksIG1pbkZyYWN0aW9uRGlnaXRzLCBtYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlID8gdGhpcy5sb2NhbGUuZXZhbHVhdGUoY3R4KSA6IFtdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB0aGlzLmN1cnJlbmN5ID8gXCJjdXJyZW5jeVwiIDogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3kgPyB0aGlzLmN1cnJlbmN5LmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzID8gdGhpcy5taW5GcmFjdGlvbkRpZ2l0cy5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aGlzLm51bWJlci5ldmFsdWF0ZShjdHgpKTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMubnVtYmVyKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBmbih0aGlzLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGZuKHRoaXMuY3VycmVuY3kpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBmbih0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBvcHRpb25zWydsb2NhbGUnXSA9IHRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBvcHRpb25zWydjdXJyZW5jeSddID0gdGhpcy5jdXJyZW5jeS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgb3B0aW9uc1snbWluLWZyYWN0aW9uLWRpZ2l0cyddID0gdGhpcy5taW5GcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgb3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddID0gdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibnVtYmVyLWZvcm1hdFwiLCB0aGlzLm51bWJlci5zZXJpYWxpemUoKSwgb3B0aW9uc107XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlLCB0b1N0cmluZ30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgTGVuZ3RoIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IE51bWJlclR5cGU7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGlucHV0LnR5cGUua2luZCAhPT0gJ2FycmF5JyAmJiBpbnB1dC50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUua2luZCAhPT0gJ3ZhbHVlJylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICR7dG9TdHJpbmcoaW5wdXQudHlwZSl9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMZW5ndGgoaW5wdXQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQubGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZihpbnB1dCkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZU91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZW5ndGhcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGVuZ3RoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICB0eXBlIFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBFcnJvclR5cGUsXG4gICAgQ29sbGF0b3JUeXBlLFxuICAgIGFycmF5LFxuICAgIHRvU3RyaW5nIGFzIHR5cGVUb1N0cmluZ1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mLCBDb2xvciwgdmFsaWRhdGVSR0JBLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgTGV0IGZyb20gJy4vbGV0JztcbmltcG9ydCBWYXIgZnJvbSAnLi92YXInO1xuaW1wb3J0IExpdGVyYWwgZnJvbSAnLi9saXRlcmFsJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IENvZXJjaW9uIGZyb20gJy4vY29lcmNpb24nO1xuaW1wb3J0IEF0IGZyb20gJy4vYXQnO1xuaW1wb3J0IEluIGZyb20gJy4vaW4nO1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuaW1wb3J0IENhc2UgZnJvbSAnLi9jYXNlJztcbmltcG9ydCBTdGVwIGZyb20gJy4vc3RlcCc7XG5pbXBvcnQgSW50ZXJwb2xhdGUgZnJvbSAnLi9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgQ29hbGVzY2UgZnJvbSAnLi9jb2FsZXNjZSc7XG5pbXBvcnQge1xuICAgIEVxdWFscyxcbiAgICBOb3RFcXVhbHMsXG4gICAgTGVzc1RoYW4sXG4gICAgR3JlYXRlclRoYW4sXG4gICAgTGVzc1RoYW5PckVxdWFsLFxuICAgIEdyZWF0ZXJUaGFuT3JFcXVhbFxufSBmcm9tICcuL2NvbXBhcmlzb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2NvbGxhdG9yJztcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSAnLi9udW1iZXJfZm9ybWF0JztcbmltcG9ydCBGb3JtYXRFeHByZXNzaW9uIGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCBJbWFnZUV4cHJlc3Npb24gZnJvbSAnLi9pbWFnZSc7XG5pbXBvcnQgTGVuZ3RoIGZyb20gJy4vbGVuZ3RoJztcblxuaW1wb3J0IHR5cGUge1ZhcmFyZ3N9IGZyb20gJy4uL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb25SZWdpc3RyeX0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5cbmNvbnN0IGV4cHJlc3Npb25zOiBFeHByZXNzaW9uUmVnaXN0cnkgPSB7XG4gICAgLy8gc3BlY2lhbCBmb3Jtc1xuICAgICc9PSc6IEVxdWFscyxcbiAgICAnIT0nOiBOb3RFcXVhbHMsXG4gICAgJz4nOiBHcmVhdGVyVGhhbixcbiAgICAnPCc6IExlc3NUaGFuLFxuICAgICc+PSc6IEdyZWF0ZXJUaGFuT3JFcXVhbCxcbiAgICAnPD0nOiBMZXNzVGhhbk9yRXF1YWwsXG4gICAgJ2FycmF5JzogQXNzZXJ0aW9uLFxuICAgICdhdCc6IEF0LFxuICAgICdib29sZWFuJzogQXNzZXJ0aW9uLFxuICAgICdjYXNlJzogQ2FzZSxcbiAgICAnY29hbGVzY2UnOiBDb2FsZXNjZSxcbiAgICAnY29sbGF0b3InOiBDb2xsYXRvckV4cHJlc3Npb24sXG4gICAgJ2Zvcm1hdCc6IEZvcm1hdEV4cHJlc3Npb24sXG4gICAgJ2ltYWdlJzogSW1hZ2VFeHByZXNzaW9uLFxuICAgICdpbic6IEluLFxuICAgICdpbnRlcnBvbGF0ZSc6IEludGVycG9sYXRlLFxuICAgICdpbnRlcnBvbGF0ZS1oY2wnOiBJbnRlcnBvbGF0ZSxcbiAgICAnaW50ZXJwb2xhdGUtbGFiJzogSW50ZXJwb2xhdGUsXG4gICAgJ2xlbmd0aCc6IExlbmd0aCxcbiAgICAnbGV0JzogTGV0LFxuICAgICdsaXRlcmFsJzogTGl0ZXJhbCxcbiAgICAnbWF0Y2gnOiBNYXRjaCxcbiAgICAnbnVtYmVyJzogQXNzZXJ0aW9uLFxuICAgICdudW1iZXItZm9ybWF0JzogTnVtYmVyRm9ybWF0LFxuICAgICdvYmplY3QnOiBBc3NlcnRpb24sXG4gICAgJ3N0ZXAnOiBTdGVwLFxuICAgICdzdHJpbmcnOiBBc3NlcnRpb24sXG4gICAgJ3RvLWJvb2xlYW4nOiBDb2VyY2lvbixcbiAgICAndG8tY29sb3InOiBDb2VyY2lvbixcbiAgICAndG8tbnVtYmVyJzogQ29lcmNpb24sXG4gICAgJ3RvLXN0cmluZyc6IENvZXJjaW9uLFxuICAgICd2YXInOiBWYXJcbn07XG5cbmZ1bmN0aW9uIHJnYmEoY3R4LCBbciwgZywgYiwgYV0pIHtcbiAgICByID0gci5ldmFsdWF0ZShjdHgpO1xuICAgIGcgPSBnLmV2YWx1YXRlKGN0eCk7XG4gICAgYiA9IGIuZXZhbHVhdGUoY3R4KTtcbiAgICBjb25zdCBhbHBoYSA9IGEgPyBhLmV2YWx1YXRlKGN0eCkgOiAxO1xuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGVSR0JBKHIsIGcsIGIsIGFscGhhKTtcbiAgICBpZiAoZXJyb3IpIHRocm93IG5ldyBSdW50aW1lRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBuZXcgQ29sb3IociAvIDI1NSAqIGFscGhhLCBnIC8gMjU1ICogYWxwaGEsIGIgLyAyNTUgKiBhbHBoYSwgYWxwaGEpO1xufVxuXG5mdW5jdGlvbiBoYXMoa2V5LCBvYmopIHtcbiAgICByZXR1cm4ga2V5IGluIG9iajtcbn1cblxuZnVuY3Rpb24gZ2V0KGtleSwgb2JqKSB7XG4gICAgY29uc3QgdiA9IG9ialtrZXldO1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogdjtcbn1cblxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKHYsIGEsIGksIGopIHtcbiAgICB3aGlsZSAoaSA8PSBqKSB7XG4gICAgICAgIGNvbnN0IG0gPSAoaSArIGopID4+IDE7XG4gICAgICAgIGlmIChhW21dID09PSB2KVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChhW21dID4gdilcbiAgICAgICAgICAgIGogPSBtIC0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaSA9IG0gKyAxO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhcmFyZ3ModHlwZTogVHlwZSk6IFZhcmFyZ3Mge1xuICAgIHJldHVybiB7dHlwZX07XG59XG5cbkNvbXBvdW5kRXhwcmVzc2lvbi5yZWdpc3RlcihleHByZXNzaW9ucywge1xuICAgICdlcnJvcic6IFtcbiAgICAgICAgRXJyb3JUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4geyB0aHJvdyBuZXcgUnVudGltZUVycm9yKHYuZXZhbHVhdGUoY3R4KSk7IH1cbiAgICBdLFxuICAgICd0eXBlb2YnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHR5cGVUb1N0cmluZyh0eXBlT2Yodi5ldmFsdWF0ZShjdHgpKSlcbiAgICBdLFxuICAgICd0by1yZ2JhJzogW1xuICAgICAgICBhcnJheShOdW1iZXJUeXBlLCA0KSxcbiAgICAgICAgW0NvbG9yVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHYuZXZhbHVhdGUoY3R4KS50b0FycmF5KCk7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdyZ2InOiBbXG4gICAgICAgIENvbG9yVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICByZ2JhXG4gICAgXSxcbiAgICAncmdiYSc6IFtcbiAgICAgICAgQ29sb3JUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIHJnYmFcbiAgICBdLFxuICAgICdoYXMnOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW5UeXBlLFxuICAgICAgICBvdmVybG9hZHM6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2tleV0pID0+IGhhcyhrZXkuZXZhbHVhdGUoY3R4KSwgY3R4LnByb3BlcnRpZXMoKSlcbiAgICAgICAgICAgIF0sIFtcbiAgICAgICAgICAgICAgICBbU3RyaW5nVHlwZSwgT2JqZWN0VHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2tleSwgb2JqXSkgPT4gaGFzKGtleS5ldmFsdWF0ZShjdHgpLCBvYmouZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJ2dldCc6IHtcbiAgICAgICAgdHlwZTogVmFsdWVUeXBlLFxuICAgICAgICBvdmVybG9hZHM6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2tleV0pID0+IGdldChrZXkuZXZhbHVhdGUoY3R4KSwgY3R4LnByb3BlcnRpZXMoKSlcbiAgICAgICAgICAgIF0sIFtcbiAgICAgICAgICAgICAgICBbU3RyaW5nVHlwZSwgT2JqZWN0VHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2tleSwgb2JqXSkgPT4gZ2V0KGtleS5ldmFsdWF0ZShjdHgpLCBvYmouZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJ2ZlYXR1cmUtc3RhdGUnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBba2V5XSkgPT4gZ2V0KGtleS5ldmFsdWF0ZShjdHgpLCBjdHguZmVhdHVyZVN0YXRlIHx8IHt9KVxuICAgIF0sXG4gICAgJ3Byb3BlcnRpZXMnOiBbXG4gICAgICAgIE9iamVjdFR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHgucHJvcGVydGllcygpXG4gICAgXSxcbiAgICAnZ2VvbWV0cnktdHlwZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nZW9tZXRyeVR5cGUoKVxuICAgIF0sXG4gICAgJ2lkJzogW1xuICAgICAgICBWYWx1ZVR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguaWQoKVxuICAgIF0sXG4gICAgJ3pvb20nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy56b29tXG4gICAgXSxcbiAgICAnaGVhdG1hcC1kZW5zaXR5JzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMuaGVhdG1hcERlbnNpdHkgfHwgMFxuICAgIF0sXG4gICAgJ2xpbmUtcHJvZ3Jlc3MnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy5saW5lUHJvZ3Jlc3MgfHwgMFxuICAgIF0sXG4gICAgJ2FjY3VtdWxhdGVkJzogW1xuICAgICAgICBWYWx1ZVR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy5hY2N1bXVsYXRlZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGN0eC5nbG9iYWxzLmFjY3VtdWxhdGVkXG4gICAgXSxcbiAgICAnKyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJyonOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAxO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCAqPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICctJzoge1xuICAgICAgICB0eXBlOiBOdW1iZXJUeXBlLFxuICAgICAgICBvdmVybG9hZHM6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgLSBiLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF0sIFtcbiAgICAgICAgICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2FdKSA9PiAtYS5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICcvJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIC8gYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnJSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAlIGIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJ2xuMic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgICgpID0+IE1hdGguTE4yXG4gICAgXSxcbiAgICAncGknOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoKSA9PiBNYXRoLlBJXG4gICAgXSxcbiAgICAnZSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgICgpID0+IE1hdGguRVxuICAgIF0sXG4gICAgJ14nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2IsIGVdKSA9PiBNYXRoLnBvdyhiLmV2YWx1YXRlKGN0eCksIGUuZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdzcXJ0JzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFt4XSkgPT4gTWF0aC5zcXJ0KHguZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdsb2cxMCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgubG9nKG4uZXZhbHVhdGUoY3R4KSkgLyBNYXRoLkxOMTBcbiAgICBdLFxuICAgICdsbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgubG9nKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdsb2cyJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKSAvIE1hdGguTE4yXG4gICAgXSxcbiAgICAnc2luJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5zaW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2Nvcyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguY29zKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICd0YW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLnRhbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnYXNpbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYXNpbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnYWNvcyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYWNvcyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnYXRhbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYXRhbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnbWluJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiBNYXRoLm1pbiguLi5hcmdzLm1hcChhcmcgPT4gYXJnLmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ21heCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4gTWF0aC5tYXgoLi4uYXJncy5tYXAoYXJnID0+IGFyZy5ldmFsdWF0ZShjdHgpKSlcbiAgICBdLFxuICAgICdhYnMnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmFicyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAncm91bmQnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gbi5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgLy8gSmF2YXNjcmlwdCdzIE1hdGgucm91bmQoKSByb3VuZHMgdG93YXJkcyArSW5maW5pdHkgZm9yIGhhbGZ3YXlcbiAgICAgICAgICAgIC8vIHZhbHVlcywgZXZlbiB3aGVuIHRoZXkncmUgbmVnYXRpdmUuIEl0J3MgbW9yZSBjb21tb24gdG8gcm91bmRcbiAgICAgICAgICAgIC8vIGF3YXkgZnJvbSAwIChlLmcuLCB0aGlzIGlzIHdoYXQgcHl0aG9uIGFuZCBDKysgZG8pXG4gICAgICAgICAgICByZXR1cm4gdiA8IDAgPyAtTWF0aC5yb3VuZCgtdikgOiBNYXRoLnJvdW5kKHYpO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmxvb3InOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmZsb29yKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdjZWlsJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5jZWlsKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdmaWx0ZXItPT0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXSA9PT0gKHY6IGFueSkudmFsdWVcbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPT0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiBjdHguaWQoKSA9PT0gKHY6IGFueSkudmFsdWVcbiAgICBdLFxuICAgICdmaWx0ZXItdHlwZS09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiBjdHguZ2VvbWV0cnlUeXBlKCkgPT09ICh2OiBhbnkpLnZhbHVlXG4gICAgXSxcbiAgICAnZmlsdGVyLTwnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPCBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLTwnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPCBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLT4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPiBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLT4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPiBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLTw9JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDw9IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPD0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPD0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci0+PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLT49JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID49IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaGFzJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrXSkgPT4gKGs6IGFueSkudmFsdWUgaW4gY3R4LnByb3BlcnRpZXMoKVxuICAgIF0sXG4gICAgJ2ZpbHRlci1oYXMtaWQnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4LmlkKCkgIT09IG51bGxcbiAgICBdLFxuICAgICdmaWx0ZXItdHlwZS1pbic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFthcnJheShTdHJpbmdUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguZ2VvbWV0cnlUeXBlKCkpID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaWQtaW4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguaWQoKSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pbi1zbWFsbCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBhcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgLy8gYXNzdW1lcyB2IGlzIGFuIGFycmF5IGxpdGVyYWxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWluLWxhcmdlJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIGFycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAvLyBhc3N1bWVzIHYgaXMgYSBhcnJheSBsaXRlcmFsIHdpdGggdmFsdWVzIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIG9mIGEgc2luZ2xlIHR5cGVcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiBiaW5hcnlTZWFyY2goY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0sICh2OiBhbnkpLnZhbHVlLCAwLCAodjogYW55KS52YWx1ZS5sZW5ndGggLSAxKVxuICAgIF0sXG4gICAgJ2FsbCc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICYmIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJ2FueSc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIHx8IGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnISc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtCb29sZWFuVHlwZV0sXG4gICAgICAgIChjdHgsIFtiXSkgPT4gIWIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJ2lzLXN1cHBvcnRlZC1zY3JpcHQnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIC8vIEF0IHBhcnNlIHRpbWUgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSwgc28gd2UgbmVlZCB0byBleGNsdWRlIHRoaXMgZXhwcmVzc2lvbiB3aXRoIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudFxuICAgICAgICAoY3R4LCBbc10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU3VwcG9ydGVkU2NyaXB0ID0gY3R4Lmdsb2JhbHMgJiYgY3R4Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7XG4gICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWRTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNTdXBwb3J0ZWRTY3JpcHQocy5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAndXBjYXNlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtzXSkgPT4gcy5ldmFsdWF0ZShjdHgpLnRvVXBwZXJDYXNlKClcbiAgICBdLFxuICAgICdkb3duY2FzZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbc10pID0+IHMuZXZhbHVhdGUoY3R4KS50b0xvd2VyQ2FzZSgpXG4gICAgXSxcbiAgICAnY29uY2F0JzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICB2YXJhcmdzKFZhbHVlVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IGFyZ3MubWFwKGFyZyA9PiB2YWx1ZVRvU3RyaW5nKGFyZy5ldmFsdWF0ZShjdHgpKSkuam9pbignJylcbiAgICBdLFxuICAgICdyZXNvbHZlZC1sb2NhbGUnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtDb2xsYXRvclR5cGVdLFxuICAgICAgICAoY3R4LCBbY29sbGF0b3JdKSA9PiBjb2xsYXRvci5ldmFsdWF0ZShjdHgpLnJlc29sdmVkTG9jYWxlKClcbiAgICBdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwcmVzc2lvbnM7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEEgdHlwZSB1c2VkIGZvciByZXR1cm5pbmcgYW5kIHByb3BhZ2F0aW5nIGVycm9ycy4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHVuaW9uXG4gKiByZXByZXNlbnRzIHN1Y2Nlc3MgYW5kIGNvbnRhaW5zIGEgdmFsdWUsIGFuZCB0aGUgc2Vjb25kIHJlcHJlc2VudHMgYW4gZXJyb3IgYW5kXG4gKiBjb250YWlucyBhbiBlcnJvciB2YWx1ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9XG4gICAgfCB7fCByZXN1bHQ6ICdzdWNjZXNzJywgdmFsdWU6IFQgfH1cbiAgICB8IHt8IHJlc3VsdDogJ2Vycm9yJywgdmFsdWU6IEUgfH07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICByZXR1cm4ge3Jlc3VsdDogJ3N1Y2Nlc3MnLCB2YWx1ZX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvcjxULCBFPih2YWx1ZTogRSk6IFJlc3VsdDxULCBFPiB7XG4gICAgcmV0dXJuIHtyZXN1bHQ6ICdlcnJvcicsIHZhbHVlfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzcGVjWydwcm9wZXJ0eS10eXBlJ10gPT09ICdkYXRhLWRyaXZlbicgfHwgc3BlY1sncHJvcGVydHktdHlwZSddID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNab29tRXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCd6b29tJykgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJwb2xhdGlvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24uaW50ZXJwb2xhdGVkO1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHlwZSh2YWw6IG1peGVkKTogc3RyaW5nIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCAqIGFzIGNvbG9yU3BhY2VzIGZyb20gJy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi91dGlsL2NvbG9yJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3N1cHBvcnRzSW50ZXJwb2xhdGlvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vZXhwcmVzc2lvbi9zdG9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYykge1xuICAgIGNvbnN0IGlzQ29sb3IgPSBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2NvbG9yJztcbiAgICBjb25zdCB6b29tQW5kRmVhdHVyZURlcGVuZGVudCA9IHBhcmFtZXRlcnMuc3RvcHMgJiYgdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0gPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGZlYXR1cmVEZXBlbmRlbnQgPSB6b29tQW5kRmVhdHVyZURlcGVuZGVudCB8fCBwYXJhbWV0ZXJzLnByb3BlcnR5ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgem9vbURlcGVuZGVudCA9IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50IHx8ICFmZWF0dXJlRGVwZW5kZW50O1xuICAgIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUgfHwgKHN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpID8gJ2V4cG9uZW50aWFsJyA6ICdpbnRlcnZhbCcpO1xuXG4gICAgaWYgKGlzQ29sb3IpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuc3RvcHMpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RvcHMgPSBwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbc3RvcFswXSwgQ29sb3IucGFyc2Uoc3RvcFsxXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHQgPSBDb2xvci5wYXJzZShwYXJhbWV0ZXJzLmRlZmF1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0ID0gQ29sb3IucGFyc2UocHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlcnMuY29sb3JTcGFjZSAmJiBwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT09ICdyZ2InICYmICFjb2xvclNwYWNlc1twYXJhbWV0ZXJzLmNvbG9yU3BhY2VdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sb3Igc3BhY2U6ICR7cGFyYW1ldGVycy5jb2xvclNwYWNlfWApO1xuICAgIH1cblxuICAgIGxldCBpbm5lckZ1bjtcbiAgICBsZXQgaGFzaGVkU3RvcHM7XG4gICAgbGV0IGNhdGVnb3JpY2FsS2V5VHlwZTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUludGVydmFsRnVuY3Rpb247XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVDYXRlZ29yaWNhbEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEZvciBjYXRlZ29yaWNhbCBmdW5jdGlvbnMsIGdlbmVyYXRlIGFuIE9iamVjdCBhcyBhIGhhc2htYXAgb2YgdGhlIHN0b3BzIGZvciBmYXN0IHNlYXJjaGluZ1xuICAgICAgICBoYXNoZWRTdG9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcCBvZiBwYXJhbWV0ZXJzLnN0b3BzKSB7XG4gICAgICAgICAgICBoYXNoZWRTdG9wc1tzdG9wWzBdXSA9IHN0b3BbMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmZlciBrZXkgdHlwZSBiYXNlZCBvbiBmaXJzdCBzdG9wIGtleS0tIHVzZWQgdG8gZW5jZm9yY2Ugc3RyaWN0IHR5cGUgY2hlY2tpbmcgbGF0ZXJcbiAgICAgICAgY2F0ZWdvcmljYWxLZXlUeXBlID0gdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF07XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUlkZW50aXR5RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCIke3R5cGV9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUZ1bmN0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCB6b29tU3RvcHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9wID0gcGFyYW1ldGVycy5zdG9wc1tzXTtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBzdG9wWzBdLnpvb207XG4gICAgICAgICAgICBpZiAoZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW1ldGVycy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcGFyYW1ldGVycy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcGFyYW1ldGVycy5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdG9wczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHpvb21TdG9wcy5wdXNoKHpvb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXS5zdG9wcy5wdXNoKFtzdG9wWzBdLnZhbHVlLCBzdG9wWzFdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlRnVuY3Rpb25TdG9wcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9vbVN0b3BzKSB7XG4gICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25TdG9wcy5wdXNoKFtmZWF0dXJlRnVuY3Rpb25zW3pdLnpvb20sIGNyZWF0ZUZ1bmN0aW9uKGZlYXR1cmVGdW5jdGlvbnNbel0sIHByb3BlcnR5U3BlYyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0ge25hbWU6ICdsaW5lYXInfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IGZlYXR1cmVGdW5jdGlvblN0b3BzLm1hcChzID0+IHNbMF0pLFxuICAgICAgICAgICAgZXZhbHVhdGUoe3pvb219LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BzOiBmZWF0dXJlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZTogcGFyYW1ldGVycy5iYXNlXG4gICAgICAgICAgICAgICAgfSwgcHJvcGVydHlTcGVjLCB6b29tKS5ldmFsdWF0ZSh6b29tLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHpvb21EZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB0eXBlID09PSAnZXhwb25lbnRpYWwnID9cbiAgICAgICAgICAgIHtuYW1lOiAnZXhwb25lbnRpYWwnLCBiYXNlOiBwYXJhbWV0ZXJzLmJhc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYmFzZSA6IDF9IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IHBhcmFtZXRlcnMuc3RvcHMubWFwKHMgPT4gc1swXSksXG4gICAgICAgICAgICBldmFsdWF0ZTogKHt6b29tfSkgPT4gaW5uZXJGdW4ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCB6b29tLCBoYXNoZWRTdG9wcywgY2F0ZWdvcmljYWxLZXlUeXBlKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnc291cmNlJyxcbiAgICAgICAgICAgIGV2YWx1YXRlKF8sIGZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzID8gZmVhdHVyZS5wcm9wZXJ0aWVzW3BhcmFtZXRlcnMucHJvcGVydHldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyRnVuKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgdmFsdWUsIGhhc2hlZFN0b3BzLCBjYXRlZ29yaWNhbEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29hbGVzY2UoYSwgYiwgYykge1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHJldHVybiBhO1xuICAgIGlmIChiICE9PSB1bmRlZmluZWQpIHJldHVybiBiO1xuICAgIGlmIChjICE9PSB1bmRlZmluZWQpIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUNhdGVnb3JpY2FsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCwgaGFzaGVkU3RvcHMsIGtleVR5cGUpIHtcbiAgICBjb25zdCBldmFsdWF0ZWQgPSB0eXBlb2YgaW5wdXQgPT09IGtleVR5cGUgPyBoYXNoZWRTdG9wc1tpbnB1dF0gOiB1bmRlZmluZWQ7IC8vIEVuZm9yY2Ugc3RyaWN0IHR5cGluZyBvbiBpbnB1dFxuICAgIHJldHVybiBjb2FsZXNjZShldmFsdWF0ZWQsIHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUludGVydmFsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgY29uc3QgYmFzZSA9IHBhcmFtZXRlcnMuYmFzZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5iYXNlIDogMTtcblxuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG4gICAgY29uc3QgdCA9IGludGVycG9sYXRpb25GYWN0b3IoXG4gICAgICAgIGlucHV0LCBiYXNlLFxuICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVswXSxcbiAgICAgICAgcGFyYW1ldGVycy5zdG9wc1tpbmRleCArIDFdWzBdKTtcblxuICAgIGNvbnN0IG91dHB1dExvd2VyID0gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG4gICAgY29uc3Qgb3V0cHV0VXBwZXIgPSBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4ICsgMV1bMV07XG4gICAgbGV0IGludGVycCA9IGludGVycG9sYXRlW3Byb3BlcnR5U3BlYy50eXBlXSB8fCBpZGVudGl0eUZ1bmN0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcblxuICAgIGlmIChwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgJiYgcGFyYW1ldGVycy5jb2xvclNwYWNlICE9PSAncmdiJykge1xuICAgICAgICBjb25zdCBjb2xvcnNwYWNlID0gY29sb3JTcGFjZXNbcGFyYW1ldGVycy5jb2xvclNwYWNlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGludGVycCA9IChhLCBiKSA9PiBjb2xvcnNwYWNlLnJldmVyc2UoY29sb3JzcGFjZS5pbnRlcnBvbGF0ZShjb2xvcnNwYWNlLmZvcndhcmQoYSksIGNvbG9yc3BhY2UuZm9yd2FyZChiKSwgdCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3V0cHV0TG93ZXIuZXZhbHVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YXRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRMb3dlciA9IG91dHB1dExvd2VyLmV2YWx1YXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVXBwZXIgPSBvdXRwdXRVcHBlci5ldmFsdWF0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yLCB3aGljaCBoYXMgbm8gc3BlYyBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRMb3dlciA9PT0gdW5kZWZpbmVkIHx8IGV2YWx1YXRlZFVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVycChldmFsdWF0ZWRMb3dlciwgZXZhbHVhdGVkVXBwZXIsIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnAob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVJZGVudGl0eUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgaW5wdXQgPSBDb2xvci5wYXJzZShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgaW5wdXQgPSBGb3JtYXR0ZWQuZnJvbVN0cmluZyhpbnB1dC50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgaW5wdXQgPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoaW5wdXQudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gcHJvcGVydHlTcGVjLnR5cGUgJiYgKHByb3BlcnR5U3BlYy50eXBlICE9PSAnZW51bScgfHwgIXByb3BlcnR5U3BlYy52YWx1ZXNbaW5wdXRdKSkge1xuICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWxlc2NlKGlucHV0LCBwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWxcbiAqIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IFBhcnNpbmdFcnJvciBmcm9tICcuL3BhcnNpbmdfZXJyb3InO1xuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgU3RlcCBmcm9tICcuL2RlZmluaXRpb25zL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vZGVmaW5pdGlvbnMvY29hbGVzY2UnO1xuaW1wb3J0IExldCBmcm9tICcuL2RlZmluaXRpb25zL2xldCc7XG5pbXBvcnQgZGVmaW5pdGlvbnMgZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgKiBhcyBpc0NvbnN0YW50IGZyb20gJy4vaXNfY29uc3RhbnQnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHtzdWNjZXNzLCBlcnJvcn0gZnJvbSAnLi4vdXRpbC9yZXN1bHQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbiwgc3VwcG9ydHNab29tRXhwcmVzc2lvbiwgc3VwcG9ydHNJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZSwgRXZhbHVhdGlvbktpbmR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7UmVzdWx0fSBmcm9tICcuLi91dGlsL3Jlc3VsdCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvblR5cGV9IGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHR5cGUge1Byb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlID0ge1xuICAgICt0eXBlOiAxIHwgMiB8IDMgfCAnVW5rbm93bicgfCAnUG9pbnQnIHwgJ011bHRpUG9pbnQnIHwgJ0xpbmVTdHJpbmcnIHwgJ011bHRpTGluZVN0cmluZycgfCAnUG9seWdvbicgfCAnTXVsdGlQb2x5Z29uJyxcbiAgICAraWQ/OiBhbnksXG4gICAgK3Byb3BlcnRpZXM6IHtbc3RyaW5nXTogYW55fSxcbiAgICArcGF0dGVybnM/OiB7W3N0cmluZ106IHtcIm1pblwiOiBzdHJpbmcsIFwibWlkXCI6IHN0cmluZywgXCJtYXhcIjogc3RyaW5nfX1cbn07XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZSA9IHtbc3RyaW5nXTogYW55fTtcblxuZXhwb3J0IHR5cGUgR2xvYmFsUHJvcGVydGllcyA9ICRSZWFkT25seTx7XG4gICAgem9vbTogbnVtYmVyLFxuICAgIGhlYXRtYXBEZW5zaXR5PzogbnVtYmVyLFxuICAgIGxpbmVQcm9ncmVzcz86IG51bWJlcixcbiAgICBpc1N1cHBvcnRlZFNjcmlwdD86IChzdHJpbmcpID0+IGJvb2xlYW4sXG4gICAgYWNjdW11bGF0ZWQ/OiBWYWx1ZVxufT47XG5cbmV4cG9ydCBjbGFzcyBTdHlsZUV4cHJlc3Npb24ge1xuICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb247XG5cbiAgICBfZXZhbHVhdG9yOiBFdmFsdWF0aW9uQ29udGV4dDtcbiAgICBfZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbiAgICBfd2FybmluZ0hpc3Rvcnk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgICBfZW51bVZhbHVlczogP3tbc3RyaW5nXTogYW55fTtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEV4cHJlc3Npb24sIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuX3dhcm5pbmdIaXN0b3J5ID0ge307XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvciA9IG5ldyBFdmFsdWF0aW9uQ29udGV4dCgpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBwcm9wZXJ0eVNwZWMgPyBnZXREZWZhdWx0VmFsdWUocHJvcGVydHlTcGVjKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX2VudW1WYWx1ZXMgPSBwcm9wZXJ0eVNwZWMgJiYgcHJvcGVydHlTcGVjLnR5cGUgPT09ICdlbnVtJyA/IHByb3BlcnR5U3BlYy52YWx1ZXMgOiBudWxsO1xuICAgIH1cblxuICAgIGV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHMgPSBnbG9iYWxzO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZSA9IGZlYXR1cmUgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZSB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzID0gYXZhaWxhYmxlSW1hZ2VzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uID0gZm9ybWF0dGVkU2VjdGlvbiB8fCBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCAhPT0gdmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bVZhbHVlcyAmJiAhKHZhbCBpbiB0aGlzLl9lbnVtVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAke09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcCh2ID0+IEpTT04uc3RyaW5naWZ5KHYpKS5qb2luKCcsICcpfSwgYnV0IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodmFsKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fd2FybmluZ0hpc3RvcnlbZS5tZXNzYWdlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhcm5pbmdIaXN0b3J5W2UubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24ubGVuZ3RoID4gMCAmJlxuICAgICAgICB0eXBlb2YgZXhwcmVzc2lvblswXSA9PT0gJ3N0cmluZycgJiYgZXhwcmVzc2lvblswXSBpbiBkZWZpbml0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJzZSBhbmQgdHlwZWNoZWNrIHRoZSBnaXZlbiBzdHlsZSBzcGVjIEpTT04gZXhwcmVzc2lvbi4gIElmXG4gKiBvcHRpb25zLmRlZmF1bHRWYWx1ZSBpcyBwcm92aWRlZCwgdGhlbiB0aGUgcmVzdWx0aW5nIFN0eWxlRXhwcmVzc2lvbidzXG4gKiBgZXZhbHVhdGUoKWAgbWV0aG9kIHdpbGwgaGFuZGxlIGVycm9ycyBieSBsb2dnaW5nIGEgd2FybmluZyAob25jZSBwZXJcbiAqIG1lc3NhZ2UpIGFuZCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgdmFsdWUuICBPdGhlcndpc2UsIGl0IHdpbGwgdGhyb3dcbiAqIGV2YWx1YXRpb24gZXJyb3JzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkLCBwcm9wZXJ0eVNwZWM6ID9TdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFJlc3VsdDxTdHlsZUV4cHJlc3Npb24sIEFycmF5PFBhcnNpbmdFcnJvcj4+IHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2luZ0NvbnRleHQoZGVmaW5pdGlvbnMsIFtdLCBwcm9wZXJ0eVNwZWMgPyBnZXRFeHBlY3RlZFR5cGUocHJvcGVydHlTcGVjKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBGb3Igc3RyaW5nLXZhbHVlZCBwcm9wZXJ0aWVzLCBjb2VyY2UgdG8gc3RyaW5nIGF0IHRoZSB0b3AgbGV2ZWwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nLlxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlci5wYXJzZShleHByZXNzaW9uLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wZXJ0eVNwZWMgJiYgcHJvcGVydHlTcGVjLnR5cGUgPT09ICdzdHJpbmcnID8ge3R5cGVBbm5vdGF0aW9uOiAnY29lcmNlJ30gOiB1bmRlZmluZWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgYXNzZXJ0KHBhcnNlci5lcnJvcnMubGVuZ3RoID4gMCk7XG4gICAgICAgIHJldHVybiBlcnJvcihwYXJzZXIuZXJyb3JzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VzcyhuZXcgU3R5bGVFeHByZXNzaW9uKHBhcnNlZCwgcHJvcGVydHlTcGVjKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBab29tQ29uc3RhbnRFeHByZXNzaW9uPEtpbmQ6IEV2YWx1YXRpb25LaW5kPiB7XG4gICAga2luZDogS2luZDtcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuO1xuICAgIF9zdHlsZUV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGtpbmQ6IEtpbmQsIGV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgICAgICB0aGlzLl9zdHlsZUV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLmlzU3RhdGVEZXBlbmRlbnQgPSBraW5kICE9PSAoJ2NvbnN0YW50JzogRXZhbHVhdGlvbktpbmQpICYmICFpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudChleHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgWm9vbURlcGVuZGVudEV4cHJlc3Npb248S2luZDogRXZhbHVhdGlvbktpbmQ+IHtcbiAgICBraW5kOiBLaW5kO1xuICAgIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPjtcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuO1xuXG4gICAgX3N0eWxlRXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uO1xuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihraW5kOiBLaW5kLCBleHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb24sIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPiwgaW50ZXJwb2xhdGlvblR5cGU/OiBJbnRlcnBvbGF0aW9uVHlwZSkge1xuICAgICAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgICAgICB0aGlzLnpvb21TdG9wcyA9IHpvb21TdG9wcztcbiAgICAgICAgdGhpcy5fc3R5bGVFeHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5pc1N0YXRlRGVwZW5kZW50ID0ga2luZCAhPT0gKCdjYW1lcmEnOiBFdmFsdWF0aW9uS2luZCkgJiYgIWlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvblR5cGUgPSBpbnRlcnBvbGF0aW9uVHlwZTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGludGVycG9sYXRpb25GYWN0b3IoaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmludGVycG9sYXRpb25UeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLCBpbnB1dCwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbnN0YW50JyxcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KSA9PiBhbnksXG59XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ3NvdXJjZScsXG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbixcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikgPT4gYW55LFxufTtcblxuZXhwb3J0IHR5cGUgQ2FtZXJhRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY2FtZXJhJyxcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvc2l0ZUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbixcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikgPT4gYW55LFxuICAgICtpbnRlcnBvbGF0aW9uRmFjdG9yOiAoaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59O1xuXG5leHBvcnQgdHlwZSBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiA9XG4gICAgfCBDb25zdGFudEV4cHJlc3Npb25cbiAgICB8IFNvdXJjZUV4cHJlc3Npb25cbiAgICB8IENhbWVyYUV4cHJlc3Npb25cbiAgICB8IENvbXBvc2l0ZUV4cHJlc3Npb247XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQsIHByb3BlcnR5U3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBSZXN1bHQ8U3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24sIEFycmF5PFBhcnNpbmdFcnJvcj4+IHtcbiAgICBleHByZXNzaW9uID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBwcm9wZXJ0eVNwZWMpO1xuICAgIGlmIChleHByZXNzaW9uLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBleHByZXNzaW9uLnZhbHVlLmV4cHJlc3Npb247XG5cbiAgICBjb25zdCBpc0ZlYXR1cmVDb25zdGFudCA9IGlzQ29uc3RhbnQuaXNGZWF0dXJlQ29uc3RhbnQocGFyc2VkKTtcbiAgICBpZiAoIWlzRmVhdHVyZUNvbnN0YW50ICYmICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihwcm9wZXJ0eVNwZWMpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ2RhdGEgZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCcpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNab29tQ29uc3RhbnQgPSBpc0NvbnN0YW50LmlzR2xvYmFsUHJvcGVydHlDb25zdGFudChwYXJzZWQsIFsnem9vbSddKTtcbiAgICBpZiAoIWlzWm9vbUNvbnN0YW50ICYmICFzdXBwb3J0c1pvb21FeHByZXNzaW9uKHByb3BlcnR5U3BlYykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkJyldKTtcbiAgICB9XG5cbiAgICBjb25zdCB6b29tQ3VydmUgPSBmaW5kWm9vbUN1cnZlKHBhcnNlZCk7XG4gICAgaWYgKCF6b29tQ3VydmUgJiYgIWlzWm9vbUNvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ1wiem9vbVwiIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbi4nKV0pO1xuICAgIH0gZWxzZSBpZiAoem9vbUN1cnZlIGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbem9vbUN1cnZlXSk7XG4gICAgfSBlbHNlIGlmICh6b29tQ3VydmUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZSAmJiAhc3VwcG9ydHNJbnRlcnBvbGF0aW9uKHByb3BlcnR5U3BlYykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBwcm9wZXJ0eScpXSk7XG4gICAgfVxuXG4gICAgaWYgKCF6b29tQ3VydmUpIHtcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoaXNGZWF0dXJlQ29uc3RhbnQgP1xuICAgICAgICAgICAgKG5ldyBab29tQ29uc3RhbnRFeHByZXNzaW9uKCdjb25zdGFudCcsIGV4cHJlc3Npb24udmFsdWUpOiBDb25zdGFudEV4cHJlc3Npb24pIDpcbiAgICAgICAgICAgIChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignc291cmNlJywgZXhwcmVzc2lvbi52YWx1ZSk6IFNvdXJjZUV4cHJlc3Npb24pKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnBvbGF0aW9uVHlwZSA9IHpvb21DdXJ2ZSBpbnN0YW5jZW9mIEludGVycG9sYXRlID8gem9vbUN1cnZlLmludGVycG9sYXRpb24gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gc3VjY2Vzcyhpc0ZlYXR1cmVDb25zdGFudCA/XG4gICAgICAgIChuZXcgWm9vbURlcGVuZGVudEV4cHJlc3Npb24oJ2NhbWVyYScsIGV4cHJlc3Npb24udmFsdWUsIHpvb21DdXJ2ZS5sYWJlbHMsIGludGVycG9sYXRpb25UeXBlKTogQ2FtZXJhRXhwcmVzc2lvbikgOlxuICAgICAgICAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjb21wb3NpdGUnLCBleHByZXNzaW9uLnZhbHVlLCB6b29tQ3VydmUubGFiZWxzLCBpbnRlcnBvbGF0aW9uVHlwZSk6IENvbXBvc2l0ZUV4cHJlc3Npb24pKTtcbn1cblxuaW1wb3J0IHtpc0Z1bmN0aW9uLCBjcmVhdGVGdW5jdGlvbn0gZnJvbSAnLi4vZnVuY3Rpb24nO1xuaW1wb3J0IHtDb2xvcn0gZnJvbSAnLi92YWx1ZXMnO1xuXG4vLyBzZXJpYWxpemF0aW9uIHdyYXBwZXIgZm9yIG9sZC1zdHlsZSBzdG9wIGZ1bmN0aW9ucyBub3JtYWxpemVkIHRvIHRoZVxuLy8gZXhwcmVzc2lvbiBpbnRlcmZhY2VcbmV4cG9ydCBjbGFzcyBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4ge1xuICAgIF9wYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPjtcbiAgICBfc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBraW5kOiBFdmFsdWF0aW9uS2luZDtcbiAgICBldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgaW50ZXJwb2xhdGlvbkZhY3RvcjogPyhpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXI7XG4gICAgem9vbVN0b3BzOiA/QXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+LCBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgdGhpcy5fc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgICAgIGV4dGVuZCh0aGlzLCBjcmVhdGVGdW5jdGlvbih0aGlzLl9wYXJhbWV0ZXJzLCB0aGlzLl9zcGVjaWZpY2F0aW9uKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQ6IHtfcGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIF9zcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0pIHtcbiAgICAgICAgcmV0dXJuICgobmV3IFN0eWxlUHJvcGVydHlGdW5jdGlvbihzZXJpYWxpemVkLl9wYXJhbWV0ZXJzLCBzZXJpYWxpemVkLl9zcGVjaWZpY2F0aW9uKSk6IFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPik7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShpbnB1dDogU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfcGFyYW1ldGVyczogaW5wdXQuX3BhcmFtZXRlcnMsXG4gICAgICAgICAgICBfc3BlY2lmaWNhdGlvbjogaW5wdXQuX3NwZWNpZmljYXRpb25cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb248VD4odmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+LCBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFN0eWxlUHJvcGVydHlFeHByZXNzaW9uIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIChuZXcgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKHZhbHVlLCBzcGVjaWZpY2F0aW9uKTogYW55KTtcblxuICAgIH0gZWxzZSBpZiAoaXNFeHByZXNzaW9uKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlLCBzcGVjaWZpY2F0aW9uKTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGluIHZhbGlkYXRpb25cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihleHByZXNzaW9uLnZhbHVlLm1hcChlcnIgPT4gYCR7ZXJyLmtleX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbignLCAnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24udmFsdWU7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY29uc3RhbnQ6IGFueSA9IHZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBzcGVjaWZpY2F0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0YW50ID0gQ29sb3IucGFyc2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnY29uc3RhbnQnLFxuICAgICAgICAgICAgZXZhbHVhdGU6ICgpID0+IGNvbnN0YW50XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vLyBab29tLWRlcGVuZGVudCBleHByZXNzaW9ucyBtYXkgb25seSB1c2UgW1wiem9vbVwiXSBhcyB0aGUgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiXG4vLyBleHByZXNzaW9uIChjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gYXMgYSBcImN1cnZlXCIpLiBUaGUgY3VydmUgbWF5IGJlIHdyYXBwZWQgaW4gb25lIG9yIG1vcmUgXCJsZXRcIiBvclxuLy8gXCJjb2FsZXNjZVwiIGV4cHJlc3Npb25zLlxuZnVuY3Rpb24gZmluZFpvb21DdXJ2ZShleHByZXNzaW9uOiBFeHByZXNzaW9uKTogU3RlcCB8IEludGVycG9sYXRlIHwgUGFyc2luZ0Vycm9yIHwgbnVsbCB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBMZXQpIHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFpvb21DdXJ2ZShleHByZXNzaW9uLnJlc3VsdCk7XG5cbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb2FsZXNjZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBleHByZXNzaW9uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRab29tQ3VydmUoYXJnKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICgoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFN0ZXAgfHwgZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEludGVycG9sYXRlKSAmJlxuICAgICAgICBleHByZXNzaW9uLmlucHV0IGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmXG4gICAgICAgIGV4cHJlc3Npb24uaW5wdXQubmFtZSA9PT0gJ3pvb20nKSB7XG5cbiAgICAgICAgcmVzdWx0ID0gZXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXhwcmVzc2lvbi5lYWNoQ2hpbGQoKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gZmluZFpvb21DdXJ2ZShjaGlsZCk7XG4gICAgICAgIGlmIChjaGlsZFJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdFcnJvcikge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2hpbGRSZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXJlc3VsdCAmJiBjaGlsZFJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFBhcnNpbmdFcnJvcignJywgJ1wiem9vbVwiIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgJiYgY2hpbGRSZXN1bHQgJiYgcmVzdWx0ICE9PSBjaGlsZFJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFBhcnNpbmdFcnJvcignJywgJ09ubHkgb25lIHpvb20tYmFzZWQgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuaW1wb3J0IHtDb2xvclR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIEJvb2xlYW5UeXBlLCBWYWx1ZVR5cGUsIEZvcm1hdHRlZFR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlLCBhcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZShzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFR5cGUge1xuICAgIGNvbnN0IHR5cGVzID0ge1xuICAgICAgICBjb2xvcjogQ29sb3JUeXBlLFxuICAgICAgICBzdHJpbmc6IFN0cmluZ1R5cGUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyVHlwZSxcbiAgICAgICAgZW51bTogU3RyaW5nVHlwZSxcbiAgICAgICAgYm9vbGVhbjogQm9vbGVhblR5cGUsXG4gICAgICAgIGZvcm1hdHRlZDogRm9ybWF0dGVkVHlwZSxcbiAgICAgICAgcmVzb2x2ZWRJbWFnZTogUmVzb2x2ZWRJbWFnZVR5cGVcbiAgICB9O1xuXG4gICAgaWYgKHNwZWMudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICByZXR1cm4gYXJyYXkodHlwZXNbc3BlYy52YWx1ZV0gfHwgVmFsdWVUeXBlLCBzcGVjLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzW3NwZWMudHlwZV07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFZhbHVlIHtcbiAgICBpZiAoc3BlYy50eXBlID09PSAnY29sb3InICYmIGlzRnVuY3Rpb24oc3BlYy5kZWZhdWx0KSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhlYXRtYXAtY29sb3I6IGl0IHVzZXMgdGhlICdkZWZhdWx0OicgdG8gZGVmaW5lIGFcbiAgICAgICAgLy8gZGVmYXVsdCBjb2xvciByYW1wLCBidXQgY3JlYXRlRXhwcmVzc2lvbiBleHBlY3RzIGEgc2ltcGxlIHZhbHVlIHRvIGZhbGxcbiAgICAgICAgLy8gYmFjayB0byBpbiBjYXNlIG9mIHJ1bnRpbWUgZXJyb3JzXG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoMCwgMCwgMCwgMCk7XG4gICAgfSBlbHNlIGlmIChzcGVjLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnBhcnNlKHNwZWMuZGVmYXVsdCkgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNwZWMuZGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzcGVjLmRlZmF1bHQ7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGVTcGVjIGZyb20gJy4vdmFsaWRhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZU9iamVjdChvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgb2JqZWN0ID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBlbGVtZW50U3BlY3MgPSBvcHRpb25zLnZhbHVlU3BlYyB8fCB7fTtcbiAgICBjb25zdCBlbGVtZW50VmFsaWRhdG9ycyA9IG9wdGlvbnMub2JqZWN0RWxlbWVudFZhbGlkYXRvcnMgfHwge307XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKG9iamVjdCk7XG4gICAgaWYgKHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG9iamVjdCwgYG9iamVjdCBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9iamVjdEtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFNwZWNLZXkgPSBvYmplY3RLZXkuc3BsaXQoJy4nKVswXTsgLy8gdHJlYXQgJ3BhaW50LionIGFzICdwYWludCdcbiAgICAgICAgY29uc3QgZWxlbWVudFNwZWMgPSBlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldIHx8IGVsZW1lbnRTcGVjc1snKiddO1xuXG4gICAgICAgIGxldCB2YWxpZGF0ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50VmFsaWRhdG9yc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IGVsZW1lbnRWYWxpZGF0b3JzW2VsZW1lbnRTcGVjS2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSB2YWxpZGF0ZVNwZWM7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFZhbGlkYXRvcnNbJyonXSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gZWxlbWVudFZhbGlkYXRvcnNbJyonXTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50U3BlY3NbJyonXSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gdmFsaWRhdGVTcGVjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG9iamVjdFtvYmplY3RLZXldLCBgdW5rbm93biBwcm9wZXJ0eSBcIiR7b2JqZWN0S2V5fVwiYCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlRWxlbWVudCh7XG4gICAgICAgICAgICBrZXk6IChrZXkgPyBgJHtrZXl9LmAgOiBrZXkpICsgb2JqZWN0S2V5LFxuICAgICAgICAgICAgdmFsdWU6IG9iamVjdFtvYmplY3RLZXldLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBlbGVtZW50U3BlYyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgICAgb2JqZWN0S2V5XG4gICAgICAgIH0sIG9iamVjdCkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWxlbWVudFNwZWNLZXkgaW4gZWxlbWVudFNwZWNzKSB7XG4gICAgICAgIC8vIERvbid0IGNoZWNrIGByZXF1aXJlZGAgd2hlbiB0aGVyZSdzIGEgY3VzdG9tIHZhbGlkYXRvciBmb3IgdGhhdCBwcm9wZXJ0eS5cbiAgICAgICAgaWYgKGVsZW1lbnRWYWxpZGF0b3JzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XS5yZXF1aXJlZCAmJiBlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldWydkZWZhdWx0J10gPT09IHVuZGVmaW5lZCAmJiBvYmplY3RbZWxlbWVudFNwZWNLZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBvYmplY3QsIGBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiJHtlbGVtZW50U3BlY0tleX1cImApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVBcnJheShvcHRpb25zKSB7XG4gICAgY29uc3QgYXJyYXkgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGFycmF5U3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB2YWxpZGF0ZUFycmF5RWxlbWVudCA9IG9wdGlvbnMuYXJyYXlFbGVtZW50VmFsaWRhdG9yIHx8IHZhbGlkYXRlO1xuXG4gICAgaWYgKGdldFR5cGUoYXJyYXkpICE9PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZShhcnJheSl9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmIChhcnJheVNwZWMubGVuZ3RoICYmIGFycmF5Lmxlbmd0aCAhPT0gYXJyYXlTcGVjLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBhcnJheSwgYGFycmF5IGxlbmd0aCAke2FycmF5U3BlYy5sZW5ndGh9IGV4cGVjdGVkLCBsZW5ndGggJHthcnJheS5sZW5ndGh9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmIChhcnJheVNwZWNbJ21pbi1sZW5ndGgnXSAmJiBhcnJheS5sZW5ndGggPCBhcnJheVNwZWNbJ21pbi1sZW5ndGgnXSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBhcnJheSwgYGFycmF5IGxlbmd0aCBhdCBsZWFzdCAke2FycmF5U3BlY1snbWluLWxlbmd0aCddfSBleHBlY3RlZCwgbGVuZ3RoICR7YXJyYXkubGVuZ3RofSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBsZXQgYXJyYXlFbGVtZW50U3BlYyA9IHtcbiAgICAgICAgXCJ0eXBlXCI6IGFycmF5U3BlYy52YWx1ZSxcbiAgICAgICAgXCJ2YWx1ZXNcIjogYXJyYXlTcGVjLnZhbHVlc1xuICAgIH07XG5cbiAgICBpZiAoc3R5bGVTcGVjLiR2ZXJzaW9uIDwgNykge1xuICAgICAgICBhcnJheUVsZW1lbnRTcGVjLmZ1bmN0aW9uID0gYXJyYXlTcGVjLmZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGlmIChnZXRUeXBlKGFycmF5U3BlYy52YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFycmF5RWxlbWVudFNwZWMgPSBhcnJheVNwZWMudmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUFycmF5RWxlbWVudCh7XG4gICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgIGFycmF5SW5kZXg6IGksXG4gICAgICAgICAgICB2YWx1ZTogYXJyYXlbaV0sXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGFycmF5RWxlbWVudFNwZWMsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIGtleTogYCR7a2V5fVske2l9XWBcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgbGV0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHR5cGUgPSAnTmFOJztcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBudW1iZXIgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKCdtaW5pbXVtJyBpbiB2YWx1ZVNwZWMgJiYgdmFsdWUgPCB2YWx1ZVNwZWMubWluaW11bSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYCR7dmFsdWV9IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAke3ZhbHVlU3BlYy5taW5pbXVtfWApXTtcbiAgICB9XG5cbiAgICBpZiAoJ21heGltdW0nIGluIHZhbHVlU3BlYyAmJiB2YWx1ZSA+IHZhbHVlU3BlYy5tYXhpbXVtKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgJHt2YWx1ZX0gaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlICR7dmFsdWVTcGVjLm1heGltdW19YCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUFycmF5IGZyb20gJy4vdmFsaWRhdGVfYXJyYXknO1xuaW1wb3J0IHZhbGlkYXRlTnVtYmVyIGZyb20gJy4vdmFsaWRhdGVfbnVtYmVyJztcbmltcG9ydCB7aXNFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge1xuICAgIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uLFxuICAgIHN1cHBvcnRzWm9vbUV4cHJlc3Npb24sXG4gICAgc3VwcG9ydHNJbnRlcnBvbGF0aW9uXG59IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IGZ1bmN0aW9uVmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3QgZnVuY3Rpb25UeXBlID0gdW5idW5kbGUob3B0aW9ucy52YWx1ZS50eXBlKTtcbiAgICBsZXQgc3RvcEtleVR5cGU7XG4gICAgbGV0IHN0b3BEb21haW5WYWx1ZXMgPSB7fTtcbiAgICBsZXQgcHJldmlvdXNTdG9wRG9tYWluVmFsdWU7XG4gICAgbGV0IHByZXZpb3VzU3RvcERvbWFpblpvb207XG5cbiAgICBjb25zdCBpc1pvb21GdW5jdGlvbiA9IGZ1bmN0aW9uVHlwZSAhPT0gJ2NhdGVnb3JpY2FsJyAmJiBvcHRpb25zLnZhbHVlLnByb3BlcnR5ID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNQcm9wZXJ0eUZ1bmN0aW9uID0gIWlzWm9vbUZ1bmN0aW9uO1xuICAgIGNvbnN0IGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24gPVxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHMpID09PSAnYXJyYXknICYmXG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wc1swXSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzWzBdWzBdKSA9PT0gJ29iamVjdCc7XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICB2YWx1ZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLmZ1bmN0aW9uLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgIHN0b3BzOiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcHMsXG4gICAgICAgICAgICBkZWZhdWx0OiB2YWxpZGF0ZUZ1bmN0aW9uRGVmYXVsdFxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnaWRlbnRpdHknICYmIGlzWm9vbUZ1bmN0aW9uKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwicHJvcGVydHlcIicpKTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnaWRlbnRpdHknICYmICFvcHRpb25zLnZhbHVlLnN0b3BzKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwic3RvcHNcIicpKTtcbiAgICB9XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnZXhwb25lbnRpYWwnICYmIG9wdGlvbnMudmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgIXN1cHBvcnRzSW50ZXJwb2xhdGlvbihvcHRpb25zLnZhbHVlU3BlYykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ2V4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJykpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnN0eWxlU3BlYy4kdmVyc2lvbiA+PSA4KSB7XG4gICAgICAgIGlmIChpc1Byb3BlcnR5RnVuY3Rpb24gJiYgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ3Byb3BlcnR5IGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzWm9vbUZ1bmN0aW9uICYmICFzdXBwb3J0c1pvb21FeHByZXNzaW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ3pvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyB8fCBpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uKSAmJiBvcHRpb25zLnZhbHVlLnByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wicHJvcGVydHlcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvblN0b3BzKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgXCJzdG9wc1wiIHByb3BlcnR5JyldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUFycmF5KHtcbiAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogb3B0aW9ucy52YWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICBhcnJheUVsZW1lbnRWYWxpZGF0b3I6IHZhbGlkYXRlRnVuY3Rpb25TdG9wXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdhcnJheScgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCB2YWx1ZSwgJ2FycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvblN0b3Aob3B0aW9ucykge1xuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgICAgICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWUpfSBmb3VuZGApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAke3ZhbHVlLmxlbmd0aH0gZm91bmRgKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbikge1xuICAgICAgICAgICAgaWYgKGdldFR5cGUodmFsdWVbMF0pICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgb2JqZWN0IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWVbMF0pfSBmb3VuZGApXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVswXS56b29tID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ29iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbScpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVswXS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RvcERvbWFpblpvb20gJiYgcHJldmlvdXNTdG9wRG9tYWluWm9vbSA+IHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWVbMF0uem9vbSwgJ3N0b3Agem9vbSB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pICE9PSBwcmV2aW91c1N0b3BEb21haW5ab29tKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluWm9vbSA9IHVuYnVuZGxlKHZhbHVlWzBdLnpvb20pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU3RvcERvbWFpblZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHN0b3BEb21haW5WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzoge3pvb206IHt9fSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7em9vbTogdmFsaWRhdGVOdW1iZXIsIHZhbHVlOiB2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZX1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVTdG9wRG9tYWluVmFsdWUoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzoge30sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgfSwgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4cHJlc3Npb24oZGVlcFVuYnVuZGxlKHZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgJ2V4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4nKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAga2V5OiBgJHtrZXl9WzFdYCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZnVuY3Rpb25WYWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3RvcERvbWFpblZhbHVlKG9wdGlvbnMsIHN0b3ApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFR5cGUob3B0aW9ucy52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdW5idW5kbGUob3B0aW9ucy52YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgcmVwb3J0VmFsdWUgPSBvcHRpb25zLnZhbHVlICE9PSBudWxsID8gb3B0aW9ucy52YWx1ZSA6IHN0b3A7XG5cbiAgICAgICAgaWYgKCFzdG9wS2V5VHlwZSkge1xuICAgICAgICAgICAgc3RvcEtleVR5cGUgPSB0eXBlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHN0b3BLZXlUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBgJHt0eXBlfSBzdG9wIGRvbWFpbiB0eXBlIG11c3QgbWF0Y2ggcHJldmlvdXMgc3RvcCBkb21haW4gdHlwZSAke3N0b3BLZXlUeXBlfWApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsICdzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4nKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSAhPT0gJ251bWJlcicgJiYgZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBudW1iZXIgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgO1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKGZ1bmN0aW9uVmFsdWVTcGVjKSAmJiBmdW5jdGlvblR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJ1xcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgXCJ0eXBlXCI6IFwiY2F0ZWdvcmljYWxcImAuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIG1lc3NhZ2UpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdjYXRlZ29yaWNhbCcgJiYgdHlwZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgYGludGVnZXIgZXhwZWN0ZWQsIGZvdW5kICR7dmFsdWV9YCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPT0gJ2NhdGVnb3JpY2FsJyAmJiB0eXBlID09PSAnbnVtYmVyJyAmJiBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsICdzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyJyldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdjYXRlZ29yaWNhbCcgJiYgdmFsdWUgaW4gc3RvcERvbWFpblZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZScpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3BEb21haW5WYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uRGVmYXVsdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGZ1bmN0aW9uVmFsdWVTcGVjLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbiwgY3JlYXRlUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7ZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7aXNTdGF0ZUNvbnN0YW50LCBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQsIGlzRmVhdHVyZUNvbnN0YW50fSBmcm9tICcuLi9leHByZXNzaW9uL2lzX2NvbnN0YW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnM6IGFueSk6IEFycmF5PFZhbGlkYXRpb25FcnJvcj4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyA/IGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbiA6IGNyZWF0ZUV4cHJlc3Npb24pKGRlZXBVbmJ1bmRsZShvcHRpb25zLnZhbHVlKSwgb3B0aW9ucy52YWx1ZVNwZWMpO1xuICAgIGlmIChleHByZXNzaW9uLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi52YWx1ZS5tYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihgJHtvcHRpb25zLmtleX0ke2Vycm9yLmtleX1gLCBvcHRpb25zLnZhbHVlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbk9iaiA9IChleHByZXNzaW9uLnZhbHVlOiBhbnkpLmV4cHJlc3Npb24gfHwgKGV4cHJlc3Npb24udmFsdWU6IGFueSkuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uO1xuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdwcm9wZXJ0eScgJiYgKG9wdGlvbnMucHJvcGVydHlLZXkgPT09ICd0ZXh0LWZvbnQnKSAmJlxuICAgICAgICBleHByZXNzaW9uT2JqLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2YodW5kZWZpbmVkKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCBgSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yIFwiJHtvcHRpb25zLnByb3BlcnR5S2V5fVwiLiBPdXRwdXQgdmFsdWVzIG11c3QgYmUgY29udGFpbmVkIGFzIGxpdGVyYWxzIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi5gKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdwcm9wZXJ0eScgJiYgb3B0aW9ucy5wcm9wZXJ0eVR5cGUgPT09ICdsYXlvdXQnICYmXG4gICAgICAgICghaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcImZlYXR1cmUtc3RhdGVcIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbGF5b3V0IHByb3BlcnRpZXMuJyldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAnZmlsdGVyJyAmJiAhaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiZmVhdHVyZS1zdGF0ZVwiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBmaWx0ZXJzLicpXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCAmJiBvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoJ2NsdXN0ZXInKSA9PT0gMCkge1xuICAgICAgICBpZiAoIWlzR2xvYmFsUHJvcGVydHlDb25zdGFudChleHByZXNzaW9uT2JqLCBbJ3pvb20nLCAnZmVhdHVyZS1zdGF0ZSddKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJ6b29tXCIgYW5kIFwiZmVhdHVyZS1zdGF0ZVwiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ2NsdXN0ZXItaW5pdGlhbCcgJiYgIWlzRmVhdHVyZUNvbnN0YW50KGV4cHJlc3Npb25PYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdGZWF0dXJlIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBpbml0aWFsIGV4cHJlc3Npb24gcGFydCBvZiBjbHVzdGVyIHByb3BlcnRpZXMuJyldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBib29sZWFuIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHtwYXJzZUNTU0NvbG9yfSBmcm9tICdjc3Njb2xvcnBhcnNlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sb3Iob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBjb2xvciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VDU1NDb2xvcih2YWx1ZSkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBjb2xvciBleHBlY3RlZCwgXCIke3ZhbHVlfVwiIGZvdW5kYCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUVudW0ob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlU3BlYy52YWx1ZXMpKSB7IC8vIDw9djdcbiAgICAgICAgaWYgKHZhbHVlU3BlYy52YWx1ZXMuaW5kZXhPZih1bmJ1bmRsZSh2YWx1ZSkpID09PSAtMSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZXhwZWN0ZWQgb25lIG9mIFske3ZhbHVlU3BlYy52YWx1ZXMuam9pbignLCAnKX1dLCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA+PXY4XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZVNwZWMudmFsdWVzKS5pbmRleE9mKHVuYnVuZGxlKHZhbHVlKSkgPT09IC0xKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBleHBlY3RlZCBvbmUgb2YgWyR7T2JqZWN0LmtleXModmFsdWVTcGVjLnZhbHVlcykuam9pbignLCAnKX1dLCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtHbG9iYWxQcm9wZXJ0aWVzfSBmcm9tICcuLi9leHByZXNzaW9uJztcbmV4cG9ydCB0eXBlIEZlYXR1cmVGaWx0ZXIgPSAoZ2xvYmFsUHJvcGVydGllczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbHRlcjtcbmV4cG9ydCB7aXNFeHByZXNzaW9uRmlsdGVyfTtcblxuZnVuY3Rpb24gaXNFeHByZXNzaW9uRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpIHx8IGZpbHRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzd2l0Y2ggKGZpbHRlclswXSkge1xuICAgIGNhc2UgJ2hhcyc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDIgJiYgZmlsdGVyWzFdICE9PSAnJGlkJyAmJiBmaWx0ZXJbMV0gIT09ICckdHlwZSc7XG5cbiAgICBjYXNlICdpbic6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJbMl0pO1xuICAgIGNhc2UgJyFpbic6XG4gICAgY2FzZSAnIWhhcyc6XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgJz09JzpcbiAgICBjYXNlICchPSc6XG4gICAgY2FzZSAnPic6XG4gICAgY2FzZSAnPj0nOlxuICAgIGNhc2UgJzwnOlxuICAgIGNhc2UgJzw9JzpcbiAgICAgICAgcmV0dXJuIGZpbHRlci5sZW5ndGggIT09IDMgfHwgKEFycmF5LmlzQXJyYXkoZmlsdGVyWzFdKSB8fCBBcnJheS5pc0FycmF5KGZpbHRlclsyXSkpO1xuXG4gICAgY2FzZSAnYW55JzpcbiAgICBjYXNlICdhbGwnOlxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsdGVyLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzRXhwcmVzc2lvbkZpbHRlcihmKSAmJiB0eXBlb2YgZiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5jb25zdCBmaWx0ZXJTcGVjID0ge1xuICAgICd0eXBlJzogJ2Jvb2xlYW4nLFxuICAgICdkZWZhdWx0JzogZmFsc2UsXG4gICAgJ3RyYW5zaXRpb24nOiBmYWxzZSxcbiAgICAncHJvcGVydHktdHlwZSc6ICdkYXRhLWRyaXZlbicsXG4gICAgJ2V4cHJlc3Npb24nOiB7XG4gICAgICAgICdpbnRlcnBvbGF0ZWQnOiBmYWxzZSxcbiAgICAgICAgJ3BhcmFtZXRlcnMnOiBbJ3pvb20nLCAnZmVhdHVyZSddXG4gICAgfVxufTtcblxuLyoqXG4gKiBHaXZlbiBhIGZpbHRlciBleHByZXNzZWQgYXMgbmVzdGVkIGFycmF5cywgcmV0dXJuIGEgbmV3IGZ1bmN0aW9uXG4gKiB0aGF0IGV2YWx1YXRlcyB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSAod2l0aCBhIC5wcm9wZXJ0aWVzIG9yIC50YWdzIHByb3BlcnR5KVxuICogcGFzc2VzIGl0cyB0ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXIgbWFwYm94IGdsIGZpbHRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBmaWx0ZXItZXZhbHVhdGluZyBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXIoZmlsdGVyOiBhbnkpOiBGZWF0dXJlRmlsdGVyIHtcbiAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghaXNFeHByZXNzaW9uRmlsdGVyKGZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gY29udmVydEZpbHRlcihmaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBpbGVkID0gY3JlYXRlRXhwcmVzc2lvbihmaWx0ZXIsIGZpbHRlclNwZWMpO1xuICAgIGlmIChjb21waWxlZC5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXBpbGVkLnZhbHVlLm1hcChlcnIgPT4gYCR7ZXJyLmtleX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbignLCAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChnbG9iYWxQcm9wZXJ0aWVzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSkgPT4gY29tcGlsZWQudmFsdWUuZXZhbHVhdGUoZ2xvYmFsUHJvcGVydGllcywgZmVhdHVyZSk7XG4gICAgfVxufVxuXG4vLyBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIHNvcnQgbnVtYmVycyBhbmQgc3RyaW5nc1xuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RmlsdGVyKGZpbHRlcjogP0FycmF5PGFueT4pOiBtaXhlZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IG9wID0gZmlsdGVyWzBdO1xuICAgIGlmIChmaWx0ZXIubGVuZ3RoIDw9IDEpIHJldHVybiAob3AgIT09ICdhbnknKTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPVxuICAgICAgICBvcCA9PT0gJz09JyA/IGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sICc9PScpIDpcbiAgICAgICAgb3AgPT09ICchPScgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgJz09JykpIDpcbiAgICAgICAgb3AgPT09ICc8JyB8fFxuICAgICAgICBvcCA9PT0gJz4nIHx8XG4gICAgICAgIG9wID09PSAnPD0nIHx8XG4gICAgICAgIG9wID09PSAnPj0nID8gY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgb3ApIDpcbiAgICAgICAgb3AgPT09ICdhbnknID8gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyLnNsaWNlKDEpKSA6XG4gICAgICAgIG9wID09PSAnYWxsJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikpIDpcbiAgICAgICAgb3AgPT09ICdub25lJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikubWFwKGNvbnZlcnROZWdhdGlvbikpIDpcbiAgICAgICAgb3AgPT09ICdpbicgPyBjb252ZXJ0SW5PcChmaWx0ZXJbMV0sIGZpbHRlci5zbGljZSgyKSkgOlxuICAgICAgICBvcCA9PT0gJyFpbicgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydEluT3AoZmlsdGVyWzFdLCBmaWx0ZXIuc2xpY2UoMikpKSA6XG4gICAgICAgIG9wID09PSAnaGFzJyA/IGNvbnZlcnRIYXNPcChmaWx0ZXJbMV0pIDpcbiAgICAgICAgb3AgPT09ICchaGFzJyA/IGNvbnZlcnROZWdhdGlvbihjb252ZXJ0SGFzT3AoZmlsdGVyWzFdKSkgOlxuICAgICAgICB0cnVlO1xuICAgIHJldHVybiBjb252ZXJ0ZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDb21wYXJpc29uT3AocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSwgb3A6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci10eXBlLSR7b3B9YCwgdmFsdWVdO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC0ke29wfWAsIHZhbHVlXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItJHtvcH1gLCBwcm9wZXJ0eSwgdmFsdWVdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyczogQXJyYXk8QXJyYXk8YW55Pj4pIHtcbiAgICByZXR1cm4gWydhbnknXS5jb25jYXQoZmlsdGVycy5tYXAoY29udmVydEZpbHRlcikpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0SW5PcChwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZXM6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItdHlwZS1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMjAwICYmICF2YWx1ZXMuc29tZSh2ID0+IHR5cGVvZiB2ICE9PSB0eXBlb2YgdmFsdWVzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsnZmlsdGVyLWluLWxhcmdlJywgcHJvcGVydHksIFsnbGl0ZXJhbCcsIHZhbHVlcy5zb3J0KGNvbXBhcmUpXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWydmaWx0ZXItaW4tc21hbGwnLCBwcm9wZXJ0eSwgWydsaXRlcmFsJywgdmFsdWVzXV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRIYXNPcChwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnJGlkJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWhhcy1pZGBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1oYXNgLCBwcm9wZXJ0eV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0TmVnYXRpb24oZmlsdGVyOiBtaXhlZCkge1xuICAgIHJldHVybiBbJyEnLCBmaWx0ZXJdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbkZpbHRlcn0gZnJvbSAnLi4vZmVhdHVyZV9maWx0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcihvcHRpb25zKSB7XG4gICAgaWYgKGlzRXhwcmVzc2lvbkZpbHRlcihkZWVwVW5idW5kbGUob3B0aW9ucy52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24oZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2ZpbHRlcicsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZTogJ2Jvb2xlYW4nfVxuICAgICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGxldCB0eXBlO1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCcpXTtcbiAgICB9XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlRW51bSh7XG4gICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVswXSxcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuZmlsdGVyX29wZXJhdG9yLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgIH0pKTtcblxuICAgIHN3aXRjaCAodW5idW5kbGUodmFsdWVbMF0pKSB7XG4gICAgY2FzZSAnPCc6XG4gICAgY2FzZSAnPD0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyICYmIHVuYnVuZGxlKHZhbHVlWzFdKSA9PT0gJyR0eXBlJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgXCIkdHlwZVwiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciBcIiR7dmFsdWVbMF19XCJgKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgJz09JzpcbiAgICBjYXNlICchPSc6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgXCIke3ZhbHVlWzBdfVwiIG11c3QgaGF2ZSAzIGVsZW1lbnRzYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICdpbic6XG4gICAgY2FzZSAnIWluJzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVsxXSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVtpXSk7XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMV0pID09PSAnJHR5cGUnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmdlb21ldHJ5X3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bJHtpfV1gLCB2YWx1ZVtpXSwgYHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYW55JzpcbiAgICBjYXNlICdhbGwnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcih7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaGFzJzpcbiAgICBjYXNlICchaGFzJzpcbiAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIFwiJHt2YWx1ZVswXX1cIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50c2ApKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsIHByb3BlcnR5VHlwZSkge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgcHJvcGVydHlLZXkgPSBvcHRpb25zLm9iamVjdEtleTtcbiAgICBjb25zdCBsYXllclNwZWMgPSBzdHlsZVNwZWNbYCR7cHJvcGVydHlUeXBlfV8ke29wdGlvbnMubGF5ZXJUeXBlfWBdO1xuXG4gICAgaWYgKCFsYXllclNwZWMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHRyYW5zaXRpb25NYXRjaCA9IHByb3BlcnR5S2V5Lm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO1xuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdwYWludCcgJiYgdHJhbnNpdGlvbk1hdGNoICYmIGxheWVyU3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dICYmIGxheWVyU3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dLnRyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMudHJhbnNpdGlvbixcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjIHx8IGxheWVyU3BlY1twcm9wZXJ0eUtleV07XG4gICAgaWYgKCF2YWx1ZVNwZWMpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGB1bmtub3duIHByb3BlcnR5IFwiJHtwcm9wZXJ0eUtleX1cImApXTtcbiAgICB9XG5cbiAgICBsZXQgdG9rZW5NYXRjaDtcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnICYmIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlU3BlYykgJiYgIXZhbHVlU3BlYy50b2tlbnMgJiYgKHRva2VuTWF0Y2ggPSAvXnsoW159XSspfSQvLmV4ZWModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBrZXksIHZhbHVlLFxuICAgICAgICAgICAgYFwiJHtwcm9wZXJ0eUtleX1cIiBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gc3ludGF4XFxuYCArXG4gICAgICAgICAgICAgICAgYFVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBcXGB7IFwidHlwZVwiOiBcImlkZW50aXR5XCIsIFwicHJvcGVydHlcIjogJHtKU09OLnN0cmluZ2lmeSh0b2tlbk1hdGNoWzFdKX0gfVxcYC5gKV07XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5sYXllclR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gJ3RleHQtZmllbGQnICYmIHN0eWxlICYmICFzdHlsZS5nbHlwaHMpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ3VzZSBvZiBcInRleHQtZmllbGRcIiByZXF1aXJlcyBhIHN0eWxlIFwiZ2x5cGhzXCIgcHJvcGVydHknKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnR5S2V5ID09PSAndGV4dC1mb250JyAmJiBpc0Z1bmN0aW9uKGRlZXBVbmJ1bmRsZSh2YWx1ZSkpICYmIHVuYnVuZGxlKHZhbHVlLnR5cGUpID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcInRleHQtZm9udFwiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVTcGVjLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ3Byb3BlcnR5JyxcbiAgICAgICAgcHJvcGVydHlUeXBlLFxuICAgICAgICBwcm9wZXJ0eUtleVxuICAgIH0pKTtcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlUHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wcm9wZXJ0eSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgJ3BhaW50Jyk7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZVByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcHJvcGVydHknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxheW91dFByb3BlcnR5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCAnbGF5b3V0Jyk7XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQge3VuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZUxheW91dFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZVNwZWMgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcihvcHRpb25zKSB7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3QgbGF5ZXIgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcblxuICAgIGlmICghbGF5ZXIudHlwZSAmJiAhbGF5ZXIucmVmKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgJ2VpdGhlciBcInR5cGVcIiBvciBcInJlZlwiIGlzIHJlcXVpcmVkJykpO1xuICAgIH1cbiAgICBsZXQgdHlwZSA9IHVuYnVuZGxlKGxheWVyLnR5cGUpO1xuICAgIGNvbnN0IHJlZiA9IHVuYnVuZGxlKGxheWVyLnJlZik7XG5cbiAgICBpZiAobGF5ZXIuaWQpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHVuYnVuZGxlKGxheWVyLmlkKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmFycmF5SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXllciA9IHN0eWxlLmxheWVyc1tpXTtcbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZShvdGhlckxheWVyLmlkKSA9PT0gbGF5ZXJJZCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5pZCwgYGR1cGxpY2F0ZSBsYXllciBpZCBcIiR7bGF5ZXIuaWR9XCIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICR7b3RoZXJMYXllci5pZC5fX2xpbmVfX31gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ3JlZicgaW4gbGF5ZXIpIHtcbiAgICAgICAgWyd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnZmlsdGVyJywgJ2xheW91dCddLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIGlmIChwIGluIGxheWVyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyW3BdLCBgXCIke3B9XCIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVyc2ApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHBhcmVudDtcblxuICAgICAgICBzdHlsZS5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZShsYXllci5pZCkgPT09IHJlZikgcGFyZW50ID0gbGF5ZXI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIucmVmLCBgcmVmIGxheWVyIFwiJHtyZWZ9XCIgbm90IGZvdW5kYCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC5yZWYpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5yZWYsICdyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllcicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSB1bmJ1bmRsZShwYXJlbnQudHlwZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdiYWNrZ3JvdW5kJykge1xuICAgICAgICBpZiAoIWxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInNvdXJjZVwiJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc3R5bGUuc291cmNlcyAmJiBzdHlsZS5zb3VyY2VzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlICYmIHVuYnVuZGxlKHNvdXJjZS50eXBlKTtcbiAgICAgICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYHNvdXJjZSBcIiR7bGF5ZXIuc291cmNlfVwiIG5vdCBmb3VuZGApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgdHlwZSA9PT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZWApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3Jhc3RlcicgJiYgdHlwZSAhPT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZWApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgIWxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgYGxheWVyIFwiJHtsYXllci5pZH1cIiBtdXN0IHNwZWNpZnkgYSBcInNvdXJjZS1sYXllclwiYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAncmFzdGVyLWRlbScgJiYgdHlwZSAhPT0gJ2hpbGxzaGFkZScpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCAncmFzdGVyLWRlbSBzb3VyY2UgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGxheWVyIHR5cGUgXFwnaGlsbHNoYWRlXFwnLicpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xpbmUnICYmIGxheWVyLnBhaW50ICYmIGxheWVyLnBhaW50WydsaW5lLWdyYWRpZW50J10gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVR5cGUgIT09ICdnZW9qc29uJyB8fCAhc291cmNlLmxpbmVNZXRyaWNzKSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgYGxheWVyIFwiJHtsYXllci5pZH1cIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggXFxgbGluZU1ldHJpY3NcXGAgZW5hYmxlZC5gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogbGF5ZXIsXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmxheWVyLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICcqJygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBlbmZvcmNlIHRoZSBzcGVjJ3MgYFwicmVxdWlyZXNcIjogdHJ1ZWAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCByZWZzO1xuICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZXF1aXJlbWVudCBpcyB2YWxpZGF0ZWQgYWJvdmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTc3Mi5cbiAgICAgICAgICAgIHR5cGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3BlYyh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS50eXBlYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxheWVyLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmxheWVyLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RLZXk6ICd0eXBlJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXIsXG4gICAgICAgICAgICBsYXlvdXQob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnKicob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUxheW91dFByb3BlcnR5KGV4dGVuZCh7bGF5ZXJUeXBlOiB0eXBlfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFpbnQob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnKicob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVBhaW50UHJvcGVydHkoZXh0ZW5kKHtsYXllclR5cGU6IHR5cGV9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuXG5jb25zdCBvYmplY3RFbGVtZW50VmFsaWRhdG9ycyA9IHtcbiAgICBwcm9tb3RlSWQ6IHZhbGlkYXRlUHJvbW90ZUlkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVNvdXJjZShvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcblxuICAgIGlmICghdmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1widHlwZVwiIGlzIHJlcXVpcmVkJyldO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB1bmJ1bmRsZSh2YWx1ZS50eXBlKTtcbiAgICBsZXQgZXJyb3JzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICdyYXN0ZXInOlxuICAgIGNhc2UgJ3Jhc3Rlci1kZW0nOlxuICAgICAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjW2Bzb3VyY2VfJHt0eXBlLnJlcGxhY2UoJy0nLCAnXycpfWBdLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcblxuICAgIGNhc2UgJ2dlb2pzb24nOlxuICAgICAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnNvdXJjZV9nZW9qc29uLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmNsdXN0ZXIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZS5jbHVzdGVyUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcl0gPSB2YWx1ZS5jbHVzdGVyUHJvcGVydGllc1twcm9wXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWR1Y2VFeHByID0gdHlwZW9mIG9wZXJhdG9yID09PSAnc3RyaW5nJyA/IFtvcGVyYXRvciwgWydhY2N1bXVsYXRlZCddLCBbJ2dldCcsIHByb3BdXSA6IG9wZXJhdG9yO1xuXG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LiR7cHJvcH0ubWFwYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hcEV4cHIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnY2x1c3Rlci1tYXAnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS4ke3Byb3B9LnJlZHVjZWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZWR1Y2VFeHByLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2NsdXN0ZXItcmVkdWNlJ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfdmlkZW8sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcblxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX2ltYWdlLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG5cbiAgICBjYXNlICdjYW52YXMnOlxuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBudWxsLCBgUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy5gLCAnc291cmNlLmNhbnZhcycpXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAga2V5OiBgJHtrZXl9LnR5cGVgLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZXM6IFsndmVjdG9yJywgJ3Jhc3RlcicsICdyYXN0ZXItZGVtJywgJ2dlb2pzb24nLCAndmlkZW8nLCAnaW1hZ2UnXX0sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvbW90ZUlkKHtrZXksIHZhbHVlfSkge1xuICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3RyaW5nKHtrZXksIHZhbHVlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmcoe2tleTogYCR7a2V5fS4ke3Byb3B9YCwgdmFsdWU6IHZhbHVlW3Byb3BdfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGlnaHQob3B0aW9ucykge1xuICAgIGNvbnN0IGxpZ2h0ID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCBsaWdodFNwZWMgPSBzdHlsZVNwZWMubGlnaHQ7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3Qgcm9vdFR5cGUgPSBnZXRUeXBlKGxpZ2h0KTtcbiAgICBpZiAobGlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH0gZWxzZSBpZiAocm9vdFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3IoJ2xpZ2h0JywgbGlnaHQsIGBvYmplY3QgZXhwZWN0ZWQsICR7cm9vdFR5cGV9IGZvdW5kYCldKTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBsaWdodCkge1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uTWF0Y2ggPSBrZXkubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb25NYXRjaCAmJiBsaWdodFNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXSAmJiBsaWdodFNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXS50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxpZ2h0W2tleV0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMudHJhbnNpdGlvbixcbiAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChsaWdodFNwZWNba2V5XSkge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsaWdodFtrZXldLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogbGlnaHRTcGVjW2tleV0sXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGlnaHRba2V5XSwgYHVua25vd24gcHJvcGVydHkgXCIke2tleX1cImApXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0dGVkKG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh2YWxpZGF0ZVN0cmluZyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZShvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodmFsaWRhdGVTdHJpbmcob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xufVxuIiwiXG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcblxuaW1wb3J0IHZhbGlkYXRlRnVuY3Rpb24gZnJvbSAnLi92YWxpZGF0ZV9mdW5jdGlvbic7XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVCb29sZWFuIGZyb20gJy4vdmFsaWRhdGVfYm9vbGVhbic7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHZhbGlkYXRlQ29sb3IgZnJvbSAnLi92YWxpZGF0ZV9jb2xvcic7XG5pbXBvcnQgdmFsaWRhdGVDb25zdGFudHMgZnJvbSAnLi92YWxpZGF0ZV9jb25zdGFudHMnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZUxheWVyIGZyb20gJy4vdmFsaWRhdGVfbGF5ZXInO1xuaW1wb3J0IHZhbGlkYXRlU291cmNlIGZyb20gJy4vdmFsaWRhdGVfc291cmNlJztcbmltcG9ydCB2YWxpZGF0ZUxpZ2h0IGZyb20gJy4vdmFsaWRhdGVfbGlnaHQnO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcbmltcG9ydCB2YWxpZGF0ZUZvcm1hdHRlZCBmcm9tICcuL3ZhbGlkYXRlX2Zvcm1hdHRlZCc7XG5pbXBvcnQgdmFsaWRhdGVJbWFnZSBmcm9tICcuL3ZhbGlkYXRlX2ltYWdlJztcblxuY29uc3QgVkFMSURBVE9SUyA9IHtcbiAgICAnKicoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgICdhcnJheSc6IHZhbGlkYXRlQXJyYXksXG4gICAgJ2Jvb2xlYW4nOiB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgJ251bWJlcic6IHZhbGlkYXRlTnVtYmVyLFxuICAgICdjb2xvcic6IHZhbGlkYXRlQ29sb3IsXG4gICAgJ2NvbnN0YW50cyc6IHZhbGlkYXRlQ29uc3RhbnRzLFxuICAgICdlbnVtJzogdmFsaWRhdGVFbnVtLFxuICAgICdmaWx0ZXInOiB2YWxpZGF0ZUZpbHRlcixcbiAgICAnZnVuY3Rpb24nOiB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgICdsYXllcic6IHZhbGlkYXRlTGF5ZXIsXG4gICAgJ29iamVjdCc6IHZhbGlkYXRlT2JqZWN0LFxuICAgICdzb3VyY2UnOiB2YWxpZGF0ZVNvdXJjZSxcbiAgICAnbGlnaHQnOiB2YWxpZGF0ZUxpZ2h0LFxuICAgICdzdHJpbmcnOiB2YWxpZGF0ZVN0cmluZyxcbiAgICAnZm9ybWF0dGVkJzogdmFsaWRhdGVGb3JtYXR0ZWQsXG4gICAgJ3Jlc29sdmVkSW1hZ2UnOiB2YWxpZGF0ZUltYWdlXG59O1xuXG4vLyBNYWluIHJlY3Vyc2l2ZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUcmFja3M6XG4vL1xuLy8gLSBrZXk6IHN0cmluZyByZXByZXNlbnRpbmcgbG9jYXRpb24gb2YgdmFsaWRhdGlvbiBpbiBzdHlsZSB0cmVlLiBVc2VkIG9ubHlcbi8vICAgZm9yIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgcmVwb3J0aW5nLlxuLy8gLSB2YWx1ZTogY3VycmVudCB2YWx1ZSBmcm9tIHN0eWxlIGJlaW5nIGV2YWx1YXRlZC4gTWF5IGJlIGFueXRoaW5nIGZyb20gYVxuLy8gICBoaWdoIGxldmVsIG9iamVjdCB0aGF0IG5lZWRzIHRvIGJlIGRlc2NlbmRlZCBpbnRvIGRlZXBlciBvciBhIHNpbXBsZVxuLy8gICBzY2FsYXIgdmFsdWUuXG4vLyAtIHZhbHVlU3BlYzogY3VycmVudCBzcGVjIGJlaW5nIGV2YWx1YXRlZC4gVHJhY2tzIHZhbHVlLlxuLy8gLSBzdHlsZVNwZWM6IGN1cnJlbnQgZnVsbCBzcGVjIGJlaW5nIGV2YWx1YXRlZC5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGUob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcblxuICAgIGlmICh2YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiBpc0Z1bmN0aW9uKHVuYnVuZGxlKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRnVuY3Rpb24ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2UgaWYgKHZhbHVlU3BlYy5leHByZXNzaW9uICYmIGlzRXhwcmVzc2lvbihkZWVwVW5idW5kbGUodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIGlmICh2YWx1ZVNwZWMudHlwZSAmJiBWQUxJREFUT1JTW3ZhbHVlU3BlYy50eXBlXSkge1xuICAgICAgICByZXR1cm4gVkFMSURBVE9SU1t2YWx1ZVNwZWMudHlwZV0ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KGV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgdmFsdWVTcGVjOiB2YWx1ZVNwZWMudHlwZSA/IHN0eWxlU3BlY1t2YWx1ZVNwZWMudHlwZV0gOiB2YWx1ZVNwZWNcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoKSByZXR1cm4gZXJyb3JzO1xuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJ3tmb250c3RhY2t9JykgPT09IC0xKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie2ZvbnRzdGFja31cIiB0b2tlbicpKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZigne3JhbmdlfScpID09PSAtMSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcImdseXBoc1wiIHVybCBtdXN0IGluY2x1ZGUgYSBcIntyYW5nZX1cIiB0b2tlbicpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVDb25zdGFudHMgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGUnO1xuaW1wb3J0IGxhdGVzdFN0eWxlU3BlYyBmcm9tICcuL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IHZhbGlkYXRlR2x5cGhzVVJMIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybCc7XG5cbmltcG9ydCB2YWxpZGF0ZVNvdXJjZSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSc7XG5pbXBvcnQgdmFsaWRhdGVMaWdodCBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xpZ2h0JztcbmltcG9ydCB2YWxpZGF0ZUxheWVyIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5ZXInO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSc7XG5cbi8qKlxuICogVmFsaWRhdGUgYSBNYXBib3ggR0wgc3R5bGUgYWdhaW5zdCB0aGUgc3R5bGUgc3BlY2lmaWNhdGlvbi4gVGhpcyBlbnRyeXBvaW50LFxuICogYG1hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW5gLCBpcyBkZXNpZ25lZCB0byBwcm9kdWNlIGFzXG4gKiBzbWFsbCBhIGJyb3dzZXJpZnkgYnVuZGxlIGFzIHBvc3NpYmxlIGJ5IG9taXR0aW5nIHVubmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHlcbiAqIGFuZCBsZWdhY3kgc3R5bGUgc3BlY2lmaWNhdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZSBUaGUgc3R5bGUgdG8gYmUgdmFsaWRhdGVkLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdHlsZVNwZWNdIFRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uIHRvIHZhbGlkYXRlIGFnYWluc3QuXG4gKiAgICAgSWYgb21pdHRlZCwgdGhlIGxhdGVzdCBzdHlsZSBzcGVjIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7QXJyYXk8VmFsaWRhdGlvbkVycm9yPn1cbiAqIEBleGFtcGxlXG4gKiAgIHZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJ21hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW4nKTtcbiAqICAgdmFyIGVycm9ycyA9IHZhbGlkYXRlKHN0eWxlKTtcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHlsZU1pbihzdHlsZSwgc3R5bGVTcGVjID0gbGF0ZXN0U3R5bGVTcGVjKSB7XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAga2V5OiAnJyxcbiAgICAgICAgdmFsdWU6IHN0eWxlLFxuICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy4kcm9vdCxcbiAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgIGdseXBoczogdmFsaWRhdGVHbHlwaHNVUkwsXG4gICAgICAgICAgICAnKicoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgaWYgKHN0eWxlLmNvbnN0YW50cykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQ29uc3RhbnRzKHtcbiAgICAgICAgICAgIGtleTogJ2NvbnN0YW50cycsXG4gICAgICAgICAgICB2YWx1ZTogc3R5bGUuY29uc3RhbnRzLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0RXJyb3JzKGVycm9ycyk7XG59XG5cbnZhbGlkYXRlU3R5bGVNaW4uc291cmNlID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlU291cmNlKTtcbnZhbGlkYXRlU3R5bGVNaW4ubGlnaHQgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMaWdodCk7XG52YWxpZGF0ZVN0eWxlTWluLmxheWVyID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGF5ZXIpO1xudmFsaWRhdGVTdHlsZU1pbi5maWx0ZXIgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVGaWx0ZXIpO1xudmFsaWRhdGVTdHlsZU1pbi5wYWludFByb3BlcnR5ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSk7XG52YWxpZGF0ZVN0eWxlTWluLmxheW91dFByb3BlcnR5ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGF5b3V0UHJvcGVydHkpO1xuXG5mdW5jdGlvbiBzb3J0RXJyb3JzKGVycm9ycykge1xuICAgIHJldHVybiBbXS5jb25jYXQoZXJyb3JzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBhLmxpbmUgLSBiLmxpbmU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHdyYXBDbGVhbkVycm9ycyhpbm5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBzb3J0RXJyb3JzKGlubmVyLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZVN0eWxlTWluO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZVN0eWxlTWluIGZyb20gJy4uL3N0eWxlLXNwZWMvdmFsaWRhdGVfc3R5bGUubWluJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbnR5cGUgVmFsaWRhdGlvbkVycm9yID0ge1xuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBsaW5lOiBudW1iZXIsXG4gICAgaWRlbnRpZmllcj86IHN0cmluZ1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKE9iamVjdCkgPT4gJFJlYWRPbmx5QXJyYXk8VmFsaWRhdGlvbkVycm9yPjtcblxudHlwZSBWYWxpZGF0ZVN0eWxlID0ge1xuICAgIChPYmplY3QsID9PYmplY3QpOiAkUmVhZE9ubHlBcnJheTxWYWxpZGF0aW9uRXJyb3I+LFxuICAgIHNvdXJjZTogVmFsaWRhdG9yLFxuICAgIGxheWVyOiBWYWxpZGF0b3IsXG4gICAgbGlnaHQ6IFZhbGlkYXRvcixcbiAgICBmaWx0ZXI6IFZhbGlkYXRvcixcbiAgICBwYWludFByb3BlcnR5OiBWYWxpZGF0b3IsXG4gICAgbGF5b3V0UHJvcGVydHk6IFZhbGlkYXRvclxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3R5bGUgPSAodmFsaWRhdGVTdHlsZU1pbjogVmFsaWRhdGVTdHlsZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVNvdXJjZSA9IHZhbGlkYXRlU3R5bGUuc291cmNlO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTGlnaHQgPSB2YWxpZGF0ZVN0eWxlLmxpZ2h0O1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRmlsdGVyID0gdmFsaWRhdGVTdHlsZS5maWx0ZXI7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYWludFByb3BlcnR5ID0gdmFsaWRhdGVTdHlsZS5wYWludFByb3BlcnR5O1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgPSB2YWxpZGF0ZVN0eWxlLmxheW91dFByb3BlcnR5O1xuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFZhbGlkYXRpb25FcnJvcnMoZW1pdHRlcjogRXZlbnRlZCwgZXJyb3JzOiA/JFJlYWRPbmx5QXJyYXk8e21lc3NhZ2U6IHN0cmluZywgaWRlbnRpZmllcj86IHN0cmluZ30+KTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9ycykge1xuICAgICAgICAgICAgZW1pdHRlci5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKSkpO1xuICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzRXJyb3JzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdyaWRJbmRleDtcblxudmFyIE5VTV9QQVJBTVMgPSAzO1xuXG5mdW5jdGlvbiBHcmlkSW5kZXgoZXh0ZW50LCBuLCBwYWRkaW5nKSB7XG4gICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscyA9IFtdO1xuXG4gICAgaWYgKGV4dGVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBleHRlbnQ7XG4gICAgICAgIHZhciBhcnJheSA9IG5ldyBJbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICBleHRlbnQgPSBhcnJheVswXTtcbiAgICAgICAgbiA9IGFycmF5WzFdO1xuICAgICAgICBwYWRkaW5nID0gYXJyYXlbMl07XG5cbiAgICAgICAgdGhpcy5kID0gbiArIDIgKiBwYWRkaW5nO1xuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuZCAqIHRoaXMuZDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBhcnJheVtOVU1fUEFSQU1TICsga107XG4gICAgICAgICAgICB2YXIgZW5kID0gYXJyYXlbTlVNX1BBUkFNUyArIGsgKyAxXTtcbiAgICAgICAgICAgIGNlbGxzLnB1c2goc3RhcnQgPT09IGVuZCA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICBhcnJheS5zdWJhcnJheShzdGFydCwgZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXNPZmZzZXQgPSBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoXTtcbiAgICAgICAgdmFyIGJib3hlc09mZnNldCA9IGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGggKyAxXTtcbiAgICAgICAgdGhpcy5rZXlzID0gYXJyYXkuc3ViYXJyYXkoa2V5c09mZnNldCwgYmJveGVzT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5iYm94ZXMgPSBhcnJheS5zdWJhcnJheShiYm94ZXNPZmZzZXQpO1xuXG4gICAgICAgIHRoaXMuaW5zZXJ0ID0gdGhpcy5faW5zZXJ0UmVhZG9ubHk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmQgPSBuICsgMiAqIHBhZGRpbmc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kICogdGhpcy5kOyBpKyspIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmJib3hlcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5leHRlbnQgPSBleHRlbnQ7XG4gICAgdGhpcy5wYWRkaW5nID0gcGFkZGluZztcbiAgICB0aGlzLnNjYWxlID0gbiAvIGV4dGVudDtcbiAgICB0aGlzLnVpZCA9IDA7XG5cbiAgICB2YXIgcCA9IChwYWRkaW5nIC8gbikgKiBleHRlbnQ7XG4gICAgdGhpcy5taW4gPSAtcDtcbiAgICB0aGlzLm1heCA9IGV4dGVudCArIHA7XG59XG5cblxuR3JpZEluZGV4LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX2luc2VydENlbGwsIHRoaXMudWlkKyspO1xuICAgIHRoaXMua2V5cy5wdXNoKGtleSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh5MSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh4Mik7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seSA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93ICdDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLic7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9pbnNlcnRDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgdWlkKSB7XG4gICAgdGhpcy5jZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XG4gICAgaWYgKHgxIDw9IG1pbiAmJiB5MSA8PSBtaW4gJiYgbWF4IDw9IHgyICYmIG1heCA8PSB5MiAmJiAhaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgICAgICAvLyBXZSB1c2UgYEFycmF5I3NsaWNlYCBiZWNhdXNlIGB0aGlzLmtleXNgIG1heSBiZSBhIGBJbnQzMkFycmF5YCBhbmRcbiAgICAgICAgLy8gc29tZSBicm93c2VycyAoU2FmYXJpIGFuZCBJRSkgZG8gbm90IHN1cHBvcnQgYFR5cGVkQXJyYXkjc2xpY2VgXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1R5cGVkQXJyYXkvc2xpY2UjQnJvd3Nlcl9jb21wYXRpYmlsaXR5XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICB2YXIgc2VlblVpZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBzZWVuVWlkcywgaW50ZXJzZWN0aW9uVGVzdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fcXVlcnlDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgcmVzdWx0LCBzZWVuVWlkcywgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBjZWxsID0gdGhpcy5jZWxsc1tjZWxsSW5kZXhdO1xuICAgIGlmIChjZWxsICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xuICAgICAgICB2YXIgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgY2VsbC5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgdmFyIHVpZCA9IGNlbGxbdV07XG4gICAgICAgICAgICBpZiAoc2VlblVpZHNbdWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvblRlc3QgP1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25UZXN0KGJib3hlc1tvZmZzZXQgKyAwXSwgYmJveGVzW29mZnNldCArIDFdLCBiYm94ZXNbb2Zmc2V0ICsgMl0sIGJib3hlc1tvZmZzZXQgKyAzXSkgOlxuICAgICAgICAgICAgICAgICAgICAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHkxIDw9IGJib3hlc1tvZmZzZXQgKyAzXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHgyID49IGJib3hlc1tvZmZzZXQgKyAwXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzW3VpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChrZXlzW3VpZF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzW3VpZF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9mb3JFYWNoQ2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBmbiwgYXJnMSwgYXJnMiwgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBjeDEgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeDEpO1xuICAgIHZhciBjeTEgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeTEpO1xuICAgIHZhciBjeDIgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeDIpO1xuICAgIHZhciBjeTIgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeTIpO1xuICAgIGZvciAodmFyIHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgZm9yICh2YXIgeSA9IGN5MTsgeSA8PSBjeTI7IHkrKykge1xuICAgICAgICAgICAgdmFyIGNlbGxJbmRleCA9IHRoaXMuZCAqIHkgKyB4O1xuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvblRlc3QgJiYgIWludGVyc2VjdGlvblRlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeCArIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeSArIDEpKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBpbnRlcnNlY3Rpb25UZXN0KSkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fY29udmVydEZyb21DZWxsQ29vcmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy5wYWRkaW5nKSAvIHRoaXMuc2NhbGU7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuZCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMuc2NhbGUpICsgdGhpcy5wYWRkaW5nKSk7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLnRvQXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hcnJheUJ1ZmZlcikgcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7XG5cbiAgICB2YXIgY2VsbHMgPSB0aGlzLmNlbGxzO1xuXG4gICAgdmFyIG1ldGFkYXRhTGVuZ3RoID0gTlVNX1BBUkFNUyArIHRoaXMuY2VsbHMubGVuZ3RoICsgMSArIDE7XG4gICAgdmFyIHRvdGFsQ2VsbExlbmd0aCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRvdGFsQ2VsbExlbmd0aCArPSB0aGlzLmNlbGxzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBuZXcgSW50MzJBcnJheShtZXRhZGF0YUxlbmd0aCArIHRvdGFsQ2VsbExlbmd0aCArIHRoaXMua2V5cy5sZW5ndGggKyB0aGlzLmJib3hlcy5sZW5ndGgpO1xuICAgIGFycmF5WzBdID0gdGhpcy5leHRlbnQ7XG4gICAgYXJyYXlbMV0gPSB0aGlzLm47XG4gICAgYXJyYXlbMl0gPSB0aGlzLnBhZGRpbmc7XG5cbiAgICB2YXIgb2Zmc2V0ID0gbWV0YWRhdGFMZW5ndGg7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBjZWxscy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgY2VsbCA9IGNlbGxzW2tdO1xuICAgICAgICBhcnJheVtOVU1fUEFSQU1TICsga10gPSBvZmZzZXQ7XG4gICAgICAgIGFycmF5LnNldChjZWxsLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2VsbC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aF0gPSBvZmZzZXQ7XG4gICAgYXJyYXkuc2V0KHRoaXMua2V5cywgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5rZXlzLmxlbmd0aDtcblxuICAgIGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGggKyAxXSA9IG9mZnNldDtcbiAgICBhcnJheS5zZXQodGhpcy5iYm94ZXMsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMuYmJveGVzLmxlbmd0aDtcblxuICAgIHJldHVybiBhcnJheS5idWZmZXI7XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgR3JpZCBmcm9tICdncmlkLWluZGV4JztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtTdHlsZVByb3BlcnR5RnVuY3Rpb24sIFN0eWxlRXhwcmVzc2lvbiwgWm9vbURlcGVuZGVudEV4cHJlc3Npb24sIFpvb21Db25zdGFudEV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBleHByZXNzaW9ucyBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuY29uc3Qge0ltYWdlRGF0YSwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG50eXBlIFNlcmlhbGl6ZWRPYmplY3QgPSB7IFtzdHJpbmddOiBTZXJpYWxpemVkIH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWQgPVxuICAgIHwgbnVsbFxuICAgIHwgdm9pZFxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IEJvb2xlYW5cbiAgICB8IE51bWJlclxuICAgIHwgU3RyaW5nXG4gICAgfCBEYXRlXG4gICAgfCBSZWdFeHBcbiAgICB8IEFycmF5QnVmZmVyXG4gICAgfCAkQXJyYXlCdWZmZXJWaWV3XG4gICAgfCBJbWFnZURhdGFcbiAgICB8IEFycmF5PFNlcmlhbGl6ZWQ+XG4gICAgfCBTZXJpYWxpemVkT2JqZWN0O1xuXG50eXBlIFJlZ2lzdHJ5ID0ge1xuICAgIFtzdHJpbmddOiB7XG4gICAgICAgIGtsYXNzOiBDbGFzczxhbnk+LFxuICAgICAgICBvbWl0OiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICAgICAgICBzaGFsbG93OiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+XG4gICAgfVxufTtcblxudHlwZSBSZWdpc3Rlck9wdGlvbnM8VD4gPSB7XG4gICAgb21pdD86ICRSZWFkT25seUFycmF5PCRLZXlzPFQ+PixcbiAgICBzaGFsbG93PzogJFJlYWRPbmx5QXJyYXk8JEtleXM8VD4+XG59XG5cbmNvbnN0IHJlZ2lzdHJ5OiBSZWdpc3RyeSA9IHt9O1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBjbGFzcyBhcyBzZXJpYWxpemFibGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLm9taXQgTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIG9taXQgZnJvbSBzZXJpYWxpemF0aW9uIChlLmcuLCBjYWNoZWQvY29tcHV0ZWQgcHJvcGVydGllcylcbiAqIEBwYXJhbSBvcHRpb25zLnNoYWxsb3cgTGlzdCBvZiBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYnkgYSBzaW1wbGUgc2hhbGxvdyBjb3B5LCByYXRoZXIgdGhhbiBieSBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHNlcmlhbGl6ZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcjxUOiBhbnk+KG5hbWU6IHN0cmluZywga2xhc3M6IENsYXNzPFQ+LCBvcHRpb25zOiBSZWdpc3Rlck9wdGlvbnM8VD4gPSB7fSkge1xuICAgIGFzc2VydCghcmVnaXN0cnlbbmFtZV0sIGAke25hbWV9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcbiAgICAoT2JqZWN0LmRlZmluZVByb3BlcnR5OiBhbnkpKGtsYXNzLCAnX2NsYXNzUmVnaXN0cnlLZXknLCB7XG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB3cml0ZWFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgcmVnaXN0cnlbbmFtZV0gPSB7XG4gICAgICAgIGtsYXNzLFxuICAgICAgICBvbWl0OiBvcHRpb25zLm9taXQgfHwgW10sXG4gICAgICAgIHNoYWxsb3c6IG9wdGlvbnMuc2hhbGxvdyB8fCBbXVxuICAgIH07XG59XG5cbnJlZ2lzdGVyKCdPYmplY3QnLCBPYmplY3QpO1xuXG50eXBlIFNlcmlhbGl6ZWRHcmlkID0geyBidWZmZXI6IEFycmF5QnVmZmVyIH07XG5cbkdyaWQuc2VyaWFsaXplID0gZnVuY3Rpb24gc2VyaWFsaXplKGdyaWQ6IEdyaWQsIHRyYW5zZmVyYWJsZXM/OiBBcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZEdyaWQge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGdyaWQudG9BcnJheUJ1ZmZlcigpO1xuICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4ge2J1ZmZlcn07XG59O1xuXG5HcmlkLmRlc2VyaWFsaXplID0gZnVuY3Rpb24gZGVzZXJpYWxpemUoc2VyaWFsaXplZDogU2VyaWFsaXplZEdyaWQpOiBHcmlkIHtcbiAgICByZXR1cm4gbmV3IEdyaWQoc2VyaWFsaXplZC5idWZmZXIpO1xufTtcbnJlZ2lzdGVyKCdHcmlkJywgR3JpZCk7XG5cbnJlZ2lzdGVyKCdDb2xvcicsIENvbG9yKTtcbnJlZ2lzdGVyKCdFcnJvcicsIEVycm9yKTtcbnJlZ2lzdGVyKCdSZXNvbHZlZEltYWdlJywgUmVzb2x2ZWRJbWFnZSk7XG5cbnJlZ2lzdGVyKCdTdHlsZVByb3BlcnR5RnVuY3Rpb24nLCBTdHlsZVByb3BlcnR5RnVuY3Rpb24pO1xucmVnaXN0ZXIoJ1N0eWxlRXhwcmVzc2lvbicsIFN0eWxlRXhwcmVzc2lvbiwge29taXQ6IFsnX2V2YWx1YXRvciddfSk7XG5cbnJlZ2lzdGVyKCdab29tRGVwZW5kZW50RXhwcmVzc2lvbicsIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKTtcbnJlZ2lzdGVyKCdab29tQ29uc3RhbnRFeHByZXNzaW9uJywgWm9vbUNvbnN0YW50RXhwcmVzc2lvbik7XG5yZWdpc3RlcignQ29tcG91bmRFeHByZXNzaW9uJywgQ29tcG91bmRFeHByZXNzaW9uLCB7b21pdDogWydfZXZhbHVhdGUnXX0pO1xuZm9yIChjb25zdCBuYW1lIGluIGV4cHJlc3Npb25zKSB7XG4gICAgaWYgKChleHByZXNzaW9uc1tuYW1lXTogYW55KS5fY2xhc3NSZWdpc3RyeUtleSkgY29udGludWU7XG4gICAgcmVnaXN0ZXIoYEV4cHJlc3Npb25fJHtuYW1lfWAsIGV4cHJlc3Npb25zW25hbWVdKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgJiYgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAodmFsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgKHZhbC5jb25zdHJ1Y3RvciAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5QnVmZmVyJykpO1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlQml0bWFwKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltYWdlQml0bWFwICYmXG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEltYWdlQml0bWFwO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGZvciB0cmFuc2ZlciB0byBvciBmcm9tIGEgd2ViIHdvcmtlci5cbiAqXG4gKiBGb3Igbm9uLWJ1aWx0aW4gdHlwZXMsIHJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBlYWNoIHByb3BlcnR5IChwb3NzaWJseVxuICogb21pdHRpbmcgY2VydGFpbiBwcm9wZXJ0aWVzIC0gc2VlIHJlZ2lzdGVyKCkpLCBhbmQgcGFja2FnZSB0aGUgcmVzdWx0IGFsb25nXG4gKiB3aXRoIHRoZSBjb25zdHJ1Y3RvcidzIGBuYW1lYCBzbyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBjb25zdHJ1Y3RvciBjYW4gYmVcbiAqIGxvb2tlZCB1cCBpbiBgZGVzZXJpYWxpemUoKWAuXG4gKlxuICogSWYgYSBgdHJhbnNmZXJhYmxlc2AgYXJyYXkgaXMgcHJvdmlkZWQsIGFkZCBhbnkgdHJhbnNmZXJhYmxlIG9iamVjdHMgKGkuZS4sXG4gKiBhbnkgQXJyYXlCdWZmZXJzIG9yIEFycmF5QnVmZmVyIHZpZXdzKSB0byB0aGUgbGlzdC4gKElmIGEgY29weSBpcyBuZWVkZWQsXG4gKiB0aGlzIHNob3VsZCBoYXBwZW4gaW4gdGhlIGNsaWVudCBjb2RlLCBiZWZvcmUgdXNpbmcgc2VyaWFsaXplKCkuKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUoaW5wdXQ6IG1peGVkLCB0cmFuc2ZlcmFibGVzOiA/QXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWQge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheUJ1ZmZlcihpbnB1dCkgfHwgaXNJbWFnZUJpdG1hcChpbnB1dCkpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaCgoKGlucHV0OiBhbnkpOiBBcnJheUJ1ZmZlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSkge1xuICAgICAgICBjb25zdCB2aWV3OiAkQXJyYXlCdWZmZXJWaWV3ID0gKGlucHV0OiBhbnkpO1xuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKHZpZXcuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChpbnB1dC5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBBcnJheTxTZXJpYWxpemVkPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChzZXJpYWxpemUoaXRlbSwgdHJhbnNmZXJhYmxlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGtsYXNzID0gKGlucHV0LmNvbnN0cnVjdG9yOiBhbnkpO1xuICAgICAgICBjb25zdCBuYW1lID0ga2xhc3MuX2NsYXNzUmVnaXN0cnlLZXk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzc2ApO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChyZWdpc3RyeVtuYW1lXSk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydGllczogU2VyaWFsaXplZE9iamVjdCA9IGtsYXNzLnNlcmlhbGl6ZSA/XG4gICAgICAgICAgICAvLyAoVGVtcG9yYXJ5IHdvcmthcm91bmQpIGFsbG93IGEgY2xhc3MgdG8gcHJvdmlkZSBzdGF0aWNcbiAgICAgICAgICAgIC8vIGBzZXJpYWxpemUoKWAgYW5kIGBkZXNlcmlhbGl6ZSgpYCBtZXRob2RzIHRvIGJ5cGFzcyB0aGUgZ2VuZXJpY1xuICAgICAgICAgICAgLy8gYXBwcm9hY2guXG4gICAgICAgICAgICAvLyBUaGlzIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGxldHMgdXMgdXNlIHRoZSBnZW5lcmljIHNlcmlhbGl6YXRpb25cbiAgICAgICAgICAgIC8vIGFwcHJvYWNoIGZvciBvYmplY3RzIHdob3NlIG1lbWJlcnMgaW5jbHVkZSBpbnN0YW5jZXMgb2YgZHluYW1pY1xuICAgICAgICAgICAgLy8gU3RydWN0QXJyYXkgdHlwZXMuIE9uY2Ugd2UgcmVmYWN0b3IgU3RydWN0QXJyYXkgdG8gYmUgc3RhdGljLFxuICAgICAgICAgICAgLy8gd2UgY2FuIHJlbW92ZSB0aGlzIGNvbXBsZXhpdHkuXG4gICAgICAgICAgICAoa2xhc3Muc2VyaWFsaXplKGlucHV0LCB0cmFuc2ZlcmFibGVzKTogU2VyaWFsaXplZE9iamVjdCkgOiB7fTtcblxuICAgICAgICBpZiAoIWtsYXNzLnNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbnkgY2FzdCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzUzOTNcbiAgICAgICAgICAgICAgICBpZiAoIShpbnB1dDogYW55KS5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnlbbmFtZV0ub21pdC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSAoaW5wdXQ6IGFueSlba2V5XTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSByZWdpc3RyeVtuYW1lXS5zaGFsbG93LmluZGV4T2Yoa2V5KSA+PSAwID9cbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgOlxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUocHJvcGVydHksIHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm1lc3NhZ2UgPSBpbnB1dC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHN0YXRpY2FsbHkgc2VyaWFsaXplZCBvYmplY3Qgc3Vydml2ZXMgdHJhbnNmZXIgb2YgJG5hbWUgcHJvcGVydHlcbiAgICAgICAgICAgIGFzc2VydCghdHJhbnNmZXJhYmxlcyB8fCBwcm9wZXJ0aWVzICE9PSB0cmFuc2ZlcmFibGVzW3RyYW5zZmVyYWJsZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuJG5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJG5hbWUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQgZm9yIHdvcmtlciBzZXJpYWxpemF0aW9uIGxvZ2ljLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lICE9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvcGVydGllcy4kbmFtZSA9IG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKGlucHV0OiBTZXJpYWxpemVkKTogbWl4ZWQge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgIGlzQXJyYXlCdWZmZXIoaW5wdXQpIHx8XG4gICAgICAgIGlzSW1hZ2VCaXRtYXAoaW5wdXQpIHx8XG4gICAgICAgIEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dCkgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXQubWFwKGRlc2VyaWFsaXplKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBuYW1lID0gKGlucHV0OiBhbnkpLiRuYW1lIHx8ICdPYmplY3QnO1xuXG4gICAgICAgIGNvbnN0IHtrbGFzc30gPSByZWdpc3RyeVtuYW1lXTtcbiAgICAgICAgaWYgKCFrbGFzcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBkZXNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgY2xhc3MgJHtuYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtsYXNzLmRlc2VyaWFsaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gKGtsYXNzLmRlc2VyaWFsaXplOiB0eXBlb2YgZGVzZXJpYWxpemUpKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUoa2xhc3MucHJvdG90eXBlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICckbmFtZScpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoaW5wdXQ6IFNlcmlhbGl6ZWRPYmplY3QpW2tleV07XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJlZ2lzdHJ5W25hbWVdLnNoYWxsb3cuaW5kZXhPZihrZXkpID49IDAgPyB2YWx1ZSA6IGRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH1gKTtcbn1cbiIsIi8vIEBmbG93XG5cbmNsYXNzIFpvb21IaXN0b3J5IHtcbiAgICBsYXN0Wm9vbTogbnVtYmVyO1xuICAgIGxhc3RGbG9vclpvb206IG51bWJlcjtcbiAgICBsYXN0SW50ZWdlclpvb206IG51bWJlcjtcbiAgICBsYXN0SW50ZWdlclpvb21UaW1lOiBudW1iZXI7XG4gICAgZmlyc3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlKHo6IG51bWJlciwgbm93OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmxvb3JaID0gTWF0aC5mbG9vcih6KTtcblxuICAgICAgICBpZiAodGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0Wm9vbSA9IHo7XG4gICAgICAgICAgICB0aGlzLmxhc3RGbG9vclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhc3RGbG9vclpvb20gPiBmbG9vclopIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaICsgMTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IG5vdztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RGbG9vclpvb20gPCBmbG9vclopIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gbm93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHogIT09IHRoaXMubGFzdFpvb20pIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFpvb20gPSB6O1xuICAgICAgICAgICAgdGhpcy5sYXN0Rmxvb3Jab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBab29tSGlzdG9yeTtcbiIsIi8vIEBmbG93XG5cbi8vIFRoZSBmb2xsb3dpbmcgdGFibGUgY29tZXMgZnJvbSA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvMTIuMC4wL3VjZC9CbG9ja3MudHh0Pi5cbi8vIEtlZXAgaXQgc3luY2hyb25pemVkIHdpdGggPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VDRC9sYXRlc3QvdWNkL0Jsb2Nrcy50eHQ+LlxuXG50eXBlIFVuaWNvZGVCbG9ja0xvb2t1cCA9IHtba2V5OiBzdHJpbmddOiAoY2hhcjogbnVtYmVyKSA9PiBib29sZWFufTtcblxuY29uc3QgdW5pY29kZUJsb2NrTG9va3VwOiBVbmljb2RlQmxvY2tMb29rdXAgPSB7XG4gICAgLy8gJ0Jhc2ljIExhdGluJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMDAwICYmIGNoYXIgPD0gMHgwMDdGLFxuICAgICdMYXRpbi0xIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDAwODAgJiYgY2hhciA8PSAweDAwRkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDAxMDAgJiYgY2hhciA8PSAweDAxN0YsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDAxODAgJiYgY2hhciA8PSAweDAyNEYsXG4gICAgLy8gJ0lQQSBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMjUwICYmIGNoYXIgPD0gMHgwMkFGLFxuICAgIC8vICdTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAyQjAgJiYgY2hhciA8PSAweDAyRkYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDMwMCAmJiBjaGFyIDw9IDB4MDM2RixcbiAgICAvLyAnR3JlZWsgYW5kIENvcHRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDM3MCAmJiBjaGFyIDw9IDB4MDNGRixcbiAgICAvLyAnQ3lyaWxsaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA0MDAgJiYgY2hhciA8PSAweDA0RkYsXG4gICAgLy8gJ0N5cmlsbGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA1MDAgJiYgY2hhciA8PSAweDA1MkYsXG4gICAgLy8gJ0FybWVuaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTMwICYmIGNoYXIgPD0gMHgwNThGLFxuICAgIC8vJ0hlYnJldyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDU5MCAmJiBjaGFyIDw9IDB4MDVGRixcbiAgICAnQXJhYmljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNjAwICYmIGNoYXIgPD0gMHgwNkZGLFxuICAgIC8vJ1N5cmlhYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDcwMCAmJiBjaGFyIDw9IDB4MDc0RixcbiAgICAnQXJhYmljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3NTAgJiYgY2hhciA8PSAweDA3N0YsXG4gICAgLy8gJ1RoYWFuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDc4MCAmJiBjaGFyIDw9IDB4MDdCRixcbiAgICAvLyAnTktvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwN0MwICYmIGNoYXIgPD0gMHgwN0ZGLFxuICAgIC8vICdTYW1hcml0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDA4MDAgJiYgY2hhciA8PSAweDA4M0YsXG4gICAgLy8gJ01hbmRhaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4NDAgJiYgY2hhciA8PSAweDA4NUYsXG4gICAgLy8gJ1N5cmlhYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODYwICYmIGNoYXIgPD0gMHgwODZGLFxuICAgICdBcmFiaWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDhBMCAmJiBjaGFyIDw9IDB4MDhGRixcbiAgICAvLyAnRGV2YW5hZ2FyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDkwMCAmJiBjaGFyIDw9IDB4MDk3RixcbiAgICAvLyAnQmVuZ2FsaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDk4MCAmJiBjaGFyIDw9IDB4MDlGRixcbiAgICAvLyAnR3VybXVraGknOiAoY2hhcikgPT4gY2hhciA+PSAweDBBMDAgJiYgY2hhciA8PSAweDBBN0YsXG4gICAgLy8gJ0d1amFyYXRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQTgwICYmIGNoYXIgPD0gMHgwQUZGLFxuICAgIC8vICdPcml5YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEIwMCAmJiBjaGFyIDw9IDB4MEI3RixcbiAgICAvLyAnVGFtaWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDBCODAgJiYgY2hhciA8PSAweDBCRkYsXG4gICAgLy8gJ1RlbHVndSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEMwMCAmJiBjaGFyIDw9IDB4MEM3RixcbiAgICAvLyAnS2FubmFkYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEM4MCAmJiBjaGFyIDw9IDB4MENGRixcbiAgICAvLyAnTWFsYXlhbGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRDAwICYmIGNoYXIgPD0gMHgwRDdGLFxuICAgIC8vICdTaW5oYWxhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRDgwICYmIGNoYXIgPD0gMHgwREZGLFxuICAgIC8vICdUaGFpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRTAwICYmIGNoYXIgPD0gMHgwRTdGLFxuICAgIC8vICdMYW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDBFODAgJiYgY2hhciA8PSAweDBFRkYsXG4gICAgLy8gJ1RpYmV0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDBGMDAgJiYgY2hhciA8PSAweDBGRkYsXG4gICAgLy8gJ015YW5tYXInOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAgJiYgY2hhciA8PSAweDEwOUYsXG4gICAgLy8gJ0dlb3JnaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEEwICYmIGNoYXIgPD0gMHgxMEZGLFxuICAgICdIYW5ndWwgSmFtbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwMCAmJiBjaGFyIDw9IDB4MTFGRixcbiAgICAvLyAnRXRoaW9waWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEyMDAgJiYgY2hhciA8PSAweDEzN0YsXG4gICAgLy8gJ0V0aGlvcGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzODAgJiYgY2hhciA8PSAweDEzOUYsXG4gICAgLy8gJ0NoZXJva2VlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxM0EwICYmIGNoYXIgPD0gMHgxM0ZGLFxuICAgICdVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNDAwICYmIGNoYXIgPD0gMHgxNjdGLFxuICAgIC8vICdPZ2hhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTY4MCAmJiBjaGFyIDw9IDB4MTY5RixcbiAgICAvLyAnUnVuaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QTAgJiYgY2hhciA8PSAweDE2RkYsXG4gICAgLy8gJ1RhZ2Fsb2cnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MDAgJiYgY2hhciA8PSAweDE3MUYsXG4gICAgLy8gJ0hhbnVub28nOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MjAgJiYgY2hhciA8PSAweDE3M0YsXG4gICAgLy8gJ0J1aGlkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzQwICYmIGNoYXIgPD0gMHgxNzVGLFxuICAgIC8vICdUYWdiYW53YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTc2MCAmJiBjaGFyIDw9IDB4MTc3RixcbiAgICAnS2htZXInOiAoY2hhcikgPT4gY2hhciA+PSAweDE3ODAgJiYgY2hhciA8PSAweDE3RkYsXG4gICAgLy8gJ01vbmdvbGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTgwMCAmJiBjaGFyIDw9IDB4MThBRixcbiAgICAnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MThCMCAmJiBjaGFyIDw9IDB4MThGRixcbiAgICAvLyAnTGltYnUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5MDAgJiYgY2hhciA8PSAweDE5NEYsXG4gICAgLy8gJ1RhaSBMZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTk1MCAmJiBjaGFyIDw9IDB4MTk3RixcbiAgICAvLyAnTmV3IFRhaSBMdWUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5ODAgJiYgY2hhciA8PSAweDE5REYsXG4gICAgLy8gJ0tobWVyIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5RTAgJiYgY2hhciA8PSAweDE5RkYsXG4gICAgLy8gJ0J1Z2luZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQTAwICYmIGNoYXIgPD0gMHgxQTFGLFxuICAgIC8vICdUYWkgVGhhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUEyMCAmJiBjaGFyIDw9IDB4MUFBRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQUIwICYmIGNoYXIgPD0gMHgxQUZGLFxuICAgIC8vICdCYWxpbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIwMCAmJiBjaGFyIDw9IDB4MUI3RixcbiAgICAvLyAnU3VuZGFuZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjgwICYmIGNoYXIgPD0gMHgxQkJGLFxuICAgIC8vICdCYXRhayc6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDMCAmJiBjaGFyIDw9IDB4MUJGRixcbiAgICAvLyAnTGVwY2hhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzAwICYmIGNoYXIgPD0gMHgxQzRGLFxuICAgIC8vICdPbCBDaGlraSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM1MCAmJiBjaGFyIDw9IDB4MUM3RixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM4MCAmJiBjaGFyIDw9IDB4MUM4RixcbiAgICAvLyAnR2VvcmdpYW4gRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDOTAgJiYgY2hhciA8PSAweDFDQkYsXG4gICAgLy8gJ1N1bmRhbmVzZSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQ0MwICYmIGNoYXIgPD0gMHgxQ0NGLFxuICAgIC8vICdWZWRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQ0QwICYmIGNoYXIgPD0gMHgxQ0ZGLFxuICAgIC8vICdQaG9uZXRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDAwICYmIGNoYXIgPD0gMHgxRDdGLFxuICAgIC8vICdQaG9uZXRpYyBFeHRlbnNpb25zIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEODAgJiYgY2hhciA8PSAweDFEQkYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxREMwICYmIGNoYXIgPD0gMHgxREZGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTAwICYmIGNoYXIgPD0gMHgxRUZGLFxuICAgIC8vICdHcmVlayBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMCAmJiBjaGFyIDw9IDB4MUZGRixcbiAgICAnR2VuZXJhbCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MjAwMCAmJiBjaGFyIDw9IDB4MjA2RixcbiAgICAvLyAnU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDcwICYmIGNoYXIgPD0gMHgyMDlGLFxuICAgIC8vICdDdXJyZW5jeSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMEEwICYmIGNoYXIgPD0gMHgyMENGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgZm9yIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwRDAgJiYgY2hhciA8PSAweDIwRkYsXG4gICAgJ0xldHRlcmxpa2UgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjEwMCAmJiBjaGFyIDw9IDB4MjE0RixcbiAgICAnTnVtYmVyIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTUwICYmIGNoYXIgPD0gMHgyMThGLFxuICAgIC8vICdBcnJvd3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxOTAgJiYgY2hhciA8PSAweDIxRkYsXG4gICAgLy8gJ01hdGhlbWF0aWNhbCBPcGVyYXRvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIyMDAgJiYgY2hhciA8PSAweDIyRkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgVGVjaG5pY2FsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMzAwICYmIGNoYXIgPD0gMHgyM0ZGLFxuICAgICdDb250cm9sIFBpY3R1cmVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDAwICYmIGNoYXIgPD0gMHgyNDNGLFxuICAgICdPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MjQ0MCAmJiBjaGFyIDw9IDB4MjQ1RixcbiAgICAnRW5jbG9zZWQgQWxwaGFudW1lcmljcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjQ2MCAmJiBjaGFyIDw9IDB4MjRGRixcbiAgICAvLyAnQm94IERyYXdpbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1MDAgJiYgY2hhciA8PSAweDI1N0YsXG4gICAgLy8gJ0Jsb2NrIEVsZW1lbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNTgwICYmIGNoYXIgPD0gMHgyNTlGLFxuICAgICdHZW9tZXRyaWMgU2hhcGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNUEwICYmIGNoYXIgPD0gMHgyNUZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI2MDAgJiYgY2hhciA8PSAweDI2RkYsXG4gICAgLy8gJ0RpbmdiYXRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNzAwICYmIGNoYXIgPD0gMHgyN0JGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIE1hdGhlbWF0aWNhbCBTeW1ib2xzLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3QzAgJiYgY2hhciA8PSAweDI3RUYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MjdGMCAmJiBjaGFyIDw9IDB4MjdGRixcbiAgICAvLyAnQnJhaWxsZSBQYXR0ZXJucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjgwMCAmJiBjaGFyIDw9IDB4MjhGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyOTAwICYmIGNoYXIgPD0gMHgyOTdGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIE1hdGhlbWF0aWNhbCBTeW1ib2xzLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDI5ODAgJiYgY2hhciA8PSAweDI5RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBNYXRoZW1hdGljYWwgT3BlcmF0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQTAwICYmIGNoYXIgPD0gMHgyQUZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkIwMCAmJiBjaGFyIDw9IDB4MkJGRixcbiAgICAvLyAnR2xhZ29saXRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkMwMCAmJiBjaGFyIDw9IDB4MkM1RixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkM2MCAmJiBjaGFyIDw9IDB4MkM3RixcbiAgICAvLyAnQ29wdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzgwICYmIGNoYXIgPD0gMHgyQ0ZGLFxuICAgIC8vICdHZW9yZ2lhbiBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDAwICYmIGNoYXIgPD0gMHgyRDJGLFxuICAgIC8vICdUaWZpbmFnaCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQzMCAmJiBjaGFyIDw9IDB4MkQ3RixcbiAgICAvLyAnRXRoaW9waWMgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEODAgJiYgY2hhciA8PSAweDJEREYsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDJERTAgJiYgY2hhciA8PSAweDJERkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MkUwMCAmJiBjaGFyIDw9IDB4MkU3RixcbiAgICAnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJFODAgJiYgY2hhciA8PSAweDJFRkYsXG4gICAgJ0thbmd4aSBSYWRpY2Fscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkYwMCAmJiBjaGFyIDw9IDB4MkZERixcbiAgICAnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkZGMCAmJiBjaGFyIDw9IDB4MkZGRixcbiAgICAnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMDAwICYmIGNoYXIgPD0gMHgzMDNGLFxuICAgICdIaXJhZ2FuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzA0MCAmJiBjaGFyIDw9IDB4MzA5RixcbiAgICAnS2F0YWthbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDMwQTAgJiYgY2hhciA8PSAweDMwRkYsXG4gICAgJ0JvcG9tb2ZvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTAwICYmIGNoYXIgPD0gMHgzMTJGLFxuICAgICdIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTMwICYmIGNoYXIgPD0gMHgzMThGLFxuICAgICdLYW5idW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxOTAgJiYgY2hhciA8PSAweDMxOUYsXG4gICAgJ0JvcG9tb2ZvIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUEwICYmIGNoYXIgPD0gMHgzMUJGLFxuICAgICdDSksgU3Ryb2tlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFDMCAmJiBjaGFyIDw9IDB4MzFFRixcbiAgICAnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFGMCAmJiBjaGFyIDw9IDB4MzFGRixcbiAgICAnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzIwMCAmJiBjaGFyIDw9IDB4MzJGRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHknOiAoY2hhcikgPT4gY2hhciA+PSAweDMzMDAgJiYgY2hhciA8PSAweDMzRkYsXG4gICAgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnOiAoY2hhcikgPT4gY2hhciA+PSAweDM0MDAgJiYgY2hhciA8PSAweDREQkYsXG4gICAgJ1lpamluZyBIZXhhZ3JhbSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHg0REMwICYmIGNoYXIgPD0gMHg0REZGLFxuICAgICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHg0RTAwICYmIGNoYXIgPD0gMHg5RkZGLFxuICAgICdZaSBTeWxsYWJsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEEwMDAgJiYgY2hhciA8PSAweEE0OEYsXG4gICAgJ1lpIFJhZGljYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNDkwICYmIGNoYXIgPD0gMHhBNENGLFxuICAgIC8vICdMaXN1JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNEQwICYmIGNoYXIgPD0gMHhBNEZGLFxuICAgIC8vICdWYWknOiAoY2hhcikgPT4gY2hhciA+PSAweEE1MDAgJiYgY2hhciA8PSAweEE2M0YsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEE2NDAgJiYgY2hhciA8PSAweEE2OUYsXG4gICAgLy8gJ0JhbXVtJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNkEwICYmIGNoYXIgPD0gMHhBNkZGLFxuICAgIC8vICdNb2RpZmllciBUb25lIExldHRlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE3MDAgJiYgY2hhciA8PSAweEE3MUYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUQnOiAoY2hhcikgPT4gY2hhciA+PSAweEE3MjAgJiYgY2hhciA8PSAweEE3RkYsXG4gICAgLy8gJ1N5bG90aSBOYWdyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTgwMCAmJiBjaGFyIDw9IDB4QTgyRixcbiAgICAvLyAnQ29tbW9uIEluZGljIE51bWJlciBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTgzMCAmJiBjaGFyIDw9IDB4QTgzRixcbiAgICAvLyAnUGhhZ3MtcGEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4NDAgJiYgY2hhciA8PSAweEE4N0YsXG4gICAgLy8gJ1NhdXJhc2h0cmEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4ODAgJiYgY2hhciA8PSAweEE4REYsXG4gICAgLy8gJ0RldmFuYWdhcmkgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4RTAgJiYgY2hhciA8PSAweEE4RkYsXG4gICAgLy8gJ0theWFoIExpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTAwICYmIGNoYXIgPD0gMHhBOTJGLFxuICAgIC8vICdSZWphbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5MzAgJiYgY2hhciA8PSAweEE5NUYsXG4gICAgJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5NjAgJiYgY2hhciA8PSAweEE5N0YsXG4gICAgLy8gJ0phdmFuZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTgwICYmIGNoYXIgPD0gMHhBOURGLFxuICAgIC8vICdNeWFubWFyIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEE5RTAgJiYgY2hhciA8PSAweEE5RkYsXG4gICAgLy8gJ0NoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweEFBMDAgJiYgY2hhciA8PSAweEFBNUYsXG4gICAgLy8gJ015YW5tYXIgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUE2MCAmJiBjaGFyIDw9IDB4QUE3RixcbiAgICAvLyAnVGFpIFZpZXQnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBODAgJiYgY2hhciA8PSAweEFBREYsXG4gICAgLy8gJ01lZXRlaSBNYXllayBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQUUwICYmIGNoYXIgPD0gMHhBQUZGLFxuICAgIC8vICdFdGhpb3BpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjAwICYmIGNoYXIgPD0gMHhBQjJGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1FJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjMwICYmIGNoYXIgPD0gMHhBQjZGLFxuICAgIC8vICdDaGVyb2tlZSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjcwICYmIGNoYXIgPD0gMHhBQkJGLFxuICAgIC8vICdNZWV0ZWkgTWF5ZWsnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCQzAgJiYgY2hhciA8PSAweEFCRkYsXG4gICAgJ0hhbmd1bCBTeWxsYWJsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEFDMDAgJiYgY2hhciA8PSAweEQ3QUYsXG4gICAgJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEQ3QjAgJiYgY2hhciA8PSAweEQ3RkYsXG4gICAgLy8gJ0hpZ2ggU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RDgwMCAmJiBjaGFyIDw9IDB4REI3RixcbiAgICAvLyAnSGlnaCBQcml2YXRlIFVzZSBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEQjgwICYmIGNoYXIgPD0gMHhEQkZGLFxuICAgIC8vICdMb3cgU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4REMwMCAmJiBjaGFyIDw9IDB4REZGRixcbiAgICAnUHJpdmF0ZSBVc2UgQXJlYSc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAwMCAmJiBjaGFyIDw9IDB4RjhGRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4RjkwMCAmJiBjaGFyIDw9IDB4RkFGRixcbiAgICAvLyAnQWxwaGFiZXRpYyBQcmVzZW50YXRpb24gRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZCMDAgJiYgY2hhciA8PSAweEZCNEYsXG4gICAgJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4RkI1MCAmJiBjaGFyIDw9IDB4RkRGRixcbiAgICAvLyAnVmFyaWF0aW9uIFNlbGVjdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUwMCAmJiBjaGFyIDw9IDB4RkUwRixcbiAgICAnVmVydGljYWwgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMTAgJiYgY2hhciA8PSAweEZFMUYsXG4gICAgLy8gJ0NvbWJpbmluZyBIYWxmIE1hcmtzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTIwICYmIGNoYXIgPD0gMHhGRTJGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUzMCAmJiBjaGFyIDw9IDB4RkU0RixcbiAgICAnU21hbGwgRm9ybSBWYXJpYW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkU1MCAmJiBjaGFyIDw9IDB4RkU2RixcbiAgICAnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTcwICYmIGNoYXIgPD0gMHhGRUZGLFxuICAgICdIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkYwMCAmJiBjaGFyIDw9IDB4RkZFRlxuICAgIC8vICdTcGVjaWFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkZGMCAmJiBjaGFyIDw9IDB4RkZGRixcbiAgICAvLyAnTGluZWFyIEIgU3lsbGFiYXJ5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwMCAmJiBjaGFyIDw9IDB4MTAwN0YsXG4gICAgLy8gJ0xpbmVhciBCIElkZW9ncmFtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwODAgJiYgY2hhciA8PSAweDEwMEZGLFxuICAgIC8vICdBZWdlYW4gTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxMDAgJiYgY2hhciA8PSAweDEwMTNGLFxuICAgIC8vICdBbmNpZW50IEdyZWVrIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTQwICYmIGNoYXIgPD0gMHgxMDE4RixcbiAgICAvLyAnQW5jaWVudCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDE5MCAmJiBjaGFyIDw9IDB4MTAxQ0YsXG4gICAgLy8gJ1BoYWlzdG9zIERpc2MnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMUQwICYmIGNoYXIgPD0gMHgxMDFGRixcbiAgICAvLyAnTHljaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDI4MCAmJiBjaGFyIDw9IDB4MTAyOUYsXG4gICAgLy8gJ0Nhcmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyQTAgJiYgY2hhciA8PSAweDEwMkRGLFxuICAgIC8vICdDb3B0aWMgRXBhY3QgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyRTAgJiYgY2hhciA8PSAweDEwMkZGLFxuICAgIC8vICdPbGQgSXRhbGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDMwMCAmJiBjaGFyIDw9IDB4MTAzMkYsXG4gICAgLy8gJ0dvdGhpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzMzAgJiYgY2hhciA8PSAweDEwMzRGLFxuICAgIC8vICdPbGQgUGVybWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDM1MCAmJiBjaGFyIDw9IDB4MTAzN0YsXG4gICAgLy8gJ1VnYXJpdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDM4MCAmJiBjaGFyIDw9IDB4MTAzOUYsXG4gICAgLy8gJ09sZCBQZXJzaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDNBMCAmJiBjaGFyIDw9IDB4MTAzREYsXG4gICAgLy8gJ0Rlc2VyZXQnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDAwICYmIGNoYXIgPD0gMHgxMDQ0RixcbiAgICAvLyAnU2hhdmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0NTAgJiYgY2hhciA8PSAweDEwNDdGLFxuICAgIC8vICdPc21hbnlhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQ4MCAmJiBjaGFyIDw9IDB4MTA0QUYsXG4gICAgLy8gJ09zYWdlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDRCMCAmJiBjaGFyIDw9IDB4MTA0RkYsXG4gICAgLy8gJ0VsYmFzYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNTAwICYmIGNoYXIgPD0gMHgxMDUyRixcbiAgICAvLyAnQ2F1Y2FzaWFuIEFsYmFuaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDUzMCAmJiBjaGFyIDw9IDB4MTA1NkYsXG4gICAgLy8gJ0xpbmVhciBBJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDYwMCAmJiBjaGFyIDw9IDB4MTA3N0YsXG4gICAgLy8gJ0N5cHJpb3QgU3lsbGFiYXJ5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDgwMCAmJiBjaGFyIDw9IDB4MTA4M0YsXG4gICAgLy8gJ0ltcGVyaWFsIEFyYW1haWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODQwICYmIGNoYXIgPD0gMHgxMDg1RixcbiAgICAvLyAnUGFsbXlyZW5lJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg2MCAmJiBjaGFyIDw9IDB4MTA4N0YsXG4gICAgLy8gJ05hYmF0YWVhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4ODAgJiYgY2hhciA8PSAweDEwOEFGLFxuICAgIC8vICdIYXRyYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOEUwICYmIGNoYXIgPD0gMHgxMDhGRixcbiAgICAvLyAnUGhvZW5pY2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5MDAgJiYgY2hhciA8PSAweDEwOTFGLFxuICAgIC8vICdMeWRpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTIwICYmIGNoYXIgPD0gMHgxMDkzRixcbiAgICAvLyAnTWVyb2l0aWMgSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTgwICYmIGNoYXIgPD0gMHgxMDk5RixcbiAgICAvLyAnTWVyb2l0aWMgQ3Vyc2l2ZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5QTAgJiYgY2hhciA8PSAweDEwOUZGLFxuICAgIC8vICdLaGFyb3NodGhpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEEwMCAmJiBjaGFyIDw9IDB4MTBBNUYsXG4gICAgLy8gJ09sZCBTb3V0aCBBcmFiaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEE2MCAmJiBjaGFyIDw9IDB4MTBBN0YsXG4gICAgLy8gJ09sZCBOb3J0aCBBcmFiaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEE4MCAmJiBjaGFyIDw9IDB4MTBBOUYsXG4gICAgLy8gJ01hbmljaGFlYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQUMwICYmIGNoYXIgPD0gMHgxMEFGRixcbiAgICAvLyAnQXZlc3Rhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCMDAgJiYgY2hhciA8PSAweDEwQjNGLFxuICAgIC8vICdJbnNjcmlwdGlvbmFsIFBhcnRoaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI0MCAmJiBjaGFyIDw9IDB4MTBCNUYsXG4gICAgLy8gJ0luc2NyaXB0aW9uYWwgUGFobGF2aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCNjAgJiYgY2hhciA8PSAweDEwQjdGLFxuICAgIC8vICdQc2FsdGVyIFBhaGxhdmknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjgwICYmIGNoYXIgPD0gMHgxMEJBRixcbiAgICAvLyAnT2xkIFR1cmtpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBDMDAgJiYgY2hhciA8PSAweDEwQzRGLFxuICAgIC8vICdPbGQgSHVuZ2FyaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEM4MCAmJiBjaGFyIDw9IDB4MTBDRkYsXG4gICAgLy8gJ0hhbmlmaSBSb2hpbmd5YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBEMDAgJiYgY2hhciA8PSAweDEwRDNGLFxuICAgIC8vICdSdW1pIE51bWVyYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBFNjAgJiYgY2hhciA8PSAweDEwRTdGLFxuICAgIC8vICdPbGQgU29nZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGMDAgJiYgY2hhciA8PSAweDEwRjJGLFxuICAgIC8vICdTb2dkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEYzMCAmJiBjaGFyIDw9IDB4MTBGNkYsXG4gICAgLy8gJ0VseW1haWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRkUwICYmIGNoYXIgPD0gMHgxMEZGRixcbiAgICAvLyAnQnJhaG1pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTAwMCAmJiBjaGFyIDw9IDB4MTEwN0YsXG4gICAgLy8gJ0thaXRoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwODAgJiYgY2hhciA8PSAweDExMENGLFxuICAgIC8vICdTb3JhIFNvbXBlbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMEQwICYmIGNoYXIgPD0gMHgxMTBGRixcbiAgICAvLyAnQ2hha21hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTEwMCAmJiBjaGFyIDw9IDB4MTExNEYsXG4gICAgLy8gJ01haGFqYW5pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTE1MCAmJiBjaGFyIDw9IDB4MTExN0YsXG4gICAgLy8gJ1NoYXJhZGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTgwICYmIGNoYXIgPD0gMHgxMTFERixcbiAgICAvLyAnU2luaGFsYSBBcmNoYWljIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMUUwICYmIGNoYXIgPD0gMHgxMTFGRixcbiAgICAvLyAnS2hvamtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTIwMCAmJiBjaGFyIDw9IDB4MTEyNEYsXG4gICAgLy8gJ011bHRhbmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMjgwICYmIGNoYXIgPD0gMHgxMTJBRixcbiAgICAvLyAnS2h1ZGF3YWRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTJCMCAmJiBjaGFyIDw9IDB4MTEyRkYsXG4gICAgLy8gJ0dyYW50aGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMzAwICYmIGNoYXIgPD0gMHgxMTM3RixcbiAgICAvLyAnTmV3YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE0MDAgJiYgY2hhciA8PSAweDExNDdGLFxuICAgIC8vICdUaXJodXRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTQ4MCAmJiBjaGFyIDw9IDB4MTE0REYsXG4gICAgLy8gJ1NpZGRoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDExNTgwICYmIGNoYXIgPD0gMHgxMTVGRixcbiAgICAvLyAnTW9kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2MDAgJiYgY2hhciA8PSAweDExNjVGLFxuICAgIC8vICdNb25nb2xpYW4gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2NjAgJiYgY2hhciA8PSAweDExNjdGLFxuICAgIC8vICdUYWtyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2ODAgJiYgY2hhciA8PSAweDExNkNGLFxuICAgIC8vICdBaG9tJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTcwMCAmJiBjaGFyIDw9IDB4MTE3M0YsXG4gICAgLy8gJ0RvZ3JhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTgwMCAmJiBjaGFyIDw9IDB4MTE4NEYsXG4gICAgLy8gJ1dhcmFuZyBDaXRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMThBMCAmJiBjaGFyIDw9IDB4MTE4RkYsXG4gICAgLy8gJ05hbmRpbmFnYXJpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTlBMCAmJiBjaGFyIDw9IDB4MTE5RkYsXG4gICAgLy8gJ1phbmFiYXphciBTcXVhcmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDExQTAwICYmIGNoYXIgPD0gMHgxMUE0RixcbiAgICAvLyAnU295b21ibyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBNTAgJiYgY2hhciA8PSAweDExQUFGLFxuICAgIC8vICdQYXUgQ2luIEhhdSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBQzAgJiYgY2hhciA8PSAweDExQUZGLFxuICAgIC8vICdCaGFpa3N1a2knOiAoY2hhcikgPT4gY2hhciA+PSAweDExQzAwICYmIGNoYXIgPD0gMHgxMUM2RixcbiAgICAvLyAnTWFyY2hlbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTFDNzAgJiYgY2hhciA8PSAweDExQ0JGLFxuICAgIC8vICdNYXNhcmFtIEdvbmRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUQwMCAmJiBjaGFyIDw9IDB4MTFENUYsXG4gICAgLy8gJ0d1bmphbGEgR29uZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExRDYwICYmIGNoYXIgPD0gMHgxMURBRixcbiAgICAvLyAnTWFrYXNhcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTFFRTAgJiYgY2hhciA8PSAweDExRUZGLFxuICAgIC8vICdUYW1pbCBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUZDMCAmJiBjaGFyIDw9IDB4MTFGRkYsXG4gICAgLy8gJ0N1bmVpZm9ybSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTIwMDAgJiYgY2hhciA8PSAweDEyM0ZGLFxuICAgIC8vICdDdW5laWZvcm0gTnVtYmVycyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyNDAwICYmIGNoYXIgPD0gMHgxMjQ3RixcbiAgICAvLyAnRWFybHkgRHluYXN0aWMgQ3VuZWlmb3JtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjQ4MCAmJiBjaGFyIDw9IDB4MTI1NEYsXG4gICAgLy8gJ0VneXB0aWFuIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzAwMCAmJiBjaGFyIDw9IDB4MTM0MkYsXG4gICAgLy8gJ0VneXB0aWFuIEhpZXJvZ2x5cGggRm9ybWF0IENvbnRyb2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzQzMCAmJiBjaGFyIDw9IDB4MTM0M0YsXG4gICAgLy8gJ0FuYXRvbGlhbiBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTQ0MDAgJiYgY2hhciA8PSAweDE0NjdGLFxuICAgIC8vICdCYW11bSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNjgwMCAmJiBjaGFyIDw9IDB4MTZBM0YsXG4gICAgLy8gJ01ybyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBNDAgJiYgY2hhciA8PSAweDE2QTZGLFxuICAgIC8vICdCYXNzYSBWYWgnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QUQwICYmIGNoYXIgPD0gMHgxNkFGRixcbiAgICAvLyAnUGFoYXdoIEhtb25nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkIwMCAmJiBjaGFyIDw9IDB4MTZCOEYsXG4gICAgLy8gJ01lZGVmYWlkcmluJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkU0MCAmJiBjaGFyIDw9IDB4MTZFOUYsXG4gICAgLy8gJ01pYW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RjAwICYmIGNoYXIgPD0gMHgxNkY5RixcbiAgICAvLyAnSWRlb2dyYXBoaWMgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RkUwICYmIGNoYXIgPD0gMHgxNkZGRixcbiAgICAvLyAnVGFuZ3V0JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzAwMCAmJiBjaGFyIDw9IDB4MTg3RkYsXG4gICAgLy8gJ1Rhbmd1dCBDb21wb25lbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxODgwMCAmJiBjaGFyIDw9IDB4MThBRkYsXG4gICAgLy8gJ0thbmEgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIwMDAgJiYgY2hhciA8PSAweDFCMEZGLFxuICAgIC8vICdLYW5hIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTAwICYmIGNoYXIgPD0gMHgxQjEyRixcbiAgICAvLyAnU21hbGwgS2FuYSBFeHRlbnNpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTMwICYmIGNoYXIgPD0gMHgxQjE2RixcbiAgICAvLyAnTnVzaHUnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTcwICYmIGNoYXIgPD0gMHgxQjJGRixcbiAgICAvLyAnRHVwbG95YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQzAwICYmIGNoYXIgPD0gMHgxQkM5RixcbiAgICAvLyAnU2hvcnRoYW5kIEZvcm1hdCBDb250cm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDQTAgJiYgY2hhciA8PSAweDFCQ0FGLFxuICAgIC8vICdCeXphbnRpbmUgTXVzaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDAwMCAmJiBjaGFyIDw9IDB4MUQwRkYsXG4gICAgLy8gJ011c2ljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQxMDAgJiYgY2hhciA8PSAweDFEMUZGLFxuICAgIC8vICdBbmNpZW50IEdyZWVrIE11c2ljYWwgTm90YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMjAwICYmIGNoYXIgPD0gMHgxRDI0RixcbiAgICAvLyAnTWF5YW4gTnVtZXJhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMkUwICYmIGNoYXIgPD0gMHgxRDJGRixcbiAgICAvLyAnVGFpIFh1YW4gSmluZyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDMwMCAmJiBjaGFyIDw9IDB4MUQzNUYsXG4gICAgLy8gJ0NvdW50aW5nIFJvZCBOdW1lcmFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQzNjAgJiYgY2hhciA8PSAweDFEMzdGLFxuICAgIC8vICdNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFENDAwICYmIGNoYXIgPD0gMHgxRDdGRixcbiAgICAvLyAnU3V0dG9uIFNpZ25Xcml0aW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDgwMCAmJiBjaGFyIDw9IDB4MURBQUYsXG4gICAgLy8gJ0dsYWdvbGl0aWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUwMDAgJiYgY2hhciA8PSAweDFFMDJGLFxuICAgIC8vICdOeWlha2VuZyBQdWFjaHVlIEhtb25nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTEwMCAmJiBjaGFyIDw9IDB4MUUxNEYsXG4gICAgLy8gJ1dhbmNobyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUyQzAgJiYgY2hhciA8PSAweDFFMkZGLFxuICAgIC8vICdNZW5kZSBLaWtha3VpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTgwMCAmJiBjaGFyIDw9IDB4MUU4REYsXG4gICAgLy8gJ0FkbGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTkwMCAmJiBjaGFyIDw9IDB4MUU5NUYsXG4gICAgLy8gJ0luZGljIFNpeWFxIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFQzcwICYmIGNoYXIgPD0gMHgxRUNCRixcbiAgICAvLyAnT3R0b21hbiBTaXlhcSBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUQwMCAmJiBjaGFyIDw9IDB4MUVENEYsXG4gICAgLy8gJ0FyYWJpYyBNYXRoZW1hdGljYWwgQWxwaGFiZXRpYyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUUwMCAmJiBjaGFyIDw9IDB4MUVFRkYsXG4gICAgLy8gJ01haGpvbmcgVGlsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDAwICYmIGNoYXIgPD0gMHgxRjAyRixcbiAgICAvLyAnRG9taW5vIFRpbGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAzMCAmJiBjaGFyIDw9IDB4MUYwOUYsXG4gICAgLy8gJ1BsYXlpbmcgQ2FyZHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMEEwICYmIGNoYXIgPD0gMHgxRjBGRixcbiAgICAvLyAnRW5jbG9zZWQgQWxwaGFudW1lcmljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMTAwICYmIGNoYXIgPD0gMHgxRjFGRixcbiAgICAvLyAnRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYyMDAgJiYgY2hhciA8PSAweDFGMkZGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjMwMCAmJiBjaGFyIDw9IDB4MUY1RkYsXG4gICAgLy8gJ0Vtb3RpY29ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2MDAgJiYgY2hhciA8PSAweDFGNjRGLFxuICAgIC8vICdPcm5hbWVudGFsIERpbmdiYXRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjY1MCAmJiBjaGFyIDw9IDB4MUY2N0YsXG4gICAgLy8gJ1RyYW5zcG9ydCBhbmQgTWFwIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjgwICYmIGNoYXIgPD0gMHgxRjZGRixcbiAgICAvLyAnQWxjaGVtaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjcwMCAmJiBjaGFyIDw9IDB4MUY3N0YsXG4gICAgLy8gJ0dlb21ldHJpYyBTaGFwZXMgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNzgwICYmIGNoYXIgPD0gMHgxRjdGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjgwMCAmJiBjaGFyIDw9IDB4MUY4RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY5MDAgJiYgY2hhciA8PSAweDFGOUZGLFxuICAgIC8vICdDaGVzcyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRkEwMCAmJiBjaGFyIDw9IDB4MUZBNkYsXG4gICAgLy8gJ1N5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGQTcwICYmIGNoYXIgPD0gMHgxRkFGRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQic6IChjaGFyKSA9PiBjaGFyID49IDB4MjAwMDAgJiYgY2hhciA8PSAweDJBNkRGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBDJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQTcwMCAmJiBjaGFyIDw9IDB4MkI3M0YsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCNzQwICYmIGNoYXIgPD0gMHgyQjgxRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRSc6IChjaGFyKSA9PiBjaGFyID49IDB4MkI4MjAgJiYgY2hhciA8PSAweDJDRUFGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBGJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQ0VCMCAmJiBjaGFyIDw9IDB4MkVCRUYsXG4gICAgLy8gJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkY4MDAgJiYgY2hhciA8PSAweDJGQTFGLFxuICAgIC8vICdUYWdzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDAwMCAmJiBjaGFyIDw9IDB4RTAwN0YsXG4gICAgLy8gJ1ZhcmlhdGlvbiBTZWxlY3RvcnMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAxMDAgJiYgY2hhciA8PSAweEUwMUVGLFxuICAgIC8vICdTdXBwbGVtZW50YXJ5IFByaXZhdGUgVXNlIEFyZWEtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4RjAwMDAgJiYgY2hhciA8PSAweEZGRkZGLFxuICAgIC8vICdTdXBwbGVtZW50YXJ5IFByaXZhdGUgVXNlIEFyZWEtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMDAwICYmIGNoYXIgPD0gMHgxMEZGRkYsXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bmljb2RlQmxvY2tMb29rdXA7XG4iLCIvLyBAZmxvd1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBpc0NoYXIgZnJvbSAnLi9pc19jaGFyX2luX3VuaWNvZGVfYmxvY2snO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKCFjaGFyQWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckFsbG93c0xldHRlclNwYWNpbmcoY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIEV4dGVuZGVkLUEnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJ10oY2hhcikpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhcjogbnVtYmVyKSB7XG4gICAgLy8gUmV0dXJuIGVhcmx5IGZvciBjaGFyYWN0ZXJzIG91dHNpZGUgYWxsIGlkZW9ncmFwaGljIHJhbmdlcy5cbiAgICBpZiAoY2hhciA8IDB4MkU4MCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8gRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgUmFkaWNhbHMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3Ryb2tlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGlyYWdhbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5neGkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydWZXJ0aWNhbCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgbG9naWMgY29tZXMgZnJvbVxuLy8gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzEyLjAuMC91Y2QvVmVydGljYWxPcmllbnRhdGlvbi50eHQ+LlxuLy8gS2VlcCBpdCBzeW5jaHJvbml6ZWQgd2l0aFxuLy8gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VDRC9sYXRlc3QvdWNkL1ZlcnRpY2FsT3JpZW50YXRpb24udHh0Pi5cbi8vIFRoZSBkYXRhIGZpbGUgZGVub3RlcyB3aXRoIMOiwoDCnFXDosKAwp0gb3Igw6LCgMKcVHXDosKAwp0gYW55IGNvZGVwb2ludCB0aGF0IG1heSBiZSBkcmF3blxuLy8gdXByaWdodCBpbiB2ZXJ0aWNhbCB0ZXh0IGJ1dCBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVwcmlnaHQgYW5kXG4vLyDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlcnMuXG5cbi8vIEJsb2NrcyBpbiB0aGUgVW5pY29kZSBzdXBwbGVtZW50YXJ5IHBsYW5lcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGlzIG1vZHVsZSBkdWVcbi8vIHRvIDxodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC9pc3N1ZXMvMjk+LlxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiB1cHJpZ2h0IG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyB1cHJpZ2h0IG9yaWVudGF0aW9uIGlmIGl0IGlzIGRyYXduIHVwcmlnaHQgKHVucm90YXRlZClcbiAqIHdoZXRoZXIgdGhlIGxpbmUgaXMgb3JpZW50ZWQgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHksIGV2ZW4gaWYgYm90aFxuICogYWRqYWNlbnQgY2hhcmFjdGVycyBjYW4gYmUgcm90YXRlZC4gRm9yIGV4YW1wbGUsIGEgQ2hpbmVzZSBjaGFyYWN0ZXIgaXNcbiAqIGFsd2F5cyBkcmF3biB1cHJpZ2h0LiBBbiB1cHJpZ2h0bHkgb3JpZW50ZWQgY2hhcmFjdGVyIGNhdXNlcyBhbiBhZGphY2VudFxuICogw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXIgdG8gYmUgZHJhd24gdXByaWdodCBhcyB3ZWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoY2hhciA9PT0gMHgwMkVBIC8qIG1vZGlmaWVyIGxldHRlciB5aW4gZGVwYXJ0aW5nIHRvbmUgbWFyayAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDAyRUIgLyogbW9kaWZpZXIgbGV0dGVyIHlhbmcgZGVwYXJ0aW5nIHRvbmUgbWFyayAqLykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGNoYXJhY3RlcnMgb3V0c2lkZSBhbGwgcmFuZ2VzIHdob3NlIGNoYXJhY3RlcnMgcmVtYWluXG4gICAgLy8gdXByaWdodCBpbiB2ZXJ0aWNhbCB3cml0aW5nIG1vZGUuXG4gICAgaWYgKGNoYXIgPCAweDExMDApIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHhGRTQ5IC8qIGRhc2hlZCBvdmVybGluZSAqLyAmJiBjaGFyIDw9IDB4RkU0RikgLyogd2F2eSBsb3cgbGluZSAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHknXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN0cm9rZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHgzMDA4IC8qIGxlZnQgYW5nbGUgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4MzAxMSkgLyogcmlnaHQgYmxhY2sgbGVudGljdWxhciBicmFja2V0ICovKSAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweDMwMTQgLyogbGVmdCB0b3J0b2lzZSBzaGVsbCBicmFja2V0ICovICYmIGNoYXIgPD0gMHgzMDFGKSAvKiBsb3cgZG91YmxlIHByaW1lIHF1b3RhdGlvbiBtYXJrICovKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHgzMDMwIC8qIHdhdnkgZGFzaCAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyBFeHRlbmRlZC1BJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUInXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIaXJhZ2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmJ1biddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5neGkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyICE9PSAweDMwRkMgLyoga2F0YWthbmEtaGlyYWdhbmEgcHJvbG9uZ2VkIHNvdW5kIG1hcmsgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IDB4RkYwOCAvKiBmdWxsd2lkdGggbGVmdCBwYXJlbnRoZXNpcyAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjA5IC8qIGZ1bGx3aWR0aCByaWdodCBwYXJlbnRoZXNpcyAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjBEIC8qIGZ1bGx3aWR0aCBoeXBoZW4tbWludXMgKi8gJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHhGRjFBIC8qIGZ1bGx3aWR0aCBjb2xvbiAqLyAmJiBjaGFyIDw9IDB4RkYxRSkgLyogZnVsbHdpZHRoIGdyZWF0ZXItdGhhbiBzaWduICovKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNCIC8qIGZ1bGx3aWR0aCBsZWZ0IHNxdWFyZSBicmFja2V0ICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0QgLyogZnVsbHdpZHRoIHJpZ2h0IHNxdWFyZSBicmFja2V0ICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0YgLyogZnVsbHdpZHRoIGxvdyBsaW5lICovICYmXG4gICAgICAgICAgICAhKGNoYXIgPj0gMHhGRjVCIC8qIGZ1bGx3aWR0aCBsZWZ0IGN1cmx5IGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweEZGREYpICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGRTMgLyogZnVsbHdpZHRoIG1hY3JvbiAqLyAmJlxuICAgICAgICAgICAgIShjaGFyID49IDB4RkZFOCAvKiBoYWxmd2lkdGggZm9ybXMgbGlnaHQgdmVydGljYWwgKi8gJiYgY2hhciA8PSAweEZGRUYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydTbWFsbCBGb3JtIFZhcmlhbnRzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHhGRTU4IC8qIHNtYWxsIGVtIGRhc2ggKi8gJiYgY2hhciA8PSAweEZFNUUpIC8qIHNtYWxsIHJpZ2h0IHRvcnRvaXNlIHNoZWxsIGJyYWNrZXQgKi8pICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4RkU2MyAvKiBzbWFsbCBoeXBoZW4tbWludXMgKi8gJiYgY2hhciA8PSAweEZFNjYpIC8qIHNtYWxsIGVxdWFscyBzaWduICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ZlcnRpY2FsIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpamluZyBIZXhhZ3JhbSBTeW1ib2xzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogbmV1dHJhbCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgbmV1dHJhbCBvcmllbnRhdGlvbiBpZiBpdCBtYXkgYmUgZHJhd24gcm90YXRlZCBvciB1bnJvdGF0ZWRcbiAqIHdoZW4gdGhlIGxpbmUgaXMgb3JpZW50ZWQgdmVydGljYWxseSwgZGVwZW5kaW5nIG9uIHRoZSBvcmllbnRhdGlvbiBvZiB0aGVcbiAqIGFkamFjZW50IGNoYXJhY3RlcnMuIEZvciBleGFtcGxlLCBhbG9uZyBhIHZlcnRpY2xseSBvcmllbnRlZCBsaW5lLCB0aGUgdnVsZ2FyXG4gKiBmcmFjdGlvbiDDgsK9IGlzIGRyYXduIHVwcmlnaHQgYW1vbmcgQ2hpbmVzZSBjaGFyYWN0ZXJzIGJ1dCByb3RhdGVkIGFtb25nIExhdGluXG4gKiBsZXR0ZXJzLiBBIG5ldXRyYWxseSBvcmllbnRlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaW5mbHVlbmNlIHdoZXRoZXIgYW5cbiAqIGFkamFjZW50IGNoYXJhY3RlciBpcyBkcmF3biB1cHJpZ2h0IG9yIHJvdGF0ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc05ldXRyYWxWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChpc0NoYXJbJ0xhdGluLTEgU3VwcGxlbWVudCddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyID09PSAweDAwQTcgLyogc2VjdGlvbiBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQTkgLyogY29weXJpZ2h0IHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBBRSAvKiByZWdpc3RlcmVkIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCMSAvKiBwbHVzLW1pbnVzIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCQyAvKiB2dWxnYXIgZnJhY3Rpb24gb25lIHF1YXJ0ZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCRCAvKiB2dWxnYXIgZnJhY3Rpb24gb25lIGhhbGYgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCRSAvKiB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBENyAvKiBtdWx0aXBsaWNhdGlvbiBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwRjcgLyogZGl2aXNpb24gc2lnbiAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnR2VuZXJhbCBQdW5jdHVhdGlvbiddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyID09PSAweDIwMTYgLyogZG91YmxlIHZlcnRpY2FsIGxpbmUgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAyMCAvKiBkYWdnZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAyMSAvKiBkb3VibGUgZGFnZ2VyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMzAgLyogcGVyIG1pbGxlIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzMSAvKiBwZXIgdGVuIHRob3VzYW5kIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzQiAvKiByZWZlcmVuY2UgbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDNDIC8qIGRvdWJsZSBleGNsYW1hdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDIgLyogYXN0ZXJpc20gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0NyAvKiBkb3VibGUgcXVlc3Rpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ4IC8qIHF1ZXN0aW9uIGV4Y2xhbWF0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0OSAvKiBleGNsYW1hdGlvbiBxdWVzdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNTEgLyogdHdvIGFzdGVyaXNrcyBhbGlnbmVkIHZlcnRpY2FsbHkgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0xldHRlcmxpa2UgU3ltYm9scyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydOdW1iZXIgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBUZWNobmljYWwnXShjaGFyKSkge1xuICAgICAgICBpZiAoKGNoYXIgPj0gMHgyMzAwIC8qIGRpYW1ldGVyIHNpZ24gKi8gJiYgY2hhciA8PSAweDIzMDcgLyogd2F2eSBsaW5lICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzBDIC8qIGJvdHRvbSByaWdodCBjcm9wICovICYmIGNoYXIgPD0gMHgyMzFGIC8qIGJvdHRvbSByaWdodCBjb3JuZXIgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzMjQgLyogdXAgYXJyb3doZWFkIGJldHdlZW4gdHdvIGhvcml6b250YWwgYmFycyAqLyAmJiBjaGFyIDw9IDB4MjMyOCAvKiBrZXlib2FyZCAqLykgfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjMyQiAvKiBlcmFzZSB0byB0aGUgbGVmdCAqLyB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzdEIC8qIHNob3VsZGVyZWQgb3BlbiBib3ggKi8gJiYgY2hhciA8PSAweDIzOUEgLyogY2xlYXIgc2NyZWVuIHN5bWJvbCAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNCRSAvKiBkZW50aXN0cnkgc3ltYm9sIGxpZ2h0IHZlcnRpY2FsIGFuZCB0b3AgcmlnaHQgKi8gJiYgY2hhciA8PSAweDIzQ0QgLyogc3F1YXJlIGZvb3QgKi8pIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIzQ0YgLyogZWplY3Qgc3ltYm9sICovIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzRDEgLyogbWV0cmljYWwgYnJldmUgKi8gJiYgY2hhciA8PSAweDIzREIgLyogZnVzZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNFMiAvKiB3aGl0ZSB0cmFwZXppdW0gKi8gJiYgY2hhciA8PSAweDIzRkYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDb250cm9sIFBpY3R1cmVzJ10oY2hhcikgJiYgY2hhciAhPT0gMHgyNDIzIC8qIG9wZW4gYm94ICovKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBBbHBoYW51bWVyaWNzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0dlb21ldHJpYyBTaGFwZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBTeW1ib2xzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHgyNjFBIC8qIGJsYWNrIGxlZnQgcG9pbnRpbmcgaW5kZXggKi8gJiYgY2hhciA8PSAweDI2MUYpIC8qIHdoaXRlIGRvd24gcG9pbnRpbmcgaW5kZXggKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyddKGNoYXIpKSB7XG4gICAgICAgIGlmICgoY2hhciA+PSAweDJCMTIgLyogc3F1YXJlIHdpdGggdG9wIGhhbGYgYmxhY2sgKi8gJiYgY2hhciA8PSAweDJCMkYgLyogd2hpdGUgdmVydGljYWwgZWxsaXBzZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MkI1MCAvKiB3aGl0ZSBtZWRpdW0gc3RhciAqLyAmJiBjaGFyIDw9IDB4MkI1OSAvKiBoZWF2eSBjaXJjbGVkIHNhbHRpcmUgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDJCQjggLyogdXB3YXJkcyB3aGl0ZSBhcnJvdyBmcm9tIGJhciB3aXRoIGhvcml6b250YWwgYmFyICovICYmIGNoYXIgPD0gMHgyQkVCKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ByaXZhdGUgVXNlIEFyZWEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnU21hbGwgRm9ybSBWYXJpYW50cyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChjaGFyID09PSAweDIyMUUgLyogaW5maW5pdHkgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgyMjM0IC8qIHRoZXJlZm9yZSAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDIyMzUgLyogYmVjYXVzZSAqLyB8fFxuICAgICAgICAoY2hhciA+PSAweDI3MDAgLyogYmxhY2sgc2FmZXR5IHNjaXNzb3JzICovICYmIGNoYXIgPD0gMHgyNzY3IC8qIHJvdGF0ZWQgZmxvcmFsIGhlYXJ0IGJ1bGxldCAqLykgfHxcbiAgICAgICAgKGNoYXIgPj0gMHgyNzc2IC8qIGRpbmdiYXQgbmVnYXRpdmUgY2lyY2xlZCBkaWdpdCBvbmUgKi8gJiYgY2hhciA8PSAweDI3OTMgLyogZGluZ2JhdCBuZWdhdGl2ZSBjaXJjbGVkIHNhbnMtc2VyaWYgbnVtYmVyIHRlbiAqLykgfHxcbiAgICAgICAgY2hhciA9PT0gMHhGRkZDIC8qIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHhGRkZEIC8qIHJlcGxhY2VtZW50IGNoYXJhY3RlciAqLykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIHJvdGF0ZWQgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIHJvdGF0ZWQgb3JpZW50YXRpb24gaWYgaXQgaXMgZHJhd24gcm90YXRlZCB3aGVuIHRoZSBsaW5lIGlzXG4gKiBvcmllbnRlZCB2ZXJ0aWNhbGx5LCBldmVuIGlmIGJvdGggYWRqYWNlbnQgY2hhcmFjdGVycyBhcmUgdXByaWdodC4gRm9yXG4gKiBleGFtcGxlLCBhIExhdGluIGxldHRlciBpcyBkcmF3biByb3RhdGVkIGFsb25nIGEgdmVydGljYWwgbGluZS4gQSByb3RhdGVkXG4gKiBjaGFyYWN0ZXIgY2F1c2VzIGFuIGFkamFjZW50IMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVyIHRvIGJlIGRyYXduIHJvdGF0ZWQgYXMgd2VsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICEoY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIpIHx8XG4gICAgICAgICAgICAgY2hhckhhc05ldXRyYWxWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0KGNoYXI6IG51bWJlcikge1xuICAgIHJldHVybiBpc0NoYXJbJ0FyYWJpYyddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFN1cHBsZW1lbnQnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBFeHRlbmRlZC1BJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckluUlRMU2NyaXB0KGNoYXI6IG51bWJlcikge1xuICAgIC8vIE1haW4gYmxvY2tzIGZvciBIZWJyZXcsIEFyYWJpYywgVGhhYW5hIGFuZCBvdGhlciBSVEwgc2NyaXB0c1xuICAgIHJldHVybiAoY2hhciA+PSAweDA1OTAgJiYgY2hhciA8PSAweDA4RkYpIHx8XG4gICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikgfHxcbiAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyOiBudW1iZXIsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIC8vIFRoaXMgaXMgYSByb3VnaCBoZXVyaXN0aWM6IHdoZXRoZXIgd2UgXCJjYW4gcmVuZGVyXCIgYSBzY3JpcHRcbiAgICAvLyBhY3R1YWxseSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBmb250IGJlaW5nIHVzZWRcbiAgICAvLyBhbmQgd2hldGhlciBkaWZmZXJlbmNlcyBmcm9tIHRoZSBpZGVhbCByZW5kZXJpbmcgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBzZW1hbnRpY2FsbHkgc2lnbmlmaWNhbnQuXG5cbiAgICAvLyBFdmVuIGluIExhdGluIHNjcmlwdCwgd2UgXCJjYW4ndCByZW5kZXJcIiBjb21iaW5hdGlvbnMgc3VjaCBhcyB0aGUgZmlcbiAgICAvLyBsaWdhdHVyZSwgYnV0IHdlIGRvbid0IGNvbnNpZGVyIHRoYXQgc2VtYW50aWNhbGx5IHNpZ25pZmljYW50LlxuICAgIGlmICghY2FuUmVuZGVyUlRMICYmIGNoYXJJblJUTFNjcmlwdChjaGFyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoY2hhciA+PSAweDA5MDAgJiYgY2hhciA8PSAweDBERkYpIHx8XG4gICAgICAgIC8vIE1haW4gYmxvY2tzIGZvciBJbmRpYyBzY3JpcHRzIGFuZCBTaW5oYWxhXG4gICAgICAgIChjaGFyID49IDB4MEYwMCAmJiBjaGFyIDw9IDB4MTA5RikgfHxcbiAgICAgICAgLy8gTWFpbiBibG9ja3MgZm9yIFRpYmV0YW4gYW5kIE15YW5tYXJcbiAgICAgICAgaXNDaGFyWydLaG1lciddKGNoYXIpKSB7XG4gICAgICAgIC8vIFRoZXNlIGJsb2NrcyBjb3ZlciBjb21tb24gc2NyaXB0cyB0aGF0IHJlcXVpcmVcbiAgICAgICAgLy8gY29tcGxleCB0ZXh0IHNoYXBpbmcsIGJhc2VkIG9uIHVuaWNvZGUgc2NyaXB0IG1ldGFkYXRhOlxuICAgICAgICAvLyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9zL2NsZHIvdHJ1bmsvY29tbW9uL3Byb3BlcnRpZXMvc2NyaXB0TWV0YWRhdGEudHh0XG4gICAgICAgIC8vIHdoZXJlIFwiV2ViIFJhbmsgPD0gMzJcIiBcIlNoYXBpbmcgUmVxdWlyZWQgPSBZRVNcIlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ29udGFpbnNSVExUZXh0KGNoYXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKGNoYXJJblJUTFNjcmlwdChjaGFyLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0KGNoYXJzOiBzdHJpbmcsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyLmNoYXJDb2RlQXQoMCksIGNhblJlbmRlclJUTCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge2dldEFycmF5QnVmZmVyfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7aXNXb3JrZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmNvbnN0IHN0YXR1cyA9IHtcbiAgICB1bmF2YWlsYWJsZTogJ3VuYXZhaWxhYmxlJywgLy8gTm90IGxvYWRlZFxuICAgIGRlZmVycmVkOiAnZGVmZXJyZWQnLCAvLyBUaGUgcGx1Z2luIFVSTCBoYXMgYmVlbiBzcGVjaWZpZWQsIGJ1dCBsb2FkaW5nIGhhcyBiZWVuIGRlZmVycmVkXG4gICAgbG9hZGluZzogJ2xvYWRpbmcnLCAvLyByZXF1ZXN0IGluLWZsaWdodFxuICAgIGxvYWRlZDogJ2xvYWRlZCcsXG4gICAgZXJyb3I6ICdlcnJvcidcbn07XG5cbmV4cG9ydCB0eXBlIFBsdWdpblN0YXRlID0ge1xuICAgIHBsdWdpblN0YXR1czogJFZhbHVlczx0eXBlb2Ygc3RhdHVzPjtcbiAgICBwbHVnaW5VUkw6ID9zdHJpbmdcbn07XG5cbnR5cGUgRXJyb3JDYWxsYmFjayA9IChlcnJvcjogP0Vycm9yKSA9PiB2b2lkO1xudHlwZSBQbHVnaW5TdGF0ZVN5bmNDYWxsYmFjayA9IChzdGF0ZTogUGx1Z2luU3RhdGUpID0+IHZvaWQ7XG5sZXQgX2NvbXBsZXRpb25DYWxsYmFjayA9IG51bGw7XG5cbi8vVmFyaWFibGVzIGRlZmluaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbHVnaW5cbmxldCBwbHVnaW5TdGF0dXMgPSBzdGF0dXMudW5hdmFpbGFibGU7XG5sZXQgcGx1Z2luVVJMID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQgPSBmdW5jdGlvbihlcnJvcjogP0Vycm9yKSB7XG4gICAgaWYgKF9jb21wbGV0aW9uQ2FsbGJhY2spIHtcbiAgICAgICAgX2NvbXBsZXRpb25DYWxsYmFjayhlcnJvcik7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKSB7XG4gICAgZXZlbnRlZC5maXJlKG5ldyBFdmVudCgncGx1Z2luU3RhdGVDaGFuZ2UnLCB7cGx1Z2luU3RhdHVzLCBwbHVnaW5VUkx9KSk7XG59XG5cbmV4cG9ydCBjb25zdCBldmVudGVkID0gbmV3IEV2ZW50ZWQoKTtcblxuZXhwb3J0IGNvbnN0IGdldFJUTFRleHRQbHVnaW5TdGF0dXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBsdWdpblN0YXR1cztcbn07XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24oY2FsbGJhY2s6IFBsdWdpblN0YXRlU3luY0NhbGxiYWNrKSB7XG4gICAgLy8gRG8gYW4gaW5pdGlhbCBzeW5jIG9mIHRoZSBzdGF0ZVxuICAgIGNhbGxiYWNrKHtwbHVnaW5TdGF0dXMsIHBsdWdpblVSTH0pO1xuICAgIC8vIExpc3RlbiBmb3IgYWxsIGZ1dHVyZSBzdGF0ZSBjaGFuZ2VzXG4gICAgZXZlbnRlZC5vbigncGx1Z2luU3RhdGVDaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIGNhbGxiYWNrO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKCkge1xuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy51bmF2YWlsYWJsZTtcbiAgICBwbHVnaW5VUkwgPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbih1cmw6IHN0cmluZywgY2FsbGJhY2s6ID9FcnJvckNhbGxiYWNrLCBkZWZlcnJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmRlZmVycmVkIHx8IHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmxvYWRpbmcgfHwgcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UlRMVGV4dFBsdWdpbiBjYW5ub3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLicpO1xuICAgIH1cbiAgICBwbHVnaW5VUkwgPSBicm93c2VyLnJlc29sdmVVUkwodXJsKTtcbiAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMuZGVmZXJyZWQ7XG4gICAgX2NvbXBsZXRpb25DYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG5cbiAgICAvL1N0YXJ0IGRvd25sb2FkaW5nIHRoZSBwbHVnaW4gaW1tZWRpYXRlbHkgaWYgbm90IGludGVuZGluZyB0byBsYXp5LWxvYWRcbiAgICBpZiAoIWRlZmVycmVkKSB7XG4gICAgICAgIGRvd25sb2FkUlRMVGV4dFBsdWdpbigpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAocGx1Z2luU3RhdHVzICE9PSBzdGF0dXMuZGVmZXJyZWQgfHwgIXBsdWdpblVSTCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3J0bC10ZXh0LXBsdWdpbiBjYW5ub3QgYmUgZG93bmxvYWRlZCB1bmxlc3MgYSBwbHVnaW5VUkwgaXMgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5sb2FkaW5nO1xuICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG4gICAgaWYgKHBsdWdpblVSTCkge1xuICAgICAgICBnZXRBcnJheUJ1ZmZlcih7dXJsOiBwbHVnaW5VUkx9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMubG9hZGVkO1xuICAgICAgICAgICAgICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwbHVnaW46IHtcbiAgICBhcHBseUFyYWJpY1NoYXBpbmc6ID9GdW5jdGlvbixcbiAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6ID8oc3RyaW5nLCBBcnJheTxudW1iZXI+KSA9PiBBcnJheTxzdHJpbmc+LFxuICAgIHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDogPyhzdHJpbmcsIEFycmF5PG51bWJlcj4sIEFycmF5PG51bWJlcj4pID0+IEFycmF5PFtzdHJpbmcsIEFycmF5PG51bWJlcj5dPixcbiAgICBpc0xvYWRlZDogKCkgPT4gYm9vbGVhbixcbiAgICBpc0xvYWRpbmc6ICgpID0+IGJvb2xlYW4sXG4gICAgc2V0U3RhdGU6IChzdGF0ZTogUGx1Z2luU3RhdGUpID0+IHZvaWQsXG4gICAgaXNQYXJzZWQ6ICgpID0+IGJvb2xlYW4sXG4gICAgZ2V0UGx1Z2luVVJMOiAoKSA9PiA/c3RyaW5nXG59ID0ge1xuICAgIGFwcGx5QXJhYmljU2hhcGluZzogbnVsbCxcbiAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0OiBudWxsLFxuICAgIGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGVkIHx8IC8vIE1haW4gVGhyZWFkOiBsb2FkZWQgaWYgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICBwbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nICE9IG51bGw7IC8vIFdlYi13b3JrZXI6IGxvYWRlZCBpZiB0aGUgcGx1Z2luIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY29tcGlsZWRcbiAgICB9LFxuICAgIGlzTG9hZGluZygpIHsgLy8gTWFpbiBUaHJlYWQgT25seTogcXVlcnkgdGhlIGxvYWRpbmcgc3RhdHVzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSBpbiB0aGUgd29ya2VyIGNvbnRleHQuXG4gICAgICAgIHJldHVybiBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkaW5nO1xuICAgIH0sXG4gICAgc2V0U3RhdGUoc3RhdGU6IFBsdWdpblN0YXRlKSB7IC8vIFdvcmtlciB0aHJlYWQgb25seTogdGhpcyB0ZWxscyB0aGUgd29ya2VyIHRocmVhZHMgdGhhdCB0aGUgcGx1Z2luIGlzIGF2YWlsYWJsZSBvbiB0aGUgTWFpbiB0aHJlYWRcbiAgICAgICAgYXNzZXJ0KGlzV29ya2VyKCksICdDYW5ub3Qgc2V0IHRoZSBzdGF0ZSBvZiB0aGUgcnRsLXRleHQtcGx1Z2luIHdoZW4gbm90IGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQnKTtcblxuICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0ZS5wbHVnaW5TdGF0dXM7XG4gICAgICAgIHBsdWdpblVSTCA9IHN0YXRlLnBsdWdpblVSTDtcbiAgICB9LFxuICAgIGlzUGFyc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ3J0bC10ZXh0LXBsdWdpbiBpcyBvbmx5IHBhcnNlZCBvbiB0aGUgd29ya2VyLXRocmVhZHMnKTtcblxuICAgICAgICByZXR1cm4gcGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZyAhPSBudWxsICYmXG4gICAgICAgICAgICBwbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIHBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQgIT0gbnVsbDtcbiAgICB9LFxuICAgIGdldFBsdWdpblVSTCgpOiA/c3RyaW5nIHtcbiAgICAgICAgYXNzZXJ0KGlzV29ya2VyKCksICdydGwtdGV4dC1wbHVnaW4gdXJsIGNhbiBvbmx5IGJlIHF1ZXJpZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZHMnKTtcbiAgICAgICAgcmV0dXJuIHBsdWdpblVSTDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGF6eUxvYWRSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFwbHVnaW4uaXNMb2FkaW5nKCkgJiZcbiAgICAgICAgIXBsdWdpbi5pc0xvYWRlZCgpICYmXG4gICAgICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMoKSA9PT0gJ2RlZmVycmVkJ1xuICAgICkge1xuICAgICAgICBkb3dubG9hZFJUTFRleHRQbHVnaW4oKTtcbiAgICB9XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFpvb21IaXN0b3J5IGZyb20gJy4vem9vbV9oaXN0b3J5JztcbmltcG9ydCB7aXNTdHJpbmdJblN1cHBvcnRlZFNjcmlwdH0gZnJvbSAnLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNpdGlvblNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDcm9zc2ZhZGVQYXJhbWV0ZXJzID0ge1xuICAgIGZyb21TY2FsZTogbnVtYmVyLFxuICAgIHRvU2NhbGU6IG51bWJlcixcbiAgICB0OiBudW1iZXJcbn07XG5cbmNsYXNzIEV2YWx1YXRpb25QYXJhbWV0ZXJzIHtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbm93OiBudW1iZXI7XG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uO1xuXG4gICAgLy8gXCJvcHRpb25zXCIgbWF5IGFsc28gYmUgYW5vdGhlciBFdmFsdWF0aW9uUGFyYW1ldGVycyB0byBjb3B5LCBzZWUgQ3Jvc3NGYWRlZFByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGVcbiAgICBjb25zdHJ1Y3Rvcih6b29tOiBudW1iZXIsIG9wdGlvbnM/OiAqKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IHpvb207XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubm93ID0gb3B0aW9ucy5ub3c7XG4gICAgICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IG9wdGlvbnMuZmFkZUR1cmF0aW9uO1xuICAgICAgICAgICAgdGhpcy56b29tSGlzdG9yeSA9IG9wdGlvbnMuem9vbUhpc3Rvcnk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSBvcHRpb25zLnRyYW5zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdyA9IDA7XG4gICAgICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkU2NyaXB0KHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0KHN0ciwgcnRsVGV4dFBsdWdpbi5pc0xvYWRlZCgpKTtcbiAgICB9XG5cbiAgICBjcm9zc0ZhZGluZ0ZhY3RvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZmFkZUR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbigodGhpcy5ub3cgLSB0aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpIC8gdGhpcy5mYWRlRHVyYXRpb24sIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzIHtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuem9vbTtcbiAgICAgICAgY29uc3QgZnJhY3Rpb24gPSB6IC0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuY3Jvc3NGYWRpbmdGYWN0b3IoKTtcblxuICAgICAgICByZXR1cm4geiA+IHRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tID9cbiAgICAgICAgICAgIHtmcm9tU2NhbGU6IDIsIHRvU2NhbGU6IDEsIHQ6IGZyYWN0aW9uICsgKDEgLSBmcmFjdGlvbikgKiB0fSA6XG4gICAgICAgICAgICB7ZnJvbVNjYWxlOiAwLjUsIHRvU2NhbGU6IDEsIHQ6IDEgLSAoMSAtIHQpICogZnJhY3Rpb259O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZhbHVhdGlvblBhcmFtZXRlcnM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Y2xvbmUsIGV4dGVuZCwgZWFzZUN1YmljSW5PdXR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgVHJhbnNpdGlvblNwZWNpZmljYXRpb24sXG4gICAgUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBGZWF0dXJlLFxuICAgIEZlYXR1cmVTdGF0ZSxcbiAgICBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbixcbiAgICBTb3VyY2VFeHByZXNzaW9uLFxuICAgIENvbXBvc2l0ZUV4cHJlc3Npb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxudHlwZSBUaW1lUG9pbnQgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENyb3NzRmFkZWQ8VD4gPSB7XG4gICAgdG86IFQsXG4gICAgZnJvbTogVFxufTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgbnVtYmVyIG9mIGNsYXNzZXMgdGhhdCBkZWZpbmUgc3RhdGUgYW5kIGJlaGF2aW9yIGZvciBwYWludCBhbmQgbGF5b3V0IHByb3BlcnRpZXMsIG1vc3RcbiAqIGltcG9ydGFudGx5IHRoZWlyIHJlc3BlY3RpdmUgZXZhbHVhdGlvbiBjaGFpbnM6XG4gKlxuICogICAgICAgVHJhbnNpdGlvbmFibGUgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgVHJhbnNpdGlvbmluZyBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBQb3NzaWJseSBldmFsdWF0ZWQgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKlxuICogICAgICAgTGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFBvc3NpYmx5IGV2YWx1YXRlZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIGxheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqIEBtb2R1bGVcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiAgSW1wbGVtZW50YXRpb25zIG9mIHRoZSBgUHJvcGVydHlgIGludGVyZmFjZTpcbiAqXG4gKiAgKiBIb2xkIG1ldGFkYXRhIGFib3V0IGEgcHJvcGVydHkgdGhhdCdzIGluZGVwZW5kZW50IG9mIGFueSBzcGVjaWZpYyB2YWx1ZTogc3R1ZmYgbGlrZSB0aGUgdHlwZSBvZiB0aGUgdmFsdWUsXG4gKiAgICB0aGUgZGVmYXVsdCB2YWx1ZSwgZXRjLiBUaGlzIGNvbWVzIGZyb20gdGhlIHN0eWxlIHNwZWNpZmljYXRpb24gSlNPTi5cbiAqICAqIERlZmluZSBiZWhhdmlvciB0aGF0IG5lZWRzIHRvIGJlIHBvbHltb3JwaGljIGFjcm9zcyBkaWZmZXJlbnQgcHJvcGVydGllczogXCJwb3NzaWJseSBldmFsdWF0aW5nXCJcbiAqICAgIGFuIGlucHV0IHZhbHVlIChzZWUgYmVsb3cpLCBhbmQgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHR3byBwb3NzaWJseS1ldmFsdXRlZCB2YWx1ZXMuXG4gKlxuICogIFRoZSB0eXBlIGBUYCBpcyB0aGUgZnVsbHktZXZhbHVhdGVkIHZhbHVlIHR5cGUgKGUuZy4gYG51bWJlcmAsIGBzdHJpbmdgLCBgQ29sb3JgKS5cbiAqICBUaGUgdHlwZSBgUmAgaXMgdGhlIGludGVybWVkaWF0ZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHZhbHVlIHR5cGUuIFNlZSBiZWxvdy5cbiAqXG4gKiAgVGhlcmUgYXJlIHR3byBtYWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIC0tIG9uZSBmb3IgcHJvcGVydGllcyB0aGF0IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcyxcbiAqICBhbmQgb25lIGZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QuIFRoZXJlIGFyZSBhIGZldyBcInNwZWNpYWwgY2FzZVwiIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsOiBvbmUgZm9yIHByb3BlcnRpZXNcbiAqICB3aGljaCBjcm9zcy1mYWRlIGJldHdlZW4gdHdvIHZhbHVlcyByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW5nLCBvbmUgZm9yIGBoZWF0bWFwLWNvbG9yYCBhbmQgYGxpbmUtZ3JhZGllbnRgLFxuICogIGFuZCBvbmUgZm9yIGBsaWdodC1wb3NpdGlvbmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eTxULCBSPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBSO1xuICAgIGludGVycG9sYXRlKGE6IFIsIGI6IFIsIHQ6IG51bWJlcik6IFI7XG59XG5cbi8qKlxuICogIGBQcm9wZXJ0eVZhbHVlYCByZXByZXNlbnRzIHRoZSB2YWx1ZSBwYXJ0IG9mIGEgcHJvcGVydHkga2V5LXZhbHVlIHVuaXQuIEl0J3MgdXNlZCB0byByZXByZXNlbnQgYm90aFxuICogIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVzLCBhbmQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGVpciBwcm9wZXJ0eSBzdXBwb3J0cyBkYXRhLWRyaXZlblxuICogIGV4cHJlc3Npb25zLlxuICpcbiAqICBgUHJvcGVydHlWYWx1ZWAgc3RvcmVzIHRoZSByYXcgaW5wdXQgdmFsdWUgYXMgc2VlbiBpbiBhIHN0eWxlIG9yIGEgcnVudGltZSBzdHlsaW5nIEFQSSBjYWxsLCBpLmUuIG9uZSBvZiB0aGVcbiAqICBmb2xsb3dpbmc6XG4gKlxuICogICAgKiBBIGNvbnN0YW50IHZhbHVlIG9mIHRoZSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHlcbiAqICAgICogQSBmdW5jdGlvbiB3aGljaCBwcm9kdWNlcyBhIHZhbHVlIG9mIHRoYXQgdHlwZSAoYnV0IGZ1bmN0aW9ucyBhcmUgcXVhc2ktZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBleHByZXNzaW9ucylcbiAqICAgICogQW4gZXhwcmVzc2lvbiB3aGljaCBwcm9kdWNlcyBhIHZhbHVlIG9mIHRoYXQgdHlwZVxuICogICAgKiBcInVuZGVmaW5lZFwiL1wibm90IHByZXNlbnRcIiwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvcGVydHkgaXMgYXNzdW1lZCB0byB0YWtlIG9uIGl0cyBkZWZhdWx0IHZhbHVlLlxuICpcbiAqICBJbiBhZGRpdGlvbiB0byBzdG9yaW5nIHRoZSBvcmlnaW5hbCBpbnB1dCB2YWx1ZSwgYFByb3BlcnR5VmFsdWVgIGFsc28gc3RvcmVzIGEgbm9ybWFsaXplZCByZXByZXNlbnRhdGlvbixcbiAqICBlZmZlY3RpdmVseSB0cmVhdGluZyBmdW5jdGlvbnMgYXMgaWYgdGhleSBhcmUgZXhwcmVzc2lvbnMsIGFuZCBjb25zdGFudCBvciBkZWZhdWx0IHZhbHVlcyBhcyBpZiB0aGV5IGFyZVxuICogIChjb25zdGFudCkgZXhwcmVzc2lvbnMuXG4gKlxuICogIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj47XG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZDtcbiAgICBleHByZXNzaW9uOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPiwgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCkge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gbm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlID09PSB1bmRlZmluZWQgPyBwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLmRlZmF1bHQgOiB2YWx1ZSwgcHJvcGVydHkuc3BlY2lmaWNhdGlvbik7XG4gICAgfVxuXG4gICAgaXNEYXRhRHJpdmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmtpbmQgPT09ICdzb3VyY2UnIHx8IHRoaXMuZXhwcmVzc2lvbi5raW5kID09PSAnY29tcG9zaXRlJztcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcywgcGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gVHJhbnNpdGlvbmFibGUgLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBUcmFuc2l0aW9uUGFyYW1ldGVycyA9IHtcbiAgICBub3c6IFRpbWVQb2ludCxcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvblxufTtcblxuLyoqXG4gKiBQYWludCBwcm9wZXJ0aWVzIGFyZSBfdHJhbnNpdGlvbmFibGVfOiB0aGV5IGNhbiBjaGFuZ2UgaW4gYSBmbHVpZCBtYW5uZXIsIGludGVycG9sYXRpbmcgb3IgY3Jvc3MtZmFkaW5nIGJldHdlZW5cbiAqIG9sZCBhbmQgbmV3IHZhbHVlLiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGFuZCB0aGUgZGVsYXkgYmVmb3JlIGl0IGJlZ2lucywgaXMgY29uZmlndXJhYmxlLlxuICpcbiAqIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgIGlzIGEgY29tcG9zaXRpb25hbCBjbGFzcyB0aGF0IHN0b3JlcyBib3RoIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhbmQgdGhhdCB0cmFuc2l0aW9uXG4gKiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEEgYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZWAgY2FuIGNhbGN1bGF0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBldmFsdWF0aW9uIGNoYWluIGZvciBwYWludCBwcm9wZXJ0eSB2YWx1ZXM6XG4gKiBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPikge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgUHJvcGVydHlWYWx1ZShwcm9wZXJ0eSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgIHByaW9yOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPik6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZSh0aGlzLnByb3BlcnR5LCB0aGlzLnZhbHVlLCBwcmlvciwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzLnRyYW5zaXRpb24sIHRoaXMudHJhbnNpdGlvbiksIHBhcmFtZXRlcnMubm93KTtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWUodGhpcy5wcm9wZXJ0eSwgdGhpcy52YWx1ZSwgbnVsbCwge30sIDApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmFibGVgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgcGFpbnQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLiBJdCBjYW4gY2FsY3VsYXRlIHRoZSBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBUcmFuc2l0aW9uaW5nYCBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zaXRpb25hYmxlPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTKTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTLCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBfcmVtb3ZlXyBhbiBvd24gcHJvcGVydHkgaW4gdGhlIGNhc2Ugd2hlcmUgYSB2YWx1ZSBpcyBiZWluZyByZXNldFxuICAgICAgICAvLyB0byB0aGUgZGVmYXVsdDogdGhlIHRyYW5zaXRpb24gbWlnaHQgc3RpbGwgYmUgbm9uLWRlZmF1bHQuXG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSwgdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBjbG9uZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldFRyYW5zaXRpb248Uzogc3RyaW5nPihuYW1lOiBTKTogVHJhbnNpdGlvblNwZWNpZmljYXRpb24gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZXRUcmFuc2l0aW9uPFM6IHN0cmluZz4obmFtZTogUywgdmFsdWU6IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uID0gY2xvbmUodmFsdWUpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbYCR7cHJvcGVydHl9LXRyYW5zaXRpb25gXSA9IHRyYW5zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsIHByaW9yOiBUcmFuc2l0aW9uaW5nPFByb3BzPik6IFRyYW5zaXRpb25pbmc8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRyYW5zaXRpb25pbmcodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnRyYW5zaXRpb25lZChwYXJhbWV0ZXJzLCBwcmlvci5fdmFsdWVzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUcmFuc2l0aW9uaW5nKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFRyYW5zaXRpb25pbmcgLS0tLS0tLVxuXG4vKipcbiAqIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgaW1wbGVtZW50cyB0aGUgZmlyc3Qgb2YgdHdvIGludGVybWVkaWF0ZSBzdGVwcyBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBvZiBhIHBhaW50XG4gKiBwcm9wZXJ0eSB2YWx1ZS4gSW4gdGhpcyBzdGVwLCB0cmFuc2l0aW9ucyBiZXR3ZWVuIG9sZCBhbmQgbmV3IHZhbHVlcyBhcmUgaGFuZGxlZDogYXMgbG9uZyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBpblxuICogcHJvZ3Jlc3MsIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBwcmlvciB2YWx1ZSwgYW5kIGludGVycG9sYXRlcyBiZXR3ZWVuIGl0IGFuZFxuICogdGhlIG5ldyB2YWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lIGFuZCB0aGUgY29uZmlndXJlZCB0cmFuc2l0aW9uIGR1cmF0aW9uIGFuZCBkZWxheS4gVGhlIHByb2R1Y3QgaXMgdGhlIG5leHRcbiAqIHN0ZXAgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW46IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCB0eXBlIGBSYC4gU2VlIGJlbG93IGZvciBtb3JlIG9uIHRoaXMgY29uY2VwdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHByaW9yOiA/VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj47XG4gICAgYmVnaW46IFRpbWVQb2ludDtcbiAgICBlbmQ6IFRpbWVQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPixcbiAgICAgICAgICAgICAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPixcbiAgICAgICAgICAgICAgICBwcmlvcjogP1RyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgIG5vdzogVGltZVBvaW50KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmJlZ2luID0gbm93ICsgdHJhbnNpdGlvbi5kZWxheSB8fCAwO1xuICAgICAgICB0aGlzLmVuZCA9IHRoaXMuYmVnaW4gKyB0cmFuc2l0aW9uLmR1cmF0aW9uIHx8IDA7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24gJiYgKHRyYW5zaXRpb24uZGVsYXkgfHwgdHJhbnNpdGlvbi5kdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBwcmlvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPik6IFIge1xuICAgICAgICBjb25zdCBub3cgPSBwYXJhbWV0ZXJzLm5vdyB8fCAwO1xuICAgICAgICBjb25zdCBmaW5hbFZhbHVlID0gdGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5wcmlvcjtcbiAgICAgICAgaWYgKCFwcmlvcikge1xuICAgICAgICAgICAgLy8gTm8gcHJpb3IgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPiB0aGlzLmVuZCkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBmcm9tIHByaW9yIHZhbHVlIGlzIG5vdyBjb21wbGV0ZS5cbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbnMgdG8gZGF0YS1kcml2ZW4gcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICAgIC8vIFdlIHNuYXAgaW1tZWRpYXRlbHkgdG8gdGhlIGRhdGEtZHJpdmVuIHZhbHVlIHNvIHRoYXQsIHdoZW4gd2UgcGVyZm9ybSBsYXlvdXQsXG4gICAgICAgICAgICAvLyB3ZSBzZWUgdGhlIGRhdGEtZHJpdmVuIGZ1bmN0aW9uIGFuZCBjYW4gdXNlIGl0IHRvIHBvcHVsYXRlIHZlcnRleCBidWZmZXJzLlxuICAgICAgICAgICAgdGhpcy5wcmlvciA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPCB0aGlzLmJlZ2luKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2l0aW9uIGhhc24ndCBzdGFydGVkIHlldC5cbiAgICAgICAgICAgIHJldHVybiBwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZSBiZXR3ZWVuIHJlY3Vyc2l2ZWx5LWNhbGN1bGF0ZWQgcHJpb3IgdmFsdWUgYW5kIGZpbmFsLlxuICAgICAgICAgICAgY29uc3QgdCA9IChub3cgLSB0aGlzLmJlZ2luKSAvICh0aGlzLmVuZCAtIHRoaXMuYmVnaW4pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkuaW50ZXJwb2xhdGUocHJpb3IucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpLCBmaW5hbFZhbHVlLCBlYXNlQ3ViaWNJbk91dCh0KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIG9mIHR5cGUgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4+PlxuXG4vKipcbiAqIGBUcmFuc2l0aW9uaW5nYCBzdG9yZXMgYSBtYXAgb2YgYWxsIChwcm9wZXJ0eSBuYW1lLCBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgcGFpbnQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLiBJdCBjYW4gY2FsY3VsYXRlIHRoZSBwb3NzaWJseS1ldmFsdWF0ZWQgdmFsdWVzIGZvciBhbGwgb2YgdGhlbSBhdCBvbmNlLCBwcm9kdWNpbmcgYVxuICogYFBvc3NpYmx5RXZhbHVhdGVkYCBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zaXRpb25pbmc8UHJvcHM6IE9iamVjdD4ge1xuICAgIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPjtcbiAgICBfdmFsdWVzOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQb3NzaWJseUV2YWx1YXRlZCh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzW3Byb3BlcnR5XS5wcmlvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gTGF5b3V0IC0tLS0tLS1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogQmVjYXVzZSBsYXlvdXQgcHJvcGVydGllcyBhcmUgbm90IHRyYW5zaXRpb25hYmxlLCB0aGV5IGhhdmUgYSBzaW1wbGVyIHJlcHJlc2VudGF0aW9uIGFuZCBldmFsdWF0aW9uIGNoYWluIHRoYW5cbiAqIHBhaW50IHByb3BlcnRpZXM6IGBQcm9wZXJ0eVZhbHVlYHMgYXJlIHBvc3NpYmx5IGV2YWx1YXRlZCwgcHJvZHVjaW5nIHBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZXMsIHdoaWNoIGFyZSB0aGVuXG4gKiBmdWxseSBldmFsdWF0ZWQuXG4gKlxuICogYExheW91dGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFByb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXlvdXQ8UHJvcHM6IE9iamVjdD4ge1xuICAgIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPjtcbiAgICBfdmFsdWVzOiBQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIGdldFZhbHVlPFM6IHN0cmluZz4obmFtZTogUykge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fdmFsdWVzW25hbWVdLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZTxTOiBzdHJpbmc+KG5hbWU6IFMsIHZhbHVlOiAqKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSwgdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBjbG9uZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFBvc3NpYmx5RXZhbHVhdGVkKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gUG9zc2libHlFdmFsdWF0ZWQgLS0tLS0tLVxuXG4vKipcbiAqIFwiUG9zc2libHkgZXZhbHVhdGVkIHZhbHVlXCIgaXMgYW4gaW50ZXJtZWRpYXRlIHN0YWdlIGluIHRoZSBldmFsdWF0aW9uIGNoYWluIGZvciBib3RoIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydHlcbiAqIHZhbHVlcy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzdGFnZSBpcyB0byBvcHRpbWl6ZSBhd2F5IHVubmVjZXNzYXJ5IHJlY2FsY3VsYXRpb25zIGZvciBkYXRhLWRyaXZlbiBwcm9wZXJ0aWVzLiBDb2RlXG4gKiB3aGljaCB1c2VzIGRhdGEtZHJpdmVuIHByb3BlcnR5IHZhbHVlcyBtdXN0IGFzc3VtZSB0aGF0IHRoZSB2YWx1ZSBpcyBkZXBlbmRlbnQgb24gZmVhdHVyZSBkYXRhLCBhbmQgcmVxdWVzdCB0aGF0IGl0XG4gKiBiZSBldmFsdWF0ZWQgZm9yIGVhY2ggZmVhdHVyZS4gQnV0IHdoZW4gdGhhdCBwcm9wZXJ0eSB2YWx1ZSBpcyBpbiBmYWN0IGEgY29uc3RhbnQgb3IgY2FtZXJhIGZ1bmN0aW9uLCB0aGUgY2FsY3VsYXRpb25cbiAqIHdpbGwgbm90IGFjdHVhbGx5IGRlcGVuZCBvbiB0aGUgZmVhdHVyZSwgYW5kIHdlIGNhbiBiZW5lZml0IGZyb20gcmV0dXJuaW5nIHRoZSBwcmlvciByZXN1bHQgb2YgaGF2aW5nIGRvbmUgdGhlXG4gKiBldmFsdWF0aW9uIG9uY2UsIGFoZWFkIG9mIHRpbWUsIGluIGFuIGludGVybWVkaWF0ZSBzdGVwIHdob3NlIGlucHV0cyBhcmUganVzdCB0aGUgdmFsdWUgYW5kIFwiZ2xvYmFsXCIgcGFyYW1ldGVyc1xuICogc3VjaCBhcyBjdXJyZW50IHpvb20gbGV2ZWwuXG4gKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVgIHJlcHJlc2VudHMgdGhlIHRocmVlIHBvc3NpYmxlIG91dGNvbWVzIG9mIHRoaXMgc3RlcDogaWYgdGhlIGlucHV0IHZhbHVlIHdhcyBhIGNvbnN0YW50IG9yXG4gKiBjYW1lcmEgZXhwcmVzc2lvbiwgdGhlbiB0aGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiByZXN1bHQgaXMgYSBjb25zdGFudCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgaW5wdXQgdmFsdWUgd2FzIGVpdGhlclxuICogYSBzb3VyY2Ugb3IgY29tcG9zaXRlIGV4cHJlc3Npb24sIGFuZCB3ZSBtdXN0IGRlZmVyIGZpbmFsIGV2YWx1YXRpb24gdW50aWwgc3VwcGxpZWQgYSBmZWF0dXJlLiBXZSBzZXBhcmF0ZVxuICogdGhlIHNvdXJjZSBhbmQgY29tcG9zaXRlIGNhc2VzIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSB3aGVuIGdlbmVyYXRpbmcgR0wgYXR0cmlidXRlcywgYnVmZmVycywgYW5kXG4gKiB1bmlmb3Jtcy5cbiAqXG4gKiBOb3RlIHRoYXQgYFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVgIChhbmQgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAsIGJlbG93KSBhcmUgX25vdF8gdXNlZCBmb3IgcHJvcGVydGllcyB0aGF0XG4gKiBkbyBub3QgYWxsb3cgZGF0YS1kcml2ZW4gdmFsdWVzLiBGb3Igc3VjaCBwcm9wZXJ0aWVzLCB3ZSBrbm93IHRoYXQgdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IGlzIGFsd2F5cyBhIGNvbnN0YW50XG4gKiBzY2FsYXIgdmFsdWUuIFNlZSBiZWxvdy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4gPVxuICAgIHwge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiBUfVxuICAgIHwgU291cmNlRXhwcmVzc2lvblxuICAgIHwgQ29tcG9zaXRlRXhwcmVzc2lvbjtcblxuLyoqXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlYCBpcyB1c2VkIGZvciBkYXRhLWRyaXZlbiBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5IHZhbHVlcy4gSXQgaG9sZHMgYVxuICogYFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVgIGFuZCB0aGUgYEdsb2JhbFByb3BlcnRpZXNgIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIGl0LiBZb3UncmUgbm90IGFsbG93ZWQgdG8gc3VwcGx5XG4gKiBhIGRpZmZlcmVudCBzZXQgb2YgYEdsb2JhbFByb3BlcnRpZXNgIHdoZW4gcGVyZm9ybWluZyB0aGUgZmluYWwgZXZhbHVhdGlvbiBiZWNhdXNlIHRoZXkgd291bGQgYmUgaWdub3JlZCBpbiB0aGVcbiAqIGNhc2Ugd2hlcmUgdGhlIGlucHV0IHZhbHVlIHdhcyBhIGNvbnN0YW50IG9yIGNhbWVyYSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICBwcm9wZXJ0eTogRGF0YURyaXZlblByb3BlcnR5PFQ+O1xuICAgIHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+O1xuICAgIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IERhdGFEcml2ZW5Qcm9wZXJ0eTxUPiwgdmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIGlzQ29uc3RhbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCc7XG4gICAgfVxuXG4gICAgY29uc3RhbnRPcih2YWx1ZTogVCk6IFQge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsIHRoaXMucGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzLCBhbmQgdmFsdWVzIG9mIHR5cGUgYFJgLlxuICpcbiAqIEZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgYWxsb3cgZGF0YS1kcml2ZW4gdmFsdWVzLCBgUmAgaXMgYSBzY2FsYXIgdHlwZSBzdWNoIGFzIGBudW1iZXJgLCBgc3RyaW5nYCwgb3IgYENvbG9yYC5cbiAqIEZvciBkYXRhLWRyaXZlbiBwcm9wZXJ0aWVzLCBpdCBpcyBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlYC4gQ3JpdGljYWxseSwgdGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIHNldCB1cFxuICogaW4gYSB3YXkgdGhhdCBhbGxvd3MgZmxvdyB0byBrbm93IHdoaWNoIG9mIHRoZXNlIHR3byBjYXNlcyBhcHBsaWVzIGZvciBhbnkgZ2l2ZW4gcHJvcGVydHkgbmFtZSwgYW5kIGlmIHlvdSBhdHRlbXB0XG4gKiB0byB1c2UgYSBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlYCBhcyBpZiBpdCB3YXMgYSBzY2FsYXIsIG9yIHZpY2UgdmVyc2EsIHlvdSB3aWxsIGdldCBhIHR5cGUgZXJyb3IuIChIb3dldmVyLFxuICogdGhlcmUncyBhdCBsZWFzdCBvbmUgY2FzZSBpbiB3aGljaCBmbG93IGZhaWxzIHRvIHByb2R1Y2UgYSB0eXBlIGVycm9yIHRoYXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZjogaW4gYSBjb250ZXh0IHN1Y2hcbiAqIGFzIGBsYXllci5wYWludC5nZXQoJ2Zvby1vcGFjaXR5JykgPT09IDBgLCBpZiBgZm9vLW9wYWNpdHlgIGlzIGRhdGEtZHJpdmVuLCB0aGFuIHRoZSBsZWZ0LWhhbmQgc2lkZSBpcyBvZiB0eXBlXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj5gLCBidXQgZmxvdyB3aWxsIG5vdCBjb21wbGFpbiBhYm91dCBjb21wYXJpbmcgdGhpcyB0byBhIG51bWJlciB1c2luZyBgPT09YC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjM1OS4pXG4gKlxuICogVGhlcmUncyBhbHNvIGEgdGhpcmQsIHNwZWNpYWwgY2FzZSBwb3NzaWJsaXR5IGZvciBgUmA6IGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCBpdCdzIGA/Q3Jvc3NGYWRlZDxUPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxQcm9wcywgPFQsIFI+KHA6IFByb3BlcnR5PFQsIFI+KSA9PiBSPj5cblxuLyoqXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBSYCkgcGFpcnMgZm9yIHBhaW50IG9yIGxheW91dCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUG9zc2libHlFdmFsdWF0ZWQ8UHJvcHM6IE9iamVjdD4ge1xuICAgIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPjtcbiAgICBfdmFsdWVzOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgZ2V0PFM6IHN0cmluZz4obmFtZTogUyk6ICRFbGVtZW50VHlwZTxQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzPiwgUz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzW25hbWVdO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBwcm9wZXJ0aWVzIHRoYXQgZG8gbm90IHBlcm1pdCBkYXRhLWRyaXZlbiAoc291cmNlIG9yIGNvbXBvc2l0ZSkgZXhwcmVzc2lvbnMuXG4gKiBUaGlzIHJlc3RyaWN0aW9uIGFsbG93cyB1cyB0byBkZWNsYXJlIHN0YXRpY2FsbHkgdGhhdCB0aGUgcmVzdWx0IG9mIHBvc3NpYmx5IGV2YWx1YXRpbmcgdGhpcyBraW5kIG9mIHByb3BlcnR5XG4gKiBpcyBpbiBmYWN0IGFsd2F5cyB0aGUgc2NhbGFyIHR5cGUgYFRgLCBhbmQgY2FuIGJlIHVzZWQgd2l0aG91dCBmdXJ0aGVyIGV2YWx1YXRpbmcgdGhlIHZhbHVlIG9uIGEgcGVyLWZlYXR1cmUgYmFzaXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFDb25zdGFudFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgVD4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycyk6IFQge1xuICAgICAgICBhc3NlcnQoIXZhbHVlLmlzRGF0YURyaXZlbigpKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogVCwgYjogVCwgdDogbnVtYmVyKTogVCB7XG4gICAgICAgIGNvbnN0IGludGVycDogPyhhOiBULCBiOiBULCB0OiBudW1iZXIpID0+IFQgPSAoaW50ZXJwb2xhdGU6IGFueSlbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO1xuICAgICAgICBpZiAoaW50ZXJwKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJwKGEsIGIsIHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgcHJvcGVydGllcyB0aGF0IHBlcm1pdCBkYXRhLWRyaXZlbiAoc291cmNlIG9yIGNvbXBvc2l0ZSkgZXhwcmVzc2lvbnMuXG4gKiBUaGUgcmVzdWx0IG9mIHBvc3NpYmx5IGV2YWx1YXRpbmcgdGhpcyBraW5kIG9mIHByb3BlcnR5IGlzIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD5gOyBvYnRhaW5pbmdcbiAqIGEgc2NhbGFyIHZhbHVlIGBUYCByZXF1aXJlcyBmdXJ0aGVyIGV2YWx1YXRpb24gb24gYSBwZXItZmVhdHVyZSBiYXNpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YURyaXZlblByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+PiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG4gICAgb3ZlcnJpZGVzOiA/T2JqZWN0O1xuXG4gICAgY29uc3RydWN0b3Ioc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24sIG92ZXJyaWRlcz86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyA9IG92ZXJyaWRlcztcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50JyB8fCB2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjYW1lcmEnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycywgKG51bGw6IGFueSksIHt9LCBhdmFpbGFibGVJbWFnZXMpfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPixcbiAgICAgICAgICAgICAgICBiOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sXG4gICAgICAgICAgICAgICAgdDogbnVtYmVyKTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICAgICAgLy8gSWYgZWl0aGVyIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZSBpcyBub24tY29uc3RhbnQsIGdpdmUgdXA6IHdlIGFyZW4ndCBhYmxlIHRvIGludGVycG9sYXRlIGRhdGEtZHJpdmVuIHZhbHVlcy5cbiAgICAgICAgaWYgKGEudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCBiLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgc29sZWx5IGZvciBmaWxsLW91dGxpbmUtY29sb3IuIFRoZSB1bmRlZmluZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IGhhbmRsZWQgaW5cbiAgICAgICAgLy8gRmlsbFN0eWxlTGF5ZXIjcmVjYWxjdWxhdGUsIHdoaWNoIHNldHMgZmlsbC1vdXRsaW5lLWNvbG9yIHRvIHRoZSBmaWxsLWNvbG9yIHZhbHVlIGlmIHRoZSBmb3JtZXJcbiAgICAgICAgLy8gaXMgYSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUgY29udGFpbmluZyBhIGNvbnN0YW50IHVuZGVmaW5lZCB2YWx1ZS4gSW4gYWRkaXRpb24gdG8gdGhlXG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBoZXJlLCB0aGUgb3RoZXIgc291cmNlIG9mIGEgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlIGNvbnRhaW5pbmcgYSBjb25zdGFudFxuICAgICAgICAvLyB1bmRlZmluZWQgdmFsdWUgaXMgdGhlIFwiZGVmYXVsdCB2YWx1ZVwiIGZvciBmaWxsLW91dGxpbmUtY29sb3IgaGVsZCBpblxuICAgICAgICAvLyBgUHJvcGVydGllcyNkZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNgLCB3aGljaCBzZXJ2ZXMgYXMgdGhlIHByb3RvdHlwZSBvZlxuICAgICAgICAvLyBgUG9zc2libHlFdmFsdWF0ZWQjX3ZhbHVlc2AuXG4gICAgICAgIGlmIChhLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYi52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6ICh1bmRlZmluZWQ6IGFueSl9LCBhLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogaW50ZXJwKGEudmFsdWUudmFsdWUsIGIudmFsdWUudmFsdWUsIHQpfSwgYS5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFQge1xuICAgICAgICBpZiAodmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmV2YWx1YXRlKHBhcmFtZXRlcnMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciAgZGF0YSBkcml2ZW4gYGxpbmUtcGF0dGVybmAgd2hpY2ggYXJlIHRyYW5zaXRpb25lZCBieSBjcm9zcy1mYWRpbmdcbiAqIHJhdGhlciB0aGFuIGludGVycG9sYXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxUPiBleHRlbmRzIERhdGFEcml2ZW5Qcm9wZXJ0eTw/Q3Jvc3NGYWRlZDxUPj4ge1xuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPiwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IHVuZGVmaW5lZH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VFeHByZXNzaW9uID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlID09PSAncmVzb2x2ZWRJbWFnZSc7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudFZhbHVlID0gaXNJbWFnZUV4cHJlc3Npb24gJiYgdHlwZW9mIGV2YWx1YXRlZFZhbHVlICE9PSAnc3RyaW5nJyA/IGV2YWx1YXRlZFZhbHVlLm5hbWUgOiBldmFsdWF0ZWRWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdGhpcy5fY2FsY3VsYXRlKGNvbnN0YW50VmFsdWUsIGNvbnN0YW50VmFsdWUsIGNvbnN0YW50VmFsdWUsIHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiBjb25zdGFudH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbWVyYVZhbCA9IHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tIC0gMS4wfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbX0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb20gKyAxLjB9KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGNhbWVyYVZhbH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiwgZ2xvYmFsczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICBpZiAodmFsdWUua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUuZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIC0gMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pICsgMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBDcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIGAqLXBhdHRlcm5gIGFuZCBgbGluZS1kYXNoYXJyYXlgLCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgP0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCA/Q3Jvc3NGYWRlZDxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50ID0gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlKGNvbnN0YW50LCBjb25zdGFudCwgY29uc3RhbnQsIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KCF2YWx1ZS5pc0RhdGFEcml2ZW4oKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlKFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tIC0gMS4wKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKE1hdGguZmxvb3IocGFyYW1ldGVycy56b29tICsgMS4wKSwgcGFyYW1ldGVycykpLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NhbGN1bGF0ZShtaW46IFQsIG1pZDogVCwgbWF4OiBULCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycyk6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogP0Nyb3NzRmFkZWQ8VD4pOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBgaGVhdG1hcC1jb2xvcmAgYW5kIGBsaW5lLWdyYWRpZW50YC4gSW50ZXJwb2xhdGlvbiBpcyBhIG5vLW9wLCBhbmRcbiAqIGV2YWx1YXRpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW4gb3JkZXIgdG8gaW5kaWNhdGUgaXRzIHByZXNlbmNlLCBidXQgdGhlIHJlYWxcbiAqIGV2YWx1YXRpb24gaGFwcGVucyBpbiBTdHlsZUxheWVyIGNsYXNzZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY2xhc3MgQ29sb3JSYW1wUHJvcGVydHkgaW1wbGVtZW50cyBQcm9wZXJ0eTxDb2xvciwgYm9vbGVhbj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPENvbG9yLCBib29sZWFuPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiBmYWxzZTsgfVxufVxuXG4vKipcbiAqIGBQcm9wZXJ0aWVzYCBob2xkcyBvYmplY3RzIGNvbnRhaW5pbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBsYXlvdXQgb3IgcGFpbnQgcHJvcGVydHkgc2V0IG9mIGEgZ2l2ZW5cbiAqIGxheWVyIHR5cGUuIFRoZXNlIG9iamVjdHMgYXJlIGltbXV0YWJsZSwgYW5kIHRoZXkgYXJlIHVzZWQgYXMgdGhlIHByb3RvdHlwZXMgZm9yIHRoZSBgX3ZhbHVlc2AgbWVtYmVycyBvZlxuICogYFRyYW5zaXRpb25hYmxlYCwgYFRyYW5zaXRpb25pbmdgLCBgTGF5b3V0YCwgYW5kIGBQb3NzaWJseUV2YWx1YXRlZGAuIFRoaXMgYWxsb3dzIHRoZXNlIGNsYXNzZXMgdG8gYXZvaWRcbiAqIGRvaW5nIHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgcHJvcGVydHkgaGFzIG5vIGV4cGxpY2l0IHZhbHVlIHNldCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gdGFrZVxuICogb24gdGhlIGRlZmF1bHQgdmFsdWU6IHVzaW5nIGBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpYCwgdGhleSBjYW4gaXRlcmF0ZSBvdmVyXG4gKiBvbmx5IHRoZSBfb3duXyBwcm9wZXJ0aWVzIG9mIGBfdmFsdWVzYCwgc2tpcHBpbmcgcmVwZWF0ZWQgY2FsY3VsYXRpb24gb2YgdHJhbnNpdGlvbnMgYW5kIHBvc3NpYmxlL2ZpbmFsXG4gKiBldmFsdWF0aW9ucyBmb3IgZGVmYXVsdHMsIHRoZSByZXN1bHQgb2Ygd2hpY2ggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnRpZXM8UHJvcHM6IE9iamVjdD4ge1xuICAgIHByb3BlcnRpZXM6IFByb3BzO1xuICAgIGRlZmF1bHRQcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzOiBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBkZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlczogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgb3ZlcnJpZGFibGVQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcHMpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMgPSAoe306IGFueSk7XG4gICAgICAgIHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzID0gKFtdOiBhbnkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnRpZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKHByb3Auc3BlY2lmaWNhdGlvbi5vdmVycmlkYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFByb3BlcnR5VmFsdWUgPSB0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIG5ldyBQcm9wZXJ0eVZhbHVlKHByb3AsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUocHJvcCk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbcHJvcGVydHldID1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlLnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0eVZhbHVlLnBvc3NpYmx5RXZhbHVhdGUoKHt9OiBhbnkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0RhdGFEcml2ZW5Qcm9wZXJ0eScsIERhdGFEcml2ZW5Qcm9wZXJ0eSk7XG5yZWdpc3RlcignRGF0YUNvbnN0YW50UHJvcGVydHknLCBEYXRhQ29uc3RhbnRQcm9wZXJ0eSk7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eScsIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkpO1xucmVnaXN0ZXIoJ0Nyb3NzRmFkZWRQcm9wZXJ0eScsIENyb3NzRmFkZWRQcm9wZXJ0eSk7XG5yZWdpc3RlcignQ29sb3JSYW1wUHJvcGVydHknLCBDb2xvclJhbXBQcm9wZXJ0eSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2VuZHNXaXRoLCBmaWx0ZXJPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVTdHlsZSxcbiAgICB2YWxpZGF0ZUxheW91dFByb3BlcnR5LFxuICAgIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSxcbiAgICBlbWl0VmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TGF5b3V0LCBUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUHJvcGVydGllcywgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZUZpbHRlcn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgdHlwZSB7VHJhbnNpdGlvblBhcmFtZXRlcnMsIFByb3BlcnR5VmFsdWV9IGZyb20gJy4vcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycywge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXllckludGVyZmFjZX0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuL3N0eWxlJztcblxuY29uc3QgVFJBTlNJVElPTl9TVUZGSVggPSAnLXRyYW5zaXRpb24nO1xuXG5jbGFzcyBTdHlsZUxheWVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YTogbWl4ZWQ7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHNvdXJjZUxheWVyOiA/c3RyaW5nO1xuICAgIG1pbnpvb206ID9udW1iZXI7XG4gICAgbWF4em9vbTogP251bWJlcjtcbiAgICBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24gfCB2b2lkO1xuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB8ICdub25lJyB8IHZvaWQ7XG4gICAgX2Nyb3NzZmFkZVBhcmFtZXRlcnM6IENyb3NzZmFkZVBhcmFtZXRlcnM7XG5cbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxhbnk+O1xuICAgICtsYXlvdXQ6IG1peGVkO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPGFueT47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxhbnk+O1xuICAgICtwYWludDogbWl4ZWQ7XG5cbiAgICBfZmVhdHVyZUZpbHRlcjogRmVhdHVyZUZpbHRlcjtcblxuICAgICtxdWVyeVJhZGl1czogKGJ1Y2tldDogQnVja2V0KSA9PiBudW1iZXI7XG4gICAgK3F1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU6IChxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSA9PiBib29sZWFuIHwgbnVtYmVyO1xuXG4gICAgK29uQWRkOiA/KG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZTogPyhtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgcHJvcGVydGllczogJFJlYWRPbmx5PHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPCo+LCBwYWludD86IFByb3BlcnRpZXM8Kj59Pikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcbiAgICAgICAgdGhpcy50eXBlID0gbGF5ZXIudHlwZTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZUZpbHRlciA9ICgpID0+IHRydWU7XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdjdXN0b20nKSByZXR1cm47XG5cbiAgICAgICAgbGF5ZXIgPSAoKGxheWVyOiBhbnkpOiBMYXllclNwZWNpZmljYXRpb24pO1xuXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBsYXllci5tZXRhZGF0YTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbGF5ZXIubWluem9vbTtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gbGF5ZXIubWF4em9vbTtcblxuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IGxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXIgPSBsYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IGxheWVyLmZpbHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxheW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQgPSBuZXcgTGF5b3V0KHByb3BlcnRpZXMubGF5b3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50ID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMucGFpbnQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWludFByb3BlcnR5KHByb3BlcnR5LCBsYXllci5wYWludFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXIubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIubGF5b3V0W3Byb3BlcnR5XSwge3ZhbGlkYXRlOiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBnZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ubGF5b3V0LiR7bmFtZX1gO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGF5b3V0UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBtaXhlZCwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBsYXllcnMuJHt0aGlzLmlkfS5wYWludC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVBhaW50UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksICh2YWx1ZTogYW55KSB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFibGUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWRQcm9wZXJ0eSA9IHRyYW5zaXRpb25hYmxlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS10eXBlXCJdID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xuICAgICAgICAgICAgY29uc3Qgd2FzRGF0YURyaXZlbiA9IHRyYW5zaXRpb25hYmxlLnZhbHVlLmlzRGF0YURyaXZlbigpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0cmFuc2l0aW9uYWJsZS52YWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGFEcml2ZW4gPSBuZXdWYWx1ZS5pc0RhdGFEcml2ZW4oKTtcblxuICAgICAgICAgICAgLy8gaWYgYSBjcm9zcy1mYWRlZCB2YWx1ZSBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGljb25zIGdldCBhZGRlZCB0byBlYWNoIHRpbGUncyBpY29uQXRsYXNcbiAgICAgICAgICAgIC8vIHNvIGEgY2FsbCB0byBfdXBkYXRlTGF5ZXIgaXMgbmVjZXNzYXJ5LCBhbmQgd2UgcmV0dXJuIHRydWUgZnJvbSB0aGlzIGZ1bmN0aW9uIHNvIGl0IGdldHMgY2FsbGVkIGluXG4gICAgICAgICAgICAvLyBTdHlsZSNzZXRQYWludFByb3BlcnR5XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRhRHJpdmVuIHx8IHdhc0RhdGFEcml2ZW4gfHwgaXNDcm9zc0ZhZGVkUHJvcGVydHkgfHwgdGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUoXzogc3RyaW5nKSB7XG4gICAgICAgIC8vIE5vLW9wOyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXMuXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNIaWRkZW4oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbnpvb20gJiYgem9vbSA8IHRoaXMubWluem9vbSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm1heHpvb20gJiYgem9vbSA+PSB0aGlzLm1heHpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5ID09PSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl91bmV2YWx1YXRlZExheW91dCkge1xuICAgICAgICAgICAgKHRoaXM6IGFueSkubGF5b3V0ID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXM6IGFueSkucGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBhbnkgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLmlkLFxuICAgICAgICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICAnc291cmNlJzogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAnc291cmNlLWxheWVyJzogdGhpcy5zb3VyY2VMYXllcixcbiAgICAgICAgICAgICdtZXRhZGF0YSc6IHRoaXMubWV0YWRhdGEsXG4gICAgICAgICAgICAnbWluem9vbSc6IHRoaXMubWluem9vbSxcbiAgICAgICAgICAgICdtYXh6b29tJzogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgJ2ZpbHRlcic6IHRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgJ2xheW91dCc6IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ICYmIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgJ3BhaW50JzogdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCAmJiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgb3V0cHV0LmxheW91dCA9IG91dHB1dC5sYXlvdXQgfHwge307XG4gICAgICAgICAgICBvdXRwdXQubGF5b3V0LnZpc2liaWxpdHkgPSB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KG91dHB1dCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIShrZXkgPT09ICdsYXlvdXQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICEoa2V5ID09PSAncGFpbnQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwga2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IG1peGVkLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGxheWVyVHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb2JqZWN0S2V5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX1cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlzM0QoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGlzU3RhdGVEZXBlbmRlbnQoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gKHRoaXM6IGFueSkucGFpbnQuX3ZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpczogYW55KS5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnIHx8IHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb21wb3NpdGUnKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmlzU3RhdGVEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuLy8gTm90ZTogYWxsIFwic2l6ZXNcIiBhcmUgbWVhc3VyZWQgaW4gYnl0ZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG5jb25zdCB2aWV3VHlwZXMgPSB7XG4gICAgJ0ludDgnOiBJbnQ4QXJyYXksXG4gICAgJ1VpbnQ4JzogVWludDhBcnJheSxcbiAgICAnSW50MTYnOiBJbnQxNkFycmF5LFxuICAgICdVaW50MTYnOiBVaW50MTZBcnJheSxcbiAgICAnSW50MzInOiBJbnQzMkFycmF5LFxuICAgICdVaW50MzInOiBVaW50MzJBcnJheSxcbiAgICAnRmxvYXQzMic6IEZsb2F0MzJBcnJheVxufTtcblxuZXhwb3J0IHR5cGUgVmlld1R5cGUgPSAkS2V5czx0eXBlb2Ygdmlld1R5cGVzPjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3Qge1xuICAgIF9wb3MxOiBudW1iZXI7XG4gICAgX3BvczI6IG51bWJlcjtcbiAgICBfcG9zNDogbnVtYmVyO1xuICAgIF9wb3M4OiBudW1iZXI7XG4gICAgK19zdHJ1Y3RBcnJheTogU3RydWN0QXJyYXk7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBvZiBzdWIgY2xhc3Nlcy5cbiAgICBzaXplOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cnVjdEFycmF5fSBzdHJ1Y3RBcnJheSBUaGUgU3RydWN0QXJyYXkgdGhlIHN0cnVjdCBpcyBzdG9yZWQgaW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3QgaW4gdGhlIFN0cnVjdEFycmF5LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RydWN0QXJyYXk6IFN0cnVjdEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICh0aGlzOiBhbnkpLl9zdHJ1Y3RBcnJheSA9IHN0cnVjdEFycmF5O1xuICAgICAgICB0aGlzLl9wb3MxID0gaW5kZXggKiB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3BvczIgPSB0aGlzLl9wb3MxIC8gMjtcbiAgICAgICAgdGhpcy5fcG9zNCA9IHRoaXMuX3BvczEgLyA0O1xuICAgICAgICB0aGlzLl9wb3M4ID0gdGhpcy5fcG9zMSAvIDg7XG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0NBUEFDSVRZID0gMTI4O1xuY29uc3QgUkVTSVpFX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheU1lbWJlciA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogVmlld1R5cGUsXG4gICAgY29tcG9uZW50czogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheUxheW91dCA9IHtcbiAgICBtZW1iZXJzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGFsaWdubWVudDogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkU3RydWN0QXJyYXkgPSB7XG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG59O1xuXG4vKipcbiAqIGBTdHJ1Y3RBcnJheWAgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb3ZlciBgQXJyYXlCdWZmZXJgIGFuZCBgVHlwZWRBcnJheWBcbiAqIG1ha2luZyBpdCBiZWhhdmUgbGlrZSBhbiBhcnJheSBvZiB0eXBlZCBzdHJ1Y3RzLlxuICpcbiAqIENvbmNlcHR1YWxseSwgYSBTdHJ1Y3RBcnJheSBpcyBjb21wcmlzZWQgb2YgZWxlbWVudHMsIGkuZS4sIGluc3RhbmNlcyBvZiBpdHNcbiAqIGFzc29jaWF0ZWQgc3RydWN0IHR5cGUuIEVhY2ggcGFydGljdWxhciBzdHJ1Y3QgdHlwZSwgdG9nZXRoZXIgd2l0aCBhblxuICogYWxpZ25tZW50IHNpemUsIGRldGVybWluZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYSBTdHJ1Y3RBcnJheSB3aG9zZSBlbGVtZW50c1xuICogYXJlIG9mIHRoYXQgdHlwZS4gIFRodXMsIGZvciBlYWNoIHN1Y2ggbGF5b3V0IHRoYXQgd2UgbmVlZCwgd2UgaGF2ZVxuICogYSBjb3Jyc2Vwb25kaW5nIFN0cnVjdEFycmF5TGF5b3V0IGNsYXNzLCBpbmhlcml0aW5nIGZyb20gU3RydWN0QXJyYXkgYW5kXG4gKiBpbXBsZW1lbnRpbmcgYGVtcGxhY2VCYWNrKClgIGFuZCBgX3JlZnJlc2hWaWV3cygpYC5cbiAqXG4gKiBJbiBzb21lIGNhc2VzLCB3aGVyZSB3ZSBuZWVkIHRvIGFjY2VzcyBwYXJ0aWN1bGFyIGVsZW1lbnRzIG9mIGEgU3RydWN0QXJyYXksXG4gKiB3ZSBpbXBsZW1lbnQgYSBtb3JlIHNwZWNpZmljIHN1YmNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBvbmUgb2YgdGhlXG4gKiBTdHJ1Y3RBcnJheUxheW91dHMgYW5kIGFkZHMgYSBgZ2V0KGkpOiBUYCBhY2Nlc3NvciB0aGF0IHJldHVybnMgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgcHJveGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBzcGFjZSBmb3IgdGhlXG4gKiBpLXRoIGVsZW1lbnQuICBUaGlzIGFmZm9yZHMgdGhlIGNvbnZpZW5jZSBvZiB3b3JraW5nIHdpdGggKHNlZW1pbmdseSkgcGxhaW5cbiAqIEphdmFzY3JpcHQgb2JqZWN0cyB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBzZXJpYWxpemluZy9kZXNlcmlhbGl6aW5nIHRoZW1cbiAqIGludG8gQXJyYXlCdWZmZXJzIGZvciBlZmZpY2llbnQgd2ViIHdvcmtlciB0cmFuc2Zlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheSB7XG4gICAgY2FwYWNpdHk6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBpc1RyYW5zZmVycmVkOiBib29sZWFuO1xuICAgIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICB1aW50ODogVWludDhBcnJheTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlLlxuICAgIG1lbWJlcnM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBieXRlc1BlckVsZW1lbnQ6IG51bWJlcjtcbiAgICArZW1wbGFjZUJhY2s6IEZ1bmN0aW9uO1xuICAgICtlbXBsYWNlOiBGdW5jdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlzVHJhbnNmZXJyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IC0xO1xuICAgICAgICB0aGlzLnJlc2l6ZSgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBTdHJ1Y3RBcnJheSBpbnN0YW5jZS4gIFNlcmlhbGl6ZXMgYm90aCB0aGUgcmF3IGRhdGEgYW5kIHRoZVxuICAgICAqIG1ldGFkYXRhIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGUgU3RydWN0QXJyYXkgYmFzZSBjbGFzcyBkdXJpbmdcbiAgICAgKiBkZXNlcmlhbGl6YXRpb24uXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZShhcnJheTogU3RydWN0QXJyYXksIHRyYW5zZmVyYWJsZXM/OiBBcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZFN0cnVjdEFycmF5IHtcbiAgICAgICAgYXNzZXJ0KCFhcnJheS5pc1RyYW5zZmVycmVkKTtcblxuICAgICAgICBhcnJheS5fdHJpbSgpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICBhcnJheS5pc1RyYW5zZmVycmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChhcnJheS5hcnJheUJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVuZ3RoOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgICBhcnJheUJ1ZmZlcjogYXJyYXkuYXJyYXlCdWZmZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBTZXJpYWxpemVkU3RydWN0QXJyYXkpIHtcbiAgICAgICAgY29uc3Qgc3RydWN0QXJyYXkgPSBPYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtcbiAgICAgICAgc3RydWN0QXJyYXkuYXJyYXlCdWZmZXIgPSBpbnB1dC5hcnJheUJ1ZmZlcjtcbiAgICAgICAgc3RydWN0QXJyYXkubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBzdHJ1Y3RBcnJheS5jYXBhY2l0eSA9IGlucHV0LmFycmF5QnVmZmVyLmJ5dGVMZW5ndGggLyBzdHJ1Y3RBcnJheS5ieXRlc1BlckVsZW1lbnQ7XG4gICAgICAgIHN0cnVjdEFycmF5Ll9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgcmV0dXJuIHN0cnVjdEFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgYXJyYXkgdG8gZGlzY2FyZCB1bnVzZWQgY2FwYWNpdHkuXG4gICAgICovXG4gICAgX3RyaW0oKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5sZW5ndGggKiB0aGlzLmJ5dGVzUGVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgdG8gMCB3aXRob3V0IGRlLWFsbG9jYXRpbmcgY2FwY2FjaXR5LlxuICAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcnJheS5cbiAgICAgKiBJZiBgbmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aCB0aGVuIGFkZGl0aW9uYWwgZWxlbWVudHMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGFyZSBhZGRlZC5cbiAgICAgKiBJZiBgbmAgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aCB0aGVuIHRoZSBhcnJheSB3aWxsIGJlIHJlZHVjZWQgdG8gdGhlIGZpcnN0IGBuYCBlbGVtZW50cy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbmV3IHNpemUgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHJlc2l6ZShuOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICB0aGlzLnJlc2VydmUobik7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZSBhIHBsYW5uZWQgaW5jcmVhc2UgaW4gc2l6ZSwgc28gdGhhdCBhbnkgbmVjZXNzYXJ5IGFsbG9jYXRpb24gbWF5XG4gICAgICogYmUgZG9uZSBvbmNlLCBhaGVhZCBvZiB0aW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICByZXNlcnZlKG46IG51bWJlcikge1xuICAgICAgICBpZiAobiA+IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwYWNpdHkgPSBNYXRoLm1heChuLCBNYXRoLmZsb29yKHRoaXMuY2FwYWNpdHkgKiBSRVNJWkVfTVVMVElQTElFUiksIERFRkFVTFRfQ0FQQUNJVFkpO1xuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5ICogdGhpcy5ieXRlc1BlckVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBvbGRVaW50OEFycmF5ID0gdGhpcy51aW50ODtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICAgICAgaWYgKG9sZFVpbnQ4QXJyYXkpIHRoaXMudWludDguc2V0KG9sZFVpbnQ4QXJyYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIFR5cGVkQXJyYXkgdmlld3MgZm9yIHRoZSBjdXJyZW50IEFycmF5QnVmZmVyLlxuICAgICAqL1xuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIG1lbWJlciBmaWVsZHMsIGNyZWF0ZSBhIGZ1bGwgU3RydWN0QXJyYXlMYXlvdXQsIGluXG4gKiBwYXJ0aWN1bGFyIGNhbGN1bGF0aW5nIHRoZSBjb3JyZWN0IGJ5dGUgb2Zmc2V0IGZvciBlYWNoIGZpZWxkLiAgVGhpcyBkYXRhXG4gKiBpcyB1c2VkIGF0IGJ1aWxkIHRpbWUgdG8gZ2VuZXJhdGUgU3RydWN0QXJyYXlMYXlvdXRfKiNlbXBsYWNlQmFjaygpIGFuZFxuICogb3RoZXIgYWNjZXNzb3JzLCBhbmQgYXQgcnVudGltZSBmb3IgYmluZGluZyB2ZXJ0ZXggYnVmZmVyIGF0dHJpYnV0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTGF5b3V0KFxuICAgIG1lbWJlcnM6IEFycmF5PHsgbmFtZTogc3RyaW5nLCB0eXBlOiBWaWV3VHlwZSwgK2NvbXBvbmVudHM/OiBudW1iZXIsIH0+LFxuICAgIGFsaWdubWVudDogbnVtYmVyID0gMVxuKTogU3RydWN0QXJyYXlMYXlvdXQge1xuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IG1heFNpemUgPSAwO1xuICAgIGNvbnN0IGxheW91dE1lbWJlcnMgPSBtZW1iZXJzLm1hcCgobWVtYmVyKSA9PiB7XG4gICAgICAgIGFzc2VydChtZW1iZXIubmFtZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCB0eXBlU2l6ZSA9IHNpemVPZihtZW1iZXIudHlwZSk7XG4gICAgICAgIGNvbnN0IG1lbWJlck9mZnNldCA9IG9mZnNldCA9IGFsaWduKG9mZnNldCwgTWF0aC5tYXgoYWxpZ25tZW50LCB0eXBlU2l6ZSkpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gbWVtYmVyLmNvbXBvbmVudHMgfHwgMTtcblxuICAgICAgICBtYXhTaXplID0gTWF0aC5tYXgobWF4U2l6ZSwgdHlwZVNpemUpO1xuICAgICAgICBvZmZzZXQgKz0gdHlwZVNpemUgKiBjb21wb25lbnRzO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBtZW1iZXIubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IG1lbWJlci50eXBlLFxuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIG9mZnNldDogbWVtYmVyT2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2l6ZSA9IGFsaWduKG9mZnNldCwgTWF0aC5tYXgobWF4U2l6ZSwgYWxpZ25tZW50KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBtZW1iZXJzOiBsYXlvdXRNZW1iZXJzLFxuICAgICAgICBzaXplLFxuICAgICAgICBhbGlnbm1lbnRcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzaXplT2YodHlwZTogVmlld1R5cGUpOiBudW1iZXIge1xuICAgIHJldHVybiB2aWV3VHlwZXNbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG59XG5cbmZ1bmN0aW9uIGFsaWduKG9mZnNldDogbnVtYmVyLCBzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmNlaWwob2Zmc2V0IC8gc2l6ZSkgKiBzaXplO1xufVxuXG5leHBvcnQge1N0cnVjdEFycmF5LCBTdHJ1Y3QsIHZpZXdUeXBlcywgY3JlYXRlTGF5b3V0fTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3RydWN0LWFycmF5cy5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtTdHJ1Y3QsIFN0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0JywgU3RydWN0QXJyYXlMYXlvdXQyaTQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0aTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDRpOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRpOCcsIFN0cnVjdEFycmF5TGF5b3V0NGk4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNGkxMicsIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBVaW50OFs0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICBjb25zdCBvMSA9IGkgKiA4O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA0XSA9IHYyO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNV0gPSB2MztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDZdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA3XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0dWI4JywgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNls4XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OHVpMTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0OHVpMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OHVpMTYnLCBTdHJ1Y3RBcnJheUxheW91dDh1aTE2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls0XVxuICogWzhdOiBVaW50MTZbNF1cbiAqIFsxNl06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDEyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLmludDE2W28yICsgOF0gPSB2ODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDldID0gdjk7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMF0gPSB2MTA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMV0gPSB2MTE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDI0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0JywgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbM11cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDNmMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDNmMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M2YxMicsIFN0cnVjdEFycmF5TGF5b3V0M2YxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjApO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDF1bDQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQxdWw0JywgU3RydWN0QXJyYXlMYXlvdXQxdWw0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls2XVxuICogWzEyXTogVWludDMyWzFdXG4gKiBbMTZdOiBVaW50MTZbMl1cbiAqIFsyMF06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMTI7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgM10gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA4XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDldID0gdjg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMF0gPSB2OTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDExXSA9IHYxMDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMjQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQnLCBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogSW50MTZbMl1cbiAqIFs4XTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTInLCBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50OFsyXVxuICogWzRdOiBGbG9hdDMyWzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMSA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnViMmYxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyJywgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBVaW50MTZbMl1cbiAqIFs4XTogVWludDMyWzNdXG4gKiBbMjBdOiBVaW50MTZbM11cbiAqIFsyOF06IEZsb2F0MzJbMl1cbiAqIFszNl06IFVpbnQ4WzNdXG4gKiBbNDBdOiBVaW50MzJbMV1cbiAqIFs0NF06IEludDE2WzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMjQ7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDEyO1xuICAgICAgICBjb25zdCBvMSA9IGkgKiA0ODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAyXSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDNdID0gdjU7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgNF0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMF0gPSB2NztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMV0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMl0gPSB2OTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgN10gPSB2MTA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDhdID0gdjExO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzZdID0gdjEyO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzddID0gdjEzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMzhdID0gdjE0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDEwXSA9IHYxNTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDIyXSA9IHYxNjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0ODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4JywgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbOF1cbiAqIFsxNl06IFVpbnQxNlsxNF1cbiAqIFs0NF06IFVpbnQzMlsxXVxuICogWzQ4XTogRmxvYXQzMlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlciwgdjE3OiBudW1iZXIsIHYxODogbnVtYmVyLCB2MTk6IG51bWJlciwgdjIwOiBudW1iZXIsIHYyMTogbnVtYmVyLCB2MjI6IG51bWJlciwgdjIzOiBudW1iZXIsIHYyNDogbnVtYmVyLCB2MjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIsIHYxNzogbnVtYmVyLCB2MTg6IG51bWJlciwgdjE5OiBudW1iZXIsIHYyMDogbnVtYmVyLCB2MjE6IG51bWJlciwgdjIyOiBudW1iZXIsIHYyMzogbnVtYmVyLCB2MjQ6IG51bWJlciwgdjI1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMzA7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDddID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOF0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA5XSA9IHY5O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEwXSA9IHYxMDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMV0gPSB2MTE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTJdID0gdjEyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEzXSA9IHYxMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNF0gPSB2MTQ7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTVdID0gdjE1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE2XSA9IHYxNjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxN10gPSB2MTc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMThdID0gdjE4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE5XSA9IHYxOTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyMF0gPSB2MjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMjFdID0gdjIxO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDExXSA9IHYyMjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTJdID0gdjIzO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxM10gPSB2MjQ7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDE0XSA9IHYyNTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDYwO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCcsIFN0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MWY0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MWY0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MWY0JywgU3RydWN0QXJyYXlMYXlvdXQxZjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzaTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzaTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzaTYnLCBTdHJ1Y3RBcnJheUxheW91dDNpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKiBbNF06IFVpbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzdWk2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDN1aTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzdWk2JywgU3RydWN0QXJyYXlMYXlvdXQzdWk2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJ1aTQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnVpNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJ1aTQnLCBTdHJ1Y3RBcnJheUxheW91dDJ1aTQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWkyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVpMicsIFN0cnVjdEFycmF5TGF5b3V0MXVpMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmY4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJmOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJmOCcsIFN0cnVjdEFycmF5TGF5b3V0MmY4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA0O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAzXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGYxNi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ0ZjE2JywgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2KTtcblxuY2xhc3MgQ29sbGlzaW9uQm94U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xuICAgIHgxOiBudW1iZXI7XG4gICAgeTE6IG51bWJlcjtcbiAgICB4MjogbnVtYmVyO1xuICAgIHkyOiBudW1iZXI7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgcmFkaXVzOiBudW1iZXI7XG4gICAgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnQ6IFBvaW50O1xuICAgIGdldCBhbmNob3JQb2ludFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yUG9pbnRYKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF0gPSB4OyB9XG4gICAgZ2V0IGFuY2hvclBvaW50WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCBhbmNob3JQb2ludFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgeDEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBzZXQgeDEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXSA9IHg7IH1cbiAgICBnZXQgeTEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgeTEoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXSA9IHg7IH1cbiAgICBnZXQgeDIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBzZXQgeDIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XSA9IHg7IH1cbiAgICBnZXQgeTIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBzZXQgeTIoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAzXTsgfVxuICAgIHNldCBmZWF0dXJlSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgc2V0IHNvdXJjZUxheWVySW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF0gPSB4OyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIHNldCBidWNrZXRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XSA9IHg7IH1cbiAgICBnZXQgcmFkaXVzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCByYWRpdXMoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMF0gPSB4OyB9XG4gICAgZ2V0IHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMTFdID0geDsgfVxuICAgIGdldCBhbmNob3JQb2ludCgpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmFuY2hvclBvaW50WCwgdGhpcy5hbmNob3JQb2ludFkpOyB9XG59XG5cbkNvbGxpc2lvbkJveFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDI0O1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Cb3ggPSBDb2xsaXNpb25Cb3hTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxpc2lvbkJveEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgQ29sbGlzaW9uQm94U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkJveFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsaXNpb25Cb3hTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJveEFycmF5JywgQ29sbGlzaW9uQm94QXJyYXkpO1xuXG5jbGFzcyBQbGFjZWRTeW1ib2xTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBnbHlwaFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBudW1HbHlwaHM6IG51bWJlcjtcbiAgICB2ZXJ0ZXhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsaW5lTGVuZ3RoOiBudW1iZXI7XG4gICAgc2VnbWVudDogbnVtYmVyO1xuICAgIGxvd2VyU2l6ZTogbnVtYmVyO1xuICAgIHVwcGVyU2l6ZTogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRYOiBudW1iZXI7XG4gICAgbGluZU9mZnNldFk6IG51bWJlcjtcbiAgICB3cml0aW5nTW9kZTogbnVtYmVyO1xuICAgIHBsYWNlZE9yaWVudGF0aW9uOiBudW1iZXI7XG4gICAgaGlkZGVuOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yWCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdID0geDsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgc2V0IGFuY2hvclkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgZ2x5cGhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBnbHlwaFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG4gICAgZ2V0IG51bUdseXBocygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgbnVtR2x5cGhzKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdID0geDsgfVxuICAgIGdldCB2ZXJ0ZXhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAyXTsgfVxuICAgIHNldCB2ZXJ0ZXhTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDJdID0geDsgfVxuICAgIGdldCBsaW5lU3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM107IH1cbiAgICBzZXQgbGluZVN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgM10gPSB4OyB9XG4gICAgZ2V0IGxpbmVMZW5ndGgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDRdOyB9XG4gICAgc2V0IGxpbmVMZW5ndGgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgNF0gPSB4OyB9XG4gICAgZ2V0IHNlZ21lbnQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCBzZWdtZW50KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXSA9IHg7IH1cbiAgICBnZXQgbG93ZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgbG93ZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXSA9IHg7IH1cbiAgICBnZXQgdXBwZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBzZXQgdXBwZXJTaXplKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXSA9IHg7IH1cbiAgICBnZXQgbGluZU9mZnNldFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQgKyA3XTsgfVxuICAgIHNldCBsaW5lT2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgN10gPSB4OyB9XG4gICAgZ2V0IGxpbmVPZmZzZXRZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgOF07IH1cbiAgICBzZXQgbGluZU9mZnNldFkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDhdID0geDsgfVxuICAgIGdldCB3cml0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl07IH1cbiAgICBzZXQgd3JpdGluZ01vZGUoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzNl0gPSB4OyB9XG4gICAgZ2V0IHBsYWNlZE9yaWVudGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XTsgfVxuICAgIHNldCBwbGFjZWRPcmllbnRhdGlvbih4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XSA9IHg7IH1cbiAgICBnZXQgaGlkZGVuKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM4XTsgfVxuICAgIHNldCBoaWRkZW4oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF0gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMF07IH1cbiAgICBzZXQgY3Jvc3NUaWxlSUQoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCBhc3NvY2lhdGVkSWNvbkluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxuICAgIHNldCBhc3NvY2lhdGVkSWNvbkluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMjJdID0geDsgfVxufVxuXG5QbGFjZWRTeW1ib2xTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA0ODtcblxuZXhwb3J0IHR5cGUgUGxhY2VkU3ltYm9sID0gUGxhY2VkU3ltYm9sU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQbGFjZWRTeW1ib2xBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGxhY2VkU3ltYm9sU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFBsYWNlZFN5bWJvbFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQbGFjZWRTeW1ib2xTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1BsYWNlZFN5bWJvbEFycmF5JywgUGxhY2VkU3ltYm9sQXJyYXkpO1xuXG5jbGFzcyBTeW1ib2xJbnN0YW5jZVN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xJbnN0YW5jZUFycmF5O1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyO1xuICAgIHRleHRCb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgaWNvbkJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBpY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxJY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IG51bWJlcjtcbiAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bUljb25WZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcjtcbiAgICB0ZXh0T2Zmc2V0MDogbnVtYmVyO1xuICAgIHRleHRPZmZzZXQxOiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBzZXQgYW5jaG9yWCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdID0geDsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgc2V0IGFuY2hvclkoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXSA9IHg7IH1cbiAgICBnZXQgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBzZXQgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXSA9IHg7IH1cbiAgICBnZXQgY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG4gICAgc2V0IGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDNdID0geDsgfVxuICAgIGdldCBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDRdOyB9XG4gICAgc2V0IGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XSA9IHg7IH1cbiAgICBnZXQgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBzZXQgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XSA9IHg7IH1cbiAgICBnZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDZdOyB9XG4gICAgc2V0IHBsYWNlZEljb25TeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDZdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA3XTsgfVxuICAgIHNldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDddID0geDsgfVxuICAgIGdldCBrZXkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgc2V0IGtleSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA4XSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldOyB9XG4gICAgc2V0IHRleHRCb3hTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldID0geDsgfVxuICAgIGdldCB0ZXh0Qm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIHNldCB0ZXh0Qm94RW5kSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTBdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV0gPSB4OyB9XG4gICAgZ2V0IHZlcnRpY2FsVGV4dEJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBzZXQgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTJdID0geDsgfVxuICAgIGdldCBpY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTNdOyB9XG4gICAgc2V0IGljb25Cb3hTdGFydEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEzXSA9IHg7IH1cbiAgICBnZXQgaWNvbkJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNF07IH1cbiAgICBzZXQgaWNvbkJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE0XSA9IHg7IH1cbiAgICBnZXQgdmVydGljYWxJY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTVdOyB9XG4gICAgc2V0IHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTVdID0geDsgfVxuICAgIGdldCB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTZdOyB9XG4gICAgc2V0IHZlcnRpY2FsSWNvbkJveEVuZEluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE2XSA9IHg7IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxN107IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE3XSA9IHg7IH1cbiAgICBnZXQgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE4XTsgfVxuICAgIHNldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOF0gPSB4OyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTldOyB9XG4gICAgc2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOV0gPSB4OyB9XG4gICAgZ2V0IG51bUljb25WZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjBdOyB9XG4gICAgc2V0IG51bUljb25WZXJ0aWNlcyh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMF0gPSB4OyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsSWNvblZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMV07IH1cbiAgICBzZXQgbnVtVmVydGljYWxJY29uVmVydGljZXMoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjFdID0geDsgfVxuICAgIGdldCBjcm9zc1RpbGVJRCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTFdOyB9XG4gICAgc2V0IGNyb3NzVGlsZUlEKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDExXSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFNjYWxlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdOyB9XG4gICAgc2V0IHRleHRCb3hTY2FsZSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDEzXTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTNdID0geDsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDE0XTsgfVxuICAgIHNldCB0ZXh0T2Zmc2V0MSh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTRdID0geDsgfVxufVxuXG5TeW1ib2xJbnN0YW5jZVN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDYwO1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJbnN0YW5jZSA9IFN5bWJvbEluc3RhbmNlU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW1ib2xJbnN0YW5jZUFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ4aTE0dWkxdWwzZjYwIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbEluc3RhbmNlU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFN5bWJvbEluc3RhbmNlU3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFN5bWJvbEluc3RhbmNlU3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xJbnN0YW5jZUFycmF5JywgU3ltYm9sSW5zdGFuY2VBcnJheSk7XG5cbmNsYXNzIEdseXBoT2Zmc2V0U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIGdldCBvZmZzZXRYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgb2Zmc2V0WCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMF0gPSB4OyB9XG59XG5cbkdseXBoT2Zmc2V0U3RydWN0LnByb3RvdHlwZS5zaXplID0gNDtcblxuZXhwb3J0IHR5cGUgR2x5cGhPZmZzZXQgPSBHbHlwaE9mZnNldFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgR2x5cGhPZmZzZXRBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MWY0IHtcbiAgICBnZXRvZmZzZXRYKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuZmxvYXQzMltpbmRleCAqIDEgKyAwXTsgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgR2x5cGhPZmZzZXRTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogR2x5cGhPZmZzZXRTdHJ1Y3Qge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHJldHVybiBuZXcgR2x5cGhPZmZzZXRTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0dseXBoT2Zmc2V0QXJyYXknLCBHbHlwaE9mZnNldEFycmF5KTtcblxuY2xhc3MgU3ltYm9sTGluZVZlcnRleFN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjogbnVtYmVyO1xuICAgIGdldCB4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgc2V0IHgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXSA9IHg7IH1cbiAgICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIHNldCB5KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV0gPSB4OyB9XG4gICAgZ2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgc2V0IHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl0gPSB4OyB9XG59XG5cblN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA2O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xMaW5lVmVydGV4ID0gU3ltYm9sTGluZVZlcnRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgU3ltYm9sTGluZVZlcnRleEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQzaTYge1xuICAgIGdldHgoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAwXTsgfVxuICAgIGdldHkoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAxXTsgfVxuICAgIGdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMl07IH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbExpbmVWZXJ0ZXhTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogU3ltYm9sTGluZVZlcnRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xMaW5lVmVydGV4U3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xMaW5lVmVydGV4QXJyYXknLCBTeW1ib2xMaW5lVmVydGV4QXJyYXkpO1xuXG5jbGFzcyBGZWF0dXJlSW5kZXhTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBzZXQgZmVhdHVyZUluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDBdID0geDsgfVxuICAgIGdldCBzb3VyY2VMYXllckluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIHNldCBzb3VyY2VMYXllckluZGV4KHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdID0geDsgfVxuICAgIGdldCBidWNrZXRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBzZXQgYnVja2V0SW5kZXgoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM10gPSB4OyB9XG59XG5cbkZlYXR1cmVJbmRleFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDg7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVJbmRleCA9IEZlYXR1cmVJbmRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZUluZGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgRmVhdHVyZUluZGV4U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IEZlYXR1cmVJbmRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSW5kZXhTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVJbmRleEFycmF5JywgRmVhdHVyZUluZGV4QXJyYXkpO1xuXG5leHBvcnQge1xuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzZjEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVsNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OGkxNHVpMXVsM2Y2MCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDFmNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNpNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzdWk2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnVpNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1aTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyZjgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIFBvc0FycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4IGFzIFJhc3RlckJvdW5kc0FycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIENpcmNsZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIEZpbGxMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiBhcyBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgSGVhdG1hcExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IGFzIExpbmVMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDh1aTE2IGFzIFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCBhcyBTeW1ib2xMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNmMTIgYXMgU3ltYm9sRHluYW1pY0xheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVsNCBhcyBTeW1ib2xPcGFjaXR5QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiBhcyBDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGFzIENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMiBhcyBDb2xsaXNpb25WZXJ0ZXhBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDN1aTYgYXMgVHJpYW5nbGVJbmRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnVpNCBhcyBMaW5lSW5kZXhBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1aTIgYXMgTGluZVN0cmlwSW5kZXhBcnJheVxufTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmltcG9ydCB0eXBlIFZlcnRleEFycmF5T2JqZWN0IGZyb20gJy4uL3JlbmRlci92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheX0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgdHlwZSBTZWdtZW50ID0ge1xuICAgIHNvcnRLZXk6IG51bWJlciB8IHZvaWQsXG4gICAgdmVydGV4T2Zmc2V0OiBudW1iZXIsXG4gICAgcHJpbWl0aXZlT2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGV4TGVuZ3RoOiBudW1iZXIsXG4gICAgcHJpbWl0aXZlTGVuZ3RoOiBudW1iZXIsXG4gICAgdmFvczoge1tzdHJpbmddOiBWZXJ0ZXhBcnJheU9iamVjdH1cbn1cblxuY2xhc3MgU2VnbWVudFZlY3RvciB7XG4gICAgc3RhdGljIE1BWF9WRVJURVhfQVJSQVlfTEVOR1RIOiBudW1iZXI7XG4gICAgc2VnbWVudHM6IEFycmF5PFNlZ21lbnQ+O1xuXG4gICAgY29uc3RydWN0b3Ioc2VnbWVudHM/OiBBcnJheTxTZWdtZW50PiA9IFtdKSB7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBzZWdtZW50cztcbiAgICB9XG5cbiAgICBwcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlczogbnVtYmVyLCBsYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIGluZGV4QXJyYXk6IFN0cnVjdEFycmF5LCBzb3J0S2V5PzogbnVtYmVyKTogU2VnbWVudCB7XG4gICAgICAgIGxldCBzZWdtZW50OiBTZWdtZW50ID0gdGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB3YXJuT25jZShgTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICR7U2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSH06IGJ1Y2tldCByZXF1ZXN0ZWQgJHtudW1WZXJ0aWNlc31gKTtcbiAgICAgICAgaWYgKCFzZWdtZW50IHx8IHNlZ21lbnQudmVydGV4TGVuZ3RoICsgbnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIIHx8IHNlZ21lbnQuc29ydEtleSAhPT0gc29ydEtleSkge1xuICAgICAgICAgICAgc2VnbWVudCA9ICh7XG4gICAgICAgICAgICAgICAgdmVydGV4T2Zmc2V0OiBsYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlT2Zmc2V0OiBpbmRleEFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhMZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlTGVuZ3RoOiAwXG4gICAgICAgICAgICB9OiBhbnkpO1xuICAgICAgICAgICAgaWYgKHNvcnRLZXkgIT09IHVuZGVmaW5lZCkgc2VnbWVudC5zb3J0S2V5ID0gc29ydEtleTtcbiAgICAgICAgICAgIHRoaXMuc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9XG5cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZ21lbnRzO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiB0aGlzLnNlZ21lbnRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc2VnbWVudC52YW9zKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudC52YW9zW2tdLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaW1wbGVTZWdtZW50KHZlcnRleE9mZnNldDogbnVtYmVyLCBwcmltaXRpdmVPZmZzZXQ6IG51bWJlciwgdmVydGV4TGVuZ3RoOiBudW1iZXIsIHByaW1pdGl2ZUxlbmd0aDogbnVtYmVyKTogU2VnbWVudFZlY3RvciB7XG4gICAgICAgIHJldHVybiBuZXcgU2VnbWVudFZlY3Rvcihbe1xuICAgICAgICAgICAgdmVydGV4T2Zmc2V0LFxuICAgICAgICAgICAgcHJpbWl0aXZlT2Zmc2V0LFxuICAgICAgICAgICAgdmVydGV4TGVuZ3RoLFxuICAgICAgICAgICAgcHJpbWl0aXZlTGVuZ3RoLFxuICAgICAgICAgICAgdmFvczoge30sXG4gICAgICAgICAgICBzb3J0S2V5OiAwXG4gICAgICAgIH1dKTtcbiAgICB9XG59XG5cbi8qXG4gKiBUaGUgbWF4aW11bSBzaXplIG9mIGEgdmVydGV4IGFycmF5LiBUaGlzIGxpbWl0IGlzIGltcG9zZWQgYnkgV2ViR0wncyAxNiBiaXRcbiAqIGFkZHJlc3Npbmcgb2YgdmVydGV4IGJ1ZmZlcnMuXG4gKiBAcHJpdmF0ZVxuICogQHJlYWRvbmx5XG4gKi9cblNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEggPSBNYXRoLnBvdygyLCAxNikgLSAxO1xuXG5yZWdpc3RlcignU2VnbWVudFZlY3RvcicsIFNlZ21lbnRWZWN0b3IpO1xuZXhwb3J0IGRlZmF1bHQgU2VnbWVudFZlY3RvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbi8qKlxuICogUGFja3MgdHdvIG51bWJlcnMsIGludGVycHJldGVkIGFzIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLCBpbnRvIGEgc2luZ2xlXG4gKiBmbG9hdC4gIFVucGFjayB0aGVtIGluIHRoZSBzaGFkZXIgdXNpbmcgdGhlIGB1bnBhY2tfZmxvYXQoKWAgZnVuY3Rpb24sXG4gKiBkZWZpbmVkIGluIF9wcmVsdWRlLnZlcnRleC5nbHNsXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhY2tVaW50OFRvRmxvYXQoYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICAvLyBjb2VyY2UgYSBhbmQgYiB0byA4LWJpdCBpbnRzXG4gICAgYSA9IGNsYW1wKE1hdGguZmxvb3IoYSksIDAsIDI1NSk7XG4gICAgYiA9IGNsYW1wKE1hdGguZmxvb3IoYiksIDAsIDI1NSk7XG4gICAgcmV0dXJuIDI1NiAqIGEgKyBiO1xufVxuIiwiLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMyAocjEzNikgKGFzIG9mIE1heSAyMCwgMjAxMSlcbiAqIFxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzphYXBwbGVieUBnbWFpbC5jb21cIj5BdXN0aW4gQXBwbGVieTwvYT5cbiAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICogXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IEFTQ0lJIG9ubHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICogQHJldHVybiB7bnVtYmVyfSAzMi1iaXQgcG9zaXRpdmUgaW50ZWdlciBoYXNoIFxuICovXG5cbmZ1bmN0aW9uIG11cm11cmhhc2gzXzMyX2djKGtleSwgc2VlZCkge1xuXHR2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGk7XG5cdFxuXHRyZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMzsgLy8ga2V5Lmxlbmd0aCAlIDRcblx0Ynl0ZXMgPSBrZXkubGVuZ3RoIC0gcmVtYWluZGVyO1xuXHRoMSA9IHNlZWQ7XG5cdGMxID0gMHhjYzllMmQ1MTtcblx0YzIgPSAweDFiODczNTkzO1xuXHRpID0gMDtcblx0XG5cdHdoaWxlIChpIDwgYnl0ZXMpIHtcblx0ICBcdGsxID0gXG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoaSkgJiAweGZmKSkgfFxuXHQgIFx0ICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0KTtcblx0XHQrK2k7XG5cdFx0XG5cdFx0azEgPSAoKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0XHRrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcblx0XHRrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXG5cdFx0aDEgXj0gazE7XG4gICAgICAgIGgxID0gKGgxIDw8IDEzKSB8IChoMSA+Pj4gMTkpO1xuXHRcdGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0XHRoMSA9ICgoKGgxYiAmIDB4ZmZmZikgKyAweDZiNjQpICsgKCgoKGgxYiA+Pj4gMTYpICsgMHhlNjU0KSAmIDB4ZmZmZikgPDwgMTYpKTtcblx0fVxuXHRcblx0azEgPSAwO1xuXHRcblx0c3dpdGNoIChyZW1haW5kZXIpIHtcblx0XHRjYXNlIDM6IGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblx0XHRjYXNlIDI6IGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXHRcdGNhc2UgMTogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cdFx0XG5cdFx0azEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0azEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG5cdFx0azEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0aDEgXj0gazE7XG5cdH1cblx0XG5cdGgxIF49IGtleS5sZW5ndGg7XG5cblx0aDEgXj0gaDEgPj4+IDE2O1xuXHRoMSA9ICgoKGgxICYgMHhmZmZmKSAqIDB4ODVlYmNhNmIpICsgKCgoKGgxID4+PiAxNikgKiAweDg1ZWJjYTZiKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdGgxIF49IGgxID4+PiAxMztcblx0aDEgPSAoKCgoaDEgJiAweGZmZmYpICogMHhjMmIyYWUzNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDB4YzJiMmFlMzUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cdGgxIF49IGgxID4+PiAxNjtcblxuXHRyZXR1cm4gaDEgPj4+IDA7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBtdXJtdXJoYXNoM18zMl9nY1xufSIsIi8qKlxuICogSlMgSW1wbGVtZW50YXRpb24gb2YgTXVybXVySGFzaDJcbiAqIFxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzphYXBwbGVieUBnbWFpbC5jb21cIj5BdXN0aW4gQXBwbGVieTwvYT5cbiAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIEFTQ0lJIG9ubHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICogQHJldHVybiB7bnVtYmVyfSAzMi1iaXQgcG9zaXRpdmUgaW50ZWdlciBoYXNoXG4gKi9cblxuZnVuY3Rpb24gbXVybXVyaGFzaDJfMzJfZ2Moc3RyLCBzZWVkKSB7XG4gIHZhclxuICAgIGwgPSBzdHIubGVuZ3RoLFxuICAgIGggPSBzZWVkIF4gbCxcbiAgICBpID0gMCxcbiAgICBrO1xuICBcbiAgd2hpbGUgKGwgPj0gNCkge1xuICBcdGsgPSBcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmKSkgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCkgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYpIHxcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0KTtcbiAgICBcbiAgICBrID0gKCgoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChrID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgICBrIF49IGsgPj4+IDI0O1xuICAgIGsgPSAoKChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuXG5cdGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpIF4gaztcblxuICAgIGwgLT0gNDtcbiAgICArK2k7XG4gIH1cbiAgXG4gIHN3aXRjaCAobCkge1xuICBjYXNlIDM6IGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICBjYXNlIDI6IGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG4gIGNhc2UgMTogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcbiAgICAgICAgICBoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgfVxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICBoIF49IGggPj4+IDE1O1xuXG4gIHJldHVybiBoID4+PiAwO1xufVxuXG5pZih0eXBlb2YgbW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBtdXJtdXJoYXNoMl8zMl9nY1xufVxuIiwidmFyIG11cm11cjMgPSByZXF1aXJlKFwiLi9tdXJtdXJoYXNoM19nYy5qc1wiKVxudmFyIG11cm11cjIgPSByZXF1aXJlKFwiLi9tdXJtdXJoYXNoMl9nYy5qc1wiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IG11cm11cjNcbm1vZHVsZS5leHBvcnRzLm11cm11cjMgPSBtdXJtdXIzXG5tb2R1bGUuZXhwb3J0cy5tdXJtdXIyID0gbXVybXVyMlxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IG11cm11cjMgZnJvbSAnbXVybXVyaGFzaC1qcyc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAgPSB7XG4gICAgaWRzOiBGbG9hdDY0QXJyYXk7XG4gICAgcG9zaXRpb25zOiBVaW50MzJBcnJheTtcbn07XG5cbnR5cGUgRmVhdHVyZVBvc2l0aW9uID0ge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn07XG5cbi8vIEEgdHJhbnNmZXJhYmxlIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyBmZWF0dXJlIGlkcyB0byB0aGVpciBpbmRpY2VzIGFuZCBidWZmZXIgb2Zmc2V0c1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICBpZHM6IEFycmF5PG51bWJlcj47XG4gICAgcG9zaXRpb25zOiBBcnJheTxudW1iZXI+O1xuICAgIGluZGV4ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pZHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRleGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGlkOiBtaXhlZCwgaW5kZXg6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5pZHMucHVzaChnZXROdW1lcmljSWQoaWQpKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChpbmRleCwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgZ2V0UG9zaXRpb25zKGlkOiBtaXhlZCk6IEFycmF5PEZlYXR1cmVQb3NpdGlvbj4ge1xuICAgICAgICBhc3NlcnQodGhpcy5pbmRleGVkKTtcblxuICAgICAgICBjb25zdCBpbnRJZCA9IGdldE51bWVyaWNJZChpZCk7XG5cbiAgICAgICAgLy8gYmluYXJ5IHNlYXJjaCBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgaWQgaW4gdGhpcy5pZHM7XG4gICAgICAgIC8vIHJlbGllcyBvbiBpZHMvcG9zaXRpb25zIGJlaW5nIHNvcnRlZCBieSBpZCwgd2hpY2ggaGFwcGVucyBpbiBzZXJpYWxpemF0aW9uXG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IGogPSB0aGlzLmlkcy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSAoaSArIGopID4+IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5pZHNbbV0gPj0gaW50SWQpIHtcbiAgICAgICAgICAgICAgICBqID0gbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSA9IG0gKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5pZHNbaV0gPT09IGludElkKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucG9zaXRpb25zWzMgKiBpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucG9zaXRpb25zWzMgKiBpICsgMl07XG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7aW5kZXgsIHN0YXJ0LCBlbmR9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXJpYWxpemUobWFwOiBGZWF0dXJlUG9zaXRpb25NYXAsIHRyYW5zZmVyYWJsZXM6IEFycmF5PEFycmF5QnVmZmVyPik6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgRmxvYXQ2NEFycmF5KG1hcC5pZHMpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgVWludDMyQXJyYXkobWFwLnBvc2l0aW9ucyk7XG5cbiAgICAgICAgc29ydChpZHMsIHBvc2l0aW9ucywgMCwgaWRzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goaWRzLmJ1ZmZlciwgcG9zaXRpb25zLmJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge2lkcywgcG9zaXRpb25zfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUob2JqOiBTZXJpYWxpemVkRmVhdHVyZVBvc2l0aW9uTWFwKTogRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEZlYXR1cmVQb3NpdGlvbk1hcCgpO1xuICAgICAgICAvLyBhZnRlciB0cmFuc2ZlcnJpbmcsIHdlIG9ubHkgdXNlIHRoZXNlIGFycmF5cyBzdGF0aWNhbGx5IChubyBwdXNoZXMpLFxuICAgICAgICAvLyBzbyBUeXBlZEFycmF5IHZzIEFycmF5IGRpc3RpbmN0aW9uIHRoYXQgZmxvdyBwb2ludHMgb3V0IGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIG1hcC5pZHMgPSAob2JqLmlkczogYW55KTtcbiAgICAgICAgbWFwLnBvc2l0aW9ucyA9IChvYmoucG9zaXRpb25zOiBhbnkpO1xuICAgICAgICBtYXAuaW5kZXhlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxufVxuXG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuZnVuY3Rpb24gZ2V0TnVtZXJpY0lkKHZhbHVlOiBtaXhlZCkge1xuICAgIGNvbnN0IG51bVZhbHVlID0gK3ZhbHVlO1xuICAgIGlmICghaXNOYU4obnVtVmFsdWUpICYmIG51bVZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIG51bVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbXVybXVyMyhTdHJpbmcodmFsdWUpKTtcbn1cblxuLy8gY3VzdG9tIHF1aWNrc29ydCB0aGF0IHNvcnRzIGlkcywgaW5kaWNlcyBhbmQgb2Zmc2V0cyB0b2dldGhlciAoYnkgaWRzKVxuZnVuY3Rpb24gc29ydChpZHMsIHBvc2l0aW9ucywgbGVmdCwgcmlnaHQpIHtcbiAgICBpZiAobGVmdCA+PSByaWdodCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGl2b3QgPSBpZHNbKGxlZnQgKyByaWdodCkgPj4gMV07XG4gICAgbGV0IGkgPSBsZWZ0IC0gMTtcbiAgICBsZXQgaiA9IHJpZ2h0ICsgMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGRvIGkrKzsgd2hpbGUgKGlkc1tpXSA8IHBpdm90KTtcbiAgICAgICAgZG8gai0tOyB3aGlsZSAoaWRzW2pdID4gcGl2b3QpO1xuICAgICAgICBpZiAoaSA+PSBqKSBicmVhaztcbiAgICAgICAgc3dhcChpZHMsIGksIGopO1xuICAgICAgICBzd2FwKHBvc2l0aW9ucywgMyAqIGksIDMgKiBqKTtcbiAgICAgICAgc3dhcChwb3NpdGlvbnMsIDMgKiBpICsgMSwgMyAqIGogKyAxKTtcbiAgICAgICAgc3dhcChwb3NpdGlvbnMsIDMgKiBpICsgMiwgMyAqIGogKyAyKTtcbiAgICB9XG5cbiAgICBzb3J0KGlkcywgcG9zaXRpb25zLCBsZWZ0LCBqKTtcbiAgICBzb3J0KGlkcywgcG9zaXRpb25zLCBqICsgMSwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIGNvbnN0IHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuXG5yZWdpc3RlcignRmVhdHVyZVBvc2l0aW9uTWFwJywgRmVhdHVyZVBvc2l0aW9uTWFwKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5leHBvcnQgdHlwZSBVbmlmb3JtVmFsdWVzPFVzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxVcywgPFY+KHU6IFVuaWZvcm08Vj4pID0+IFY+PjtcbmV4cG9ydCB0eXBlIFVuaWZvcm1Mb2NhdGlvbnMgPSB7W3N0cmluZ106IFdlYkdMVW5pZm9ybUxvY2F0aW9ufTtcblxuY2xhc3MgVW5pZm9ybTxUPiB7XG4gICAgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICBsb2NhdGlvbjogP1dlYkdMVW5pZm9ybUxvY2F0aW9uO1xuICAgIGN1cnJlbnQ6IFQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5nbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB9XG5cbiAgICArc2V0OiAodjogVCkgPT4gdm9pZDtcbn1cblxuY2xhc3MgVW5pZm9ybTFpIGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIH1cblxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCAhPT0gdikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTFpKHRoaXMubG9jYXRpb24sIHYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtMWYgZXh0ZW5kcyBVbmlmb3JtPG51bWJlcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IDA7XG4gICAgfVxuXG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50ICE9PSB2KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtMWYodGhpcy5sb2NhdGlvbiwgdik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm0yZiBleHRlbmRzIFVuaWZvcm08W251bWJlciwgbnVtYmVyXT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IFswLCAwXTtcbiAgICB9XG5cbiAgICBzZXQodjogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAodlswXSAhPT0gdGhpcy5jdXJyZW50WzBdIHx8IHZbMV0gIT09IHRoaXMuY3VycmVudFsxXSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTJmKHRoaXMubG9jYXRpb24sIHZbMF0sIHZbMV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtM2YgZXh0ZW5kcyBVbmlmb3JtPFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICBzZXQodjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGlmICh2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0gfHwgdlsxXSAhPT0gdGhpcy5jdXJyZW50WzFdIHx8IHZbMl0gIT09IHRoaXMuY3VycmVudFsyXSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTNmKHRoaXMubG9jYXRpb24sIHZbMF0sIHZbMV0sIHZbMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtNGYgZXh0ZW5kcyBVbmlmb3JtPFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gWzAsIDAsIDAsIDBdO1xuICAgIH1cblxuICAgIHNldCh2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAodlswXSAhPT0gdGhpcy5jdXJyZW50WzBdIHx8IHZbMV0gIT09IHRoaXMuY3VycmVudFsxXSB8fFxuICAgICAgICAgICAgdlsyXSAhPT0gdGhpcy5jdXJyZW50WzJdIHx8IHZbM10gIT09IHRoaXMuY3VycmVudFszXSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sIHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtQ29sb3IgZXh0ZW5kcyBVbmlmb3JtPENvbG9yPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gQ29sb3IudHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgc2V0KHY6IENvbG9yKTogdm9pZCB7XG4gICAgICAgIGlmICh2LnIgIT09IHRoaXMuY3VycmVudC5yIHx8IHYuZyAhPT0gdGhpcy5jdXJyZW50LmcgfHxcbiAgICAgICAgICAgIHYuYiAhPT0gdGhpcy5jdXJyZW50LmIgfHwgdi5hICE9PSB0aGlzLmN1cnJlbnQuYSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sIHYuciwgdi5nLCB2LmIsIHYuYSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGVtcHR5TWF0NCA9IG5ldyBGbG9hdDMyQXJyYXkoMTYpO1xuY2xhc3MgVW5pZm9ybU1hdHJpeDRmIGV4dGVuZHMgVW5pZm9ybTxGbG9hdDMyQXJyYXk+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBlbXB0eU1hdDQ7XG4gICAgfVxuXG4gICAgc2V0KHY6IEZsb2F0MzJBcnJheSk6IHZvaWQge1xuICAgICAgICAvLyBUaGUgdmFzdCBtYWpvcml0eSBvZiBtYXRyaXggY29tcGFyaXNvbnMgdGhhdCB3aWxsIHRyaXAgdGhpcyBzZXRcbiAgICAgICAgLy8gaGFwcGVuIGF0IGk9MTIgb3IgaT0wLCBzbyB3ZSBjaGVjayB0aG9zZSBmaXJzdCB0byBhdm9pZCBsb3RzIG9mXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IGl0ZXJhdGlvbjpcbiAgICAgICAgaWYgKHZbMTJdICE9PSB0aGlzLmN1cnJlbnRbMTJdIHx8IHZbMF0gIT09IHRoaXMuY3VycmVudFswXSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCBmYWxzZSwgdik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodltpXSAhPT0gdGhpcy5jdXJyZW50W2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwgZmFsc2UsIHYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQge1xuICAgIFVuaWZvcm0sXG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm00ZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59O1xuXG5leHBvcnQgdHlwZSBVbmlmb3JtQmluZGluZ3MgPSB7W3N0cmluZ106IFVuaWZvcm08YW55Pn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhY2tVaW50OFRvRmxvYXR9IGZyb20gJy4uL3NoYWRlcnMvZW5jb2RlX2F0dHJpYnV0ZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7c3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQge1N0cnVjdEFycmF5TGF5b3V0MWY0LCBTdHJ1Y3RBcnJheUxheW91dDJmOCwgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2LCBQYXR0ZXJuTGF5b3V0QXJyYXl9IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgRmVhdHVyZVBvc2l0aW9uTWFwIGZyb20gJy4vZmVhdHVyZV9wb3NpdGlvbl9tYXAnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybTRmLFxuICAgIHR5cGUgVW5pZm9ybUxvY2F0aW9uc1xufSBmcm9tICcuLi9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5LCBTdHJ1Y3RBcnJheU1lbWJlcn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgRmVhdHVyZSxcbiAgICBGZWF0dXJlU3RhdGUsXG4gICAgR2xvYmFsUHJvcGVydGllcyxcbiAgICBTb3VyY2VFeHByZXNzaW9uLFxuICAgIENvbXBvc2l0ZUV4cHJlc3Npb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmV4cG9ydCB0eXBlIEJpbmRlclVuaWZvcm0gPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgYmluZGluZzogVW5pZm9ybTxhbnk+XG59O1xuXG5mdW5jdGlvbiBwYWNrQ29sb3IoY29sb3I6IENvbG9yKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcGFja1VpbnQ4VG9GbG9hdCgyNTUgKiBjb2xvci5yLCAyNTUgKiBjb2xvci5nKSxcbiAgICAgICAgcGFja1VpbnQ4VG9GbG9hdCgyNTUgKiBjb2xvci5iLCAyNTUgKiBjb2xvci5hKVxuICAgIF07XG59XG5cbi8qKlxuICogIGBCaW5kZXJgIGlzIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgdGhlIHN0cmF0ZWdpZXMgZm9yIGNvbnN0cnVjdGluZyxcbiAqICB1cGxvYWRpbmcsIGFuZCBiaW5kaW5nIHBhaW50IHByb3BlcnR5IGRhdGEgYXMgR0xTTCBhdHRyaWJ1dGVzLiBNb3N0IHN0eWxlLVxuICogIHNwZWMgcHJvcGVydGllcyBoYXZlIGEgMToxIHJlbGF0aW9uc2hpcCB0byBzaGFkZXIgYXR0cmlidXRlL3VuaWZvcm1zLCBidXRcbiAqICBzb21lIHJlcXVpcmUgbXVsdGxpcGxlIHZhbHVlcyBwZXIgZmVhdHVyZSB0byBiZSBwYXNzZWQgdG8gdGhlIEdQVSwgYW5kIGluXG4gKiAgdGhvc2UgY2FzZXMgd2UgYmluZCBtdWx0aXBsZSBhdHRyaWJ1dGVzL3VuaWZvcm1zLlxuICpcbiAqICBJdCBoYXMgdGhyZWUgaW1wbGVtZW50YXRpb25zLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHN0cmF0ZWdpZXMgd2UgdXNlOlxuICpcbiAqICAqIEZvciBfY29uc3RhbnRfIHByb3BlcnRpZXMgLS0gdGhvc2Ugd2hvc2UgdmFsdWUgaXMgYSBjb25zdGFudCwgb3IgdGhlIGNvbnN0YW50XG4gKiAgICByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGNhbWVyYSBleHByZXNzaW9uIGF0IGEgcGFydGljdWxhciBjYW1lcmEgcG9zaXRpb24gLS0gd2VcbiAqICAgIGRvbid0IG5lZWQgYSB2ZXJ0ZXggYXR0cmlidXRlIGJ1ZmZlciwgYW5kIGluc3RlYWQgdXNlIGEgdW5pZm9ybS5cbiAqICAqIEZvciBkYXRhIGV4cHJlc3Npb25zLCB3ZSB1c2UgYSB2ZXJ0ZXggYnVmZmVyIHdpdGggYSBzaW5nbGUgYXR0cmlidXRlIHZhbHVlLFxuICogICAgdGhlIGV2YWx1YXRlZCByZXN1bHQgb2YgdGhlIHNvdXJjZSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGZlYXR1cmUuXG4gKiAgKiBGb3IgY29tcG9zaXRlIGV4cHJlc3Npb25zLCB3ZSB1c2UgYSB2ZXJ0ZXggYnVmZmVyIHdpdGggdHdvIGF0dHJpYnV0ZXM6IG1pbiBhbmRcbiAqICAgIG1heCB2YWx1ZXMgY292ZXJpbmcgdGhlIHJhbmdlIG9mIHpvb21zIGF0IHdoaWNoIHdlIGV4cGVjdCB0aGUgdGlsZSB0byBiZVxuICogICAgZGlzcGxheWVkLiBUaGVzZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgYnkgZXZhbHVhdGluZyB0aGUgY29tcG9zaXRlIGV4cHJlc3Npb24gZm9yXG4gKiAgICB0aGUgZ2l2ZW4gZmVhdHVyZSBhdCBzdHJhdGVnaWNhbGx5IGNob3NlbiB6b29tIGxldmVscy4gSW4gYWRkaXRpb24gdG8gdGhpc1xuICogICAgYXR0cmlidXRlIGRhdGEsIHdlIGFsc28gdXNlIGEgdW5pZm9ybSB2YWx1ZSB3aGljaCB0aGUgc2hhZGVyIHVzZXMgdG8gaW50ZXJwb2xhdGVcbiAqICAgIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IHZhbHVlIGF0IHRoZSBmaW5hbCBkaXNwbGF5ZWQgem9vbSBsZXZlbC4gVGhlIHVzZSBvZiBhXG4gKiAgICB1bmlmb3JtIGFsbG93cyB1cyB0byBjaGVhcGx5IHVwZGF0ZSB0aGUgdmFsdWUgb24gZXZlcnkgZnJhbWUuXG4gKlxuICogIE5vdGUgdGhhdCB0aGUgc2hhZGVyIHNvdXJjZSB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgdXNpbmcgYSB1bmlmb3JtIG9yXG4gKiAgYXR0cmlidXRlLiBXZSBkeW5hbWljYWxseSBjb21waWxlIHNoYWRlcnMgYXQgcnVudGltZSB0byBhY2NvbW9kYXRlIHRoaXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5pbnRlcmZhY2UgQXR0cmlidXRlQmluZGVyIHtcbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IHZvaWQ7XG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KTogdm9pZDtcbiAgICB1cGxvYWQoQ29udGV4dCk6IHZvaWQ7XG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgVW5pZm9ybUJpbmRlciB7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8Kj4sIHVuaWZvcm1OYW1lOiBzdHJpbmcpOiB2b2lkO1xuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogJFNoYXBlPFVuaWZvcm08Kj4+O1xufVxuXG5jbGFzcyBDb25zdGFudEJpbmRlciBpbXBsZW1lbnRzIFVuaWZvcm1CaW5kZXIge1xuICAgIHZhbHVlOiBtaXhlZDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IG1peGVkLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSBuYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9YCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxtaXhlZD4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoY3VycmVudFZhbHVlLmNvbnN0YW50T3IodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKTogJFNoYXBlPFVuaWZvcm08YW55Pj4ge1xuICAgICAgICByZXR1cm4gKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykgP1xuICAgICAgICAgICAgbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbikgOlxuICAgICAgICAgICAgbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIgaW1wbGVtZW50cyBVbmlmb3JtQmluZGVyIHtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgcGF0dGVybkZyb206ID9BcnJheTxudW1iZXI+O1xuICAgIHBhdHRlcm5UbzogP0FycmF5PG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogbWl4ZWQsIG5hbWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gbmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfWApO1xuICAgICAgICB0aGlzLnBhdHRlcm5Gcm9tID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXR0ZXJuVG8gPSBudWxsO1xuICAgIH1cblxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbzogSW1hZ2VQb3NpdGlvbiwgcG9zRnJvbTogSW1hZ2VQb3NpdGlvbikge1xuICAgICAgICB0aGlzLnBhdHRlcm5UbyA9IHBvc1RvLnRsYnI7XG4gICAgICAgIHRoaXMucGF0dGVybkZyb20gPSBwb3NGcm9tLnRsYnI7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxtaXhlZD4sIHVuaWZvcm1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcG9zID1cbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9wYXR0ZXJuX3RvJyA/IHRoaXMucGF0dGVyblRvIDpcbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9wYXR0ZXJuX2Zyb20nID8gdGhpcy5wYXR0ZXJuRnJvbSA6IG51bGw7XG4gICAgICAgIGlmIChwb3MpIHVuaWZvcm0uc2V0KHBvcyk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbmNsYXNzIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgaW1wbGVtZW50cyBBdHRyaWJ1dGVCaW5kZXIge1xuICAgIGV4cHJlc3Npb246IFNvdXJjZUV4cHJlc3Npb247XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBwYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBwYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IFNvdXJjZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5Pikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHR5cGUgPT09ICdjb2xvcicgPyAyIDogMSxcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoMCksIGZlYXR1cmUsIHt9LCBbXSwgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUobmV3TGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZShzdGFydCwgbmV3TGVuZ3RoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IDB9LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRWYWx1ZShzdGFydCwgZW5kLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHBhY2tDb2xvcih2YWx1ZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksIGNvbG9yWzBdLCBjb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLm1heFZhbHVlLCBNYXRoLmFicyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyICYmIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgaW1wbGVtZW50cyBBdHRyaWJ1dGVCaW5kZXIsIFVuaWZvcm1CaW5kZXIge1xuICAgIGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb247XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbWF4VmFsdWU6IG51bWJlcjtcblxuICAgIHBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHBhaW50VmVydGV4QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuICAgIHBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuXG4gICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbiwgbmFtZXM6IEFycmF5PHN0cmluZz4sIHR5cGU6IHN0cmluZywgdXNlSW50ZWdlclpvb206IGJvb2xlYW4sIHpvb206IG51bWJlciwgUGFpbnRWZXJ0ZXhBcnJheTogQ2xhc3M8U3RydWN0QXJyYXk+KSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gbmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfV90YCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudXNlSW50ZWdlclpvb20gPSB1c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICAgICAgbmFtZTogYGFfJHtuYW1lfWAsXG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQzMicsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB0eXBlID09PSAnY29sb3InID8gNCA6IDIsXG4gICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSwge30sIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20gKyAxKSwgZmVhdHVyZSwge30sIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkucmVzaXplKG5ld0xlbmd0aCk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWUoc3RhcnQsIG5ld0xlbmd0aCwgbWluLCBtYXgpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogdGhpcy56b29tfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiB0aGlzLnpvb20gKyAxfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZShzdGFydCwgZW5kLCBtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgX3NldFBhaW50VmFsdWUoc3RhcnQsIGVuZCwgbWluLCBtYXgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3QgbWluQ29sb3IgPSBwYWNrQ29sb3IobWluKTtcbiAgICAgICAgICAgIGNvbnN0IG1heENvbG9yID0gcGFja0NvbG9yKG1heCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksIG1pbkNvbG9yWzBdLCBtaW5Db2xvclsxXSwgbWF4Q29sb3JbMF0sIG1heENvbG9yWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgbWluLCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIE1hdGguYWJzKG1pbiksIE1hdGguYWJzKG1heCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyICYmIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRVbmlmb3JtKHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLnVzZUludGVnZXJab29tID8gTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIDogZ2xvYmFscy56b29tO1xuICAgICAgICBjb25zdCBmYWN0b3IgPSBjbGFtcCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihjdXJyZW50Wm9vbSwgdGhpcy56b29tLCB0aGlzLnpvb20gKyAxKSwgMCwgMSk7XG4gICAgICAgIHVuaWZvcm0uc2V0KGZhY3Rvcik7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pOiBVbmlmb3JtMWYge1xuICAgICAgICByZXR1cm4gbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyIGltcGxlbWVudHMgQXR0cmlidXRlQmluZGVyIHtcbiAgICBleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbGF5ZXJJZDogc3RyaW5nO1xuXG4gICAgem9vbUluUGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgem9vbU91dFBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHpvb21JblBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIHpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIHVzZUludGVnZXJab29tOiBib29sZWFuLCB6b29tOiBudW1iZXIsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PiwgbGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudXNlSW50ZWdlclpvb20gPSB1c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgdGhpcy5sYXllcklkID0gbGF5ZXJJZDtcblxuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyA9IG5hbWVzLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGBhXyR7bmFtZX1gLFxuICAgICAgICAgICAgdHlwZTogJ1VpbnQxNicsXG4gICAgICAgICAgICBjb21wb25lbnRzOiA0LFxuICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZShsZW5ndGgpO1xuICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZShsZW5ndGgpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlcyhzdGFydCwgbGVuZ3RoLCBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbdGhpcy5sYXllcklkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlcyhzdGFydCwgZW5kLCBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbdGhpcy5sYXllcklkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIF9zZXRQYWludFZhbHVlcyhzdGFydCwgZW5kLCBwYXR0ZXJucywgcG9zaXRpb25zKSB7XG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8ICFwYXR0ZXJucykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHttaW4sIG1pZCwgbWF4fSA9IHBhdHRlcm5zO1xuICAgICAgICBjb25zdCBpbWFnZU1pbiA9IHBvc2l0aW9uc1ttaW5dO1xuICAgICAgICBjb25zdCBpbWFnZU1pZCA9IHBvc2l0aW9uc1ttaWRdO1xuICAgICAgICBjb25zdCBpbWFnZU1heCA9IHBvc2l0aW9uc1ttYXhdO1xuICAgICAgICBpZiAoIWltYWdlTWluIHx8ICFpbWFnZU1pZCB8fCAhaW1hZ2VNYXgpIHJldHVybjtcblxuICAgICAgICAvLyBXZSBwb3B1bGF0ZSB0d28gcGFpbnQgYXJyYXlzIGJlY2F1c2UsIGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGRpcmVjdGlvblxuICAgICAgICAvLyB3ZSdyZSBjcm9zcy1mYWRpbmcgdG8gYXQgbGF5b3V0IHRpbWUuIEluIG9yZGVyIHRvIGtlZXAgdmVydGV4IGF0dHJpYnV0ZXMgdG8gYSBtaW5pbXVtIGFuZCBub3QgcGFzc1xuICAgICAgICAvLyB1bm5lY2Vzc2FyeSB2ZXJ0ZXggZGF0YSB0byB0aGUgc2hhZGVycywgd2UgZGV0ZXJtaW5lIHdoaWNoIHRvIHVwbG9hZCBhdCBkcmF3IHRpbWUuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLFxuICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgIGltYWdlTWluLnRsWzBdLCBpbWFnZU1pbi50bFsxXSwgaW1hZ2VNaW4uYnJbMF0sIGltYWdlTWluLmJyWzFdXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksXG4gICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgaW1hZ2VNYXgudGxbMF0sIGltYWdlTWF4LnRsWzFdLCBpbWFnZU1heC5iclswXSwgaW1hZ2VNYXguYnJbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciAmJiB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXksIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIpIHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIpIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQcm9ncmFtQ29uZmlndXJhdGlvbiBjb250YWlucyB0aGUgbG9naWMgZm9yIGJpbmRpbmcgc3R5bGUgbGF5ZXIgcHJvcGVydGllcyBhbmQgdGlsZVxuICogbGF5ZXIgZmVhdHVyZSBkYXRhIGludG8gR0wgcHJvZ3JhbSB1bmlmb3JtcyBhbmQgdmVydGV4IGF0dHJpYnV0ZXMuXG4gKlxuICogTm9uLWRhdGEtZHJpdmVuIHByb3BlcnR5IHZhbHVlcyBhcmUgYm91bmQgdG8gc2hhZGVyIHVuaWZvcm1zLiBEYXRhLWRyaXZlbiBwcm9wZXJ0eVxuICogdmFsdWVzIGFyZSBib3VuZCB0byB2ZXJ0ZXggYXR0cmlidXRlcy4gSW4gb3JkZXIgdG8gc3VwcG9ydCBhIHVuaWZvcm0gR0xTTCBzeW50YXggb3ZlclxuICogYm90aCwgW01hcGJveCBHTCBTaGFkZXJzXShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1zaGFkZXJzKSBkZWZpbmVzIGEgYCNwcmFnbWFgXG4gKiBhYnN0cmFjdGlvbiwgd2hpY2ggUHJvZ3JhbUNvbmZpZ3VyYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZy4gQXQgcnVudGltZSxcbiAqIGl0IGV4YW1pbmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcGFydGljdWxhciBsYXllciwgY29tYmluZXMgdGhpcyB3aXRoIGZpeGVkIGtub3dsZWRnZVxuICogYWJvdXQgaG93IGxheWVycyBvZiB0aGUgcGFydGljdWxhciB0eXBlIGFyZSBpbXBsZW1lbnRlZCwgYW5kIGRldGVybWluZXMgd2hpY2ggdW5pZm9ybXNcbiAqIGFuZCB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIHJlcXVpcmVkLiBJdCBjYW4gdGhlbiBzdWJzdGl0dXRlIHRoZSBhcHByb3ByaWF0ZSB0ZXh0XG4gKiBpbnRvIHRoZSBzaGFkZXIgc291cmNlIGNvZGUsIGNyZWF0ZSBhbmQgbGluayBhIHByb2dyYW0sIGFuZCBiaW5kIHRoZSB1bmlmb3JtcyBhbmRcbiAqIHZlcnRleCBhdHRyaWJ1dGVzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nLlxuICpcbiAqIFdoZW4gYSB2ZWN0b3IgdGlsZSBpcyBwYXJzZWQsIHRoaXMgc2FtZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG9cbiAqIHBvcHVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVycyBuZWVkZWQgZm9yIGRhdGEtZHJpdmVuIHN0eWxpbmcgdXNpbmcgdGhlIHpvb21cbiAqIGxldmVsIGFuZCBmZWF0dXJlIHByb3BlcnR5IGRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZ3JhbUNvbmZpZ3VyYXRpb24ge1xuICAgIGJpbmRlcnM6IHsgW3N0cmluZ106IChBdHRyaWJ1dGVCaW5kZXIgfCBVbmlmb3JtQmluZGVyKSB9O1xuICAgIGNhY2hlS2V5OiBzdHJpbmc7XG4gICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuXG4gICAgX2J1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogVHlwZWRTdHlsZUxheWVyLCB6b29tOiBudW1iZXIsIGZpbHRlclByb3BlcnRpZXM6IChzdHJpbmcpID0+IGJvb2xlYW4sIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPikge1xuICAgICAgICB0aGlzLmJpbmRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50Ll92YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsdGVyUHJvcGVydGllcyhwcm9wZXJ0eSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsYXllci5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBwYWludEF0dHJpYnV0ZU5hbWVzKHByb3BlcnR5LCBsYXllci50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGU7XG4gICAgICAgICAgICBjb25zdCB1c2VJbnRlZ2VyWm9vbSA9IHZhbHVlLnByb3BlcnR5LnVzZUludGVnZXJab29tO1xuICAgICAgICAgICAgY29uc3QgcHJvcFR5cGUgPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWydwcm9wZXJ0eS10eXBlJ107XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWQgPSBwcm9wVHlwZSA9PT0gJ2Nyb3NzLWZhZGVkJyB8fCBwcm9wVHlwZSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcblxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBpc0Nyb3NzRmFkZWQgP1xuICAgICAgICAgICAgICAgICAgICBuZXcgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKGV4cHJlc3Npb24udmFsdWUsIG5hbWVzKSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBDb25zdGFudEJpbmRlcihleHByZXNzaW9uLnZhbHVlLCBuYW1lcywgdHlwZSk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvdV8ke3Byb3BlcnR5fWApO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScgfHwgaXNDcm9zc0ZhZGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgU3RydWN0QXJyYXlMYXlvdXQgPSBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCAnc291cmNlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kZXJzW3Byb3BlcnR5XSA9IGlzQ3Jvc3NGYWRlZCA/XG4gICAgICAgICAgICAgICAgICAgIG5ldyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKGV4cHJlc3Npb24sIG5hbWVzLCB0eXBlLCB1c2VJbnRlZ2VyWm9vbSwgem9vbSwgU3RydWN0QXJyYXlMYXlvdXQsIGxheWVyLmlkKSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VFeHByZXNzaW9uQmluZGVyKGV4cHJlc3Npb24sIG5hbWVzLCB0eXBlLCBTdHJ1Y3RBcnJheUxheW91dCk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvYV8ke3Byb3BlcnR5fWApO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ2NvbXBvc2l0ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcihleHByZXNzaW9uLCBuYW1lcywgdHlwZSwgdXNlSW50ZWdlclpvb20sIHpvb20sIFN0cnVjdEFycmF5TGF5b3V0KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC96XyR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhY2hlS2V5ID0ga2V5cy5zb3J0KCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgZ2V0TWF4VmFsdWUocHJvcGVydHk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgIHJldHVybiBiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgPyBiaW5kZXIubWF4VmFsdWUgOiAwO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheXMobmV3TGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcilcbiAgICAgICAgICAgICAgICAoYmluZGVyOiBBdHRyaWJ1dGVCaW5kZXIpLnBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGgsIGZlYXR1cmUsIGltYWdlUG9zaXRpb25zLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG86IEltYWdlUG9zaXRpb24sIHBvc0Zyb206IEltYWdlUG9zaXRpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKVxuICAgICAgICAgICAgICAgIGJpbmRlci5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgZmVhdHVyZU1hcDogRmVhdHVyZVBvc2l0aW9uTWFwLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGxheWVyOiBUeXBlZFN0eWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBkaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGZlYXR1cmVTdGF0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZlYXR1cmVNYXAuZ2V0UG9zaXRpb25zKGlkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwb3Mgb2YgcG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHZ0TGF5ZXIuZmVhdHVyZShwb3MuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKSAmJiAoYmluZGVyOiBhbnkpLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9BSE06IFJlbW92ZSBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjI1NVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsYXllci5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRlcjogYW55KS5leHByZXNzaW9uID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYmluZGVyOiBBdHRyaWJ1dGVCaW5kZXIpLnVwZGF0ZVBhaW50QXJyYXkocG9zLnN0YXJ0LCBwb3MuZW5kLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGVzW2lkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICB9XG5cbiAgICBkZWZpbmVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ29uc3RhbnRCaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uYmluZGVyLnVuaWZvcm1OYW1lcy5tYXAobmFtZSA9PiBgI2RlZmluZSBIQVNfVU5JRk9STV8ke25hbWV9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6IEFycmF5PFZlcnRleEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycztcbiAgICB9XG5cbiAgICBnZXRVbmlmb3Jtcyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBBcnJheTxCaW5kZXJVbmlmb3JtPiB7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIENvbnN0YW50QmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb25zdGFudEJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGJpbmRlci51bmlmb3JtTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRlci5nZXRCaW5kaW5nKGNvbnRleHQsIGxvY2F0aW9uc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcbiAgICB9XG5cbiAgICBzZXRVbmlmb3JtczxQcm9wZXJ0aWVzOiBPYmplY3Q+KGNvbnRleHQ6IENvbnRleHQsIGJpbmRlclVuaWZvcm1zOiBBcnJheTxCaW5kZXJVbmlmb3JtPiwgcHJvcGVydGllczogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcGVydGllcz4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMpIHtcbiAgICAgICAgLy8gVW5pZm9ybSBzdGF0ZSBiaW5kaW5ncyBhcmUgb3duZWQgYnkgdGhlIFByb2dyYW0sIGJ1dCB3ZSBzZXQgdGhlbVxuICAgICAgICAvLyBmcm9tIHdpdGhpbiB0aGUgUHJvZ3JhbUNvbmZpZ3VyYXRvbidzIGJpbmRlciBtZW1iZXJzLlxuICAgICAgICBmb3IgKGNvbnN0IHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30gb2YgYmluZGVyVW5pZm9ybXMpIHtcbiAgICAgICAgICAgICh0aGlzLmJpbmRlcnNbcHJvcGVydHldOiBhbnkpLnNldFVuaWZvcm0oYmluZGluZywgZ2xvYmFscywgcHJvcGVydGllcy5nZXQocHJvcGVydHkpLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QnVmZmVycyhjcm9zc2ZhZGU/OiBDcm9zc2ZhZGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChjcm9zc2ZhZGUgJiYgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WZXJ0ZXhCdWZmZXIgPSBjcm9zc2ZhZGUuZnJvbVNjYWxlID09PSAyID8gYmluZGVyLnpvb21JblBhaW50VmVydGV4QnVmZmVyIDogYmluZGVyLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVyblZlcnRleEJ1ZmZlcikgdGhpcy5fYnVmZmVycy5wdXNoKHBhdHRlcm5WZXJ0ZXhCdWZmZXIpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpICYmIGJpbmRlci5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMucHVzaChiaW5kZXIucGFpbnRWZXJ0ZXhCdWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpXG4gICAgICAgICAgICAgICAgYmluZGVyLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBhaW50QnVmZmVycygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKVxuICAgICAgICAgICAgICAgIGJpbmRlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMYXllcjogVHlwZWRTdHlsZUxheWVyPiB7XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiB7W3N0cmluZ106IFByb2dyYW1Db25maWd1cmF0aW9ufTtcbiAgICBuZWVkc1VwbG9hZDogYm9vbGVhbjtcbiAgICBfZmVhdHVyZU1hcDogRmVhdHVyZVBvc2l0aW9uTWFwO1xuICAgIF9idWZmZXJPZmZzZXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgbGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxMYXllcj4sIHpvb206IG51bWJlciwgZmlsdGVyUHJvcGVydGllczogKHN0cmluZykgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXSA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvbihsYXllciwgem9vbSwgZmlsdGVyUHJvcGVydGllcywgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mZWF0dXJlTWFwID0gbmV3IEZlYXR1cmVQb3NpdGlvbk1hcCgpO1xuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheXMobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGluZGV4OiBudW1iZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNba2V5XS5wb3B1bGF0ZVBhaW50QXJyYXlzKGxlbmd0aCwgZmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZlYXR1cmUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fZmVhdHVyZU1hcC5hZGQoZmVhdHVyZS5pZCwgaW5kZXgsIHRoaXMuX2J1ZmZlck9mZnNldCwgbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSBsZW5ndGg7XG5cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBsYXllcnM6ICRSZWFkT25seUFycmF5PFR5cGVkU3R5bGVMYXllcj4sIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXIuaWRdLnVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXMsIHRoaXMuX2ZlYXR1cmVNYXAsIHZ0TGF5ZXIsIGxheWVyLCBpbWFnZVBvc2l0aW9ucykgfHwgdGhpcy5uZWVkc1VwbG9hZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldChsYXllcklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5uZWVkc1VwbG9hZCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhaW50QXR0cmlidXRlTmFtZXMocHJvcGVydHksIHR5cGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lRXhjZXB0aW9ucyA9IHtcbiAgICAgICAgJ3RleHQtb3BhY2l0eSc6IFsnb3BhY2l0eSddLFxuICAgICAgICAnaWNvbi1vcGFjaXR5JzogWydvcGFjaXR5J10sXG4gICAgICAgICd0ZXh0LWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICdpY29uLWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICd0ZXh0LWhhbG8tY29sb3InOiBbJ2hhbG9fY29sb3InXSxcbiAgICAgICAgJ2ljb24taGFsby1jb2xvcic6IFsnaGFsb19jb2xvciddLFxuICAgICAgICAndGV4dC1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAnaWNvbi1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAndGV4dC1oYWxvLXdpZHRoJzogWydoYWxvX3dpZHRoJ10sXG4gICAgICAgICdpY29uLWhhbG8td2lkdGgnOiBbJ2hhbG9fd2lkdGgnXSxcbiAgICAgICAgJ2xpbmUtZ2FwLXdpZHRoJzogWydnYXB3aWR0aCddLFxuICAgICAgICAnbGluZS1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbSddLFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbSddLFxuICAgICAgICAnZmlsbC1leHRydXNpb24tcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVFeGNlcHRpb25zW3Byb3BlcnR5XSB8fCBbcHJvcGVydHkucmVwbGFjZShgJHt0eXBlfS1gLCAnJykucmVwbGFjZSgvLS9nLCAnXycpXTtcbn1cblxuZnVuY3Rpb24gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KSB7XG4gICAgY29uc3QgcHJvcGVydHlFeGNlcHRpb25zID0ge1xuICAgICAgICAnbGluZS1wYXR0ZXJuJzp7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9LFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nOntcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RXhjZXB0aW9uc1twcm9wZXJ0eV07XG59XG5cbmZ1bmN0aW9uIGxheW91dFR5cGUocHJvcGVydHksIHR5cGUsIGJpbmRlclR5cGUpIHtcbiAgICBjb25zdCBkZWZhdWx0TGF5b3V0cyA9IHtcbiAgICAgICAgJ2NvbG9yJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0NGYxNlxuICAgICAgICB9LFxuICAgICAgICAnbnVtYmVyJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MWY0LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbGF5b3V0RXhjZXB0aW9uID0gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KTtcbiAgICByZXR1cm4gIGxheW91dEV4Y2VwdGlvbiAmJiBsYXlvdXRFeGNlcHRpb25bYmluZGVyVHlwZV0gfHwgZGVmYXVsdExheW91dHNbdHlwZV1bYmluZGVyVHlwZV07XG59XG5cbnJlZ2lzdGVyKCdDb25zdGFudEJpbmRlcicsIENvbnN0YW50QmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXInLCBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIpO1xucmVnaXN0ZXIoJ1NvdXJjZUV4cHJlc3Npb25CaW5kZXInLCBTb3VyY2VFeHByZXNzaW9uQmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyJywgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcik7XG5yZWdpc3RlcignQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcicsIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpO1xucmVnaXN0ZXIoJ1Byb2dyYW1Db25maWd1cmF0aW9uJywgUHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHtvbWl0OiBbJ19idWZmZXJzJ119KTtcbnJlZ2lzdGVyKCdQcm9ncmFtQ29uZmlndXJhdGlvblNldCcsIFByb2dyYW1Db25maWd1cmF0aW9uU2V0KTtcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogVGhlIG1heGltdW0gdmFsdWUgb2YgYSBjb29yZGluYXRlIGluIHRoZSBpbnRlcm5hbCB0aWxlIGNvb3JkaW5hdGUgc3lzdGVtLiBDb29yZGluYXRlcyBvZlxuICogYWxsIHNvdXJjZSBmZWF0dXJlcyBub3JtYWxpemVkIHRvIHRoaXMgZXh0ZW50IHVwb24gbG9hZC5cbiAqXG4gKiBUaGUgdmFsdWUgaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgZm9sbG93aW5nOlxuICpcbiAqICogVmVydGV4IGJ1ZmZlciBzdG9yZSBwb3NpdGlvbnMgYXMgc2lnbmVkIDE2IGJpdCBpbnRlZ2Vycy5cbiAqICogT25lIGJpdCBpcyBsb3N0IGZvciBzaWduZWRuZXNzIHRvIHN1cHBvcnQgdGlsZSBidWZmZXJzLlxuICogKiBPbmUgYml0IGlzIGxvc3QgYmVjYXVzZSB0aGUgbGluZSB2ZXJ0ZXggYnVmZmVyIHVzZWQgdG8gcGFjayAxIGJpdCBvZiBvdGhlciBkYXRhIGludG8gdGhlIGludC5cbiAqICogT25lIGJpdCBpcyBsb3N0IHRvIHN1cHBvcnQgZmVhdHVyZXMgZXh0ZW5kaW5nIHBhc3QgdGhlIGV4dGVudCBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGlsZS5cbiAqICogVGhpcyBsZWF2ZXMgdXMgd2l0aCAyXjEzID0gODE5MlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgODE5MjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2UsIGNsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4vZXh0ZW50JztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIFRoZXNlIGJvdW5kcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc3VwcG9ydGVkIGNvb3JkaW5hdGUgdmFsdWVzLlxuLy8gV2hpbGUgdmlzaWJsZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIFswLCBFWFRFTlRdLCB0aWxlcyBtYXkgdGhlb3JldGljYWxseVxuLy8gY29udGFpbiBjb3JkaW5hdGVzIHdpdGhpbiBbLUluZmluaXR5LCBJbmZpbml0eV0uIE91ciByYW5nZSBpcyBsaW1pdGVkIGJ5IHRoZVxuLy8gbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvb3JkaW5hdGUuXG5mdW5jdGlvbiBjcmVhdGVCb3VuZHMoYml0cykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogLTEgKiBNYXRoLnBvdygyLCBiaXRzIC0gMSksXG4gICAgICAgIG1heDogTWF0aC5wb3coMiwgYml0cyAtIDEpIC0gMVxuICAgIH07XG59XG5cbmNvbnN0IGJvdW5kcyA9IGNyZWF0ZUJvdW5kcygxNSk7XG5cbi8qKlxuICogTG9hZHMgYSBnZW9tZXRyeSBmcm9tIGEgVmVjdG9yVGlsZUZlYXR1cmUgYW5kIHNjYWxlcyBpdCB0byB0aGUgY29tbW9uIGV4dGVudFxuICogdXNlZCBpbnRlcm5hbGx5LlxuICogQHBhcmFtIHtWZWN0b3JUaWxlRmVhdHVyZX0gZmVhdHVyZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZEdlb21ldHJ5KGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlKTogQXJyYXk8QXJyYXk8UG9pbnQ+PiB7XG4gICAgY29uc3Qgc2NhbGUgPSBFWFRFTlQgLyBmZWF0dXJlLmV4dGVudDtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUubG9hZEdlb21ldHJ5KCk7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCBnZW9tZXRyeS5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nID0gZ2VvbWV0cnlbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSByaW5nW3BdO1xuICAgICAgICAgICAgLy8gcm91bmQgaGVyZSBiZWNhdXNlIG1hcGJveC1nbC1uYXRpdmUgdXNlcyBpbnRlZ2VycyB0byByZXByZXNlbnRcbiAgICAgICAgICAgIC8vIHBvaW50cyBhbmQgd2UgbmVlZCB0byBkbyB0aGUgc2FtZSB0byBhdm9pZCByZW5lcmluZyBkaWZmZXJlbmNlcy5cbiAgICAgICAgICAgIHBvaW50LnggPSBNYXRoLnJvdW5kKHBvaW50LnggKiBzY2FsZSk7XG4gICAgICAgICAgICBwb2ludC55ID0gTWF0aC5yb3VuZChwb2ludC55ICogc2NhbGUpO1xuXG4gICAgICAgICAgICBpZiAocG9pbnQueCA8IGJvdW5kcy5taW4gfHwgcG9pbnQueCA+IGJvdW5kcy5tYXggfHwgcG9pbnQueSA8IGJvdW5kcy5taW4gfHwgcG9pbnQueSA+IGJvdW5kcy5tYXgpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUnKTtcbiAgICAgICAgICAgICAgICBwb2ludC54ID0gY2xhbXAocG9pbnQueCwgYm91bmRzLm1pbiwgYm91bmRzLm1heCk7XG4gICAgICAgICAgICAgICAgcG9pbnQueSA9IGNsYW1wKHBvaW50LnksIGJvdW5kcy5taW4sIGJvdW5kcy5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW9tZXRyeTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q2lyY2xlTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vY2lyY2xlX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuZnVuY3Rpb24gYWRkQ2lyY2xlVmVydGV4KGxheW91dFZlcnRleEFycmF5LCB4LCB5LCBleHRydWRlWCwgZXh0cnVkZVkpIHtcbiAgICBsYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgKHggKiAyKSArICgoZXh0cnVkZVggKyAxKSAvIDIpLFxuICAgICAgICAoeSAqIDIpICsgKChleHRydWRlWSArIDEpIC8gMikpO1xufVxuXG4vKipcbiAqIENpcmNsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHR3byB0cmlhbmdsZXMuXG4gKlxuICogRWFjaCBjb3JuZXIgaGFzIGEgcG9zIHRoYXQgaXMgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIGFuZCBhbiBleHRydXNpb25cbiAqIHZlY3RvciB0aGF0IGlzIHdoZXJlIGl0IHBvaW50cy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENpcmNsZUJ1Y2tldDxMYXllcjogQ2lyY2xlU3R5bGVMYXllciB8IEhlYXRtYXBTdHlsZUxheWVyPiBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBsYXllcnM6IEFycmF5PExheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8TGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogQ2lyY2xlTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8TGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBDaXJjbGVMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuICAgICAgICBsZXQgY2lyY2xlU29ydEtleSA9IG51bGw7XG5cbiAgICAgICAgLy8gSGVhdG1hcCBsYXllcnMgYXJlIGhhbmRsZWQgaW4gdGhpcyBidWNrZXQgYW5kIGhhdmUgbm8gZXZhbHVhdGVkIHByb3BlcnRpZXMsIHNvIHdlIGNoZWNrIG91ciBhY2Nlc3NcbiAgICAgICAgaWYgKHN0eWxlTGF5ZXIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgICAgIGNpcmNsZVNvcnRLZXkgPSAoKHN0eWxlTGF5ZXI6IGFueSk6IENpcmNsZVN0eWxlTGF5ZXIpLmxheW91dC5nZXQoJ2NpcmNsZS1zb3J0LWtleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBjaXJjbGVTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICAgICAgY2lyY2xlU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgOlxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2lyY2xlU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaW5kZXhdLmZlYXR1cmU7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShidWNrZXRGZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgpO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gcG9pbnQueDtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcblxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIHBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJpZXMuXG4gICAgICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPj0gRVhURU5UIHx8IHkgPCAwIHx8IHkgPj0gRVhURU5UKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZ2VvbWV0cnkgd2lsbCBiZSBvZiB0aGUgUG9pbnQgdHlwZSwgYW5kIHdlJ2xsIGRlcml2ZVxuICAgICAgICAgICAgICAgIC8vIHR3byB0cmlhbmdsZXMgZnJvbSBpdC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAzICAgICAyIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAgICAgICAgIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAwICAgICAxIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5LCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIC0xKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgMSwgLTEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAxLCAxKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDMsIGluZGV4ICsgMik7XG5cbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwge30pO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NpcmNsZUJ1Y2tldCcsIENpcmNsZUJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlQnVja2V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtpc0NvdW50ZXJDbG9ja3dpc2V9IGZyb20gJy4vdXRpbCc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQsIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lLCBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24sIGRpc3RUb1NlZ21lbnRTcXVhcmVkLCBwb2x5Z29uSW50ZXJzZWN0c0JveH07XG5cbnR5cGUgTGluZSA9IEFycmF5PFBvaW50PjtcbnR5cGUgTXVsdGlMaW5lID0gQXJyYXk8TGluZT47XG50eXBlIFJpbmcgPSBBcnJheTxQb2ludD47XG50eXBlIFBvbHlnb24gPSBBcnJheTxQb2ludD47XG50eXBlIE11bHRpUG9seWdvbiA9IEFycmF5PFBvbHlnb24+O1xuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocG9seWdvbkE6IFBvbHlnb24sIHBvbHlnb25COiBQb2x5Z29uKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkIsIHBvbHlnb25BW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkEsIHBvbHlnb25CW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uQSwgcG9seWdvbkIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHBvbHlnb246IFBvbHlnb24sIHBvaW50OiBQb2ludCwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHBvaW50LCBwb2x5Z29uLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHBvbHlnb246IFBvbHlnb24sIG11bHRpUG9seWdvbjogTXVsdGlQb2x5Z29uKSB7XG5cbiAgICBpZiAocG9seWdvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11bHRpUG9seWdvbi5sZW5ndGg7IG0rKykge1xuICAgICAgICBjb25zdCByaW5nID0gbXVsdGlQb2x5Z29uW21dO1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJpbmcubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCByaW5nW25dKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtdWx0aVBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uLCBtdWx0aVBvbHlnb25ba10pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUocG9seWdvbjogUG9seWdvbiwgbXVsdGlMaW5lOiBNdWx0aUxpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IG11bHRpTGluZVtpXTtcblxuICAgICAgICBpZiAocG9seWdvbi5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIGxpbmVba10pKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwb2x5Z29uLCBsaW5lLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQTogTGluZSwgbGluZUI6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG5cbiAgICBpZiAobGluZUEubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKGxpbmVBLCBsaW5lQikpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYW55IHBvaW50IGluIGVpdGhlciBsaW5lIGlzIHdpdGhpbiByYWRpdXMgb2YgdGhlIG90aGVyIGxpbmVcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQltqXSwgbGluZUEsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lQS5sZW5ndGg7IGsrKykge1xuICAgICAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVBW2tdLCBsaW5lQiwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0xpbmUobGluZUE6IExpbmUsIGxpbmVCOiBMaW5lKSB7XG4gICAgaWYgKGxpbmVBLmxlbmd0aCA9PT0gMCB8fCBsaW5lQi5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVBLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBhMCA9IGxpbmVBW2ldO1xuICAgICAgICBjb25zdCBhMSA9IGxpbmVBW2kgKyAxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGIwID0gbGluZUJbal07XG4gICAgICAgICAgICBjb25zdCBiMSA9IGxpbmVCW2ogKyAxXTtcbiAgICAgICAgICAgIGlmIChsaW5lU2VnbWVudEludGVyc2VjdHNMaW5lU2VnbWVudChhMCwgYTEsIGIwLCBiMSkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZVNlZ21lbnRJbnRlcnNlY3RzTGluZVNlZ21lbnQoYTA6IFBvaW50LCBhMTogUG9pbnQsIGIwOiBQb2ludCwgYjE6IFBvaW50KSB7XG4gICAgcmV0dXJuIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYjAsIGIxKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGExLCBiMCwgYjEpICYmXG4gICAgICAgIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYTEsIGIwKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBhMSwgYjEpO1xufVxuXG5mdW5jdGlvbiBwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUocDogUG9pbnQsIGxpbmU6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkaXVzU3F1YXJlZCA9IHJhZGl1cyAqIHJhZGl1cztcblxuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHAuZGlzdFNxcihsaW5lWzBdKSA8IHJhZGl1c1NxdWFyZWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRmluZCBsaW5lIHNlZ21lbnRzIHRoYXQgaGF2ZSBhIGRpc3RhbmNlIDw9IHJhZGl1c14yIHRvIHBcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSB0cmVhdCB0aGUgbGluZSBhcyBcImNvbnRhaW5pbmcgcG9pbnQgcFwiLlxuICAgICAgICBjb25zdCB2ID0gbGluZVtpIC0gMV0sIHcgPSBsaW5lW2ldO1xuICAgICAgICBpZiAoZGlzdFRvU2VnbWVudFNxdWFyZWQocCwgdiwgdykgPCByYWRpdXNTcXVhcmVkKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTUwMTcyNS8zMzEzNzkuXG5mdW5jdGlvbiBkaXN0VG9TZWdtZW50U3F1YXJlZChwOiBQb2ludCwgdjogUG9pbnQsIHc6IFBvaW50KSB7XG4gICAgY29uc3QgbDIgPSB2LmRpc3RTcXIodyk7XG4gICAgaWYgKGwyID09PSAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGNvbnN0IHQgPSAoKHAueCAtIHYueCkgKiAody54IC0gdi54KSArIChwLnkgLSB2LnkpICogKHcueSAtIHYueSkpIC8gbDI7XG4gICAgaWYgKHQgPCAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGlmICh0ID4gMSkgcmV0dXJuIHAuZGlzdFNxcih3KTtcbiAgICByZXR1cm4gcC5kaXN0U3FyKHcuc3ViKHYpLl9tdWx0KHQpLl9hZGQodikpO1xufVxuXG4vLyBwb2ludCBpbiBwb2x5Z29uIHJheSBjYXN0aW5nIGFsZ29yaXRobVxuZnVuY3Rpb24gbXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChyaW5nczogQXJyYXk8UmluZz4sIHA6IFBvaW50KSB7XG4gICAgbGV0IGMgPSBmYWxzZSxcbiAgICAgICAgcmluZywgcDEsIHAyO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByaW5ncy5sZW5ndGg7IGsrKykge1xuICAgICAgICByaW5nID0gcmluZ3Nba107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gcmluZy5sZW5ndGggLSAxOyBpIDwgcmluZy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgICAgIHAxID0gcmluZ1tpXTtcbiAgICAgICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgICAgIGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gICAgICAgICAgICAgICAgYyA9ICFjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uQ29udGFpbnNQb2ludChyaW5nOiBSaW5nLCBwOiBQb2ludCkge1xuICAgIGxldCBjID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSByaW5nLmxlbmd0aCAtIDE7IGkgPCByaW5nLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tqXTtcbiAgICAgICAgaWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgICAgICAgICAgIGMgPSAhYztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCb3gocmluZzogUmluZywgYm94WDE6IG51bWJlciwgYm94WTE6IG51bWJlciwgYm94WDI6IG51bWJlciwgYm94WTI6IG51bWJlcikge1xuICAgIGZvciAoY29uc3QgcCBvZiByaW5nKSB7XG4gICAgICAgIGlmIChib3hYMSA8PSBwLnggJiZcbiAgICAgICAgICAgIGJveFkxIDw9IHAueSAmJlxuICAgICAgICAgICAgYm94WDIgPj0gcC54ICYmXG4gICAgICAgICAgICBib3hZMiA+PSBwLnkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvcm5lcnMgPSBbXG4gICAgICAgIG5ldyBQb2ludChib3hYMSwgYm94WTEpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDEsIGJveFkyKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgyLCBib3hZMiksXG4gICAgICAgIG5ldyBQb2ludChib3hYMiwgYm94WTEpXTtcblxuICAgIGlmIChyaW5nLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb3JuZXIgb2YgY29ybmVycykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHJpbmcsIGNvcm5lcikpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tpICsgMV07XG4gICAgICAgIGlmIChlZGdlSW50ZXJzZWN0c0JveChwMSwgcDIsIGNvcm5lcnMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGVkZ2VJbnRlcnNlY3RzQm94KGUxOiBQb2ludCwgZTI6IFBvaW50LCBjb3JuZXJzOiBBcnJheTxQb2ludD4pIHtcbiAgICBjb25zdCB0bCA9IGNvcm5lcnNbMF07XG4gICAgY29uc3QgYnIgPSBjb3JuZXJzWzJdO1xuICAgIC8vIHRoZSBlZGdlIGFuZCBib3ggZG8gbm90IGludGVyc2VjdCBpbiBlaXRoZXIgdGhlIHggb3IgeSBkaW1lbnNpb25zXG4gICAgaWYgKCgoZTEueCA8IHRsLngpICYmIChlMi54IDwgdGwueCkpIHx8XG4gICAgICAgICgoZTEueCA+IGJyLngpICYmIChlMi54ID4gYnIueCkpIHx8XG4gICAgICAgICgoZTEueSA8IHRsLnkpICYmIChlMi55IDwgdGwueSkpIHx8XG4gICAgICAgICgoZTEueSA+IGJyLnkpICYmIChlMi55ID4gYnIueSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgY29ybmVycyBvZiB0aGUgYm94IGFyZSBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBlZGdlXG4gICAgY29uc3QgZGlyID0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1swXSk7XG4gICAgcmV0dXJuIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1sxXSkgfHxcbiAgICAgICAgZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzJdKSB8fFxuICAgICAgICBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbM10pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tIFwiLi9wcm9wZXJ0aWVzXCI7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENpcmNsZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4aW11bVBhaW50VmFsdWUocHJvcGVydHk6IHN0cmluZywgbGF5ZXI6IFN0eWxlTGF5ZXIsIGJ1Y2tldDogQ2lyY2xlQnVja2V0PCo+IHwgTGluZUJ1Y2tldCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSAoKGxheWVyLnBhaW50OiBhbnkpLmdldChwcm9wZXJ0eSk6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxhbnk+KS52YWx1ZTtcbiAgICBpZiAodmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKS5nZXRNYXhWYWx1ZShwcm9wZXJ0eSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRGlzdGFuY2UodHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh0cmFuc2xhdGVbMF0gKiB0cmFuc2xhdGVbMF0gKyB0cmFuc2xhdGVbMV0gKiB0cmFuc2xhdGVbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQW5jaG9yOiAndmlld3BvcnQnIHwgJ21hcCcsXG4gICAgICAgICAgICAgICAgICAgYmVhcmluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpIHtcbiAgICBpZiAoIXRyYW5zbGF0ZVswXSAmJiAhdHJhbnNsYXRlWzFdKSB7XG4gICAgICAgIHJldHVybiBxdWVyeUdlb21ldHJ5O1xuICAgIH1cbiAgICBjb25zdCBwdCA9IFBvaW50LmNvbnZlcnQodHJhbnNsYXRlKS5fbXVsdChwaXhlbHNUb1RpbGVVbml0cyk7XG5cbiAgICBpZiAodHJhbnNsYXRlQW5jaG9yID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgcHQuX3JvdGF0ZSgtYmVhcmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlHZW9tZXRyeS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2ludCA9IHF1ZXJ5R2VvbWV0cnlbaV07XG4gICAgICAgIHRyYW5zbGF0ZWQucHVzaChwb2ludC5zdWIocHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJjaXJjbGUtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImNpcmNsZS1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9jaXJjbGVcIl1bXCJjaXJjbGUtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiY2lyY2xlLXJhZGl1c1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiY2lyY2xlLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1waXRjaC1zY2FsZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiY2lyY2xlLXJhZGl1c1wiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1yYWRpdXNcIl0pLFxuICAgIFwiY2lyY2xlLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLWNvbG9yXCJdKSxcbiAgICBcImNpcmNsZS1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLWJsdXJcIl0pLFxuICAgIFwiY2lyY2xlLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtb3BhY2l0eVwiXSksXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtdHJhbnNsYXRlXCJdKSxcbiAgICBcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1waXRjaC1zY2FsZVwiXSksXG4gICAgXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2Utd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2UtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvKipcclxuICogQ29tbW9uIHV0aWxpdGllc1xyXG4gKiBAbW9kdWxlIGdsTWF0cml4XHJcbiAqL1xuLy8gQ29uZmlndXJhdGlvbiBDb25zdGFudHNcbmV4cG9ydCB2YXIgRVBTSUxPTiA9IDAuMDAwMDAxO1xuZXhwb3J0IHZhciBBUlJBWV9UWVBFID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDMyQXJyYXkgOiBBcnJheTtcbmV4cG9ydCB2YXIgUkFORE9NID0gTWF0aC5yYW5kb207XG4vKipcclxuICogU2V0cyB0aGUgdHlwZSBvZiBhcnJheSB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IHZlY3RvcnMgYW5kIG1hdHJpY2VzXHJcbiAqXHJcbiAqIEBwYXJhbSB7VHlwZX0gdHlwZSBBcnJheSB0eXBlLCBzdWNoIGFzIEZsb2F0MzJBcnJheSBvciBBcnJheVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1hdHJpeEFycmF5VHlwZSh0eXBlKSB7XG4gIEFSUkFZX1RZUEUgPSB0eXBlO1xufVxudmFyIGRlZ3JlZSA9IE1hdGguUEkgLyAxODA7XG4vKipcclxuICogQ29udmVydCBEZWdyZWUgVG8gUmFkaWFuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIEFuZ2xlIGluIERlZ3JlZXNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1JhZGlhbihhKSB7XG4gIHJldHVybiBhICogZGVncmVlO1xufVxuLyoqXHJcbiAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IHRoZSBhcmd1bWVudHMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3aXRoaW4gYW4gYWJzb2x1dGVcclxuICogb3IgcmVsYXRpdmUgdG9sZXJhbmNlIG9mIGdsTWF0cml4LkVQU0lMT04gKGFuIGFic29sdXRlIHRvbGVyYW5jZSBpcyB1c2VkIGZvciB2YWx1ZXMgbGVzc1xyXG4gKiB0aGFuIG9yIGVxdWFsIHRvIDEuMCwgYW5kIGEgcmVsYXRpdmUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIGxhcmdlciB2YWx1ZXMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIFRoZSBmaXJzdCBudW1iZXIgdG8gdGVzdC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgVGhlIHNlY29uZCBudW1iZXIgdG8gdGVzdC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG51bWJlcnMgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IEVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEpLCBNYXRoLmFicyhiKSk7XG59XG5pZiAoIU1hdGguaHlwb3QpIE1hdGguaHlwb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB5ID0gMCxcbiAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB5ICs9IGFyZ3VtZW50c1tpXSAqIGFyZ3VtZW50c1tpXTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnNxcnQoeSk7XG59OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDJ4MiBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dCBBIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTEwLCBtMTEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMTAsIG0xMSkge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlXG4gIC8vIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTEgPSBhWzFdO1xuICAgIG91dFsxXSA9IGFbMl07XG4gICAgb3V0WzJdID0gYTE7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzJdO1xuICAgIG91dFsyXSA9IGFbMV07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYTMgKiBkZXQ7XG4gIG91dFsxXSA9IC1hMSAqIGRldDtcbiAgb3V0WzJdID0gLWEyICogZGV0O1xuICBvdXRbM10gPSBhMCAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXG4gIHZhciBhMCA9IGFbMF07XG4gIG91dFswXSA9IGFbM107XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYTA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgb3V0WzFdID0gYTEgKiBiMCArIGEzICogYjE7XG4gIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xuICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGEwICogYyArIGEyICogcztcbiAgb3V0WzFdID0gYTEgKiBjICsgYTMgKiBzO1xuICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICBvdXRbM10gPSBhMSAqIC1zICsgYTMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTAgKiB2MDtcbiAgb3V0WzFdID0gYTEgKiB2MDtcbiAgb3V0WzJdID0gYTIgKiB2MTtcbiAgb3V0WzNdID0gYTMgKiB2MTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDIuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCBtYXQyIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0Mi5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDIuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgbWF0MiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSB2WzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBMRFUoTCwgRCwgVSwgYSkge1xuICBMWzJdID0gYVsyXSAvIGFbMF07XG4gIFVbMF0gPSBhWzBdO1xuICBVWzFdID0gYVsxXTtcbiAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcbiAgcmV0dXJuIFtMLCBELCBVXTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSk7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyeDMgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBiLCBjLFxyXG4gKiAgZCwgdHgsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYiwgMCxcclxuICogIGMsIGQsIDAsXHJcbiAqICB0eCwgdHksIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCBjb2x1bW4gaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MmQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MmQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIENvbXBvbmVudCBBIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBDb21wb25lbnQgQiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgQ29tcG9uZW50IEMgKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBkIENvbXBvbmVudCBEIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHggQ29tcG9uZW50IFRYIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHkgQ29tcG9uZW50IFRZIChpbmRleCA1KVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IEEgbmV3IG1hdDJkXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhhLCBiLCBjLCBkLCB0eCwgdHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuICBvdXRbMF0gPSBhO1xuICBvdXRbMV0gPSBiO1xuICBvdXRbMl0gPSBjO1xuICBvdXRbM10gPSBkO1xuICBvdXRbNF0gPSB0eDtcbiAgb3V0WzVdID0gdHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MmQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQ29tcG9uZW50IEEgKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIENvbXBvbmVudCBCIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBDb21wb25lbnQgQyAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IGQgQ29tcG9uZW50IEQgKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eCBDb21wb25lbnQgVFggKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eSBDb21wb25lbnQgVFkgKGluZGV4IDUpXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgYSwgYiwgYywgZCwgdHgsIHR5KSB7XG4gIG91dFswXSA9IGE7XG4gIG91dFsxXSA9IGI7XG4gIG91dFsyXSA9IGM7XG4gIG91dFszXSA9IGQ7XG4gIG91dFs0XSA9IHR4O1xuICBvdXRbNV0gPSB0eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhYSA9IGFbMF0sXG4gICAgICBhYiA9IGFbMV0sXG4gICAgICBhYyA9IGFbMl0sXG4gICAgICBhZCA9IGFbM107XG4gIHZhciBhdHggPSBhWzRdLFxuICAgICAgYXR5ID0gYVs1XTtcbiAgdmFyIGRldCA9IGFhICogYWQgLSBhYiAqIGFjO1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IGFkICogZGV0O1xuICBvdXRbMV0gPSAtYWIgKiBkZXQ7XG4gIG91dFsyXSA9IC1hYyAqIGRldDtcbiAgb3V0WzNdID0gYWEgKiBkZXQ7XG4gIG91dFs0XSA9IChhYyAqIGF0eSAtIGFkICogYXR4KSAqIGRldDtcbiAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV07XG4gIG91dFswXSA9IGEwICogYjAgKyBhMiAqIGIxO1xuICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XG4gIG91dFszXSA9IGExICogYjIgKyBhMyAqIGIzO1xuICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xuICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQyZCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGEwICogYyArIGEyICogcztcbiAgb3V0WzFdID0gYTEgKiBjICsgYTMgKiBzO1xuICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICBvdXRbM10gPSBhMSAqIC1zICsgYTMgKiBjO1xuICBvdXRbNF0gPSBhNDtcbiAgb3V0WzVdID0gYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTAgKiB2MDtcbiAgb3V0WzFdID0gYTEgKiB2MDtcbiAgb3V0WzJdID0gYTIgKiB2MTtcbiAgb3V0WzNdID0gYTMgKiB2MTtcbiAgb3V0WzRdID0gYTQ7XG4gIG91dFs1XSA9IGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciB2MCA9IHZbMF0sXG4gICAgICB2MSA9IHZbMV07XG4gIG91dFswXSA9IGEwO1xuICBvdXRbMV0gPSBhMTtcbiAgb3V0WzJdID0gYTI7XG4gIG91dFszXSA9IGEzO1xuICBvdXRbNF0gPSBhMCAqIHYwICsgYTIgKiB2MSArIGE0O1xuICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gYztcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSB2WzFdO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSB2WzBdO1xuICBvdXRbNV0gPSB2WzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ21hdDJkKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCAxKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICBvdXRbNF0gPSBhWzRdIC0gYls0XTtcbiAgb3V0WzVdID0gYVs1XSAtIGJbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDJkJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdICogc2NhbGU7XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyZH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDN4MyBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQzXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQ0KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzRdO1xuICBvdXRbNF0gPSBhWzVdO1xuICBvdXRbNV0gPSBhWzZdO1xuICBvdXRbNl0gPSBhWzhdO1xuICBvdXRbN10gPSBhWzldO1xuICBvdXRbOF0gPSBhWzEwXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0M30gYSBuZXcgM3gzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQzIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcmV0dXJucyB7bWF0M30gQSBuZXcgbWF0M1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMikge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0xMDtcbiAgb3V0WzRdID0gbTExO1xuICBvdXRbNV0gPSBtMTI7XG4gIG91dFs2XSA9IG0yMDtcbiAgb3V0WzddID0gbTIxO1xuICBvdXRbOF0gPSBtMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0xMDtcbiAgb3V0WzRdID0gbTExO1xuICBvdXRbNV0gPSBtMTI7XG4gIG91dFs2XSA9IG0yMDtcbiAgb3V0WzddID0gbTIxO1xuICBvdXRbOF0gPSBtMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MyB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMTIgPSBhWzVdO1xuICAgIG91dFsxXSA9IGFbM107XG4gICAgb3V0WzJdID0gYVs2XTtcbiAgICBvdXRbM10gPSBhMDE7XG4gICAgb3V0WzVdID0gYVs3XTtcbiAgICBvdXRbNl0gPSBhMDI7XG4gICAgb3V0WzddID0gYTEyO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVszXTtcbiAgICBvdXRbMl0gPSBhWzZdO1xuICAgIG91dFszXSA9IGFbMV07XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzddO1xuICAgIG91dFs2XSA9IGFbMl07XG4gICAgb3V0WzddID0gYVs1XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgdmFyIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcbiAgdmFyIGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XG4gIHZhciBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxO1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IGIwMSAqIGRldDtcbiAgb3V0WzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xuICBvdXRbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcbiAgb3V0WzNdID0gYjExICogZGV0O1xuICBvdXRbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcbiAgb3V0WzVdID0gKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0O1xuICBvdXRbNl0gPSBiMjEgKiBkZXQ7XG4gIG91dFs3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcbiAgb3V0WzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgb3V0WzBdID0gYTExICogYTIyIC0gYTEyICogYTIxO1xuICBvdXRbMV0gPSBhMDIgKiBhMjEgLSBhMDEgKiBhMjI7XG4gIG91dFsyXSA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgb3V0WzNdID0gYTEyICogYTIwIC0gYTEwICogYTIyO1xuICBvdXRbNF0gPSBhMDAgKiBhMjIgLSBhMDIgKiBhMjA7XG4gIG91dFs1XSA9IGEwMiAqIGExMCAtIGEwMCAqIGExMjtcbiAgb3V0WzZdID0gYTEwICogYTIxIC0gYTExICogYTIwO1xuICBvdXRbN10gPSBhMDEgKiBhMjAgLSBhMDAgKiBhMjE7XG4gIG91dFs4XSA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHJldHVybiBhMDAgKiAoYTIyICogYTExIC0gYTEyICogYTIxKSArIGEwMSAqICgtYTIyICogYTEwICsgYTEyICogYTIwKSArIGEwMiAqIChhMjEgKiBhMTAgLSBhMTEgKiBhMjApO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHZhciBiMDAgPSBiWzBdLFxuICAgICAgYjAxID0gYlsxXSxcbiAgICAgIGIwMiA9IGJbMl07XG4gIHZhciBiMTAgPSBiWzNdLFxuICAgICAgYjExID0gYls0XSxcbiAgICAgIGIxMiA9IGJbNV07XG4gIHZhciBiMjAgPSBiWzZdLFxuICAgICAgYjIxID0gYls3XSxcbiAgICAgIGIyMiA9IGJbOF07XG4gIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcbiAgb3V0WzFdID0gYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxO1xuICBvdXRbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XG4gIG91dFszXSA9IGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMDtcbiAgb3V0WzRdID0gYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxO1xuICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XG4gIG91dFs2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcbiAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xuICBvdXRbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0MyBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0gYTAwO1xuICBvdXRbMV0gPSBhMDE7XG4gIG91dFsyXSA9IGEwMjtcbiAgb3V0WzNdID0gYTEwO1xuICBvdXRbNF0gPSBhMTE7XG4gIG91dFs1XSA9IGExMjtcbiAgb3V0WzZdID0geCAqIGEwMCArIHkgKiBhMTAgKyBhMjA7XG4gIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xuICBvdXRbOF0gPSB4ICogYTAyICsgeSAqIGExMiArIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MyBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XSxcbiAgICAgIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XSxcbiAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGMgKiBhMDAgKyBzICogYTEwO1xuICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcbiAgb3V0WzJdID0gYyAqIGEwMiArIHMgKiBhMTI7XG4gIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xuICBvdXRbNF0gPSBjICogYTExIC0gcyAqIGEwMTtcbiAgb3V0WzVdID0gYyAqIGExMiAtIHMgKiBhMDI7XG4gIG91dFs2XSA9IGEyMDtcbiAgb3V0WzddID0gYTIxO1xuICBvdXRbOF0gPSBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG47XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQzIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0geCAqIGFbMF07XG4gIG91dFsxXSA9IHggKiBhWzFdO1xuICBvdXRbMl0gPSB4ICogYVsyXTtcbiAgb3V0WzNdID0geSAqIGFbM107XG4gIG91dFs0XSA9IHkgKiBhWzRdO1xuICBvdXRbNV0gPSB5ICogYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IHZbMF07XG4gIG91dFs3XSA9IHZbMV07XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAtcztcbiAgb3V0WzRdID0gYztcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gdlsxXTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBmcm9tIGEgbWF0MmQgaW50byBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNvcHlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0MmQob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IGFbMl07XG4gIG91dFs0XSA9IGFbM107XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IGFbNF07XG4gIG91dFs3XSA9IGFbNV07XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuKiBDYWxjdWxhdGVzIGEgM3gzIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbipcclxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiogQHBhcmFtIHtxdWF0fSBxIFF1YXRlcm5pb24gdG8gY3JlYXRlIG1hdHJpeCBmcm9tXHJcbipcclxuKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUXVhdChvdXQsIHEpIHtcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB5eCA9IHkgKiB4MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgenggPSB6ICogeDI7XG4gIHZhciB6eSA9IHogKiB5MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcbiAgb3V0WzNdID0geXggLSB3ejtcbiAgb3V0WzZdID0genggKyB3eTtcbiAgb3V0WzFdID0geXggKyB3ejtcbiAgb3V0WzRdID0gMSAtIHh4IC0geno7XG4gIG91dFs3XSA9IHp5IC0gd3g7XG4gIG91dFsyXSA9IHp4IC0gd3k7XG4gIG91dFs1XSA9IHp5ICsgd3g7XG4gIG91dFs4XSA9IDEgLSB4eCAtIHl5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiogQ2FsY3VsYXRlcyBhIDN4MyBub3JtYWwgbWF0cml4ICh0cmFuc3Bvc2UgaW52ZXJzZSkgZnJvbSB0aGUgNHg0IG1hdHJpeFxyXG4qXHJcbiogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4qIEBwYXJhbSB7bWF0NH0gYSBNYXQ0IHRvIGRlcml2ZSB0aGUgbm9ybWFsIG1hdHJpeCBmcm9tXHJcbipcclxuKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxGcm9tTWF0NChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xuICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcbiAgb3V0WzJdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xuICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgb3V0WzVdID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gIG91dFs2XSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICBvdXRbN10gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcbiAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgMkQgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFdpZHRoIG9mIHlvdXIgZ2wgY29udGV4dFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IEhlaWdodCBvZiBnbCBjb250ZXh0XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0aW9uKG91dCwgd2lkdGgsIGhlaWdodCkge1xuICBvdXRbMF0gPSAyIC8gd2lkdGg7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IC0yIC8gaGVpZ2h0O1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAtMTtcbiAgb3V0WzddID0gMTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAnbWF0MygnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcsICcgKyBhWzRdICsgJywgJyArIGFbNV0gKyAnLCAnICsgYVs2XSArICcsICcgKyBhWzddICsgJywgJyArIGFbOF0gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvYihhKSB7XG4gIHJldHVybiBNYXRoLmh5cG90KGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10sIGFbOF0pO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgb3V0WzZdID0gYVs2XSAtIGJbNl07XG4gIG91dFs3XSA9IGFbN10gLSBiWzddO1xuICBvdXRbOF0gPSBhWzhdIC0gYls4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MydzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdICogc2NhbGU7XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdICogc2NhbGU7XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdICogc2NhbGU7XG4gIG91dFs3XSA9IGFbN10gKyBiWzddICogc2NhbGU7XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQzfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddICYmIGFbOF0gPT09IGJbOF07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQzfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XSxcbiAgICAgIGE4ID0gYVs4XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XSxcbiAgICAgIGI4ID0gYls4XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDR4NCBNYXRyaXg8YnI+Rm9ybWF0OiBjb2x1bW4tbWFqb3IsIHdoZW4gdHlwZWQgb3V0IGl0IGxvb2tzIGxpa2Ugcm93LW1ham9yPGJyPlRoZSBtYXRyaWNlcyBhcmUgYmVpbmcgcG9zdCBtdWx0aXBsaWVkLlxyXG4gKiBAbW9kdWxlIG1hdDRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0NCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBhIG5ldyA0eDQgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICBvdXRbOV0gPSBhWzldO1xuICBvdXRbMTBdID0gYVsxMF07XG4gIG91dFsxMV0gPSBhWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQ0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICBvdXRbOV0gPSBhWzldO1xuICBvdXRbMTBdID0gYVsxMF07XG4gIG91dFsxMV0gPSBhWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQ0IHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBBIG5ldyBtYXQ0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTAxID0gYVsxXSxcbiAgICAgICAgYTAyID0gYVsyXSxcbiAgICAgICAgYTAzID0gYVszXTtcbiAgICB2YXIgYTEyID0gYVs2XSxcbiAgICAgICAgYTEzID0gYVs3XTtcbiAgICB2YXIgYTIzID0gYVsxMV07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGEwMTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGEwMjtcbiAgICBvdXRbOV0gPSBhMTI7XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhMDM7XG4gICAgb3V0WzEzXSA9IGExMztcbiAgICBvdXRbMTRdID0gYTIzO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGFbMV07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGFbMl07XG4gICAgb3V0WzldID0gYVs2XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhWzNdO1xuICAgIG91dFsxM10gPSBhWzddO1xuICAgIG91dFsxNF0gPSBhWzExXTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xuICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcbiAgb3V0WzNdID0gKGEyMiAqIGIwNCAtIGEyMSAqIGIwNSAtIGEyMyAqIGIwMykgKiBkZXQ7XG4gIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xuICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgb3V0WzZdID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xuICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcbiAgb3V0WzldID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcbiAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xuICBvdXRbMTJdID0gKGExMSAqIGIwNyAtIGExMCAqIGIwOSAtIGExMiAqIGIwNikgKiBkZXQ7XG4gIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcbiAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xuICBvdXRbMTVdID0gKGEyMCAqIGIwMyAtIGEyMSAqIGIwMSArIGEyMiAqIGIwMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIG91dFswXSA9IGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKTtcbiAgb3V0WzFdID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xuICBvdXRbMl0gPSBhMDEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMik7XG4gIG91dFszXSA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzRdID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xuICBvdXRbNV0gPSBhMDAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMik7XG4gIG91dFs2XSA9IC0oYTAwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzddID0gYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbOF0gPSBhMTAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSk7XG4gIG91dFs5XSA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcbiAgb3V0WzEwXSA9IGEwMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKTtcbiAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcbiAgb3V0WzEyXSA9IC0oYTEwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpKTtcbiAgb3V0WzEzXSA9IGEwMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKTtcbiAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcbiAgb3V0WzE1XSA9IGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0c1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdOyAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcblxuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzFdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsyXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbM10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzRdO1xuICBiMSA9IGJbNV07XG4gIGIyID0gYls2XTtcbiAgYjMgPSBiWzddO1xuICBvdXRbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzVdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFs2XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzhdO1xuICBiMSA9IGJbOV07XG4gIGIyID0gYlsxMF07XG4gIGIzID0gYlsxMV07XG4gIG91dFs4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzEwXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYlsxMl07XG4gIGIxID0gYlsxM107XG4gIGIyID0gYlsxNF07XG4gIGIzID0gYlsxNV07XG4gIG91dFsxMl0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzEzXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFsxNV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGUgYSBtYXQ0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdLFxuICAgICAgeiA9IHZbMl07XG4gIHZhciBhMDAsIGEwMSwgYTAyLCBhMDM7XG4gIHZhciBhMTAsIGExMSwgYTEyLCBhMTM7XG4gIHZhciBhMjAsIGEyMSwgYTIyLCBhMjM7XG5cbiAgaWYgKGEgPT09IG91dCkge1xuICAgIG91dFsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxXSAqIHggKyBhWzVdICogeSArIGFbOV0gKiB6ICsgYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMl0gKiB4ICsgYVs2XSAqIHkgKyBhWzEwXSAqIHogKyBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xuICB9IGVsc2Uge1xuICAgIGEwMCA9IGFbMF07XG4gICAgYTAxID0gYVsxXTtcbiAgICBhMDIgPSBhWzJdO1xuICAgIGEwMyA9IGFbM107XG4gICAgYTEwID0gYVs0XTtcbiAgICBhMTEgPSBhWzVdO1xuICAgIGExMiA9IGFbNl07XG4gICAgYTEzID0gYVs3XTtcbiAgICBhMjAgPSBhWzhdO1xuICAgIGEyMSA9IGFbOV07XG4gICAgYTIyID0gYVsxMF07XG4gICAgYTIzID0gYVsxMV07XG4gICAgb3V0WzBdID0gYTAwO1xuICAgIG91dFsxXSA9IGEwMTtcbiAgICBvdXRbMl0gPSBhMDI7XG4gICAgb3V0WzNdID0gYTAzO1xuICAgIG91dFs0XSA9IGExMDtcbiAgICBvdXRbNV0gPSBhMTE7XG4gICAgb3V0WzZdID0gYTEyO1xuICAgIG91dFs3XSA9IGExMztcbiAgICBvdXRbOF0gPSBhMjA7XG4gICAgb3V0WzldID0gYTIxO1xuICAgIG91dFsxMF0gPSBhMjI7XG4gICAgb3V0WzExXSA9IGEyMztcbiAgICBvdXRbMTJdID0gYTAwICogeCArIGExMCAqIHkgKyBhMjAgKiB6ICsgYVsxMl07XG4gICAgb3V0WzEzXSA9IGEwMSAqIHggKyBhMTEgKiB5ICsgYTIxICogeiArIGFbMTNdO1xuICAgIG91dFsxNF0gPSBhMDIgKiB4ICsgYTEyICogeSArIGEyMiAqIHogKyBhWzE0XTtcbiAgICBvdXRbMTVdID0gYTAzICogeCArIGExMyAqIHkgKyBhMjMgKiB6ICsgYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMyBub3QgdXNpbmcgdmVjdG9yaXphdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICBvdXRbMF0gPSBhWzBdICogeDtcbiAgb3V0WzFdID0gYVsxXSAqIHg7XG4gIG91dFsyXSA9IGFbMl0gKiB4O1xuICBvdXRbM10gPSBhWzNdICogeDtcbiAgb3V0WzRdID0gYVs0XSAqIHk7XG4gIG91dFs1XSA9IGFbNV0gKiB5O1xuICBvdXRbNl0gPSBhWzZdICogeTtcbiAgb3V0WzddID0gYVs3XSAqIHk7XG4gIG91dFs4XSA9IGFbOF0gKiB6O1xuICBvdXRbOV0gPSBhWzldICogejtcbiAgb3V0WzEwXSA9IGFbMTBdICogejtcbiAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQ0IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIGdpdmVuIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQsIGF4aXMpIHtcbiAgdmFyIHggPSBheGlzWzBdLFxuICAgICAgeSA9IGF4aXNbMV0sXG4gICAgICB6ID0gYXhpc1syXTtcbiAgdmFyIGxlbiA9IE1hdGguaHlwb3QoeCwgeSwgeik7XG4gIHZhciBzLCBjLCB0O1xuICB2YXIgYTAwLCBhMDEsIGEwMiwgYTAzO1xuICB2YXIgYTEwLCBhMTEsIGExMiwgYTEzO1xuICB2YXIgYTIwLCBhMjEsIGEyMiwgYTIzO1xuICB2YXIgYjAwLCBiMDEsIGIwMjtcbiAgdmFyIGIxMCwgYjExLCBiMTI7XG4gIHZhciBiMjAsIGIyMSwgYjIyO1xuXG4gIGlmIChsZW4gPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZW4gPSAxIC8gbGVuO1xuICB4ICo9IGxlbjtcbiAgeSAqPSBsZW47XG4gIHogKj0gbGVuO1xuICBzID0gTWF0aC5zaW4ocmFkKTtcbiAgYyA9IE1hdGguY29zKHJhZCk7XG4gIHQgPSAxIC0gYztcbiAgYTAwID0gYVswXTtcbiAgYTAxID0gYVsxXTtcbiAgYTAyID0gYVsyXTtcbiAgYTAzID0gYVszXTtcbiAgYTEwID0gYVs0XTtcbiAgYTExID0gYVs1XTtcbiAgYTEyID0gYVs2XTtcbiAgYTEzID0gYVs3XTtcbiAgYTIwID0gYVs4XTtcbiAgYTIxID0gYVs5XTtcbiAgYTIyID0gYVsxMF07XG4gIGEyMyA9IGFbMTFdOyAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcblxuICBiMDAgPSB4ICogeCAqIHQgKyBjO1xuICBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcbiAgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XG4gIGIxMCA9IHggKiB5ICogdCAtIHogKiBzO1xuICBiMTEgPSB5ICogeSAqIHQgKyBjO1xuICBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcbiAgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7XG4gIGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xuICBiMjIgPSB6ICogeiAqIHQgKyBjOyAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcbiAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xuICBvdXRbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XG4gIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcbiAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xuICBvdXRbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XG4gIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcbiAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xuICBvdXRbOF0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XG4gIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcbiAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcbiAgb3V0WzExXSA9IGEwMyAqIGIyMCArIGExMyAqIGIyMSArIGEyMyAqIGIyMjtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGExMCA9IGFbNF07XG4gIHZhciBhMTEgPSBhWzVdO1xuICB2YXIgYTEyID0gYVs2XTtcbiAgdmFyIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdO1xuICB2YXIgYTIxID0gYVs5XTtcbiAgdmFyIGEyMiA9IGFbMTBdO1xuICB2YXIgYTIzID0gYVsxMV07XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcbiAgb3V0WzVdID0gYTExICogYyArIGEyMSAqIHM7XG4gIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xuICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcbiAgb3V0WzhdID0gYTIwICogYyAtIGExMCAqIHM7XG4gIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xuICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XG4gIG91dFsxMV0gPSBhMjMgKiBjIC0gYTEzICogcztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMDAgPSBhWzBdO1xuICB2YXIgYTAxID0gYVsxXTtcbiAgdmFyIGEwMiA9IGFbMl07XG4gIHZhciBhMDMgPSBhWzNdO1xuICB2YXIgYTIwID0gYVs4XTtcbiAgdmFyIGEyMSA9IGFbOV07XG4gIHZhciBhMjIgPSBhWzEwXTtcbiAgdmFyIGEyMyA9IGFbMTFdO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbNl07XG4gICAgb3V0WzddID0gYVs3XTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XG4gIG91dFsxXSA9IGEwMSAqIGMgLSBhMjEgKiBzO1xuICBvdXRbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcbiAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XG4gIG91dFs4XSA9IGEwMCAqIHMgKyBhMjAgKiBjO1xuICBvdXRbOV0gPSBhMDEgKiBzICsgYTIxICogYztcbiAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xuICBvdXRbMTFdID0gYTAzICogcyArIGEyMyAqIGM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF07XG4gIHZhciBhMTEgPSBhWzVdO1xuICB2YXIgYTEyID0gYVs2XTtcbiAgdmFyIGExMyA9IGFbN107XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICBvdXRbOV0gPSBhWzldO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgKyBhMTAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcbiAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgKyBhMTMgKiBzO1xuICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcbiAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XG4gIG91dFs2XSA9IGExMiAqIGMgLSBhMDIgKiBzO1xuICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjM30gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IHZbMV07XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSB2WzJdO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGUgYXJvdW5kIGEgZ2l2ZW4gYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZShkZXN0LCBkZXN0LCByYWQsIGF4aXMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQsIGF4aXMpIHtcbiAgdmFyIHggPSBheGlzWzBdLFxuICAgICAgeSA9IGF4aXNbMV0sXG4gICAgICB6ID0gYXhpc1syXTtcbiAgdmFyIGxlbiA9IE1hdGguaHlwb3QoeCwgeSwgeik7XG4gIHZhciBzLCBjLCB0O1xuXG4gIGlmIChsZW4gPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZW4gPSAxIC8gbGVuO1xuICB4ICo9IGxlbjtcbiAgeSAqPSBsZW47XG4gIHogKj0gbGVuO1xuICBzID0gTWF0aC5zaW4ocmFkKTtcbiAgYyA9IE1hdGguY29zKHJhZCk7XG4gIHQgPSAxIC0gYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSB4ICogeCAqIHQgKyBjO1xuICBvdXRbMV0gPSB5ICogeCAqIHQgKyB6ICogcztcbiAgb3V0WzJdID0geiAqIHggKiB0IC0geSAqIHM7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHggKiB5ICogdCAtIHogKiBzO1xuICBvdXRbNV0gPSB5ICogeSAqIHQgKyBjO1xuICBvdXRbNl0gPSB6ICogeSAqIHQgKyB4ICogcztcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geCAqIHogKiB0ICsgeSAqIHM7XG4gIG91dFs5XSA9IHkgKiB6ICogdCAtIHggKiBzO1xuICBvdXRbMTBdID0geiAqIHogKiB0ICsgYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVYKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21YUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBjO1xuICBvdXRbNl0gPSBzO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAtcztcbiAgb3V0WzEwXSA9IGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHM7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVooZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVpSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IC1zO1xuICBvdXRbNV0gPSBjO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24gYW5kIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBxLCB2KSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSAoeXkgKyB6eik7XG4gIG91dFsxXSA9IHh5ICsgd3o7XG4gIG91dFsyXSA9IHh6IC0gd3k7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHh5IC0gd3o7XG4gIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XG4gIG91dFs2XSA9IHl6ICsgd3g7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHh6ICsgd3k7XG4gIG91dFs5XSA9IHl6IC0gd3g7XG4gIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGZyb20gYSBkdWFsIHF1YXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IE1hdHJpeFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7bWF0NH0gbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0MihvdXQsIGEpIHtcbiAgdmFyIHRyYW5zbGF0aW9uID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN107XG4gIHZhciBtYWduaXR1ZGUgPSBieCAqIGJ4ICsgYnkgKiBieSArIGJ6ICogYnogKyBidyAqIGJ3OyAvL09ubHkgc2NhbGUgaWYgaXQgbWFrZXMgc2Vuc2VcblxuICBpZiAobWFnbml0dWRlID4gMCkge1xuICAgIHRyYW5zbGF0aW9uWzBdID0gKGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnkpICogMiAvIG1hZ25pdHVkZTtcbiAgICB0cmFuc2xhdGlvblsxXSA9IChheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6KSAqIDIgLyBtYWduaXR1ZGU7XG4gICAgdHJhbnNsYXRpb25bMl0gPSAoYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCkgKiAyIC8gbWFnbml0dWRlO1xuICB9IGVsc2Uge1xuICAgIHRyYW5zbGF0aW9uWzBdID0gKGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnkpICogMjtcbiAgICB0cmFuc2xhdGlvblsxXSA9IChheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6KSAqIDI7XG4gICAgdHJhbnNsYXRpb25bMl0gPSAoYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCkgKiAyO1xuICB9XG5cbiAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBhLCB0cmFuc2xhdGlvbik7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb24gdmVjdG9yIGNvbXBvbmVudCBvZiBhIHRyYW5zZm9ybWF0aW9uXHJcbiAqICBtYXRyaXguIElmIGEgbWF0cml4IGlzIGJ1aWx0IHdpdGggZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24sXHJcbiAqICB0aGUgcmV0dXJuZWQgdmVjdG9yIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiAgb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtICB7dmVjM30gb3V0IFZlY3RvciB0byByZWNlaXZlIHRyYW5zbGF0aW9uIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0gIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbihvdXQsIG1hdCkge1xuICBvdXRbMF0gPSBtYXRbMTJdO1xuICBvdXRbMV0gPSBtYXRbMTNdO1xuICBvdXRbMl0gPSBtYXRbMTRdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHNjYWxpbmcgZmFjdG9yIGNvbXBvbmVudCBvZiBhIHRyYW5zZm9ybWF0aW9uXHJcbiAqICBtYXRyaXguIElmIGEgbWF0cml4IGlzIGJ1aWx0IHdpdGggZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZVxyXG4gKiAgd2l0aCBhIG5vcm1hbGl6ZWQgUXVhdGVybmlvbiBwYXJhbXRlciwgdGhlIHJldHVybmVkIHZlY3RvciB3aWxsIGJlXHJcbiAqICB0aGUgc2FtZSBhcyB0aGUgc2NhbGluZyB2ZWN0b3JcclxuICogIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCBWZWN0b3IgdG8gcmVjZWl2ZSBzY2FsaW5nIGZhY3RvciBjb21wb25lbnRcclxuICogQHBhcmFtICB7bWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGluZyhvdXQsIG1hdCkge1xuICB2YXIgbTExID0gbWF0WzBdO1xuICB2YXIgbTEyID0gbWF0WzFdO1xuICB2YXIgbTEzID0gbWF0WzJdO1xuICB2YXIgbTIxID0gbWF0WzRdO1xuICB2YXIgbTIyID0gbWF0WzVdO1xuICB2YXIgbTIzID0gbWF0WzZdO1xuICB2YXIgbTMxID0gbWF0WzhdO1xuICB2YXIgbTMyID0gbWF0WzldO1xuICB2YXIgbTMzID0gbWF0WzEwXTtcbiAgb3V0WzBdID0gTWF0aC5oeXBvdChtMTEsIG0xMiwgbTEzKTtcbiAgb3V0WzFdID0gTWF0aC5oeXBvdChtMjEsIG0yMiwgbTIzKTtcbiAgb3V0WzJdID0gTWF0aC5oeXBvdChtMzEsIG0zMiwgbTMzKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIHJvdGF0aW9uYWwgY29tcG9uZW50XHJcbiAqICBvZiBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aFxyXG4gKiAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24sIHRoZSByZXR1cm5lZCBxdWF0ZXJuaW9uIHdpbGwgYmUgdGhlXHJcbiAqICBzYW1lIGFzIHRoZSBxdWF0ZXJuaW9uIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IFF1YXRlcm5pb24gdG8gcmVjZWl2ZSB0aGUgcm90YXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7bWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um90YXRpb24ob3V0LCBtYXQpIHtcbiAgdmFyIHNjYWxpbmcgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgZ2V0U2NhbGluZyhzY2FsaW5nLCBtYXQpO1xuICB2YXIgaXMxID0gMSAvIHNjYWxpbmdbMF07XG4gIHZhciBpczIgPSAxIC8gc2NhbGluZ1sxXTtcbiAgdmFyIGlzMyA9IDEgLyBzY2FsaW5nWzJdO1xuICB2YXIgc20xMSA9IG1hdFswXSAqIGlzMTtcbiAgdmFyIHNtMTIgPSBtYXRbMV0gKiBpczI7XG4gIHZhciBzbTEzID0gbWF0WzJdICogaXMzO1xuICB2YXIgc20yMSA9IG1hdFs0XSAqIGlzMTtcbiAgdmFyIHNtMjIgPSBtYXRbNV0gKiBpczI7XG4gIHZhciBzbTIzID0gbWF0WzZdICogaXMzO1xuICB2YXIgc20zMSA9IG1hdFs4XSAqIGlzMTtcbiAgdmFyIHNtMzIgPSBtYXRbOV0gKiBpczI7XG4gIHZhciBzbTMzID0gbWF0WzEwXSAqIGlzMztcbiAgdmFyIHRyYWNlID0gc20xMSArIHNtMjIgKyBzbTMzO1xuICB2YXIgUyA9IDA7XG5cbiAgaWYgKHRyYWNlID4gMCkge1xuICAgIFMgPSBNYXRoLnNxcnQodHJhY2UgKyAxLjApICogMjtcbiAgICBvdXRbM10gPSAwLjI1ICogUztcbiAgICBvdXRbMF0gPSAoc20yMyAtIHNtMzIpIC8gUztcbiAgICBvdXRbMV0gPSAoc20zMSAtIHNtMTMpIC8gUztcbiAgICBvdXRbMl0gPSAoc20xMiAtIHNtMjEpIC8gUztcbiAgfSBlbHNlIGlmIChzbTExID4gc20yMiAmJiBzbTExID4gc20zMykge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgc20xMSAtIHNtMjIgLSBzbTMzKSAqIDI7XG4gICAgb3V0WzNdID0gKHNtMjMgLSBzbTMyKSAvIFM7XG4gICAgb3V0WzBdID0gMC4yNSAqIFM7XG4gICAgb3V0WzFdID0gKHNtMTIgKyBzbTIxKSAvIFM7XG4gICAgb3V0WzJdID0gKHNtMzEgKyBzbTEzKSAvIFM7XG4gIH0gZWxzZSBpZiAoc20yMiA+IHNtMzMpIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMjIgLSBzbTExIC0gc20zMykgKiAyO1xuICAgIG91dFszXSA9IChzbTMxIC0gc20xMykgLyBTO1xuICAgIG91dFswXSA9IChzbTEyICsgc20yMSkgLyBTO1xuICAgIG91dFsxXSA9IDAuMjUgKiBTO1xuICAgIG91dFsyXSA9IChzbTIzICsgc20zMikgLyBTO1xuICB9IGVsc2Uge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgc20zMyAtIHNtMTEgLSBzbTIyKSAqIDI7XG4gICAgb3V0WzNdID0gKHNtMTIgLSBzbTIxKSAvIFM7XG4gICAgb3V0WzBdID0gKHNtMzEgKyBzbTEzKSAvIFM7XG4gICAgb3V0WzFdID0gKHNtMjMgKyBzbTMyKSAvIFM7XG4gICAgb3V0WzJdID0gMC4yNSAqIFM7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24sIHZlY3RvciB0cmFuc2xhdGlvbiBhbmQgdmVjdG9yIHNjYWxlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBzY2FsZSlcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IHMgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGUob3V0LCBxLCB2LCBzKSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIHZhciBzeCA9IHNbMF07XG4gIHZhciBzeSA9IHNbMV07XG4gIHZhciBzeiA9IHNbMl07XG4gIG91dFswXSA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICBvdXRbMV0gPSAoeHkgKyB3eikgKiBzeDtcbiAgb3V0WzJdID0gKHh6IC0gd3kpICogc3g7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9ICh4eSAtIHd6KSAqIHN5O1xuICBvdXRbNV0gPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcbiAgb3V0WzZdID0gKHl6ICsgd3gpICogc3k7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9ICh4eiArIHd5KSAqIHN6O1xuICBvdXRbOV0gPSAoeXogLSB3eCkgKiBzejtcbiAgb3V0WzEwXSA9ICgxIC0gKHh4ICsgeXkpKSAqIHN6O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGUsIHJvdGF0aW5nIGFuZCBzY2FsaW5nIGFyb3VuZCB0aGUgZ2l2ZW4gb3JpZ2luXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBvcmlnaW4pO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgc2NhbGUpXHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBuZWdhdGl2ZU9yaWdpbik7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBzIFNjYWxpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gbyBUaGUgb3JpZ2luIHZlY3RvciBhcm91bmQgd2hpY2ggdG8gc2NhbGUgYW5kIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZU9yaWdpbihvdXQsIHEsIHYsIHMsIG8pIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgdmFyIG94ID0gb1swXTtcbiAgdmFyIG95ID0gb1sxXTtcbiAgdmFyIG96ID0gb1syXTtcbiAgdmFyIG91dDAgPSAoMSAtICh5eSArIHp6KSkgKiBzeDtcbiAgdmFyIG91dDEgPSAoeHkgKyB3eikgKiBzeDtcbiAgdmFyIG91dDIgPSAoeHogLSB3eSkgKiBzeDtcbiAgdmFyIG91dDQgPSAoeHkgLSB3eikgKiBzeTtcbiAgdmFyIG91dDUgPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcbiAgdmFyIG91dDYgPSAoeXogKyB3eCkgKiBzeTtcbiAgdmFyIG91dDggPSAoeHogKyB3eSkgKiBzejtcbiAgdmFyIG91dDkgPSAoeXogLSB3eCkgKiBzejtcbiAgdmFyIG91dDEwID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFswXSA9IG91dDA7XG4gIG91dFsxXSA9IG91dDE7XG4gIG91dFsyXSA9IG91dDI7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IG91dDQ7XG4gIG91dFs1XSA9IG91dDU7XG4gIG91dFs2XSA9IG91dDY7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IG91dDg7XG4gIG91dFs5XSA9IG91dDk7XG4gIG91dFsxMF0gPSBvdXQxMDtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdICsgb3ggLSAob3V0MCAqIG94ICsgb3V0NCAqIG95ICsgb3V0OCAqIG96KTtcbiAgb3V0WzEzXSA9IHZbMV0gKyBveSAtIChvdXQxICogb3ggKyBvdXQ1ICogb3kgKyBvdXQ5ICogb3opO1xuICBvdXRbMTRdID0gdlsyXSArIG96IC0gKG91dDIgKiBveCArIG91dDYgKiBveSArIG91dDEwICogb3opO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGEgNHg0IG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBxIFF1YXRlcm5pb24gdG8gY3JlYXRlIG1hdHJpeCBmcm9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUXVhdChvdXQsIHEpIHtcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB5eCA9IHkgKiB4MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgenggPSB6ICogeDI7XG4gIHZhciB6eSA9IHogKiB5MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcbiAgb3V0WzFdID0geXggKyB3ejtcbiAgb3V0WzJdID0genggLSB3eTtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geXggLSB3ejtcbiAgb3V0WzVdID0gMSAtIHh4IC0geno7XG4gIG91dFs2XSA9IHp5ICsgd3g7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHp4ICsgd3k7XG4gIG91dFs5XSA9IHp5IC0gd3g7XG4gIG91dFsxMF0gPSAxIC0geHggLSB5eTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZydXN0dW0ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICB2YXIgcmwgPSAxIC8gKHJpZ2h0IC0gbGVmdCk7XG4gIHZhciB0YiA9IDEgLyAodG9wIC0gYm90dG9tKTtcbiAgdmFyIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzBdID0gbmVhciAqIDIgKiBybDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gbmVhciAqIDIgKiB0YjtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gKHJpZ2h0ICsgbGVmdCkgKiBybDtcbiAgb3V0WzldID0gKHRvcCArIGJvdHRvbSkgKiB0YjtcbiAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICBvdXRbMTFdID0gLTE7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IGZhciAqIG5lYXIgKiAyICogbmY7XG4gIG91dFsxNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kcy5cclxuICogUGFzc2luZyBudWxsL3VuZGVmaW5lZC9ubyB2YWx1ZSBmb3IgZmFyIHdpbGwgZ2VuZXJhdGUgaW5maW5pdGUgcHJvamVjdGlvbiBtYXRyaXguXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW0sIGNhbiBiZSBudWxsIG9yIEluZmluaXR5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJzcGVjdGl2ZShvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XG4gIHZhciBmID0gMS4wIC8gTWF0aC50YW4oZm92eSAvIDIpLFxuICAgICAgbmY7XG4gIG91dFswXSA9IGYgLyBhc3BlY3Q7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IGY7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMV0gPSAtMTtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTVdID0gMDtcblxuICBpZiAoZmFyICE9IG51bGwgJiYgZmFyICE9PSBJbmZpbml0eSkge1xuICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzE0XSA9IDIgKiBmYXIgKiBuZWFyICogbmY7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzEwXSA9IC0xO1xuICAgIG91dFsxNF0gPSAtMiAqIG5lYXI7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGZpZWxkIG9mIHZpZXcuXHJcbiAqIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgZ2VuZXJhdGluZyBwcm9qZWN0aW9uIG1hdHJpY2VzIHRvIGJlIHVzZWRcclxuICogd2l0aCB0aGUgc3RpbGwgZXhwZXJpZW1lbnRhbCBXZWJWUiBBUEkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtPYmplY3R9IGZvdiBPYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIHZhbHVlczogdXBEZWdyZWVzLCBkb3duRGVncmVlcywgbGVmdERlZ3JlZXMsIHJpZ2h0RGVncmVlc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyhvdXQsIGZvdiwgbmVhciwgZmFyKSB7XG4gIHZhciB1cFRhbiA9IE1hdGgudGFuKGZvdi51cERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgZG93blRhbiA9IE1hdGgudGFuKGZvdi5kb3duRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciBsZWZ0VGFuID0gTWF0aC50YW4oZm92LmxlZnREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIHJpZ2h0VGFuID0gTWF0aC50YW4oZm92LnJpZ2h0RGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciB4U2NhbGUgPSAyLjAgLyAobGVmdFRhbiArIHJpZ2h0VGFuKTtcbiAgdmFyIHlTY2FsZSA9IDIuMCAvICh1cFRhbiArIGRvd25UYW4pO1xuICBvdXRbMF0gPSB4U2NhbGU7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICBvdXRbM10gPSAwLjA7XG4gIG91dFs0XSA9IDAuMDtcbiAgb3V0WzVdID0geVNjYWxlO1xuICBvdXRbNl0gPSAwLjA7XG4gIG91dFs3XSA9IDAuMDtcbiAgb3V0WzhdID0gLSgobGVmdFRhbiAtIHJpZ2h0VGFuKSAqIHhTY2FsZSAqIDAuNSk7XG4gIG91dFs5XSA9ICh1cFRhbiAtIGRvd25UYW4pICogeVNjYWxlICogMC41O1xuICBvdXRbMTBdID0gZmFyIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMTFdID0gLTEuMDtcbiAgb3V0WzEyXSA9IDAuMDtcbiAgb3V0WzEzXSA9IDAuMDtcbiAgb3V0WzE0XSA9IGZhciAqIG5lYXIgLyAobmVhciAtIGZhcik7XG4gIG91dFsxNV0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBvcnRobyhvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gIHZhciBsciA9IDEgLyAobGVmdCAtIHJpZ2h0KTtcbiAgdmFyIGJ0ID0gMSAvIChib3R0b20gLSB0b3ApO1xuICB2YXIgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMF0gPSAtMiAqIGxyO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAtMiAqIGJ0O1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMiAqIG5mO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XG4gIG91dFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJ0O1xuICBvdXRbMTRdID0gKGZhciArIG5lYXIpICogbmY7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzLlxyXG4gKiBJZiB5b3Ugd2FudCBhIG1hdHJpeCB0aGF0IGFjdHVhbGx5IG1ha2VzIGFuIG9iamVjdCBsb29rIGF0IGFub3RoZXIgb2JqZWN0LCB5b3Ugc2hvdWxkIHVzZSB0YXJnZXRUbyBpbnN0ZWFkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG9va0F0KG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XG4gIHZhciB4MCwgeDEsIHgyLCB5MCwgeTEsIHkyLCB6MCwgejEsIHoyLCBsZW47XG4gIHZhciBleWV4ID0gZXllWzBdO1xuICB2YXIgZXlleSA9IGV5ZVsxXTtcbiAgdmFyIGV5ZXogPSBleWVbMl07XG4gIHZhciB1cHggPSB1cFswXTtcbiAgdmFyIHVweSA9IHVwWzFdO1xuICB2YXIgdXB6ID0gdXBbMl07XG4gIHZhciBjZW50ZXJ4ID0gY2VudGVyWzBdO1xuICB2YXIgY2VudGVyeSA9IGNlbnRlclsxXTtcbiAgdmFyIGNlbnRlcnogPSBjZW50ZXJbMl07XG5cbiAgaWYgKE1hdGguYWJzKGV5ZXggLSBjZW50ZXJ4KSA8IGdsTWF0cml4LkVQU0lMT04gJiYgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgZ2xNYXRyaXguRVBTSUxPTiAmJiBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5KG91dCk7XG4gIH1cblxuICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xuICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xuICB6MiA9IGV5ZXogLSBjZW50ZXJ6O1xuICBsZW4gPSAxIC8gTWF0aC5oeXBvdCh6MCwgejEsIHoyKTtcbiAgejAgKj0gbGVuO1xuICB6MSAqPSBsZW47XG4gIHoyICo9IGxlbjtcbiAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xuICB4MSA9IHVweiAqIHowIC0gdXB4ICogejI7XG4gIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcbiAgbGVuID0gTWF0aC5oeXBvdCh4MCwgeDEsIHgyKTtcblxuICBpZiAoIWxlbikge1xuICAgIHgwID0gMDtcbiAgICB4MSA9IDA7XG4gICAgeDIgPSAwO1xuICB9IGVsc2Uge1xuICAgIGxlbiA9IDEgLyBsZW47XG4gICAgeDAgKj0gbGVuO1xuICAgIHgxICo9IGxlbjtcbiAgICB4MiAqPSBsZW47XG4gIH1cblxuICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xuICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xuICB5MiA9IHowICogeDEgLSB6MSAqIHgwO1xuICBsZW4gPSBNYXRoLmh5cG90KHkwLCB5MSwgeTIpO1xuXG4gIGlmICghbGVuKSB7XG4gICAgeTAgPSAwO1xuICAgIHkxID0gMDtcbiAgICB5MiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbGVuID0gMSAvIGxlbjtcbiAgICB5MCAqPSBsZW47XG4gICAgeTEgKj0gbGVuO1xuICAgIHkyICo9IGxlbjtcbiAgfVxuXG4gIG91dFswXSA9IHgwO1xuICBvdXRbMV0gPSB5MDtcbiAgb3V0WzJdID0gejA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHgxO1xuICBvdXRbNV0gPSB5MTtcbiAgb3V0WzZdID0gejE7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHgyO1xuICBvdXRbOV0gPSB5MjtcbiAgb3V0WzEwXSA9IHoyO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcbiAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcbiAgb3V0WzE0XSA9IC0oejAgKiBleWV4ICsgejEgKiBleWV5ICsgejIgKiBleWV6KTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgbWF0cml4IHRoYXQgbWFrZXMgc29tZXRoaW5nIGxvb2sgYXQgc29tZXRoaW5nIGVsc2UuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRUbyhvdXQsIGV5ZSwgdGFyZ2V0LCB1cCkge1xuICB2YXIgZXlleCA9IGV5ZVswXSxcbiAgICAgIGV5ZXkgPSBleWVbMV0sXG4gICAgICBleWV6ID0gZXllWzJdLFxuICAgICAgdXB4ID0gdXBbMF0sXG4gICAgICB1cHkgPSB1cFsxXSxcbiAgICAgIHVweiA9IHVwWzJdO1xuICB2YXIgejAgPSBleWV4IC0gdGFyZ2V0WzBdLFxuICAgICAgejEgPSBleWV5IC0gdGFyZ2V0WzFdLFxuICAgICAgejIgPSBleWV6IC0gdGFyZ2V0WzJdO1xuICB2YXIgbGVuID0gejAgKiB6MCArIHoxICogejEgKyB6MiAqIHoyO1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICAgIHowICo9IGxlbjtcbiAgICB6MSAqPSBsZW47XG4gICAgejIgKj0gbGVuO1xuICB9XG5cbiAgdmFyIHgwID0gdXB5ICogejIgLSB1cHogKiB6MSxcbiAgICAgIHgxID0gdXB6ICogejAgLSB1cHggKiB6MixcbiAgICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcbiAgbGVuID0geDAgKiB4MCArIHgxICogeDEgKyB4MiAqIHgyO1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICAgIHgwICo9IGxlbjtcbiAgICB4MSAqPSBsZW47XG4gICAgeDIgKj0gbGVuO1xuICB9XG5cbiAgb3V0WzBdID0geDA7XG4gIG91dFsxXSA9IHgxO1xuICBvdXRbMl0gPSB4MjtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gejEgKiB4MiAtIHoyICogeDE7XG4gIG91dFs1XSA9IHoyICogeDAgLSB6MCAqIHgyO1xuICBvdXRbNl0gPSB6MCAqIHgxIC0gejEgKiB4MDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gejA7XG4gIG91dFs5XSA9IHoxO1xuICBvdXRbMTBdID0gejI7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gZXlleDtcbiAgb3V0WzEzXSA9IGV5ZXk7XG4gIG91dFsxNF0gPSBleWV6O1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbjtcbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAnbWF0NCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcsICcgKyBhWzRdICsgJywgJyArIGFbNV0gKyAnLCAnICsgYVs2XSArICcsICcgKyBhWzddICsgJywgJyArIGFbOF0gKyAnLCAnICsgYVs5XSArICcsICcgKyBhWzEwXSArICcsICcgKyBhWzExXSArICcsICcgKyBhWzEyXSArICcsICcgKyBhWzEzXSArICcsICcgKyBhWzE0XSArICcsICcgKyBhWzE1XSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSwgYVs4XSwgYVs5XSwgYVsxMF0sIGFbMTFdLCBhWzEyXSwgYVsxM10sIGFbMTRdLCBhWzE1XSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdO1xuICBvdXRbN10gPSBhWzddICsgYls3XTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF07XG4gIG91dFs5XSA9IGFbOV0gKyBiWzldO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdICsgYlsxMV07XG4gIG91dFsxMl0gPSBhWzEyXSArIGJbMTJdO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdICsgYlsxNF07XG4gIG91dFsxNV0gPSBhWzE1XSArIGJbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgb3V0WzZdID0gYVs2XSAtIGJbNl07XG4gIG91dFs3XSA9IGFbN10gLSBiWzddO1xuICBvdXRbOF0gPSBhWzhdIC0gYls4XTtcbiAgb3V0WzldID0gYVs5XSAtIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSAtIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gLSBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdIC0gYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSAtIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gLSBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdIC0gYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIG91dFs4XSA9IGFbOF0gKiBiO1xuICBvdXRbOV0gPSBhWzldICogYjtcbiAgb3V0WzEwXSA9IGFbMTBdICogYjtcbiAgb3V0WzExXSA9IGFbMTFdICogYjtcbiAgb3V0WzEyXSA9IGFbMTJdICogYjtcbiAgb3V0WzEzXSA9IGFbMTNdICogYjtcbiAgb3V0WzE0XSA9IGFbMTRdICogYjtcbiAgb3V0WzE1XSA9IGFbMTVdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQ0J3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl0gKiBzY2FsZTtcbiAgb3V0WzddID0gYVs3XSArIGJbN10gKiBzY2FsZTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF0gKiBzY2FsZTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV0gKiBzY2FsZTtcbiAgb3V0WzEwXSA9IGFbMTBdICsgYlsxMF0gKiBzY2FsZTtcbiAgb3V0WzExXSA9IGFbMTFdICsgYlsxMV0gKiBzY2FsZTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl0gKiBzY2FsZTtcbiAgb3V0WzEzXSA9IGFbMTNdICsgYlsxM10gKiBzY2FsZTtcbiAgb3V0WzE0XSA9IGFbMTRdICsgYlsxNF0gKiBzY2FsZTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN10gJiYgYVs4XSA9PT0gYls4XSAmJiBhWzldID09PSBiWzldICYmIGFbMTBdID09PSBiWzEwXSAmJiBhWzExXSA9PT0gYlsxMV0gJiYgYVsxMl0gPT09IGJbMTJdICYmIGFbMTNdID09PSBiWzEzXSAmJiBhWzE0XSA9PT0gYlsxNF0gJiYgYVsxNV0gPT09IGJbMTVdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN107XG4gIHZhciBhOCA9IGFbOF0sXG4gICAgICBhOSA9IGFbOV0sXG4gICAgICBhMTAgPSBhWzEwXSxcbiAgICAgIGExMSA9IGFbMTFdO1xuICB2YXIgYTEyID0gYVsxMl0sXG4gICAgICBhMTMgPSBhWzEzXSxcbiAgICAgIGExNCA9IGFbMTRdLFxuICAgICAgYTE1ID0gYVsxNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHZhciBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN107XG4gIHZhciBiOCA9IGJbOF0sXG4gICAgICBiOSA9IGJbOV0sXG4gICAgICBiMTAgPSBiWzEwXSxcbiAgICAgIGIxMSA9IGJbMTFdO1xuICB2YXIgYjEyID0gYlsxMl0sXG4gICAgICBiMTMgPSBiWzEzXSxcbiAgICAgIGIxNCA9IGJbMTRdLFxuICAgICAgYjE1ID0gYlsxNV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpICYmIE1hdGguYWJzKGE4IC0gYjgpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE4KSwgTWF0aC5hYnMoYjgpKSAmJiBNYXRoLmFicyhhOSAtIGI5KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOSksIE1hdGguYWJzKGI5KSkgJiYgTWF0aC5hYnMoYTEwIC0gYjEwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTApLCBNYXRoLmFicyhiMTApKSAmJiBNYXRoLmFicyhhMTEgLSBiMTEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMSksIE1hdGguYWJzKGIxMSkpICYmIE1hdGguYWJzKGExMiAtIGIxMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEyKSwgTWF0aC5hYnMoYjEyKSkgJiYgTWF0aC5hYnMoYTEzIC0gYjEzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTMpLCBNYXRoLmFicyhiMTMpKSAmJiBNYXRoLmFicyhhMTQgLSBiMTQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExNCksIE1hdGguYWJzKGIxNCkpICYmIE1hdGguYWJzKGExNSAtIGIxNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE1KSwgTWF0aC5hYnMoYjE1KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0LnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMyBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWMzXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjM1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHopO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeikge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzMgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeik7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeSArIHogKiB6O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSBhWzBdICogbGVuO1xuICBvdXRbMV0gPSBhWzFdICogbGVuO1xuICBvdXRbMl0gPSBhWzJdICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCBhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl07XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl07XG4gIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXggKiBieSAtIGF5ICogYng7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGhlcm1pdGUgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoZXJtaXRlKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gZmFjdG9yVGltZXMyICogKDIgKiB0IC0gMykgKyAxO1xuICB2YXIgZmFjdG9yMiA9IGZhY3RvclRpbWVzMiAqICh0IC0gMikgKyB0O1xuICB2YXIgZmFjdG9yMyA9IGZhY3RvclRpbWVzMiAqICh0IC0gMSk7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogKDMgLSAyICogdCk7XG4gIG91dFswXSA9IGFbMF0gKiBmYWN0b3IxICsgYlswXSAqIGZhY3RvcjIgKyBjWzBdICogZmFjdG9yMyArIGRbMF0gKiBmYWN0b3I0O1xuICBvdXRbMV0gPSBhWzFdICogZmFjdG9yMSArIGJbMV0gKiBmYWN0b3IyICsgY1sxXSAqIGZhY3RvcjMgKyBkWzFdICogZmFjdG9yNDtcbiAgb3V0WzJdID0gYVsyXSAqIGZhY3RvcjEgKyBiWzJdICogZmFjdG9yMiArIGNbMl0gKiBmYWN0b3IzICsgZFsyXSAqIGZhY3RvcjQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBiZXppZXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiZXppZXIob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gIHZhciBpbnZlcnNlRmFjdG9yID0gMSAtIHQ7XG4gIHZhciBpbnZlcnNlRmFjdG9yVGltZXNUd28gPSBpbnZlcnNlRmFjdG9yICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGludmVyc2VGYWN0b3JUaW1lc1R3byAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3IyID0gMyAqIHQgKiBpbnZlcnNlRmFjdG9yVGltZXNUd287XG4gIHZhciBmYWN0b3IzID0gMyAqIGZhY3RvclRpbWVzMiAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogdDtcbiAgb3V0WzBdID0gYVswXSAqIGZhY3RvcjEgKyBiWzBdICogZmFjdG9yMiArIGNbMF0gKiBmYWN0b3IzICsgZFswXSAqIGZhY3RvcjQ7XG4gIG91dFsxXSA9IGFbMV0gKiBmYWN0b3IxICsgYlsxXSAqIGZhY3RvcjIgKyBjWzFdICogZmFjdG9yMyArIGRbMV0gKiBmYWN0b3I0O1xuICBvdXRbMl0gPSBhWzJdICogZmFjdG9yMSArIGJbMl0gKiBmYWN0b3IyICsgY1syXSAqIGZhY3RvcjMgKyBkWzJdICogZmFjdG9yNDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICB2YXIgeiA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wIC0gMS4wO1xuICB2YXIgelNjYWxlID0gTWF0aC5zcXJ0KDEuMCAtIHogKiB6KSAqIHNjYWxlO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHpTY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XG4gIG91dFsyXSA9IHogKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQ0LlxyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHcgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV07XG4gIHcgPSB3IHx8IDEuMDtcbiAgb3V0WzBdID0gKG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzhdICogeiArIG1bMTJdKSAvIHc7XG4gIG91dFsxXSA9IChtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSkgLyB3O1xuICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgbWF0My5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0M30gbSB0aGUgM3gzIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MyhvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgb3V0WzBdID0geCAqIG1bMF0gKyB5ICogbVszXSArIHogKiBtWzZdO1xuICBvdXRbMV0gPSB4ICogbVsxXSArIHkgKiBtWzRdICsgeiAqIG1bN107XG4gIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBxdWF0XHJcbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGR1YWwgcXVhdGVybmlvbnMuIChNdWx0aXBseSBpdCB3aXRoIHRoZSByZWFsIHBhcnQpXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgLy8gYmVuY2htYXJrczogaHR0cHM6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tdHJhbnNmb3JtLXZlYzMtaW1wbGVtZW50YXRpb25zLWZpeGVkXG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM107XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07IC8vIHZhciBxdmVjID0gW3F4LCBxeSwgcXpdO1xuICAvLyB2YXIgdXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCBhKTtcblxuICB2YXIgdXZ4ID0gcXkgKiB6IC0gcXogKiB5LFxuICAgICAgdXZ5ID0gcXogKiB4IC0gcXggKiB6LFxuICAgICAgdXZ6ID0gcXggKiB5IC0gcXkgKiB4OyAvLyB2YXIgdXV2ID0gdmVjMy5jcm9zcyhbXSwgcXZlYywgdXYpO1xuXG4gIHZhciB1dXZ4ID0gcXkgKiB1dnogLSBxeiAqIHV2eSxcbiAgICAgIHV1dnkgPSBxeiAqIHV2eCAtIHF4ICogdXZ6LFxuICAgICAgdXV2eiA9IHF4ICogdXZ5IC0gcXkgKiB1dng7IC8vIHZlYzMuc2NhbGUodXYsIHV2LCAyICogdyk7XG5cbiAgdmFyIHcyID0gcXcgKiAyO1xuICB1dnggKj0gdzI7XG4gIHV2eSAqPSB3MjtcbiAgdXZ6ICo9IHcyOyAvLyB2ZWMzLnNjYWxlKHV1diwgdXV2LCAyKTtcblxuICB1dXZ4ICo9IDI7XG4gIHV1dnkgKj0gMjtcbiAgdXV2eiAqPSAyOyAvLyByZXR1cm4gdmVjMy5hZGQob3V0LCBhLCB2ZWMzLmFkZChvdXQsIHV2LCB1dXYpKTtcblxuICBvdXRbMF0gPSB4ICsgdXZ4ICsgdXV2eDtcbiAgb3V0WzFdID0geSArIHV2eSArIHV1dnk7XG4gIG91dFsyXSA9IHogKyB1dnogKyB1dXZ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHgtYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgYiwgYykge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF07XG4gIHJbMV0gPSBwWzFdICogTWF0aC5jb3MoYykgLSBwWzJdICogTWF0aC5zaW4oYyk7XG4gIHJbMl0gPSBwWzFdICogTWF0aC5zaW4oYykgKyBwWzJdICogTWF0aC5jb3MoYyk7IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgYiwgYykge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMl0gKiBNYXRoLnNpbihjKSArIHBbMF0gKiBNYXRoLmNvcyhjKTtcbiAgclsxXSA9IHBbMV07XG4gIHJbMl0gPSBwWzJdICogTWF0aC5jb3MoYykgLSBwWzBdICogTWF0aC5zaW4oYyk7IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHotYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgYiwgYykge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF0gKiBNYXRoLmNvcyhjKSAtIHBbMV0gKiBNYXRoLnNpbihjKTtcbiAgclsxXSA9IHBbMF0gKiBNYXRoLnNpbihjKSArIHBbMV0gKiBNYXRoLmNvcyhjKTtcbiAgclsyXSA9IHBbMl07IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIHRlbXBBID0gZnJvbVZhbHVlcyhhWzBdLCBhWzFdLCBhWzJdKTtcbiAgdmFyIHRlbXBCID0gZnJvbVZhbHVlcyhiWzBdLCBiWzFdLCBiWzJdKTtcbiAgbm9ybWFsaXplKHRlbXBBLCB0ZW1wQSk7XG4gIG5vcm1hbGl6ZSh0ZW1wQiwgdGVtcEIpO1xuICB2YXIgY29zaW5lID0gZG90KHRlbXBBLCB0ZW1wQik7XG5cbiAgaWYgKGNvc2luZSA+IDEuMCkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2UgaWYgKGNvc2luZSA8IC0xLjApIHtcbiAgICByZXR1cm4gTWF0aC5QSTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTWF0aC5hY29zKGNvc2luZSk7XG4gIH1cbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAndmVjMygnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzMuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDM7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICB2ZWNbMl0gPSBhW2kgKyAyXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogNCBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWM0XHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeiwgdykge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6LCB3KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgb3V0WzNdID0gYVszXSAqIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIG91dFszXSA9IGFbM10gLyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5jZWlsKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmNlaWwoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIG91dFszXSA9IE1hdGguZmxvb3IoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIG91dFszXSA9IE1hdGgubWluKGFbM10sIGJbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5yb3VuZChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5yb3VuZChhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWM0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgdmFyIHcgPSBiWzNdIC0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgdmFyIHcgPSBiWzNdIC0gYVszXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6LCB3KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSAtYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgb3V0WzNdID0gMS4wIC8gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0geCAqIGxlbjtcbiAgb3V0WzFdID0geSAqIGxlbjtcbiAgb3V0WzJdID0geiAqIGxlbjtcbiAgb3V0WzNdID0gdyAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgY3Jvc3MtcHJvZHVjdCBvZiB0aHJlZSB2ZWN0b3JzIGluIGEgNC1kaW1lbnNpb25hbCBzcGFjZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IHJlc3VsdCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IFUgdGhlIGZpcnN0IHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IFYgdGhlIHNlY29uZCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBXIHRoZSB0aGlyZCB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IHJlc3VsdFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgdSwgdiwgdykge1xuICB2YXIgQSA9IHZbMF0gKiB3WzFdIC0gdlsxXSAqIHdbMF0sXG4gICAgICBCID0gdlswXSAqIHdbMl0gLSB2WzJdICogd1swXSxcbiAgICAgIEMgPSB2WzBdICogd1szXSAtIHZbM10gKiB3WzBdLFxuICAgICAgRCA9IHZbMV0gKiB3WzJdIC0gdlsyXSAqIHdbMV0sXG4gICAgICBFID0gdlsxXSAqIHdbM10gLSB2WzNdICogd1sxXSxcbiAgICAgIEYgPSB2WzJdICogd1szXSAtIHZbM10gKiB3WzJdO1xuICB2YXIgRyA9IHVbMF07XG4gIHZhciBIID0gdVsxXTtcbiAgdmFyIEkgPSB1WzJdO1xuICB2YXIgSiA9IHVbM107XG4gIG91dFswXSA9IEggKiBGIC0gSSAqIEUgKyBKICogRDtcbiAgb3V0WzFdID0gLShHICogRikgKyBJICogQyAtIEogKiBCO1xuICBvdXRbMl0gPSBHICogRSAtIEggKiBDICsgSiAqIEE7XG4gIG91dFszXSA9IC0oRyAqIEQpICsgSCAqIEIgLSBJICogQTtcbiAgcmV0dXJuIG91dDtcbn1cbjtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICB2YXIgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICBvdXRbM10gPSBhdyArIHQgKiAoYlszXSAtIGF3KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7IC8vIE1hcnNhZ2xpYSwgR2VvcmdlLiBDaG9vc2luZyBhIFBvaW50IGZyb20gdGhlIFN1cmZhY2Ugb2YgYVxuICAvLyBTcGhlcmUuIEFubi4gTWF0aC4gU3RhdGlzdC4gNDMgKDE5NzIpLCBuby4gMiwgNjQ1LS02NDYuXG4gIC8vIGh0dHA6Ly9wcm9qZWN0ZXVjbGlkLm9yZy9ldWNsaWQuYW9tcy8xMTc3NjkyNjQ0O1xuXG4gIHZhciB2MSwgdjIsIHYzLCB2NDtcbiAgdmFyIHMxLCBzMjtcblxuICBkbyB7XG4gICAgdjEgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHYyID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMSA9IHYxICogdjEgKyB2MiAqIHYyO1xuICB9IHdoaWxlIChzMSA+PSAxKTtcblxuICBkbyB7XG4gICAgdjMgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHY0ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMiA9IHYzICogdjMgKyB2NCAqIHY0O1xuICB9IHdoaWxlIChzMiA+PSAxKTtcblxuICB2YXIgZCA9IE1hdGguc3FydCgoMSAtIHMxKSAvIHMyKTtcbiAgb3V0WzBdID0gc2NhbGUgKiB2MTtcbiAgb3V0WzFdID0gc2NhbGUgKiB2MjtcbiAgb3V0WzJdID0gc2NhbGUgKiB2MyAqIGQ7XG4gIG91dFszXSA9IHNjYWxlICogdjQgKiBkO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdLFxuICAgICAgdyA9IGFbM107XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzhdICogeiArIG1bMTJdICogdztcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xuICBvdXRbMl0gPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0gKiB3O1xuICBvdXRbM10gPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV0gKiB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdOyAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xuXG4gIHZhciBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcbiAgdmFyIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICB2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG4gIHZhciBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7IC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xuICBvdXRbMV0gPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3ZlYzQoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzRzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzQuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjNHMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDQ7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICB2ZWNbMl0gPSBhW2kgKyAyXTtcbiAgICAgIHZlY1szXSA9IGFbaSArIDNdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgICBhW2kgKyAyXSA9IHZlY1syXTtcbiAgICAgIGFbaSArIDNdID0gdmVjWzNdO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuaW1wb3J0ICogYXMgbWF0MyBmcm9tIFwiLi9tYXQzLmpzXCI7XG5pbXBvcnQgKiBhcyB2ZWMzIGZyb20gXCIuL3ZlYzMuanNcIjtcbmltcG9ydCAqIGFzIHZlYzQgZnJvbSBcIi4vdmVjNC5qc1wiO1xuLyoqXHJcbiAqIFF1YXRlcm5pb25cclxuICogQG1vZHVsZSBxdWF0XHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBxdWF0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXRzIGEgcXVhdCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhbmQgcm90YXRpb24gYXhpcyxcclxuICogdGhlbiByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIGFyb3VuZCB3aGljaCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF4aXNBbmdsZShvdXQsIGF4aXMsIHJhZCkge1xuICByYWQgPSByYWQgKiAwLjU7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgb3V0WzBdID0gcyAqIGF4aXNbMF07XG4gIG91dFsxXSA9IHMgKiBheGlzWzFdO1xuICBvdXRbMl0gPSBzICogYXhpc1syXTtcbiAgb3V0WzNdID0gTWF0aC5jb3MocmFkKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXRzIHRoZSByb3RhdGlvbiBheGlzIGFuZCBhbmdsZSBmb3IgYSBnaXZlblxyXG4gKiAgcXVhdGVybmlvbi4gSWYgYSBxdWF0ZXJuaW9uIGlzIGNyZWF0ZWQgd2l0aFxyXG4gKiAgc2V0QXhpc0FuZ2xlLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc2FtZVxyXG4gKiAgdmFsdWVzIGFzIHByb3ZpZGllZCBpbiB0aGUgb3JpZ2luYWwgcGFyYW1ldGVyIGxpc3RcclxuICogIE9SIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHZhbHVlcy5cclxuICogRXhhbXBsZTogVGhlIHF1YXRlcm5pb24gZm9ybWVkIGJ5IGF4aXMgWzAsIDAsIDFdIGFuZFxyXG4gKiAgYW5nbGUgLTkwIGlzIHRoZSBzYW1lIGFzIHRoZSBxdWF0ZXJuaW9uIGZvcm1lZCBieVxyXG4gKiAgWzAsIDAsIDFdIGFuZCAyNzAuIFRoaXMgbWV0aG9kIGZhdm9ycyB0aGUgbGF0dGVyLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXRfYXhpcyAgVmVjdG9yIHJlY2VpdmluZyB0aGUgYXhpcyBvZiByb3RhdGlvblxyXG4gKiBAcGFyYW0gIHtxdWF0fSBxICAgICBRdWF0ZXJuaW9uIHRvIGJlIGRlY29tcG9zZWRcclxuICogQHJldHVybiB7TnVtYmVyfSAgICAgQW5nbGUsIGluIHJhZGlhbnMsIG9mIHRoZSByb3RhdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF4aXNBbmdsZShvdXRfYXhpcywgcSkge1xuICB2YXIgcmFkID0gTWF0aC5hY29zKHFbM10pICogMi4wO1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCAvIDIuMCk7XG5cbiAgaWYgKHMgPiBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgb3V0X2F4aXNbMF0gPSBxWzBdIC8gcztcbiAgICBvdXRfYXhpc1sxXSA9IHFbMV0gLyBzO1xuICAgIG91dF9heGlzWzJdID0gcVsyXSAvIHM7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgcyBpcyB6ZXJvLCByZXR1cm4gYW55IGF4aXMgKG5vIHJvdGF0aW9uIC0gYXhpcyBkb2VzIG5vdCBtYXR0ZXIpXG4gICAgb3V0X2F4aXNbMF0gPSAxO1xuICAgIG91dF9heGlzWzFdID0gMDtcbiAgICBvdXRfYXhpc1syXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmFkO1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgYmV0d2VlbiB0d28gdW5pdCBxdWF0ZXJuaW9uc1xyXG4gKlxyXG4gKiBAcGFyYW0gIHtxdWF0fSBhICAgICBPcmlnaW4gdW5pdCBxdWF0ZXJuaW9uIFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBiICAgICBEZXN0aW5hdGlvbiB1bml0IHF1YXRlcm5pb25cclxuICogQHJldHVybiB7TnVtYmVyfSAgICAgQW5nbGUsIGluIHJhZGlhbnMsIGJldHdlZW4gdGhlIHR3byBxdWF0ZXJuaW9uc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZ2xlKGEsIGIpIHtcbiAgdmFyIGRvdHByb2R1Y3QgPSBkb3QoYSwgYik7XG4gIHJldHVybiBNYXRoLmFjb3MoMiAqIGRvdHByb2R1Y3QgKiBkb3Rwcm9kdWN0IC0gMSk7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl0sXG4gICAgICBidyA9IGJbM107XG4gIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYng7XG4gIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXogKiBieDtcbiAgb3V0WzJdID0gYXogKiBidyAtIGF5ICogYng7XG4gIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnkgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF3ICogYnk7XG4gIG91dFsyXSA9IGF6ICogYncgKyBheCAqIGJ5O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXkgKiBieTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ6ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF5ICogYno7XG4gIG91dFsxXSA9IGF5ICogYncgLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBiejtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgVyBjb21wb25lbnQgb2YgYSBxdWF0IGZyb20gdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMuXHJcbiAqIEFzc3VtZXMgdGhhdCBxdWF0ZXJuaW9uIGlzIDEgdW5pdCBpbiBsZW5ndGguXHJcbiAqIEFueSBleGlzdGluZyBXIGNvbXBvbmVudCB3aWxsIGJlIGlnbm9yZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgVyBjb21wb25lbnQgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVcob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IE1hdGguc3FydChNYXRoLmFicygxLjAgLSB4ICogeCAtIHkgKiB5IC0geiAqIHopKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdLFxuICAgICAgdyA9IGFbM107XG4gIHZhciByID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG4gIHZhciBldCA9IE1hdGguZXhwKHcpO1xuICB2YXIgcyA9IHIgPiAwID8gZXQgKiBNYXRoLnNpbihyKSAvIHIgOiAwO1xuICBvdXRbMF0gPSB4ICogcztcbiAgb3V0WzFdID0geSAqIHM7XG4gIG91dFsyXSA9IHogKiBzO1xuICBvdXRbM10gPSBldCAqIE1hdGguY29zKHIpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSB1bml0IHF1YXRlcm5pb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsbihvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICB2YXIgciA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICB2YXIgdCA9IHIgPiAwID8gTWF0aC5hdGFuMihyLCB3KSAvIHIgOiAwO1xuICBvdXRbMF0gPSB4ICogdDtcbiAgb3V0WzFdID0geSAqIHQ7XG4gIG91dFsyXSA9IHogKiB0O1xuICBvdXRbM10gPSAwLjUgKiBNYXRoLmxvZyh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBzY2FsYXIgcG93ZXIgb2YgYSB1bml0IHF1YXRlcm5pb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgcXVhdGVybmlvbiBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG93KG91dCwgYSwgYikge1xuICBsbihvdXQsIGEpO1xuICBzY2FsZShvdXQsIG91dCwgYik7XG4gIGV4cChvdXQsIG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2xlcnAob3V0LCBhLCBiLCB0KSB7XG4gIC8vIGJlbmNobWFya3M6XG4gIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl0sXG4gICAgICBidyA9IGJbM107XG4gIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTsgLy8gY2FsYyBjb3NpbmVcblxuICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7IC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxuXG4gIGlmIChjb3NvbSA8IDAuMCkge1xuICAgIGNvc29tID0gLWNvc29tO1xuICAgIGJ4ID0gLWJ4O1xuICAgIGJ5ID0gLWJ5O1xuICAgIGJ6ID0gLWJ6O1xuICAgIGJ3ID0gLWJ3O1xuICB9IC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcblxuXG4gIGlmICgxLjAgLSBjb3NvbSA+IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICAvLyBzdGFuZGFyZCBjYXNlIChzbGVycClcbiAgICBvbWVnYSA9IE1hdGguYWNvcyhjb3NvbSk7XG4gICAgc2lub20gPSBNYXRoLnNpbihvbWVnYSk7XG4gICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XG4gICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xuICB9IGVsc2Uge1xuICAgIC8vIFwiZnJvbVwiIGFuZCBcInRvXCIgcXVhdGVybmlvbnMgYXJlIHZlcnkgY2xvc2VcbiAgICAvLyAgLi4uIHNvIHdlIGNhbiBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgc2NhbGUwID0gMS4wIC0gdDtcbiAgICBzY2FsZTEgPSB0O1xuICB9IC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcblxuXG4gIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XG4gIG91dFsxXSA9IHNjYWxlMCAqIGF5ICsgc2NhbGUxICogYnk7XG4gIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XG4gIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHVuaXQgcXVhdGVybmlvblxyXG4gKiBcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0KSB7XG4gIC8vIEltcGxlbWVudGF0aW9uIG9mIGh0dHA6Ly9wbGFubmluZy5jcy51aXVjLmVkdS9ub2RlMTk4Lmh0bWxcbiAgLy8gVE9ETzogQ2FsbGluZyByYW5kb20gMyB0aW1lcyBpcyBwcm9iYWJseSBub3QgdGhlIGZhc3Rlc3Qgc29sdXRpb25cbiAgdmFyIHUxID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciB1MiA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgdTMgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHNxcnQxTWludXNVMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICB2YXIgc3FydFUxID0gTWF0aC5zcXJ0KHUxKTtcbiAgb3V0WzBdID0gc3FydDFNaW51c1UxICogTWF0aC5zaW4oMi4wICogTWF0aC5QSSAqIHUyKTtcbiAgb3V0WzFdID0gc3FydDFNaW51c1UxICogTWF0aC5jb3MoMi4wICogTWF0aC5QSSAqIHUyKTtcbiAgb3V0WzJdID0gc3FydFUxICogTWF0aC5zaW4oMi4wICogTWF0aC5QSSAqIHUzKTtcbiAgb3V0WzNdID0gc3FydFUxICogTWF0aC5jb3MoMi4wICogTWF0aC5QSSAqIHUzKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGRvdCA9IGEwICogYTAgKyBhMSAqIGExICsgYTIgKiBhMiArIGEzICogYTM7XG4gIHZhciBpbnZEb3QgPSBkb3QgPyAxLjAgLyBkb3QgOiAwOyAvLyBUT0RPOiBXb3VsZCBiZSBmYXN0ZXIgdG8gcmV0dXJuIFswLDAsMCwwXSBpbW1lZGlhdGVseSBpZiBkb3QgPT0gMFxuXG4gIG91dFswXSA9IC1hMCAqIGludkRvdDtcbiAgb3V0WzFdID0gLWExICogaW52RG90O1xuICBvdXRbMl0gPSAtYTIgKiBpbnZEb3Q7XG4gIG91dFszXSA9IGEzICogaW52RG90O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmp1Z2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDMob3V0LCBtKSB7XG4gIC8vIEFsZ29yaXRobSBpbiBLZW4gU2hvZW1ha2UncyBhcnRpY2xlIGluIDE5ODcgU0lHR1JBUEggY291cnNlIG5vdGVzXG4gIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxuICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xuICB2YXIgZlJvb3Q7XG5cbiAgaWYgKGZUcmFjZSA+IDAuMCkge1xuICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcbiAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAvLyAyd1xuXG4gICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XG4gICAgZlJvb3QgPSAwLjUgLyBmUm9vdDsgLy8gMS8oNHcpXG5cbiAgICBvdXRbMF0gPSAobVs1XSAtIG1bN10pICogZlJvb3Q7XG4gICAgb3V0WzFdID0gKG1bNl0gLSBtWzJdKSAqIGZSb290O1xuICAgIG91dFsyXSA9IChtWzFdIC0gbVszXSkgKiBmUm9vdDtcbiAgfSBlbHNlIHtcbiAgICAvLyB8d3wgPD0gMS8yXG4gICAgdmFyIGkgPSAwO1xuICAgIGlmIChtWzRdID4gbVswXSkgaSA9IDE7XG4gICAgaWYgKG1bOF0gPiBtW2kgKiAzICsgaV0pIGkgPSAyO1xuICAgIHZhciBqID0gKGkgKyAxKSAlIDM7XG4gICAgdmFyIGsgPSAoaSArIDIpICUgMztcbiAgICBmUm9vdCA9IE1hdGguc3FydChtW2kgKiAzICsgaV0gLSBtW2ogKiAzICsgal0gLSBtW2sgKiAzICsga10gKyAxLjApO1xuICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xuICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XG4gICAgb3V0WzNdID0gKG1baiAqIDMgKyBrXSAtIG1bayAqIDMgKyBqXSkgKiBmUm9vdDtcbiAgICBvdXRbal0gPSAobVtqICogMyArIGldICsgbVtpICogMyArIGpdKSAqIGZSb290O1xuICAgIG91dFtrXSA9IChtW2sgKiAzICsgaV0gKyBtW2kgKiAzICsga10pICogZlJvb3Q7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIGV1bGVyIGFuZ2xlIHgsIHksIHouXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3h9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWCBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7eX0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBZIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHt6fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFogYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdWxlcihvdXQsIHgsIHksIHopIHtcbiAgdmFyIGhhbGZUb1JhZCA9IDAuNSAqIE1hdGguUEkgLyAxODAuMDtcbiAgeCAqPSBoYWxmVG9SYWQ7XG4gIHkgKj0gaGFsZlRvUmFkO1xuICB6ICo9IGhhbGZUb1JhZDtcbiAgdmFyIHN4ID0gTWF0aC5zaW4oeCk7XG4gIHZhciBjeCA9IE1hdGguY29zKHgpO1xuICB2YXIgc3kgPSBNYXRoLnNpbih5KTtcbiAgdmFyIGN5ID0gTWF0aC5jb3MoeSk7XG4gIHZhciBzeiA9IE1hdGguc2luKHopO1xuICB2YXIgY3ogPSBNYXRoLmNvcyh6KTtcbiAgb3V0WzBdID0gc3ggKiBjeSAqIGN6IC0gY3ggKiBzeSAqIHN6O1xuICBvdXRbMV0gPSBjeCAqIHN5ICogY3ogKyBzeCAqIGN5ICogc3o7XG4gIG91dFsyXSA9IGN4ICogY3kgKiBzeiAtIHN4ICogc3kgKiBjejtcbiAgb3V0WzNdID0gY3ggKiBjeSAqIGN6ICsgc3ggKiBzeSAqIHN6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBxdWF0ZW5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3F1YXQoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnKSc7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgY2xvbmUgPSB2ZWM0LmNsb25lO1xuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZyb21WYWx1ZXMgPSB2ZWM0LmZyb21WYWx1ZXM7XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHF1YXQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBzb3VyY2UgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBjb3B5ID0gdmVjNC5jb3B5O1xuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHF1YXQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2V0ID0gdmVjNC5zZXQ7XG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBhZGQgPSB2ZWM0LmFkZDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzY2FsZSA9IHZlYzQuc2NhbGU7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkb3QgPSB2ZWM0LmRvdDtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZXJwID0gdmVjNC5sZXJwO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbmd0aCA9IHZlYzQubGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxdWFyZWRMZW5ndGggPSB2ZWM0LnNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBxdWF0ZXJuaW9ucyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBUaGUgZmlyc3QgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHtxdWF0fSBiIFRoZSBzZWNvbmQgcXVhdGVybmlvbi5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgdmFyIGV4YWN0RXF1YWxzID0gdmVjNC5leGFjdEVxdWFscztcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBxdWF0ZXJuaW9ucyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IHZhciBlcXVhbHMgPSB2ZWM0LmVxdWFscztcbi8qKlxyXG4gKiBTZXRzIGEgcXVhdGVybmlvbiB0byByZXByZXNlbnQgdGhlIHNob3J0ZXN0IHJvdGF0aW9uIGZyb20gb25lXHJcbiAqIHZlY3RvciB0byBhbm90aGVyLlxyXG4gKlxyXG4gKiBCb3RoIHZlY3RvcnMgYXJlIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGguXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBpbml0aWFsIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIGRlc3RpbmF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHJvdGF0aW9uVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcbiAgdmFyIHhVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygxLCAwLCAwKTtcbiAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLCAxLCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgZG90ID0gdmVjMy5kb3QoYSwgYik7XG5cbiAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XG4gICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHhVbml0VmVjMywgYSk7XG4gICAgICBpZiAodmVjMy5sZW4odG1wdmVjMykgPCAwLjAwMDAwMSkgdmVjMy5jcm9zcyh0bXB2ZWMzLCB5VW5pdFZlYzMsIGEpO1xuICAgICAgdmVjMy5ub3JtYWxpemUodG1wdmVjMywgdG1wdmVjMyk7XG4gICAgICBzZXRBeGlzQW5nbGUob3V0LCB0bXB2ZWMzLCBNYXRoLlBJKTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfSBlbHNlIGlmIChkb3QgPiAwLjk5OTk5OSkge1xuICAgICAgb3V0WzBdID0gMDtcbiAgICAgIG91dFsxXSA9IDA7XG4gICAgICBvdXRbMl0gPSAwO1xuICAgICAgb3V0WzNdID0gMTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgYSwgYik7XG4gICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xuICAgICAgb3V0WzFdID0gdG1wdmVjM1sxXTtcbiAgICAgIG91dFsyXSA9IHRtcHZlYzNbMl07XG4gICAgICBvdXRbM10gPSAxICsgZG90O1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShvdXQsIG91dCk7XG4gICAgfVxuICB9O1xufSgpO1xuLyoqXHJcbiAqIFBlcmZvcm1zIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCB2YXIgc3FsZXJwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGVtcDEgPSBjcmVhdGUoKTtcbiAgdmFyIHRlbXAyID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gICAgc2xlcnAodGVtcDEsIGEsIGQsIHQpO1xuICAgIHNsZXJwKHRlbXAyLCBiLCBjLCB0KTtcbiAgICBzbGVycChvdXQsIHRlbXAxLCB0ZW1wMiwgMiAqIHQgKiAoMSAtIHQpKTtcbiAgICByZXR1cm4gb3V0O1xuICB9O1xufSgpO1xuLyoqXHJcbiAqIFNldHMgdGhlIHNwZWNpZmllZCBxdWF0ZXJuaW9uIHdpdGggdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuXHJcbiAqIGF4ZXMuIEVhY2ggYXhpcyBpcyBhIHZlYzMgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXQgbGVuZ3RoIGFuZFxyXG4gKiBwZXJwZW5kaWN1bGFyIHRvIGFsbCBvdGhlciBzcGVjaWZpZWQgYXhlcy5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSB2aWV3ICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgdmlld2luZyBkaXJlY3Rpb25cclxuICogQHBhcmFtIHt2ZWMzfSByaWdodCB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJyaWdodFwiIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwICAgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInVwXCIgZGlyZWN0aW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCB2YXIgc2V0QXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgdmlldywgcmlnaHQsIHVwKSB7XG4gICAgbWF0clswXSA9IHJpZ2h0WzBdO1xuICAgIG1hdHJbM10gPSByaWdodFsxXTtcbiAgICBtYXRyWzZdID0gcmlnaHRbMl07XG4gICAgbWF0clsxXSA9IHVwWzBdO1xuICAgIG1hdHJbNF0gPSB1cFsxXTtcbiAgICBtYXRyWzddID0gdXBbMl07XG4gICAgbWF0clsyXSA9IC12aWV3WzBdO1xuICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcbiAgICBtYXRyWzhdID0gLXZpZXdbMl07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShvdXQsIGZyb21NYXQzKG91dCwgbWF0cikpO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuaW1wb3J0ICogYXMgcXVhdCBmcm9tIFwiLi9xdWF0LmpzXCI7XG5pbXBvcnQgKiBhcyBtYXQ0IGZyb20gXCIuL21hdDQuanNcIjtcbi8qKlxyXG4gKiBEdWFsIFF1YXRlcm5pb248YnI+XHJcbiAqIEZvcm1hdDogW3JlYWwsIGR1YWxdPGJyPlxyXG4gKiBRdWF0ZXJuaW9uIGZvcm1hdDogWFlaVzxicj5cclxuICogTWFrZSBzdXJlIHRvIGhhdmUgbm9ybWFsaXplZCBkdWFsIHF1YXRlcm5pb25zLCBvdGhlcndpc2UgdGhlIGZ1bmN0aW9ucyBtYXkgbm90IHdvcmsgYXMgaW50ZW5kZWQuPGJyPlxyXG4gKiBAbW9kdWxlIHF1YXQyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBkdWFsIHF1YXRcclxuICpcclxuICogQHJldHVybnMge3F1YXQyfSBhIG5ldyBkdWFsIHF1YXRlcm5pb24gW3JlYWwgLT4gcm90YXRpb24sIGR1YWwgLT4gdHJhbnNsYXRpb25dXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBkcVswXSA9IDA7XG4gICAgZHFbMV0gPSAwO1xuICAgIGRxWzJdID0gMDtcbiAgICBkcVs0XSA9IDA7XG4gICAgZHFbNV0gPSAwO1xuICAgIGRxWzZdID0gMDtcbiAgICBkcVs3XSA9IDA7XG4gIH1cblxuICBkcVszXSA9IDE7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gbmV3IGR1YWwgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IGFbMF07XG4gIGRxWzFdID0gYVsxXTtcbiAgZHFbMl0gPSBhWzJdO1xuICBkcVszXSA9IGFbM107XG4gIGRxWzRdID0gYVs0XTtcbiAgZHFbNV0gPSBhWzVdO1xuICBkcVs2XSA9IGFbNl07XG4gIGRxWzddID0gYVs3XTtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcyIFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gbmV3IGR1YWwgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyLCB3Mikge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSB4MTtcbiAgZHFbMV0gPSB5MTtcbiAgZHFbMl0gPSB6MTtcbiAgZHFbM10gPSB3MTtcbiAgZHFbNF0gPSB4MjtcbiAgZHFbNV0gPSB5MjtcbiAgZHFbNl0gPSB6MjtcbiAgZHFbN10gPSB3MjtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGZyb20gdGhlIGdpdmVuIHZhbHVlcyAocXVhdCBhbmQgdHJhbnNsYXRpb24pXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MSBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTEgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoxIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MSBXIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geDIgWCBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25WYWx1ZXMoeDEsIHkxLCB6MSwgdzEsIHgyLCB5MiwgejIpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0geDE7XG4gIGRxWzFdID0geTE7XG4gIGRxWzJdID0gejE7XG4gIGRxWzNdID0gdzE7XG4gIHZhciBheCA9IHgyICogMC41LFxuICAgICAgYXkgPSB5MiAqIDAuNSxcbiAgICAgIGF6ID0gejIgKiAwLjU7XG4gIGRxWzRdID0gYXggKiB3MSArIGF5ICogejEgLSBheiAqIHkxO1xuICBkcVs1XSA9IGF5ICogdzEgKyBheiAqIHgxIC0gYXggKiB6MTtcbiAgZHFbNl0gPSBheiAqIHcxICsgYXggKiB5MSAtIGF5ICogeDE7XG4gIGRxWzddID0gLWF4ICogeDEgLSBheSAqIHkxIC0gYXogKiB6MTtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHF1YXRlcm5pb24gYW5kIGEgdHJhbnNsYXRpb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBhIG5vcm1hbGl6ZWQgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbmxhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBxLCB0KSB7XG4gIHZhciBheCA9IHRbMF0gKiAwLjUsXG4gICAgICBheSA9IHRbMV0gKiAwLjUsXG4gICAgICBheiA9IHRbMl0gKiAwLjUsXG4gICAgICBieCA9IHFbMF0sXG4gICAgICBieSA9IHFbMV0sXG4gICAgICBieiA9IHFbMl0sXG4gICAgICBidyA9IHFbM107XG4gIG91dFswXSA9IGJ4O1xuICBvdXRbMV0gPSBieTtcbiAgb3V0WzJdID0gYno7XG4gIG91dFszXSA9IGJ3O1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFs1XSA9IGF5ICogYncgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzZdID0gYXogKiBidyArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSAtYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHQpIHtcbiAgb3V0WzBdID0gMDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gdFswXSAqIDAuNTtcbiAgb3V0WzVdID0gdFsxXSAqIDAuNTtcbiAgb3V0WzZdID0gdFsyXSAqIDAuNTtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgdGhlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcSkge1xuICBvdXRbMF0gPSBxWzBdO1xuICBvdXRbMV0gPSBxWzFdO1xuICBvdXRbMl0gPSBxWzJdO1xuICBvdXRbM10gPSBxWzNdO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGZyb20gYSBtYXRyaXggKDR4NClcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXhcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDQob3V0LCBhKSB7XG4gIC8vVE9ETyBPcHRpbWl6ZSB0aGlzXG4gIHZhciBvdXRlciA9IHF1YXQuY3JlYXRlKCk7XG4gIG1hdDQuZ2V0Um90YXRpb24ob3V0ZXIsIGEpO1xuICB2YXIgdCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBtYXQ0LmdldFRyYW5zbGF0aW9uKHQsIGEpO1xuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIG91dGVyLCB0KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgZHVhbCBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIHNvdXJjZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBkdWFsIHF1YXQgdG8gdGhlIGlkZW50aXR5IGR1YWwgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcyIFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyLCB3Mikge1xuICBvdXRbMF0gPSB4MTtcbiAgb3V0WzFdID0geTE7XG4gIG91dFsyXSA9IHoxO1xuICBvdXRbM10gPSB3MTtcbiAgb3V0WzRdID0geDI7XG4gIG91dFs1XSA9IHkyO1xuICBvdXRbNl0gPSB6MjtcbiAgb3V0WzddID0gdzI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcmVhbCBwYXJ0IG9mIGEgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSAge3F1YXR9IG91dCByZWFsIHBhcnRcclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge3F1YXR9IHJlYWwgcGFydFxyXG4gKi9cblxuZXhwb3J0IHZhciBnZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIEdldHMgdGhlIGR1YWwgcGFydCBvZiBhIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBvdXQgZHVhbCBwYXJ0XHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtxdWF0fSBkdWFsIHBhcnRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWFsKG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzRdO1xuICBvdXRbMV0gPSBhWzVdO1xuICBvdXRbMl0gPSBhWzZdO1xuICBvdXRbM10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgcmVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcmVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIFNldCB0aGUgZHVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgZHVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldER1YWwob3V0LCBxKSB7XG4gIG91dFs0XSA9IHFbMF07XG4gIG91dFs1XSA9IHFbMV07XG4gIG91dFs2XSA9IHFbMl07XG4gIG91dFs3XSA9IHFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgdHJhbnNsYXRpb24gb2YgYSBub3JtYWxpemVkIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgdHJhbnNsYXRpb25cclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uIHRvIGJlIGRlY29tcG9zZWRcclxuICogQHJldHVybiB7dmVjM30gdHJhbnNsYXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbihvdXQsIGEpIHtcbiAgdmFyIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXTtcbiAgb3V0WzBdID0gKGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnkpICogMjtcbiAgb3V0WzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgb3V0WzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGVzIGEgZHVhbCBxdWF0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBheDEgPSBhWzBdLFxuICAgICAgYXkxID0gYVsxXSxcbiAgICAgIGF6MSA9IGFbMl0sXG4gICAgICBhdzEgPSBhWzNdLFxuICAgICAgYngxID0gdlswXSAqIDAuNSxcbiAgICAgIGJ5MSA9IHZbMV0gKiAwLjUsXG4gICAgICBiejEgPSB2WzJdICogMC41LFxuICAgICAgYXgyID0gYVs0XSxcbiAgICAgIGF5MiA9IGFbNV0sXG4gICAgICBhejIgPSBhWzZdLFxuICAgICAgYXcyID0gYVs3XTtcbiAgb3V0WzBdID0gYXgxO1xuICBvdXRbMV0gPSBheTE7XG4gIG91dFsyXSA9IGF6MTtcbiAgb3V0WzNdID0gYXcxO1xuICBvdXRbNF0gPSBhdzEgKiBieDEgKyBheTEgKiBiejEgLSBhejEgKiBieTEgKyBheDI7XG4gIG91dFs1XSA9IGF3MSAqIGJ5MSArIGF6MSAqIGJ4MSAtIGF4MSAqIGJ6MSArIGF5MjtcbiAgb3V0WzZdID0gYXcxICogYnoxICsgYXgxICogYnkxIC0gYXkxICogYngxICsgYXoyO1xuICBvdXRbN10gPSAtYXgxICogYngxIC0gYXkxICogYnkxIC0gYXoxICogYnoxICsgYXcyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVgob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWShvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVaKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYnkgYSBnaXZlbiBxdWF0ZXJuaW9uIChhICogcSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQnlRdWF0QXBwZW5kKG91dCwgYSwgcSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCAqIHF3ICsgYXcgKiBxeCArIGF5ICogcXogLSBheiAqIHF5O1xuICBvdXRbMV0gPSBheSAqIHF3ICsgYXcgKiBxeSArIGF6ICogcXggLSBheCAqIHF6O1xuICBvdXRbMl0gPSBheiAqIHF3ICsgYXcgKiBxeiArIGF4ICogcXkgLSBheSAqIHF4O1xuICBvdXRbM10gPSBhdyAqIHF3IC0gYXggKiBxeCAtIGF5ICogcXkgLSBheiAqIHF6O1xuICBheCA9IGFbNF07XG4gIGF5ID0gYVs1XTtcbiAgYXogPSBhWzZdO1xuICBhdyA9IGFbN107XG4gIG91dFs0XSA9IGF4ICogcXcgKyBhdyAqIHF4ICsgYXkgKiBxeiAtIGF6ICogcXk7XG4gIG91dFs1XSA9IGF5ICogcXcgKyBhdyAqIHF5ICsgYXogKiBxeCAtIGF4ICogcXo7XG4gIG91dFs2XSA9IGF6ICogcXcgKyBhdyAqIHF6ICsgYXggKiBxeSAtIGF5ICogcXg7XG4gIG91dFs3XSA9IGF3ICogcXcgLSBheCAqIHF4IC0gYXkgKiBxeSAtIGF6ICogcXo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBieSBhIGdpdmVuIHF1YXRlcm5pb24gKHEgKiBhKVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVCeVF1YXRQcmVwZW5kKG91dCwgcSwgYSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYnggPSBhWzBdLFxuICAgICAgYnkgPSBhWzFdLFxuICAgICAgYnogPSBhWzJdLFxuICAgICAgYncgPSBhWzNdO1xuICBvdXRbMF0gPSBxeCAqIGJ3ICsgcXcgKiBieCArIHF5ICogYnogLSBxeiAqIGJ5O1xuICBvdXRbMV0gPSBxeSAqIGJ3ICsgcXcgKiBieSArIHF6ICogYnggLSBxeCAqIGJ6O1xuICBvdXRbMl0gPSBxeiAqIGJ3ICsgcXcgKiBieiArIHF4ICogYnkgLSBxeSAqIGJ4O1xuICBvdXRbM10gPSBxdyAqIGJ3IC0gcXggKiBieCAtIHF5ICogYnkgLSBxeiAqIGJ6O1xuICBieCA9IGFbNF07XG4gIGJ5ID0gYVs1XTtcbiAgYnogPSBhWzZdO1xuICBidyA9IGFbN107XG4gIG91dFs0XSA9IHF4ICogYncgKyBxdyAqIGJ4ICsgcXkgKiBieiAtIHF6ICogYnk7XG4gIG91dFs1XSA9IHF5ICogYncgKyBxdyAqIGJ5ICsgcXogKiBieCAtIHF4ICogYno7XG4gIG91dFs2XSA9IHF6ICogYncgKyBxdyAqIGJ6ICsgcXggKiBieSAtIHF5ICogYng7XG4gIG91dFs3XSA9IHF3ICogYncgLSBxeCAqIGJ4IC0gcXkgKiBieSAtIHF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgYSBnaXZlbiBheGlzLiBEb2VzIHRoZSBub3JtYWxpc2F0aW9uIGF1dG9tYXRpY2FsbHlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBob3cgZmFyIHRoZSByb3RhdGlvbiBzaG91bGQgYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVBcm91bmRBeGlzKG91dCwgYSwgYXhpcywgcmFkKSB7XG4gIC8vU3BlY2lhbCBjYXNlIGZvciByYWQgPSAwXG4gIGlmIChNYXRoLmFicyhyYWQpIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBjb3B5KG91dCwgYSk7XG4gIH1cblxuICB2YXIgYXhpc0xlbmd0aCA9IE1hdGguaHlwb3QoYXhpc1swXSwgYXhpc1sxXSwgYXhpc1syXSk7XG4gIHJhZCA9IHJhZCAqIDAuNTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYnggPSBzICogYXhpc1swXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBieSA9IHMgKiBheGlzWzFdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ6ID0gcyAqIGF4aXNbMl0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYncgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYXgxID0gYVswXSxcbiAgICAgIGF5MSA9IGFbMV0sXG4gICAgICBhejEgPSBhWzJdLFxuICAgICAgYXcxID0gYVszXTtcbiAgb3V0WzBdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFsxXSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbMl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzNdID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHZhciBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN107XG4gIG91dFs0XSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFs1XSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFs2XSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYng7XG4gIG91dFs3XSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gZHVhbCBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gZHVhbCBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGF4MCA9IGFbMF0sXG4gICAgICBheTAgPSBhWzFdLFxuICAgICAgYXowID0gYVsyXSxcbiAgICAgIGF3MCA9IGFbM10sXG4gICAgICBieDEgPSBiWzRdLFxuICAgICAgYnkxID0gYls1XSxcbiAgICAgIGJ6MSA9IGJbNl0sXG4gICAgICBidzEgPSBiWzddLFxuICAgICAgYXgxID0gYVs0XSxcbiAgICAgIGF5MSA9IGFbNV0sXG4gICAgICBhejEgPSBhWzZdLFxuICAgICAgYXcxID0gYVs3XSxcbiAgICAgIGJ4MCA9IGJbMF0sXG4gICAgICBieTAgPSBiWzFdLFxuICAgICAgYnowID0gYlsyXSxcbiAgICAgIGJ3MCA9IGJbM107XG4gIG91dFswXSA9IGF4MCAqIGJ3MCArIGF3MCAqIGJ4MCArIGF5MCAqIGJ6MCAtIGF6MCAqIGJ5MDtcbiAgb3V0WzFdID0gYXkwICogYncwICsgYXcwICogYnkwICsgYXowICogYngwIC0gYXgwICogYnowO1xuICBvdXRbMl0gPSBhejAgKiBidzAgKyBhdzAgKiBiejAgKyBheDAgKiBieTAgLSBheTAgKiBieDA7XG4gIG91dFszXSA9IGF3MCAqIGJ3MCAtIGF4MCAqIGJ4MCAtIGF5MCAqIGJ5MCAtIGF6MCAqIGJ6MDtcbiAgb3V0WzRdID0gYXgwICogYncxICsgYXcwICogYngxICsgYXkwICogYnoxIC0gYXowICogYnkxICsgYXgxICogYncwICsgYXcxICogYngwICsgYXkxICogYnowIC0gYXoxICogYnkwO1xuICBvdXRbNV0gPSBheTAgKiBidzEgKyBhdzAgKiBieTEgKyBhejAgKiBieDEgLSBheDAgKiBiejEgKyBheTEgKiBidzAgKyBhdzEgKiBieTAgKyBhejEgKiBieDAgLSBheDEgKiBiejA7XG4gIG91dFs2XSA9IGF6MCAqIGJ3MSArIGF3MCAqIGJ6MSArIGF4MCAqIGJ5MSAtIGF5MCAqIGJ4MSArIGF6MSAqIGJ3MCArIGF3MSAqIGJ6MCArIGF4MSAqIGJ5MCAtIGF5MSAqIGJ4MDtcbiAgb3V0WzddID0gYXcwICogYncxIC0gYXgwICogYngxIC0gYXkwICogYnkxIC0gYXowICogYnoxICsgYXcxICogYncwIC0gYXgxICogYngwIC0gYXkxICogYnkwIC0gYXoxICogYnowO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdDIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBTY2FsZXMgYSBkdWFsIHF1YXQgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXQgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBkdWFsIHF1YXQgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gZHVhbCBxdWF0J3MgKFRoZSBkb3QgcHJvZHVjdCBvZiB0aGUgcmVhbCBwYXJ0cylcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkb3QgPSBxdWF0LmRvdDtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIGR1YWwgcXVhdHMnc1xyXG4gKiBOT1RFOiBUaGUgcmVzdWx0aW5nIGR1YWwgcXVhdGVybmlvbnMgd29uJ3QgYWx3YXlzIGJlIG5vcm1hbGl6ZWQgKFRoZSBlcnJvciBpcyBtb3N0IG5vdGljZWFibGUgd2hlbiB0ID0gMC41KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIG10ID0gMSAtIHQ7XG4gIGlmIChkb3QoYSwgYikgPCAwKSB0ID0gLXQ7XG4gIG91dFswXSA9IGFbMF0gKiBtdCArIGJbMF0gKiB0O1xuICBvdXRbMV0gPSBhWzFdICogbXQgKyBiWzFdICogdDtcbiAgb3V0WzJdID0gYVsyXSAqIG10ICsgYlsyXSAqIHQ7XG4gIG91dFszXSA9IGFbM10gKiBtdCArIGJbM10gKiB0O1xuICBvdXRbNF0gPSBhWzRdICogbXQgKyBiWzRdICogdDtcbiAgb3V0WzVdID0gYVs1XSAqIG10ICsgYls1XSAqIHQ7XG4gIG91dFs2XSA9IGFbNl0gKiBtdCArIGJbNl0gKiB0O1xuICBvdXRbN10gPSBhWzddICogbXQgKyBiWzddICogdDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgZHVhbCBxdWF0LiBJZiB0aGV5IGFyZSBub3JtYWxpemVkLCBjb25qdWdhdGUgaXMgY2hlYXBlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBzcWxlbiA9IHNxdWFyZWRMZW5ndGgoYSk7XG4gIG91dFswXSA9IC1hWzBdIC8gc3FsZW47XG4gIG91dFsxXSA9IC1hWzFdIC8gc3FsZW47XG4gIG91dFsyXSA9IC1hWzJdIC8gc3FsZW47XG4gIG91dFszXSA9IGFbM10gLyBzcWxlbjtcbiAgb3V0WzRdID0gLWFbNF0gLyBzcWxlbjtcbiAgb3V0WzVdID0gLWFbNV0gLyBzcWxlbjtcbiAgb3V0WzZdID0gLWFbNl0gLyBzcWxlbjtcbiAgb3V0WzddID0gYVs3XSAvIHNxbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIGR1YWwgcXVhdFxyXG4gKiBJZiB0aGUgZHVhbCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdDIuaW52ZXJzZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29uanVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSAtYVs0XTtcbiAgb3V0WzVdID0gLWFbNV07XG4gIG91dFs2XSA9IC1hWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdCB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW5ndGggPSBxdWF0Lmxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdCB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3F1YXJlZExlbmd0aCA9IHF1YXQuc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIG1hZ25pdHVkZSA9IHNxdWFyZWRMZW5ndGgoYSk7XG5cbiAgaWYgKG1hZ25pdHVkZSA+IDApIHtcbiAgICBtYWduaXR1ZGUgPSBNYXRoLnNxcnQobWFnbml0dWRlKTtcbiAgICB2YXIgYTAgPSBhWzBdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMSA9IGFbMV0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGEyID0gYVsyXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTMgPSBhWzNdIC8gbWFnbml0dWRlO1xuICAgIHZhciBiMCA9IGFbNF07XG4gICAgdmFyIGIxID0gYVs1XTtcbiAgICB2YXIgYjIgPSBhWzZdO1xuICAgIHZhciBiMyA9IGFbN107XG4gICAgdmFyIGFfZG90X2IgPSBhMCAqIGIwICsgYTEgKiBiMSArIGEyICogYjIgKyBhMyAqIGIzO1xuICAgIG91dFswXSA9IGEwO1xuICAgIG91dFsxXSA9IGExO1xuICAgIG91dFsyXSA9IGEyO1xuICAgIG91dFszXSA9IGEzO1xuICAgIG91dFs0XSA9IChiMCAtIGEwICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzVdID0gKGIxIC0gYTEgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbNl0gPSAoYjIgLSBhMiAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs3XSA9IChiMyAtIGEzICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkdWFsIHF1YXRlbmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdWFsIHF1YXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3F1YXQyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZHVhbCBxdWF0ZXJuaW9ucyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IGR1YWwgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIGR1YWwgcXVhdGVybmlvbi5cclxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGR1YWwgcXVhdGVybmlvbnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGR1YWwgcXVhdGVybmlvbnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBkdWFsIHF1YXQuXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBkdWFsIHF1YXQuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBkdWFsIHF1YXRzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpO1xufSIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDIgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjMlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzJcclxuICpcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzIgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzIncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeTtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqIE5vdGUgdGhhdCB0aGUgY3Jvc3MgcHJvZHVjdCBtdXN0IGJ5IGRlZmluaXRpb24gcHJvZHVjZSBhIDNEIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCBhLCBiKSB7XG4gIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcbiAgb3V0WzBdID0gb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICB2YXIgciA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgb3V0WzBdID0gTWF0aC5jb3MocikgKiBzY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQyZH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDJkKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeSArIG1bNF07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDNcclxuICogM3JkIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0M30gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bM10gKiB5ICsgbVs2XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzRdICogeSArIG1bN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDJEIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzJcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSB2ZWMyIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCBiLCBjKSB7XG4gIC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cbiAgdmFyIHAwID0gYVswXSAtIGJbMF0sXG4gICAgICBwMSA9IGFbMV0gLSBiWzFdLFxuICAgICAgc2luQyA9IE1hdGguc2luKGMpLFxuICAgICAgY29zQyA9IE1hdGguY29zKGMpOyAvL3BlcmZvcm0gcm90YXRpb24gYW5kIHRyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gcDAgKiBjb3NDIC0gcDEgKiBzaW5DICsgYlswXTtcbiAgb3V0WzFdID0gcDAgKiBzaW5DICsgcDEgKiBjb3NDICsgYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDJEIHZlY3RvcnNcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmdsZShhLCBiKSB7XG4gIHZhciB4MSA9IGFbMF0sXG4gICAgICB5MSA9IGFbMV0sXG4gICAgICB4MiA9IGJbMF0sXG4gICAgICB5MiA9IGJbMV07XG4gIHZhciBsZW4xID0geDEgKiB4MSArIHkxICogeTE7XG5cbiAgaWYgKGxlbjEgPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4xID0gMSAvIE1hdGguc3FydChsZW4xKTtcbiAgfVxuXG4gIHZhciBsZW4yID0geDIgKiB4MiArIHkyICogeTI7XG5cbiAgaWYgKGxlbjIgPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4yID0gMSAvIE1hdGguc3FydChsZW4yKTtcbiAgfVxuXG4gIHZhciBjb3NpbmUgPSAoeDEgKiB4MiArIHkxICogeTIpICogbGVuMSAqIGxlbjI7XG5cbiAgaWYgKGNvc2luZSA+IDEuMCkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2UgaWYgKGNvc2luZSA8IC0xLjApIHtcbiAgICByZXR1cm4gTWF0aC5QSTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTWF0aC5hY29zKGNvc2luZSk7XG4gIH1cbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyIHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3ZlYzIoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGV4YWN0bHkgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjMnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMi4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMycyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gMjtcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xufSgpOyIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IENpcmNsZUJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50fSBmcm9tICcuLi8uLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge2dldE1heGltdW1QYWludFZhbHVlLCB0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIExheW91dCwgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0J1Y2tldCwgQnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBDaXJjbGVTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoYnVja2V0OiBCdWNrZXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjaXJjbGVCdWNrZXQ6IENpcmNsZUJ1Y2tldDxDaXJjbGVTdHlsZUxheWVyPiA9IChidWNrZXQ6IGFueSk7XG4gICAgICAgIHJldHVybiBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnY2lyY2xlLXJhZGl1cycsIHRoaXMsIGNpcmNsZUJ1Y2tldCkgK1xuICAgICAgICAgICAgZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2NpcmNsZS1zdHJva2Utd2lkdGgnLCB0aGlzLCBjaXJjbGVCdWNrZXQpICtcbiAgICAgICAgICAgIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJykpO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcmFkaXVzJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1zdHJva2Utd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBzaXplICA9IHJhZGl1cyArIHN0cm9rZTtcblxuICAgICAgICAvLyBGb3IgcGl0Y2gtYWxpZ25tZW50OiBtYXAsIGNvbXBhcmUgZmVhdHVyZSBnZW9tZXRyeSB0byBxdWVyeSBnZW9tZXRyeSBpbiB0aGUgcGxhbmUgb2YgdGhlIHRpbGVcbiAgICAgICAgLy8gLy8gT3RoZXJ3aXNlLCBjb21wYXJlIGdlb21ldHJ5IGluIHRoZSBwbGFuZSBvZiB0aGUgdmlld3BvcnRcbiAgICAgICAgLy8gLy8gQSBjaXJjbGUgd2l0aCBmaXhlZCBzY2FsaW5nIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBnZXRzIGxhcmdlciBpbiB0aWxlIHNwYWNlIGFzIGl0IG1vdmVzIGludG8gdGhlIGRpc3RhbmNlXG4gICAgICAgIC8vIC8vIEEgY2lyY2xlIHdpdGggZml4ZWQgc2NhbGluZyByZWxhdGl2ZSB0byB0aGUgbWFwIGdldHMgc21hbGxlciBpbiB2aWV3cG9ydCBzcGFjZSBhcyBpdCBtb3ZlcyBpbnRvIHRoZSBkaXN0YW5jZVxuICAgICAgICBjb25zdCBhbGlnbldpdGhNYXAgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRQb2x5Z29uID0gYWxpZ25XaXRoTWFwID8gdHJhbnNsYXRlZFBvbHlnb24gOiBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNpemUgPSBhbGlnbldpdGhNYXAgPyBzaXplICogcGl4ZWxzVG9UaWxlVW5pdHMgOiBzaXplO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBnZW9tZXRyeSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiByaW5nKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvaW50ID0gYWxpZ25XaXRoTWFwID8gcG9pbnQgOiBwcm9qZWN0UG9pbnQocG9pbnQsIHBpeGVsUG9zTWF0cml4KTtcblxuICAgICAgICAgICAgICAgIGxldCBhZGp1c3RlZFNpemUgPSB0cmFuc2Zvcm1lZFNpemU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkQ2VudGVyID0gdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCBbcG9pbnQueCwgcG9pbnQueSwgMCwgMV0sIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1zY2FsZScpID09PSAndmlld3BvcnQnICYmIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU2l6ZSAqPSBwcm9qZWN0ZWRDZW50ZXJbM10gLyB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtc2NhbGUnKSA9PT0gJ21hcCcgJiYgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNpemUgKj0gdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBwcm9qZWN0ZWRDZW50ZXJbM107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludCh0cmFuc2Zvcm1lZFBvbHlnb24sIHRyYW5zZm9ybWVkUG9pbnQsIGFkanVzdGVkU2l6ZSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdFBvaW50KHA6IFBvaW50LCBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSB7XG4gICAgY29uc3QgcG9pbnQgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwLngsIHAueSwgMCwgMV0sIHBpeGVsUG9zTWF0cml4KTtcbiAgICByZXR1cm4gbmV3IFBvaW50KHBvaW50WzBdIC8gcG9pbnRbM10sIHBvaW50WzFdIC8gcG9pbnRbM10pO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UXVlcnlHZW9tZXRyeShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpIHtcbiAgICByZXR1cm4gcXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2plY3RQb2ludChwLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZVN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ2lyY2xlQnVja2V0IGZyb20gJy4vY2lyY2xlX2J1Y2tldCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuXG5jbGFzcyBIZWF0bWFwQnVja2V0IGV4dGVuZHMgQ2lyY2xlQnVja2V0PEhlYXRtYXBTdHlsZUxheWVyPiB7XG4gICAgLy8gTmVlZGVkIGZvciBmbG93IHRvIGFjY2VwdCBvbWl0OiBbJ2xheWVycyddIGJlbG93LCBkdWUgdG9cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDI2MlxuICAgIGxheWVyczogQXJyYXk8SGVhdG1hcFN0eWxlTGF5ZXI+O1xufVxuXG5yZWdpc3RlcignSGVhdG1hcEJ1Y2tldCcsIEhlYXRtYXBCdWNrZXQsIHtvbWl0OiBbJ2xheWVycyddfSk7XG5cbmV4cG9ydCBkZWZhdWx0IEhlYXRtYXBCdWNrZXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4vd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCB0eXBlIFNpemUgPSB7XG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlclxufTtcblxudHlwZSBQb2ludCA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVJbWFnZShpbWFnZTogKiwge3dpZHRoLCBoZWlnaHR9OiBTaXplLCBjaGFubmVsczogbnVtYmVyLCBkYXRhPzogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5sZW5ndGggIT09IHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pc21hdGNoZWQgaW1hZ2Ugc2l6ZScpO1xuICAgIH1cbiAgICBpbWFnZS53aWR0aCA9IHdpZHRoO1xuICAgIGltYWdlLmhlaWdodCA9IGhlaWdodDtcbiAgICBpbWFnZS5kYXRhID0gZGF0YTtcbiAgICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZUltYWdlKGltYWdlOiAqLCB7d2lkdGgsIGhlaWdodH06IFNpemUsIGNoYW5uZWxzOiBudW1iZXIpIHtcbiAgICBpZiAod2lkdGggPT09IGltYWdlLndpZHRoICYmIGhlaWdodCA9PT0gaW1hZ2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbWFnZSA9IGNyZWF0ZUltYWdlKHt9LCB7d2lkdGgsIGhlaWdodH0sIGNoYW5uZWxzKTtcblxuICAgIGNvcHlJbWFnZShpbWFnZSwgbmV3SW1hZ2UsIHt4OiAwLCB5OiAwfSwge3g6IDAsIHk6IDB9LCB7XG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihpbWFnZS53aWR0aCwgd2lkdGgpLFxuICAgICAgICBoZWlnaHQ6IE1hdGgubWluKGltYWdlLmhlaWdodCwgaGVpZ2h0KVxuICAgIH0sIGNoYW5uZWxzKTtcblxuICAgIGltYWdlLndpZHRoID0gd2lkdGg7XG4gICAgaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGltYWdlLmRhdGEgPSBuZXdJbWFnZS5kYXRhO1xufVxuXG5mdW5jdGlvbiBjb3B5SW1hZ2Uoc3JjSW1nOiAqLCBkc3RJbWc6ICosIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplLCBjaGFubmVsczogbnVtYmVyKSB7XG4gICAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRzdEltZztcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS53aWR0aCA+IHNyY0ltZy53aWR0aCB8fFxuICAgICAgICBzaXplLmhlaWdodCA+IHNyY0ltZy5oZWlnaHQgfHxcbiAgICAgICAgc3JjUHQueCA+IHNyY0ltZy53aWR0aCAtIHNpemUud2lkdGggfHxcbiAgICAgICAgc3JjUHQueSA+IHNyY0ltZy5oZWlnaHQgLSBzaXplLmhlaWdodCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weScpO1xuICAgIH1cblxuICAgIGlmIChzaXplLndpZHRoID4gZHN0SW1nLndpZHRoIHx8XG4gICAgICAgIHNpemUuaGVpZ2h0ID4gZHN0SW1nLmhlaWdodCB8fFxuICAgICAgICBkc3RQdC54ID4gZHN0SW1nLndpZHRoIC0gc2l6ZS53aWR0aCB8fFxuICAgICAgICBkc3RQdC55ID4gZHN0SW1nLmhlaWdodCAtIHNpemUuaGVpZ2h0KSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHknKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmNEYXRhID0gc3JjSW1nLmRhdGE7XG4gICAgY29uc3QgZHN0RGF0YSA9IGRzdEltZy5kYXRhO1xuXG4gICAgYXNzZXJ0KHNyY0RhdGEgIT09IGRzdERhdGEpO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBzaXplLmhlaWdodDsgeSsrKSB7XG4gICAgICAgIGNvbnN0IHNyY09mZnNldCA9ICgoc3JjUHQueSArIHkpICogc3JjSW1nLndpZHRoICsgc3JjUHQueCkgKiBjaGFubmVscztcbiAgICAgICAgY29uc3QgZHN0T2Zmc2V0ID0gKChkc3RQdC55ICsgeSkgKiBkc3RJbWcud2lkdGggKyBkc3RQdC54KSAqIGNoYW5uZWxzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUud2lkdGggKiBjaGFubmVsczsgaSsrKSB7XG4gICAgICAgICAgICBkc3REYXRhW2RzdE9mZnNldCArIGldID0gc3JjRGF0YVtzcmNPZmZzZXQgKyBpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZHN0SW1nO1xufVxuXG5leHBvcnQgY2xhc3MgQWxwaGFJbWFnZSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBkYXRhOiBVaW50OEFycmF5O1xuXG4gICAgY29uc3RydWN0b3Ioc2l6ZTogU2l6ZSwgZGF0YT86IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICBjcmVhdGVJbWFnZSh0aGlzLCBzaXplLCAxLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXNpemUoc2l6ZTogU2l6ZSkge1xuICAgICAgICByZXNpemVJbWFnZSh0aGlzLCBzaXplLCAxKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHBoYUltYWdlKHt3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodH0sIG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3B5KHNyY0ltZzogQWxwaGFJbWFnZSwgZHN0SW1nOiBBbHBoYUltYWdlLCBzcmNQdDogUG9pbnQsIGRzdFB0OiBQb2ludCwgc2l6ZTogU2l6ZSkge1xuICAgICAgICBjb3B5SW1hZ2Uoc3JjSW1nLCBkc3RJbWcsIHNyY1B0LCBkc3RQdCwgc2l6ZSwgMSk7XG4gICAgfVxufVxuXG4vLyBOb3QgcHJlbXVsdGlwbGllZCwgYmVjYXVzZSBJbWFnZURhdGEgaXMgbm90IHByZW11bHRpcGxpZWQuXG4vLyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgbXVzdCBiZSB1c2VkIHdoZW4gdXBsb2FkaW5nIHRvIGEgdGV4dHVyZS5cbmV4cG9ydCBjbGFzcyBSR0JBSW1hZ2Uge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvLyBkYXRhIG11c3QgYmUgYSBVaW50OEFycmF5IGluc3RlYWQgb2YgVWludDhDbGFtcGVkQXJyYXkgYmVjYXVzZSB0ZXhJbWFnZTJEIGRvZXMgbm90XG4gICAgLy8gc3VwcG9ydCBVaW50OENsYW1wZWRBcnJheSBpbiBhbGwgYnJvd3NlcnNcbiAgICBkYXRhOiBVaW50OEFycmF5O1xuXG4gICAgY29uc3RydWN0b3Ioc2l6ZTogU2l6ZSwgZGF0YT86IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICBjcmVhdGVJbWFnZSh0aGlzLCBzaXplLCA0LCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXNpemUoc2l6ZTogU2l6ZSkge1xuICAgICAgICByZXNpemVJbWFnZSh0aGlzLCBzaXplLCA0KTtcbiAgICB9XG5cbiAgICByZXBsYWNlKGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSwgY29weT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodH0sIG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3B5KHNyY0ltZzogUkdCQUltYWdlIHwgSW1hZ2VEYXRhLCBkc3RJbWc6IFJHQkFJbWFnZSwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUpIHtcbiAgICAgICAgY29weUltYWdlKHNyY0ltZywgZHN0SW1nLCBzcmNQdCwgZHN0UHQsIHNpemUsIDQpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0FscGhhSW1hZ2UnLCBBbHBoYUltYWdlKTtcbnJlZ2lzdGVyKCdSR0JBSW1hZ2UnLCBSR0JBSW1hZ2UpO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImhlYXRtYXAtcmFkaXVzXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGVhdG1hcC13ZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoZWF0bWFwLWludGVuc2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGVhdG1hcC1jb2xvclwiOiBDb2xvclJhbXBQcm9wZXJ0eSxcbiAgICBcImhlYXRtYXAtb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaGVhdG1hcC1yYWRpdXNcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1yYWRpdXNcIl0pLFxuICAgIFwiaGVhdG1hcC13ZWlnaHRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC13ZWlnaHRcIl0pLFxuICAgIFwiaGVhdG1hcC1pbnRlbnNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLWludGVuc2l0eVwiXSksXG4gICAgXCJoZWF0bWFwLWNvbG9yXCI6IG5ldyBDb2xvclJhbXBQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1jb2xvclwiXSksXG4gICAgXCJoZWF0bWFwLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLW9wYWNpdHlcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vaW5kZXgnO1xuXG4vKipcbiAqIEdpdmVuIGFuIGV4cHJlc3Npb24gdGhhdCBzaG91bGQgZXZhbHVhdGUgdG8gYSBjb2xvciByYW1wLCByZXR1cm5cbiAqIGEgMjU2eDEgcHggUkdCQSBpbWFnZSByZXByZXNlbnRpbmcgdGhhdCByYW1wIGV4cHJlc3Npb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuZGVyQ29sb3JSYW1wKGV4cHJlc3Npb246IFN0eWxlUHJvcGVydHlFeHByZXNzaW9uLCBjb2xvclJhbXBFdmFsdWF0aW9uUGFyYW1ldGVyOiBzdHJpbmcpOiBSR0JBSW1hZ2Uge1xuICAgIGNvbnN0IGNvbG9yUmFtcERhdGEgPSBuZXcgVWludDhBcnJheSgyNTYgKiA0KTtcbiAgICBjb25zdCBldmFsdWF0aW9uR2xvYmFscyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IDI1NjsgaSsrLCBqICs9IDQpIHtcbiAgICAgICAgZXZhbHVhdGlvbkdsb2JhbHNbY29sb3JSYW1wRXZhbHVhdGlvblBhcmFtZXRlcl0gPSBpIC8gMjU1O1xuICAgICAgICBjb25zdCBweENvbG9yID0gZXhwcmVzc2lvbi5ldmFsdWF0ZSgoZXZhbHVhdGlvbkdsb2JhbHM6IGFueSkpO1xuICAgICAgICAvLyB0aGUgY29sb3JzIGFyZSBiZWluZyB1bnByZW11bHRpcGxpZWQgYmVjYXVzZSBDb2xvciB1c2VzXG4gICAgICAgIC8vIHByZW11bHRpcGxpZWQgdmFsdWVzLCBhbmQgdGhlIFRleHR1cmUgY2xhc3MgZXhwZWN0cyB1bnByZW11bHRpcGxpZWQgb25lc1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAwXSA9IE1hdGguZmxvb3IocHhDb2xvci5yICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMV0gPSBNYXRoLmZsb29yKHB4Q29sb3IuZyAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDJdID0gTWF0aC5mbG9vcihweENvbG9yLmIgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAzXSA9IE1hdGguZmxvb3IocHhDb2xvci5hICogMjU1KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IDI1NiwgaGVpZ2h0OiAxfSwgY29sb3JSYW1wRGF0YSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBIZWF0bWFwQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0JztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi8uLi91dGlsL2ltYWdlJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCByZW5kZXJDb2xvclJhbXAgZnJvbSAnLi4vLi4vdXRpbC9jb2xvcl9yYW1wJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi8uLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSBGcmFtZWJ1ZmZlciBmcm9tICcuLi8uLi9nbC9mcmFtZWJ1ZmZlcic7XG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9oZWF0bWFwX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEhlYXRtYXBTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG5cbiAgICBoZWF0bWFwRmJvOiA/RnJhbWVidWZmZXI7XG4gICAgY29sb3JSYW1wOiBSR0JBSW1hZ2U7XG4gICAgY29sb3JSYW1wVGV4dHVyZTogP1RleHR1cmU7XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjcmVhdGVCdWNrZXQob3B0aW9uczogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgSGVhdG1hcEJ1Y2tldChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgY29sb3IgcmFtcCB0ZXh0dXJlIGlzIGdlbmVyYXRlZCBmb3IgZGVmYXVsdCBoZWF0bWFwIGNvbG9yIHRvb1xuICAgICAgICB0aGlzLl91cGRhdGVDb2xvclJhbXAoKTtcbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAnaGVhdG1hcC1jb2xvcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbG9yUmFtcCgpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1snaGVhdG1hcC1jb2xvciddLnZhbHVlLmV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuY29sb3JSYW1wID0gcmVuZGVyQ29sb3JSYW1wKGV4cHJlc3Npb24sICdoZWF0bWFwRGVuc2l0eScpO1xuICAgICAgICB0aGlzLmNvbG9yUmFtcFRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGVhdG1hcEZibykge1xuICAgICAgICAgICAgdGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuaGVhdG1hcEZibyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKCk6IGJvb2xlYW4gIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JykgIT09IDAgJiYgdGhpcy52aXNpYmlsaXR5ICE9PSAnbm9uZSc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWF0bWFwU3R5bGVMYXllcjtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIl0pLFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCJdKSxcbiAgICBcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIl0pLFxuICAgIFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCJdKSxcbiAgICBcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9oaWxsc2hhZGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBIaWxsc2hhZGVTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFpbnQuZ2V0KCdoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uJykgIT09IDAgJiYgdGhpcy52aXNpYmlsaXR5ICE9PSAnbm9uZSc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWxsc2hhZGVTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxheW91dCA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUgfHwgb3V0ZXJOb2RlLm5leHQgPT09IG91dGVyTm9kZS5wcmV2KSByZXR1cm4gdHJpYW5nbGVzO1xuXG4gICAgdmFyIG1pblgsIG1pblksIG1heFgsIG1heFksIHgsIHksIGludlNpemU7XG5cbiAgICBpZiAoaGFzSG9sZXMpIG91dGVyTm9kZSA9IGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSk7XG5cbiAgICAvLyBpZiB0aGUgc2hhcGUgaXMgbm90IHRvbyBzaW1wbGUsIHdlJ2xsIHVzZSB6LW9yZGVyIGN1cnZlIGhhc2ggbGF0ZXI7IGNhbGN1bGF0ZSBwb2x5Z29uIGJib3hcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA4MCAqIGRpbSkge1xuICAgICAgICBtaW5YID0gbWF4WCA9IGRhdGFbMF07XG4gICAgICAgIG1pblkgPSBtYXhZID0gZGF0YVsxXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gZGltOyBpIDwgb3V0ZXJMZW47IGkgKz0gZGltKSB7XG4gICAgICAgICAgICB4ID0gZGF0YVtpXTtcbiAgICAgICAgICAgIHkgPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICh4IDwgbWluWCkgbWluWCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIG1pblkgPSB5O1xuICAgICAgICAgICAgaWYgKHggPiBtYXhYKSBtYXhYID0geDtcbiAgICAgICAgICAgIGlmICh5ID4gbWF4WSkgbWF4WSA9IHk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRlciBjYWxjdWxhdGlvblxuICAgICAgICBpbnZTaXplID0gTWF0aC5tYXgobWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTtcbiAgICAgICAgaW52U2l6ZSA9IGludlNpemUgIT09IDAgPyAxIC8gaW52U2l6ZSA6IDA7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIGksIGxhc3Q7XG5cbiAgICBpZiAoY2xvY2t3aXNlID09PSAoc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pID4gMCkpIHtcbiAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gZW5kIC0gZGltOyBpID49IHN0YXJ0OyBpIC09IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH1cblxuICAgIGlmIChsYXN0ICYmIGVxdWFscyhsYXN0LCBsYXN0Lm5leHQpKSB7XG4gICAgICAgIHJlbW92ZU5vZGUobGFzdCk7XG4gICAgICAgIGxhc3QgPSBsYXN0Lm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSBicmVhaztcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgaW52U2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIGludlNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChpbnZTaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0ZXggbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0pO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAyKTtcblxuICAgICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d29cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMikge1xuICAgICAgICAgICAgICAgIHNwbGl0RWFyY3V0KGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gY2hlY2sgd2hldGhlciBhIHBvbHlnb24gbm9kZSBmb3JtcyBhIHZhbGlkIGVhciB3aXRoIGFkamFjZW50IG5vZGVzXG5mdW5jdGlvbiBpc0VhcihlYXIpIHtcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxuICAgICAgICBiID0gZWFyLFxuICAgICAgICBjID0gZWFyLm5leHQ7XG5cbiAgICBpZiAoYXJlYShhLCBiLCBjKSA+PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cbiAgICAvLyBub3cgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgb3RoZXIgcG9pbnRzIGluc2lkZSB0aGUgcG90ZW50aWFsIGVhclxuICAgIHZhciBwID0gZWFyLm5leHQubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBlYXIucHJldikge1xuICAgICAgICBpZiAocG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICB2YXIgYSA9IGVhci5wcmV2LFxuICAgICAgICBiID0gZWFyLFxuICAgICAgICBjID0gZWFyLm5leHQ7XG5cbiAgICBpZiAoYXJlYShhLCBiLCBjKSA+PSAwKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyXG5cbiAgICAvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZFxuICAgIHZhciBtaW5UWCA9IGEueCA8IGIueCA/IChhLnggPCBjLnggPyBhLnggOiBjLngpIDogKGIueCA8IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1pblRZID0gYS55IDwgYi55ID8gKGEueSA8IGMueSA/IGEueSA6IGMueSkgOiAoYi55IDwgYy55ID8gYi55IDogYy55KSxcbiAgICAgICAgbWF4VFggPSBhLnggPiBiLnggPyAoYS54ID4gYy54ID8gYS54IDogYy54KSA6IChiLnggPiBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtYXhUWSA9IGEueSA+IGIueSA/IChhLnkgPiBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA+IGMueSA/IGIueSA6IGMueSk7XG5cbiAgICAvLyB6LW9yZGVyIHJhbmdlIGZvciB0aGUgY3VycmVudCB0cmlhbmdsZSBiYm94O1xuICAgIHZhciBtaW5aID0gek9yZGVyKG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgaW52U2l6ZSksXG4gICAgICAgIG1heFogPSB6T3JkZXIobWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHZhciBwID0gZWFyLnByZXZaLFxuICAgICAgICBuID0gZWFyLm5leHRaO1xuXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gYm90aCBkaXJlY3Rpb25zXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblogJiYgbiAmJiBuLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAucHJldlo7XG5cbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkpICYmXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG4gPSBuLm5leHRaO1xuICAgIH1cblxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIC8vIGxvb2sgZm9yIHJlbWFpbmluZyBwb2ludHMgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgd2hpbGUgKG4gJiYgbi56IDw9IG1heFopIHtcbiAgICAgICAgaWYgKG4gIT09IGVhci5wcmV2ICYmIG4gIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgbi54LCBuLnkpICYmXG4gICAgICAgICAgICBhcmVhKG4ucHJldiwgbiwgbi5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG4gPSBuLm5leHRaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgaWYgKCFlcXVhbHMoYSwgYikgJiYgaW50ZXJzZWN0cyhhLCBwLCBwLm5leHQsIGIpICYmIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSkge1xuXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChhLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocC5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGIuaSAvIGRpbSk7XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSB0d28gbm9kZXMgaW52b2x2ZWRcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHAubmV4dCk7XG5cbiAgICAgICAgICAgIHAgPSBzdGFydCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gZmlsdGVyUG9pbnRzKHApO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcblxuICAgICAgICAvLyBmaWx0ZXIgY29sbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkgJiYgcC5uZXh0LnkgIT09IHAueSkge1xuICAgICAgICAgICAgdmFyIHggPSBwLnggKyAoaHkgLSBwLnkpICogKHAubmV4dC54IC0gcC54KSAvIChwLm5leHQueSAtIHAueSk7XG4gICAgICAgICAgICBpZiAoeCA8PSBoeCAmJiB4ID4gcXgpIHtcbiAgICAgICAgICAgICAgICBxeCA9IHg7XG4gICAgICAgICAgICAgICAgaWYgKHggPT09IGh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC55KSByZXR1cm4gcDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh5ID09PSBwLm5leHQueSkgcmV0dXJuIHAubmV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbSA9IHAueCA8IHAubmV4dC54ID8gcCA6IHAubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IG91dGVyTm9kZSk7XG5cbiAgICBpZiAoIW0pIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGh4ID09PSBxeCkgcmV0dXJuIG07IC8vIGhvbGUgdG91Y2hlcyBvdXRlciBzZWdtZW50OyBwaWNrIGxlZnRtb3N0IGVuZHBvaW50XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgbXggPSBtLngsXG4gICAgICAgIG15ID0gbS55LFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG07XG5cbiAgICBkbyB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG14ICYmIGh4ICE9PSBwLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBteSA/IGh4IDogcXgsIGh5LCBteCwgbXksIGh5IDwgbXkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKGxvY2FsbHlJbnNpZGUocCwgaG9sZSkgJiZcbiAgICAgICAgICAgICAgICAodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiAocC54ID4gbS54IHx8IChwLnggPT09IG0ueCAmJiBzZWN0b3JDb250YWluc1NlY3RvcihtLCBwKSkpKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0b3ApO1xuXG4gICAgcmV0dXJuIG07XG59XG5cbi8vIHdoZXRoZXIgc2VjdG9yIGluIHZlcnRleCBtIGNvbnRhaW5zIHNlY3RvciBpbiB2ZXJ0ZXggcCBpbiB0aGUgc2FtZSBjb29yZGluYXRlc1xuZnVuY3Rpb24gc2VjdG9yQ29udGFpbnNTZWN0b3IobSwgcCkge1xuICAgIHJldHVybiBhcmVhKG0ucHJldiwgbSwgcC5wcmV2KSA8IDAgJiYgYXJlYShwLm5leHQsIG0sIG0ubmV4dCkgPCAwO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSAhPT0gMCAmJiAocVNpemUgPT09IDAgfHwgIXEgfHwgcC56IDw9IHEueikpIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIGludmVyc2Ugb2YgdGhlIGxvbmdlciBzaWRlIG9mIGRhdGEgYmJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAqIGludlNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAqIGludlNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54IHx8IChwLnggPT09IGxlZnRtb3N0LnggJiYgcC55IDwgbGVmdG1vc3QueSkpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gYS5uZXh0LmkgIT09IGIuaSAmJiBhLnByZXYuaSAhPT0gYi5pICYmICFpbnRlcnNlY3RzUG9seWdvbihhLCBiKSAmJiAvLyBkb25lcyd0IGludGVyc2VjdCBvdGhlciBlZGdlc1xuICAgICAgICAgICAobG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKSAmJiAvLyBsb2NhbGx5IHZpc2libGVcbiAgICAgICAgICAgIChhcmVhKGEucHJldiwgYSwgYi5wcmV2KSB8fCBhcmVhKGEsIGIucHJldiwgYikpIHx8IC8vIGRvZXMgbm90IGNyZWF0ZSBvcHBvc2l0ZS1mYWNpbmcgc2VjdG9yc1xuICAgICAgICAgICAgZXF1YWxzKGEsIGIpICYmIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpID4gMCAmJiBhcmVhKGIucHJldiwgYiwgYi5uZXh0KSA+IDApOyAvLyBzcGVjaWFsIHplcm8tbGVuZ3RoIGNhc2Vcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICB2YXIgbzEgPSBzaWduKGFyZWEocDEsIHExLCBwMikpO1xuICAgIHZhciBvMiA9IHNpZ24oYXJlYShwMSwgcTEsIHEyKSk7XG4gICAgdmFyIG8zID0gc2lnbihhcmVhKHAyLCBxMiwgcDEpKTtcbiAgICB2YXIgbzQgPSBzaWduKGFyZWEocDIsIHEyLCBxMSkpO1xuXG4gICAgaWYgKG8xICE9PSBvMiAmJiBvMyAhPT0gbzQpIHJldHVybiB0cnVlOyAvLyBnZW5lcmFsIGNhc2VcblxuICAgIGlmIChvMSA9PT0gMCAmJiBvblNlZ21lbnQocDEsIHAyLCBxMSkpIHJldHVybiB0cnVlOyAvLyBwMSwgcTEgYW5kIHAyIGFyZSBjb2xsaW5lYXIgYW5kIHAyIGxpZXMgb24gcDFxMVxuICAgIGlmIChvMiA9PT0gMCAmJiBvblNlZ21lbnQocDEsIHEyLCBxMSkpIHJldHVybiB0cnVlOyAvLyBwMSwgcTEgYW5kIHEyIGFyZSBjb2xsaW5lYXIgYW5kIHEyIGxpZXMgb24gcDFxMVxuICAgIGlmIChvMyA9PT0gMCAmJiBvblNlZ21lbnQocDIsIHAxLCBxMikpIHJldHVybiB0cnVlOyAvLyBwMiwgcTIgYW5kIHAxIGFyZSBjb2xsaW5lYXIgYW5kIHAxIGxpZXMgb24gcDJxMlxuICAgIGlmIChvNCA9PT0gMCAmJiBvblNlZ21lbnQocDIsIHExLCBxMikpIHJldHVybiB0cnVlOyAvLyBwMiwgcTIgYW5kIHExIGFyZSBjb2xsaW5lYXIgYW5kIHExIGxpZXMgb24gcDJxMlxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBmb3IgY29sbGluZWFyIHBvaW50cyBwLCBxLCByLCBjaGVjayBpZiBwb2ludCBxIGxpZXMgb24gc2VnbWVudCBwclxuZnVuY3Rpb24gb25TZWdtZW50KHAsIHEsIHIpIHtcbiAgICByZXR1cm4gcS54IDw9IE1hdGgubWF4KHAueCwgci54KSAmJiBxLnggPj0gTWF0aC5taW4ocC54LCByLngpICYmIHEueSA8PSBNYXRoLm1heChwLnksIHIueSkgJiYgcS55ID49IE1hdGgubWluKHAueSwgci55KTtcbn1cblxuZnVuY3Rpb24gc2lnbihudW0pIHtcbiAgICByZXR1cm4gbnVtID4gMCA/IDEgOiBudW0gPCAwID8gLTEgOiAwO1xufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50c1xuZnVuY3Rpb24gaW50ZXJzZWN0c1BvbHlnb24oYSwgYikge1xuICAgIHZhciBwID0gYTtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLmkgIT09IGEuaSAmJiBwLm5leHQuaSAhPT0gYS5pICYmIHAuaSAhPT0gYi5pICYmIHAubmV4dC5pICE9PSBiLmkgJiZcbiAgICAgICAgICAgICAgICBpbnRlcnNlY3RzKHAsIHAubmV4dCwgYSwgYikpIHJldHVybiB0cnVlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIGxvY2FsbHlJbnNpZGUoYSwgYikge1xuICAgIHJldHVybiBhcmVhKGEucHJldiwgYSwgYS5uZXh0KSA8IDAgP1xuICAgICAgICBhcmVhKGEsIGIsIGEubmV4dCkgPj0gMCAmJiBhcmVhKGEsIGEucHJldiwgYikgPj0gMCA6XG4gICAgICAgIGFyZWEoYSwgYiwgYS5wcmV2KSA8IDAgfHwgYXJlYShhLCBhLm5leHQsIGIpIDwgMDtcbn1cblxuLy8gY2hlY2sgaWYgdGhlIG1pZGRsZSBwb2ludCBvZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBtaWRkbGVJbnNpZGUoYSwgYikge1xuICAgIHZhciBwID0gYSxcbiAgICAgICAgaW5zaWRlID0gZmFsc2UsXG4gICAgICAgIHB4ID0gKGEueCArIGIueCkgLyAyLFxuICAgICAgICBweSA9IChhLnkgKyBiLnkpIC8gMjtcbiAgICBkbyB7XG4gICAgICAgIGlmICgoKHAueSA+IHB5KSAhPT0gKHAubmV4dC55ID4gcHkpKSAmJiBwLm5leHQueSAhPT0gcC55ICYmXG4gICAgICAgICAgICAgICAgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0ZXggaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXlcbiAgICB0aGlzLmkgPSBpO1xuXG4gICAgLy8gdmVydGV4IGNvb3JkaW5hdGVzXG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgdmVydGV4IG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuXG4vLyByZXR1cm4gYSBwZXJjZW50YWdlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcG9seWdvbiBhcmVhIGFuZCBpdHMgdHJpYW5ndWxhdGlvbiBhcmVhO1xuLy8gdXNlZCB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2YgdHJpYW5ndWxhdGlvblxuZWFyY3V0LmRldmlhdGlvbiA9IGZ1bmN0aW9uIChkYXRhLCBob2xlSW5kaWNlcywgZGltLCB0cmlhbmdsZXMpIHtcbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGg7XG4gICAgdmFyIG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1swXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuXG4gICAgdmFyIHBvbHlnb25BcmVhID0gTWF0aC5hYnMoc2lnbmVkQXJlYShkYXRhLCAwLCBvdXRlckxlbiwgZGltKSk7XG4gICAgaWYgKGhhc0hvbGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgICAgICB2YXIgZW5kID0gaSA8IGxlbiAtIDEgPyBob2xlSW5kaWNlc1tpICsgMV0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHBvbHlnb25BcmVhIC09IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHJpYW5nbGVzQXJlYSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgYSA9IHRyaWFuZ2xlc1tpXSAqIGRpbTtcbiAgICAgICAgdmFyIGIgPSB0cmlhbmdsZXNbaSArIDFdICogZGltO1xuICAgICAgICB2YXIgYyA9IHRyaWFuZ2xlc1tpICsgMl0gKiBkaW07XG4gICAgICAgIHRyaWFuZ2xlc0FyZWEgKz0gTWF0aC5hYnMoXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbY10pICogKGRhdGFbYiArIDFdIC0gZGF0YVthICsgMV0pIC1cbiAgICAgICAgICAgIChkYXRhW2FdIC0gZGF0YVtiXSkgKiAoZGF0YVtjICsgMV0gLSBkYXRhW2EgKyAxXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2x5Z29uQXJlYSA9PT0gMCAmJiB0cmlhbmdsZXNBcmVhID09PSAwID8gMCA6XG4gICAgICAgIE1hdGguYWJzKCh0cmlhbmdsZXNBcmVhIC0gcG9seWdvbkFyZWEpIC8gcG9seWdvbkFyZWEpO1xufTtcblxuZnVuY3Rpb24gc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQsIGogPSBlbmQgLSBkaW07IGkgPCBlbmQ7IGkgKz0gZGltKSB7XG4gICAgICAgIHN1bSArPSAoZGF0YVtqXSAtIGRhdGFbaV0pICogKGRhdGFbaSArIDFdICsgZGF0YVtqICsgMV0pO1xuICAgICAgICBqID0gaTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cblxuLy8gdHVybiBhIHBvbHlnb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBmb3JtIChlLmcuIGFzIGluIEdlb0pTT04pIGludG8gYSBmb3JtIEVhcmN1dCBhY2NlcHRzXG5lYXJjdXQuZmxhdHRlbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIGRpbSA9IGRhdGFbMF1bMF0ubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSB7dmVydGljZXM6IFtdLCBob2xlczogW10sIGRpbWVuc2lvbnM6IGRpbX0sXG4gICAgICAgIGhvbGVJbmRleCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYXRhW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRpbTsgZCsrKSByZXN1bHQudmVydGljZXMucHVzaChkYXRhW2ldW2pdW2RdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIGhvbGVJbmRleCArPSBkYXRhW2kgLSAxXS5sZW5ndGg7XG4gICAgICAgICAgICByZXN1bHQuaG9sZXMucHVzaChob2xlSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWlja3NlbGVjdChhcnIsIGssIGxlZnQsIHJpZ2h0LCBjb21wYXJlKSB7XG4gICAgcXVpY2tzZWxlY3RTdGVwKGFyciwgaywgbGVmdCB8fCAwLCByaWdodCB8fCAoYXJyLmxlbmd0aCAtIDEpLCBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJlKTtcbn1cblxuZnVuY3Rpb24gcXVpY2tzZWxlY3RTdGVwKGFyciwgaywgbGVmdCwgcmlnaHQsIGNvbXBhcmUpIHtcblxuICAgIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgICAgICAgdmFyIG4gPSByaWdodCAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgdmFyIG0gPSBrIC0gbGVmdCArIDE7XG4gICAgICAgICAgICB2YXIgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgICAgICAgdmFyIHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xuICAgICAgICAgICAgdmFyIHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogKG0gLSBuIC8gMiA8IDAgPyAtMSA6IDEpO1xuICAgICAgICAgICAgdmFyIG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgdmFyIG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICAgICAgICBxdWlja3NlbGVjdFN0ZXAoYXJyLCBrLCBuZXdMZWZ0LCBuZXdSaWdodCwgY29tcGFyZSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdCA9IGFycltrXTtcbiAgICAgICAgdmFyIGkgPSBsZWZ0O1xuICAgICAgICB2YXIgaiA9IHJpZ2h0O1xuXG4gICAgICAgIHN3YXAoYXJyLCBsZWZ0LCBrKTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JpZ2h0XSwgdCkgPiAwKSBzd2FwKGFyciwgbGVmdCwgcmlnaHQpO1xuXG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgc3dhcChhcnIsIGksIGopO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyW2ldLCB0KSA8IDApIGkrKztcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltqXSwgdCkgPiAwKSBqLS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGFyZShhcnJbbGVmdF0sIHQpID09PSAwKSBzd2FwKGFyciwgbGVmdCwgaik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgc3dhcChhcnIsIGosIHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTtcbiAgICAgICAgaWYgKGsgPD0gaikgcmlnaHQgPSBqIC0gMTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyLCBpLCBqKSB7XG4gICAgdmFyIHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHF1aWNrc2VsZWN0IGZyb20gJ3F1aWNrc2VsZWN0JztcblxuaW1wb3J0IHtjYWxjdWxhdGVTaWduZWRBcmVhfSBmcm9tICcuL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGFzc2lmeVJpbmdzKHJpbmdzOiBBcnJheTxBcnJheTxQb2ludD4+LCBtYXhSaW5nczogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA8PSAxKSByZXR1cm4gW3JpbmdzXTtcblxuICAgIGNvbnN0IHBvbHlnb25zID0gW107XG4gICAgbGV0IHBvbHlnb24sXG4gICAgICAgIGNjdztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJlYSA9IGNhbGN1bGF0ZVNpZ25lZEFyZWEocmluZ3NbaV0pO1xuICAgICAgICBpZiAoYXJlYSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgKHJpbmdzW2ldOiBhbnkpLmFyZWEgPSBNYXRoLmFicyhhcmVhKTtcblxuICAgICAgICBpZiAoY2N3ID09PSB1bmRlZmluZWQpIGNjdyA9IGFyZWEgPCAwO1xuXG4gICAgICAgIGlmIChjY3cgPT09IGFyZWEgPCAwKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAocG9seWdvbjogYW55KS5wdXNoKHJpbmdzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcblxuICAgIC8vIEVhcmN1dCBwZXJmb3JtYW5jZSBkZWdyYWRlcyB3aXRoIHRoZSAjIG9mIHJpbmdzIGluIGEgcG9seWdvbi4gRm9yIHRoaXNcbiAgICAvLyByZWFzb24sIHdlIGxpbWl0IHN0cmlwIG91dCBhbGwgYnV0IHRoZSBgbWF4UmluZ3NgIGxhcmdlc3QgcmluZ3MuXG4gICAgaWYgKG1heFJpbmdzID4gMSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBvbHlnb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbnNbal0ubGVuZ3RoIDw9IG1heFJpbmdzKSBjb250aW51ZTtcbiAgICAgICAgICAgIHF1aWNrc2VsZWN0KHBvbHlnb25zW2pdLCBtYXhSaW5ncywgMSwgcG9seWdvbnNbal0ubGVuZ3RoIC0gMSwgY29tcGFyZUFyZWFzKTtcbiAgICAgICAgICAgIHBvbHlnb25zW2pdID0gcG9seWdvbnNbal0uc2xpY2UoMCwgbWF4UmluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQXJlYXMoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5cbnR5cGUgUGF0dGVyblN0eWxlTGF5ZXJzID1cbiAgICBBcnJheTxMaW5lU3R5bGVMYXllcj4gfFxuICAgIEFycmF5PEZpbGxTdHlsZUxheWVyPiB8XG4gICAgQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUGF0dGVybih0eXBlOiBzdHJpbmcsIGxheWVyczogUGF0dGVyblN0eWxlTGF5ZXJzLCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcztcbiAgICBsZXQgaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KGAke3R5cGV9LXBhdHRlcm5gKTtcbiAgICAgICAgaWYgKCFwYXR0ZXJuUHJvcGVydHkuaXNDb25zdGFudCgpKSB7XG4gICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuKSB7XG4gICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW2NvbnN0YW50UGF0dGVybi50b10gPSAgdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW2NvbnN0YW50UGF0dGVybi5mcm9tXSA9ICB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1BhdHRlcm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKHR5cGU6IHN0cmluZywgbGF5ZXJzOiBQYXR0ZXJuU3R5bGVMYXllcnMsIHBhdHRlcm5GZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCB6b29tOiBudW1iZXIsIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgIGNvbnN0IHBhdHRlcm5zID0gb3B0aW9ucy5wYXR0ZXJuRGVwZW5kZW5jaWVzO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldChgJHt0eXBlfS1wYXR0ZXJuYCk7XG5cbiAgICAgICAgY29uc3QgcGF0dGVyblByb3BlcnR5VmFsdWUgPSBwYXR0ZXJuUHJvcGVydHkudmFsdWU7XG4gICAgICAgIGlmIChwYXR0ZXJuUHJvcGVydHlWYWx1ZS5raW5kICE9PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgIGxldCBtaW4gPSBwYXR0ZXJuUHJvcGVydHlWYWx1ZS5ldmFsdWF0ZSh7em9vbTogem9vbSAtIDF9LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIGxldCBtaWQgPSBwYXR0ZXJuUHJvcGVydHlWYWx1ZS5ldmFsdWF0ZSh7em9vbX0sIHBhdHRlcm5GZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgbGV0IG1heCA9IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmV2YWx1YXRlKHt6b29tOiB6b29tICsgMX0sIHBhdHRlcm5GZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgbWluID0gbWluICYmIG1pbi5uYW1lID8gbWluLm5hbWUgOiBtaW47XG4gICAgICAgICAgICBtaWQgPSBtaWQgJiYgbWlkLm5hbWUgPyBtaWQubmFtZSA6IG1pZDtcbiAgICAgICAgICAgIG1heCA9IG1heCAmJiBtYXgubmFtZSA/IG1heC5uYW1lIDogbWF4O1xuICAgICAgICAgICAgLy8gYWRkIHRvIHBhdHRlcm5EZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIHBhdHRlcm5zW21pbl0gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbbWlkXSA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1ttYXhdID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gc2F2ZSBmb3IgbGF5b3V0XG4gICAgICAgICAgICBwYXR0ZXJuRmVhdHVyZS5wYXR0ZXJuc1tsYXllci5pZF0gPSB7bWluLCBtaWQsIG1heH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm5GZWF0dXJlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtGaWxsTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vZmlsbF9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7TGluZUluZGV4QXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheX0gZnJvbSAnLi4vaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgZWFyY3V0IGZyb20gJ2VhcmN1dCc7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmNvbnN0IEVBUkNVVF9NQVhfUklOR1MgPSA1MDA7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBGaWxsU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuY2xhc3MgRmlsbEJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PEZpbGxTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8RmlsbFN0eWxlTGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgcGF0dGVybkZlYXR1cmVzOiBBcnJheTxCdWNrZXRGZWF0dXJlPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBGaWxsTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTI6IExpbmVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyMjogSW5kZXhCdWZmZXI7XG5cbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8RmlsbFN0eWxlTGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHNlZ21lbnRzMjogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzID0gW107XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBGaWxsTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkyID0gbmV3IExpbmVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KGxheW91dEF0dHJpYnV0ZXMsIG9wdGlvbnMubGF5ZXJzLCBvcHRpb25zLnpvb20pO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zZWdtZW50czIgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBoYXNQYXR0ZXJuKCdmaWxsJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBmaWxsU29ydEtleSA9IHRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoJ2ZpbGwtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBmZWF0dXJlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGZpbGxTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBmaWxsU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5zOiB7fSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5wdXNoKGJ1Y2tldEZlYXR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGxTb3J0S2V5KSB7XG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIGluIHVzZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGJ1Y2tldEZlYXR1cmUgb2YgYnVja2V0RmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9ID0gYnVja2V0RmVhdHVyZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5GZWF0dXJlID0gYWRkUGF0dGVybkRlcGVuZGVuY2llcygnZmlsbCcsIHRoaXMubGF5ZXJzLCBidWNrZXRGZWF0dXJlLCB0aGlzLnpvb20sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIC8vIHBhdHRlcm4gZmVhdHVyZXMgYXJlIGFkZGVkIG9ubHkgb25jZSB0aGUgcGF0dGVybiBpcyBsb2FkZWQgaW50byB0aGUgaW1hZ2UgYXRsYXNcbiAgICAgICAgICAgICAgICAvLyBzbyBhcmUgc3RvcmVkIGR1cmluZyBwb3B1bGF0ZSB1bnRpbCBsYXRlciB1cGRhdGVkIHdpdGggcG9zaXRpb25zIGJ5IHRpbGUgd29ya2VyIGluIGFkZEZlYXR1cmVzXG4gICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuRmVhdHVyZXMucHVzaChwYXR0ZXJuRmVhdHVyZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShidWNrZXRGZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgdGhpcy5wYXR0ZXJuRmVhdHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShmZWF0dXJlLCBmZWF0dXJlLmdlb21ldHJ5LCBmZWF0dXJlLmluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgY2xhc3NpZnlSaW5ncyhnZW9tZXRyeSwgRUFSQ1VUX01BWF9SSU5HUykpIHtcbiAgICAgICAgICAgIGxldCBudW1WZXJ0aWNlcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIG51bVZlcnRpY2VzICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0cmlhbmdsZVNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlU2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaG9sZUluZGljZXMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJpbmcgIT09IHBvbHlnb25bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaG9sZUluZGljZXMucHVzaChmbGF0dGVuZWQubGVuZ3RoIC8gMik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudChyaW5nLmxlbmd0aCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5Mik7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUluZGV4ID0gbGluZVNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyaW5nWzBdLngsIHJpbmdbMF0ueSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayhsaW5lSW5kZXggKyByaW5nLmxlbmd0aCAtIDEsIGxpbmVJbmRleCk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1swXS54KTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChyaW5nWzBdLnkpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socmluZ1tpXS54LCByaW5nW2ldLnkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKGxpbmVJbmRleCArIGkgLSAxLCBsaW5lSW5kZXggKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1tpXS54KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1tpXS55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaW5lU2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGluZVNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZWFyY3V0KGZsYXR0ZW5lZCwgaG9sZUluZGljZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KGluZGljZXMubGVuZ3RoICUgMyA9PT0gMCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaSArIDJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJpYW5nbGVTZWdtZW50LnZlcnRleExlbmd0aCArPSBudW1WZXJ0aWNlcztcbiAgICAgICAgICAgIHRyaWFuZ2xlU2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gaW5kaWNlcy5sZW5ndGggLyAzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmlsbEJ1Y2tldCcsIEZpbGxCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9maWxsXCJdW1wiZmlsbC1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtYW50aWFsaWFzXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsXCJdW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFxuICAgIFwiZmlsbC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3BhY2l0eVwiXSksXG4gICAgXCJmaWxsLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtY29sb3JcIl0pLFxuICAgIFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlXCJdKSxcbiAgICBcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtcGF0dGVyblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb259IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7dHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgRmlsbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgY29uc3Qgb3V0bGluZUNvbG9yID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXTtcbiAgICAgICAgaWYgKG91dGxpbmVDb2xvci52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIG91dGxpbmVDb2xvci52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbJ2ZpbGwtb3V0bGluZS1jb2xvciddID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLWNvbG9yJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxsU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2Ffbm9ybWFsX2VkJywgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdAbWFwYm94L3BvaW50LWdlb21ldHJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUZlYXR1cmU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVGZWF0dXJlKHBiZiwgZW5kLCBleHRlbnQsIGtleXMsIHZhbHVlcykge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMudHlwZSA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2dlb21ldHJ5ID0gLTE7XG4gICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZEZlYXR1cmUsIHRoaXMsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGZWF0dXJlKHRhZywgZmVhdHVyZSwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PSAxKSBmZWF0dXJlLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMikgcmVhZFRhZyhwYmYsIGZlYXR1cmUpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSAzKSBmZWF0dXJlLnR5cGUgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSA0KSBmZWF0dXJlLl9nZW9tZXRyeSA9IHBiZi5wb3M7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWcocGJmLCBmZWF0dXJlKSB7XG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIGtleSA9IGZlYXR1cmUuX2tleXNbcGJmLnJlYWRWYXJpbnQoKV0sXG4gICAgICAgICAgICB2YWx1ZSA9IGZlYXR1cmUuX3ZhbHVlc1twYmYucmVhZFZhcmludCgpXTtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5cblZlY3RvclRpbGVGZWF0dXJlLnR5cGVzID0gWydVbmtub3duJywgJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnUG9seWdvbiddO1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBiZiA9IHRoaXMuX3BiZjtcbiAgICBwYmYucG9zID0gdGhpcy5fZ2VvbWV0cnk7XG5cbiAgICB2YXIgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MsXG4gICAgICAgIGNtZCA9IDEsXG4gICAgICAgIGxlbmd0aCA9IDAsXG4gICAgICAgIHggPSAwLFxuICAgICAgICB5ID0gMCxcbiAgICAgICAgbGluZXMgPSBbXSxcbiAgICAgICAgbGluZTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNtZCA9PT0gMSkgeyAvLyBtb3ZlVG9cbiAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpbmUucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwbmlrLXZlY3Rvci10aWxlL2lzc3Vlcy85MFxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnB1c2gobGluZVswXS5jbG9uZSgpKTsgLy8gY2xvc2VQb2x5Z29uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICByZXR1cm4gbGluZXM7XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIHgxID0gSW5maW5pdHksXG4gICAgICAgIHgyID0gLUluZmluaXR5LFxuICAgICAgICB5MSA9IEluZmluaXR5LFxuICAgICAgICB5MiA9IC1JbmZpbml0eTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIGlmICh4IDwgeDEpIHgxID0geDtcbiAgICAgICAgICAgIGlmICh4ID4geDIpIHgyID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgeTEpIHkxID0geTtcbiAgICAgICAgICAgIGlmICh5ID4geTIpIHkyID0geTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCAhPT0gNykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbW1hbmQgJyArIGNtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXTtcbn07XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04gPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmV4dGVudCAqIE1hdGgucG93KDIsIHopLFxuICAgICAgICB4MCA9IHRoaXMuZXh0ZW50ICogeCxcbiAgICAgICAgeTAgPSB0aGlzLmV4dGVudCAqIHksXG4gICAgICAgIGNvb3JkcyA9IHRoaXMubG9hZEdlb21ldHJ5KCksXG4gICAgICAgIHR5cGUgPSBWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1t0aGlzLnR5cGVdLFxuICAgICAgICBpLCBqO1xuXG4gICAgZnVuY3Rpb24gcHJvamVjdChsaW5lKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHAgPSBsaW5lW2pdLCB5MiA9IDE4MCAtIChwLnkgKyB5MCkgKiAzNjAgLyBzaXplO1xuICAgICAgICAgICAgbGluZVtqXSA9IFtcbiAgICAgICAgICAgICAgICAocC54ICsgeDApICogMzYwIC8gc2l6ZSAtIDE4MCxcbiAgICAgICAgICAgICAgICAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTBcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBjb29yZHNbaV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgY29vcmRzID0gcG9pbnRzO1xuICAgICAgICBwcm9qZWN0KGNvb3Jkcyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM6XG4gICAgICAgIGNvb3JkcyA9IGNsYXNzaWZ5UmluZ3MoY29vcmRzKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHByb2plY3QoY29vcmRzW2ldW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9ICdNdWx0aScgKyB0eXBlO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcblxuICAgIGlmICgnaWQnIGluIHRoaXMpIHtcbiAgICAgICAgcmVzdWx0LmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3MpIHtcbiAgICB2YXIgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA8PSAxKSByZXR1cm4gW3JpbmdzXTtcblxuICAgIHZhciBwb2x5Z29ucyA9IFtdLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBhcmVhID0gc2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoY2N3ID09PSB1bmRlZmluZWQpIGNjdyA9IGFyZWEgPCAwO1xuXG4gICAgICAgIGlmIChjY3cgPT09IGFyZWEgPCAwKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2x5Z29uLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKHJpbmcpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnLi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVMYXllcjtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZUxheWVyKHBiZiwgZW5kKSB7XG4gICAgLy8gUHVibGljXG4gICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gNDA5NjtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZExheWVyLCB0aGlzLCBlbmQpO1xuXG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLl9mZWF0dXJlcy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHJlYWRMYXllcih0YWcsIGxheWVyLCBwYmYpIHtcbiAgICBpZiAodGFnID09PSAxNSkgbGF5ZXIudmVyc2lvbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAxKSBsYXllci5uYW1lID0gcGJmLnJlYWRTdHJpbmcoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGxheWVyLmV4dGVudCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAyKSBsYXllci5fZmVhdHVyZXMucHVzaChwYmYucG9zKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGxheWVyLl9rZXlzLnB1c2gocGJmLnJlYWRTdHJpbmcoKSk7XG4gICAgZWxzZSBpZiAodGFnID09PSA0KSBsYXllci5fdmFsdWVzLnB1c2gocmVhZFZhbHVlTWVzc2FnZShwYmYpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlTWVzc2FnZShwYmYpIHtcbiAgICB2YXIgdmFsdWUgPSBudWxsLFxuICAgICAgICBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciB0YWcgPSBwYmYucmVhZFZhcmludCgpID4+IDM7XG5cbiAgICAgICAgdmFsdWUgPSB0YWcgPT09IDEgPyBwYmYucmVhZFN0cmluZygpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gMiA/IHBiZi5yZWFkRmxvYXQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDMgPyBwYmYucmVhZERvdWJsZSgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNCA/IHBiZi5yZWFkVmFyaW50NjQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDUgPyBwYmYucmVhZFZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNiA/IHBiZi5yZWFkU1ZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNyA/IHBiZi5yZWFkQm9vbGVhbigpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIHJldHVybiBmZWF0dXJlIGBpYCBmcm9tIHRoaXMgbGF5ZXIgYXMgYSBgVmVjdG9yVGlsZUZlYXR1cmVgXG5WZWN0b3JUaWxlTGF5ZXIucHJvdG90eXBlLmZlYXR1cmUgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcycpO1xuXG4gICAgdGhpcy5fcGJmLnBvcyA9IHRoaXMuX2ZlYXR1cmVzW2ldO1xuXG4gICAgdmFyIGVuZCA9IHRoaXMuX3BiZi5yZWFkVmFyaW50KCkgKyB0aGlzLl9wYmYucG9zO1xuICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUZlYXR1cmUodGhpcy5fcGJmLCBlbmQsIHRoaXMuZXh0ZW50LCB0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVMYXllciA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWxheWVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZTtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZShwYmYsIGVuZCkge1xuICAgIHRoaXMubGF5ZXJzID0gcGJmLnJlYWRGaWVsZHMocmVhZFRpbGUsIHt9LCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkVGlsZSh0YWcsIGxheWVycywgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICB2YXIgbGF5ZXIgPSBuZXcgVmVjdG9yVGlsZUxheWVyKHBiZiwgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MpO1xuICAgICAgICBpZiAobGF5ZXIubGVuZ3RoKSBsYXllcnNbbGF5ZXIubmFtZV0gPSBsYXllcjtcbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMnKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbEV4dHJ1c2lvbkxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmNvbnN0IEVBUkNVVF9NQVhfUklOR1MgPSA1MDA7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5cbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuY29uc3QgRkFDVE9SID0gTWF0aC5wb3coMiwgMTMpO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgodmVydGV4QXJyYXksIHgsIHksIG54LCBueSwgbnosIHQsIGUpIHtcbiAgICB2ZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3NcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgLy8gYV9ub3JtYWxfZWQ6IDMtY29tcG9uZW50IG5vcm1hbCBhbmQgMS1jb21wb25lbnQgZWRnZWRpc3RhbmNlXG4gICAgICAgIE1hdGguZmxvb3IobnggKiBGQUNUT1IpICogMiArIHQsXG4gICAgICAgIG55ICogRkFDVE9SICogMixcbiAgICAgICAgbnogKiBGQUNUT1IgKiAyLFxuICAgICAgICAvLyBlZGdlZGlzdGFuY2UgKHVzZWQgZm9yIHdyYXBwaW5nIHBhdHRlcm5zIGFyb3VuZCBleHRydXNpb24gc2lkZXMpXG4gICAgICAgIE1hdGgucm91bmQoZSlcbiAgICApO1xufVxuXG5jbGFzcyBGaWxsRXh0cnVzaW9uQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcbiAgICBmZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxFeHRydXNpb25TdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuXG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignZmlsbC1leHRydXNpb24nLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHBhdHRlcm5zOiB7fVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWF0dXJlLmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHBhdHRlcm5GZWF0dXJlLmlkID0gZmVhdHVyZS5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUGF0dGVybikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaChhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdmaWxsLWV4dHJ1c2lvbicsIHRoaXMubGF5ZXJzLCBwYXR0ZXJuRmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShwYXR0ZXJuRmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgdGhpcy5mZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5fSA9IGZlYXR1cmU7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZ2VvbWV0cnksIEVBUkNVVF9NQVhfUklOR1MpKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmVydGljZXMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNlcyArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIGlmIChyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbnRpcmVseU91dHNpZGUocmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVkZ2VEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHJpbmcubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDEgPSByaW5nW3BdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwID49IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gcmluZ1twIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNCb3VuZGFyeUVkZ2UocDEsIHAyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LnZlcnRleExlbmd0aCArIDQgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVycCA9IHAxLnN1YihwMikuX3BlcnAoKS5fdW5pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBwMi5kaXN0KHAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZURpc3RhbmNlICsgZGlzdCA+IDMyNzY4KSBlZGdlRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAxLngsIHAxLnksIHBlcnAueCwgcGVycC55LCAwLCAwLCBlZGdlRGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMS54LCBwMS55LCBwZXJwLngsIHBlcnAueSwgMCwgMSwgZWRnZURpc3RhbmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VEaXN0YW5jZSArPSBkaXN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAyLngsIHAyLnksIHBlcnAueCwgcGVycC55LCAwLCAwLCBlZGdlRGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMi54LCBwMi55LCBwZXJwLngsIHBlcnAueSwgMCwgMSwgZWRnZURpc3RhbmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwozDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwpBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgMCAgMSDDosKUwoIgQ291bnRlci1jbG9ja3dpc2Ugd2luZGluZyBvcmRlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgICAgICDDosKUwoIgVHJpYW5nbGUgMTogMCA9PiAyID0+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwoIgMiAgMyDDosKUwoIgVHJpYW5nbGUgMjogMSA9PiAyID0+IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDosKUwpTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwphcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYm90dG9tUmlnaHQsIGJvdHRvbVJpZ2h0ICsgMiwgYm90dG9tUmlnaHQgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soYm90dG9tUmlnaHQgKyAxLCBib3R0b21SaWdodCArIDIsIGJvdHRvbVJpZ2h0ICsgMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWdtZW50LnZlcnRleExlbmd0aCArIG51bVZlcnRpY2VzID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL09ubHkgdHJpYW5ndWxhdGUgYW5kIGRyYXcgdGhlIGFyZWEgb2YgdGhlIGZlYXR1cmUgaWYgaXQgaXMgYSBwb2x5Z29uXG4gICAgICAgICAgICAvL090aGVyIGZlYXR1cmUgdHlwZXMgKGUuZy4gTGluZVN0cmluZykgZG8gbm90IGhhdmUgYXJlYSwgc28gdHJpYW5ndWxhdGlvbiBpcyBwb2ludGxlc3MgLyB1bmRlZmluZWRcbiAgICAgICAgICAgIGlmICh2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzW2ZlYXR1cmUudHlwZV0gIT09ICdQb2x5Z29uJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gW107XG4gICAgICAgICAgICBjb25zdCBob2xlSW5kaWNlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVJbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIGlmIChyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmluZyAhPT0gcG9seWdvblswXSkge1xuICAgICAgICAgICAgICAgICAgICBob2xlSW5kaWNlcy5wdXNoKGZsYXR0ZW5lZC5sZW5ndGggLyAyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHJpbmdbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAueCwgcC55LCAwLCAwLCAxLCAxLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChwLngpO1xuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChwLnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGVhcmN1dChmbGF0dGVuZWQsIGhvbGVJbmRpY2VzKTtcbiAgICAgICAgICAgIGFzc2VydChpbmRpY2VzLmxlbmd0aCAlIDMgPT09IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBDb3VudGVyLWNsb2Nrd2lzZSB3aW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbal0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ogKyAyXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaiArIDFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gaW5kaWNlcy5sZW5ndGggLyAzO1xuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gbnVtVmVydGljZXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxFeHRydXNpb25CdWNrZXQnLCBGaWxsRXh0cnVzaW9uQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAnZmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsRXh0cnVzaW9uQnVja2V0O1xuXG5mdW5jdGlvbiBpc0JvdW5kYXJ5RWRnZShwMSwgcDIpIHtcbiAgICByZXR1cm4gKHAxLnggPT09IHAyLnggJiYgKHAxLnggPCAwIHx8IHAxLnggPiBFWFRFTlQpKSB8fFxuICAgICAgICAocDEueSA9PT0gcDIueSAmJiAocDEueSA8IDAgfHwgcDEueSA+IEVYVEVOVCkpO1xufVxuXG5mdW5jdGlvbiBpc0VudGlyZWx5T3V0c2lkZShyaW5nKSB7XG4gICAgcmV0dXJuIHJpbmcuZXZlcnkocCA9PiBwLnggPCAwKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC54ID4gRVhURU5UKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC55IDwgMCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueSA+IEVYVEVOVCk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWJhc2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbn0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHt0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbEV4dHJ1c2lvbkJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBpczNEKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHwgbnVtYmVyIHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1oZWlnaHQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLWJhc2UnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgsIHRyYW5zZm9ybSwgMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGVkID0gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeSwgYmFzZSwgaGVpZ2h0LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBwcm9qZWN0ZWRbMF07XG4gICAgICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IHByb2plY3RlZFsxXTtcbiAgICAgICAgcmV0dXJuIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcCwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb3QoYSwgYikge1xuICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIHByb2plY3RlZEZhY2U6IEFycmF5PFBvaW50Pikge1xuXG4gICAgaWYgKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIEZvciBwb2ludCBxdWVyaWVzIGNhbGN1bGF0ZSB0aGUgeiBhdCB3aGljaCB0aGUgcG9pbnQgaW50ZXJzZWN0cyB0aGUgZmFjZVxuICAgICAgICAvLyB1c2luZyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcy5cblxuICAgICAgICAvLyBGaW5kIHRoZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBvZiB0aGUgcHJvamVjdGVkIHBvaW50IHdpdGhpbiB0aGUgZmlyc3RcbiAgICAgICAgLy8gdHJpYW5nbGUgb2YgdGhlIGZhY2UsIHVzaW5nIG9ubHkgdGhlIHh5IHBsYW5lLiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGVcbiAgICAgICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmlyc3QgdHJpYW5nbGUgYmVjYXVzZSBhbGwgdGhlIHRyaWFuZ2xlcyBpbiB0aGUgZmFjZVxuICAgICAgICAvLyBhcmUgaW4gdGhlIHNhbWUgcGxhbmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgcG9pbnRzIGFyZSBjb2luY2lkZW50IGFuZCB1c2Ugb3RoZXIgcG9pbnRzIGlmIHRoZXkgYXJlLlxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgIGxldCBiLCBjO1xuICAgICAgICB3aGlsZSAoIWIgfHwgYS5lcXVhbHMoYikpIHtcbiAgICAgICAgICAgIGIgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgICAgICBpZiAoIWIpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoIWMgfHwgYS5lcXVhbHMoYykgfHwgYi5lcXVhbHMoYykpIHtcbiAgICAgICAgICAgIGMgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgICAgICBpZiAoIWMpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5WzBdO1xuXG4gICAgICAgIGNvbnN0IGFiID0gYi5zdWIoYSk7XG4gICAgICAgIGNvbnN0IGFjID0gYy5zdWIoYSk7XG4gICAgICAgIGNvbnN0IGFwID0gcC5zdWIoYSk7XG5cbiAgICAgICAgY29uc3QgZG90QUJBQiA9IGRvdChhYiwgYWIpO1xuICAgICAgICBjb25zdCBkb3RBQkFDID0gZG90KGFiLCBhYyk7XG4gICAgICAgIGNvbnN0IGRvdEFDQUMgPSBkb3QoYWMsIGFjKTtcbiAgICAgICAgY29uc3QgZG90QVBBQiA9IGRvdChhcCwgYWIpO1xuICAgICAgICBjb25zdCBkb3RBUEFDID0gZG90KGFwLCBhYyk7XG4gICAgICAgIGNvbnN0IGRlbm9tID0gZG90QUJBQiAqIGRvdEFDQUMgLSBkb3RBQkFDICogZG90QUJBQztcbiAgICAgICAgY29uc3QgdiA9IChkb3RBQ0FDICogZG90QVBBQiAtIGRvdEFCQUMgKiBkb3RBUEFDKSAvIGRlbm9tO1xuICAgICAgICBjb25zdCB3ID0gKGRvdEFCQUIgKiBkb3RBUEFDIC0gZG90QUJBQyAqIGRvdEFQQUIpIC8gZGVub207XG4gICAgICAgIGNvbnN0IHUgPSAxIC0gdiAtIHc7XG5cbiAgICAgICAgLy8gVXNlIHRoZSBiYXJ5Y2VudHJpYyB3ZWlnaHRpbmcgYWxvbmcgd2l0aCB0aGUgb3JpZ2luYWwgdHJpYW5nbGUgeiBjb29yZGluYXRlcyB0byBnZXQgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbi5cbiAgICAgICAgcmV0dXJuIGEueiAqIHUgKyBiLnogKiB2ICsgYy56ICogdztcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBjb3VudHMgYXMgY2xvc2VzdCBpcyBsZXNzIGNsZWFyIHdoZW4gdGhlIHF1ZXJ5IGlzIGEgYm94LiBUaGlzXG4gICAgICAgIC8vIHJldHVybnMgdGhlIGRpc3RhbmNlIHRvIHRoZSBuZWFyZXN0IHBvaW50IG9uIHRoZSBmYWNlLCB3aGV0aGVyIGl0IGlzXG4gICAgICAgIC8vIHdpdGhpbiB0aGUgcXVlcnkgb3Igbm90LiBJdCBjb3VsZCBiZSBtb3JlIGNvcnJlY3QgdG8gcmV0dXJuIHRoZVxuICAgICAgICAvLyBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gdGhlIHF1ZXJ5IGJveCBidXQgdGhpcyB3b3VsZCBiZVxuICAgICAgICAvLyBtb3JlIGNvbXBsaWNhdGVkIGFuZCBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHdpdGggbGl0dGxlIGJlbmVmaXQuXG4gICAgICAgIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByb2plY3RlZEZhY2UpIHtcbiAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgcC56KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvc2VzdERpc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24ocHJvamVjdGVkQmFzZTogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRUb3A6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+KSB7XG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIHByb2plY3RlZFRvcCkpIHtcbiAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgcHJvamVjdGVkVG9wWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCByID0gMDsgciA8IHByb2plY3RlZFRvcC5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nVG9wID0gcHJvamVjdGVkVG9wW3JdO1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IHByb2plY3RlZEJhc2Vbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZ1RvcC5sZW5ndGggLSAxOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcEEgPSByaW5nVG9wW3BdO1xuICAgICAgICAgICAgY29uc3QgdG9wQiA9IHJpbmdUb3BbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgYmFzZUEgPSByaW5nQmFzZVtwXTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VCID0gcmluZ0Jhc2VbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgZmFjZSA9IFt0b3BBLCB0b3BCLCBiYXNlQiwgYmFzZUEsIHRvcEFdO1xuICAgICAgICAgICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBmYWNlKSkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgZmFjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb3Nlc3REaXN0YW5jZSA9PT0gSW5maW5pdHkgPyBmYWxzZSA6IGNsb3Nlc3REaXN0YW5jZTtcbn1cblxuLypcbiAqIFByb2plY3QgdGhlIGdlb21ldHJ5IHVzaW5nIG1hdHJpeCBgbWAuIFRoaXMgaXMgZXNzZW50aWFsbHkgZG9pbmdcbiAqIGB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwLngsIHAueSwgeiwgMV0sIG0pYCBidXQgdGhlIG11bHRpcGxpY2F0aW9uXG4gKiBpcyBpbmxpbmVkIHNvIHRoYXQgcGFydHMgb2YgdGhlIHByb2plY3Rpb24gdGhhdCBhcmUgdGhlIHNhbWUgYWNyb3NzXG4gKiBkaWZmZXJlbnQgcG9pbnRzIGNhbiBvbmx5IGJlIGRvbmUgb25jZS4gVGhpcyBwcm9kdWNlZCBhIG1lYXN1cmFibGVcbiAqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LlxuICovXG5mdW5jdGlvbiBwcm9qZWN0RXh0cnVzaW9uKGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCB6QmFzZTogbnVtYmVyLCB6VG9wOiBudW1iZXIsIG06IEZsb2F0MzJBcnJheSkge1xuICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBbXTtcbiAgICBjb25zdCBwcm9qZWN0ZWRUb3AgPSBbXTtcblxuICAgIGNvbnN0IGJhc2VYWiA9IG1bOF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlWVogPSBtWzldICogekJhc2U7XG4gICAgY29uc3QgYmFzZVpaID0gbVsxMF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlV1ogPSBtWzExXSAqIHpCYXNlO1xuICAgIGNvbnN0IHRvcFhaID0gbVs4XSAqIHpUb3A7XG4gICAgY29uc3QgdG9wWVogPSBtWzldICogelRvcDtcbiAgICBjb25zdCB0b3BaWiA9IG1bMTBdICogelRvcDtcbiAgICBjb25zdCB0b3BXWiA9IG1bMTFdICogelRvcDtcblxuICAgIGZvciAoY29uc3QgciBvZiBnZW9tZXRyeSkge1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IFtdO1xuICAgICAgICBjb25zdCByaW5nVG9wID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiByKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gcC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IHAueTtcblxuICAgICAgICAgICAgY29uc3Qgc1ggPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgICAgICAgICBjb25zdCBzWSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgICAgICAgICAgIGNvbnN0IHNaID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTRdO1xuICAgICAgICAgICAgY29uc3Qgc1cgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxNV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VYID0gc1ggKyBiYXNlWFo7XG4gICAgICAgICAgICBjb25zdCBiYXNlWSA9IHNZICsgYmFzZVlaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVogPSBzWiArIGJhc2VaWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VXID0gc1cgKyBiYXNlV1o7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvcFggPSBzWCArIHRvcFhaO1xuICAgICAgICAgICAgY29uc3QgdG9wWSA9IHNZICsgdG9wWVo7XG4gICAgICAgICAgICBjb25zdCB0b3BaID0gc1ogKyB0b3BaWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFcgPSBzVyArIHRvcFdaO1xuXG4gICAgICAgICAgICBjb25zdCBiID0gbmV3IFBvaW50KGJhc2VYIC8gYmFzZVcsIGJhc2VZIC8gYmFzZVcpO1xuICAgICAgICAgICAgYi56ID0gYmFzZVogLyBiYXNlVztcbiAgICAgICAgICAgIHJpbmdCYXNlLnB1c2goYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgUG9pbnQodG9wWCAvIHRvcFcsIHRvcFkgLyB0b3BXKTtcbiAgICAgICAgICAgIHQueiA9IHRvcFogLyB0b3BXO1xuICAgICAgICAgICAgcmluZ1RvcC5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICAgIHByb2plY3RlZEJhc2UucHVzaChyaW5nQmFzZSk7XG4gICAgICAgIHByb2plY3RlZFRvcC5wdXNoKHJpbmdUb3ApO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcF07XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sIHo6IG51bWJlcikge1xuICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcXVlcnlHZW9tZXRyeSkge1xuICAgICAgICBjb25zdCB2ID0gW3AueCwgcC55LCB6LCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHYsIHYsIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgcHJvamVjdGVkUXVlcnlHZW9tZXRyeS5wdXNoKG5ldyBQb2ludCh2WzBdIC8gdlszXSwgdlsxXSAvIHZbM10pKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGxFeHRydXNpb25TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxpbmVMYXlvdXRBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zX25vcm1hbCcsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9kYXRhJywgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQ4J31cbl0sIDQpO1xuXG5leHBvcnQgZGVmYXVsdCBsaW5lTGF5b3V0QXR0cmlidXRlcztcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxpbmVMYXlvdXRBdHRyaWJ1dGVzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtMaW5lTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vbGluZV9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTZWdtZW50fSBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbi8vIE5PVEUgT04gRVhUUlVERSBTQ0FMRTpcbi8vIHNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIHNvIHRoYXQgdGhlIG5vcm1hbCBsZW5ndGggaXMgdGhpcyB2YWx1ZS5cbi8vIGNvbnRhaW5zIHRoZSBcInRleHR1cmVcIiBub3JtYWxzICgtMS4uMSkuIHRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgZXh0cnVkZVxuLy8gbm9ybWFscyBmb3IgbGluZSBqb2lucywgYmVjYXVzZSB0aGUgeC12YWx1ZSByZW1haW5zIDAgZm9yIHRoZSB0ZXh0dXJlXG4vLyBub3JtYWwgYXJyYXksIHdoaWxlIHRoZSBleHRydWRlIG5vcm1hbCBhY3R1YWxseSBtb3ZlcyB0aGUgdmVydGV4IHRvIGNyZWF0ZVxuLy8gdGhlIGFjdXRlL2JldmVsbGVkIGxpbmUgam9pbi5cbmNvbnN0IEVYVFJVREVfU0NBTEUgPSA2MztcblxuLypcbiAqIFNoYXJwIGNvcm5lcnMgY2F1c2UgZGFzaGVkIGxpbmVzIHRvIHRpbHQgYmVjYXVzZSB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIGxpbmVcbiAqIGlzIHRoZSBzYW1lIGF0IGJvdGggdGhlIGlubmVyIGFuZCBvdXRlciBjb3JuZXJzLiBUbyBpbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mXG4gKiBkYXNoZWQgbGluZXMgd2UgYWRkIGV4dHJhIHBvaW50cyBuZWFyIHNoYXJwIGNvcm5lcnMgc28gdGhhdCBhIHNtYWxsZXIgcGFydFxuICogb2YgdGhlIGxpbmUgaXMgdGlsdGVkLlxuICpcbiAqIENPU19IQUxGX1NIQVJQX0NPUk5FUiBjb250cm9scyBob3cgc2hhcnAgYSBjb3JuZXIgaGFzIHRvIGJlIGZvciB1cyB0byBhZGQgYW5cbiAqIGV4dHJhIHZlcnRleC4gVGhlIGRlZmF1bHQgaXMgNzUgZGVncmVlcy5cbiAqXG4gKiBUaGUgbmV3bHkgY3JlYXRlZCB2ZXJ0aWNlcyBhcmUgcGxhY2VkIFNIQVJQX0NPUk5FUl9PRkZTRVQgcGl4ZWxzIGZyb20gdGhlIGNvcm5lci5cbiAqL1xuY29uc3QgQ09TX0hBTEZfU0hBUlBfQ09STkVSID0gTWF0aC5jb3MoNzUgLyAyICogKE1hdGguUEkgLyAxODApKTtcbmNvbnN0IFNIQVJQX0NPUk5FUl9PRkZTRVQgPSAxNTtcblxuLy8gQW5nbGUgcGVyIHRyaWFuZ2xlIGZvciBhcHByb3hpbWF0aW5nIHJvdW5kIGxpbmUgam9pbnMuXG5jb25zdCBERUdfUEVSX1RSSUFOR0xFID0gMjA7XG5cbi8vIFRoZSBudW1iZXIgb2YgYml0cyB0aGF0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGxpbmUgZGlzdGFuY2UgaW4gdGhlIGJ1ZmZlci5cbmNvbnN0IExJTkVfRElTVEFOQ0VfQlVGRkVSX0JJVFMgPSAxNTtcblxuLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggYml0cyBmb3IgdGhlIGxpbmUgZGlzdGFuY2UgYXMgd2UnZCBsaWtlIHRvIGhhdmUsIHNvXG4vLyB1c2UgdGhpcyB2YWx1ZSB0byBzY2FsZSB0aGUgbGluZSBkaXN0YW5jZSAoaW4gdGlsZSB1bml0cykgZG93biB0byBhIHNtYWxsZXJcbi8vIHZhbHVlLiBUaGlzIGxldHMgdXMgc3RvcmUgbG9uZ2VyIGRpc3RhbmNlcyB3aGlsZSBzYWNyaWZpY2luZyBwcmVjaXNpb24uXG5jb25zdCBMSU5FX0RJU1RBTkNFX1NDQUxFID0gMSAvIDI7XG5cbi8vIFRoZSBtYXhpbXVtIGxpbmUgZGlzdGFuY2UsIGluIHRpbGUgdW5pdHMsIHRoYXQgZml0cyBpbiB0aGUgYnVmZmVyLlxuY29uc3QgTUFYX0xJTkVfRElTVEFOQ0UgPSBNYXRoLnBvdygyLCBMSU5FX0RJU1RBTkNFX0JVRkZFUl9CSVRTIC0gMSkgLyBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExpbmVCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGRpc3RhbmNlOiBudW1iZXI7XG4gICAgdG90YWxEaXN0YW5jZTogbnVtYmVyO1xuICAgIHNjYWxlZERpc3RhbmNlOiBudW1iZXI7XG4gICAgY2xpcFN0YXJ0OiBudW1iZXI7XG4gICAgY2xpcEVuZDogbnVtYmVyO1xuXG4gICAgZTE6IG51bWJlcjtcbiAgICBlMjogbnVtYmVyO1xuXG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PExpbmVTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8YW55PjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogTGluZUxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMaW5lU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPExpbmVTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGluZUxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2xpbmUnLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGxpbmVTb3J0S2V5ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgnbGluZS1zb3J0LWtleScpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGZlYXR1cmUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG4gICAgICAgICAgICBjb25zdCBzb3J0S2V5ID0gbGluZVNvcnRLZXkgP1xuICAgICAgICAgICAgICAgIGxpbmVTb3J0S2V5LmV2YWx1YXRlKGZlYXR1cmUsIHt9KSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuQnVja2V0RmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2xpbmUnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkJ1Y2tldEZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmVzKG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgY29uc3Qgam9pbiA9IGxheW91dC5nZXQoJ2xpbmUtam9pbicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgY2FwID0gbGF5b3V0LmdldCgnbGluZS1jYXAnKTtcbiAgICAgICAgY29uc3QgbWl0ZXJMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtbWl0ZXItbGltaXQnKTtcbiAgICAgICAgY29uc3Qgcm91bmRMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtcm91bmQtbGltaXQnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTGluZShsaW5lLCBmZWF0dXJlLCBqb2luLCBjYXAsIG1pdGVyTGltaXQsIHJvdW5kTGltaXQsIGluZGV4LCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRMaW5lKHZlcnRpY2VzOiBBcnJheTxQb2ludD4sIGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGpvaW46IHN0cmluZywgY2FwOiBzdHJpbmcsIG1pdGVyTGltaXQ6IG51bWJlciwgcm91bmRMaW1pdDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gMDtcbiAgICAgICAgdGhpcy5zY2FsZWREaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMudG90YWxEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgaWYgKCEhZmVhdHVyZS5wcm9wZXJ0aWVzICYmXG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ21hcGJveF9jbGlwX3N0YXJ0JykgJiZcbiAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnbWFwYm94X2NsaXBfZW5kJykpIHtcblxuICAgICAgICAgICAgdGhpcy5jbGlwU3RhcnQgPSArZmVhdHVyZS5wcm9wZXJ0aWVzWydtYXBib3hfY2xpcF9zdGFydCddO1xuICAgICAgICAgICAgdGhpcy5jbGlwRW5kID0gK2ZlYXR1cmUucHJvcGVydGllc1snbWFwYm94X2NsaXBfZW5kJ107XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgZGlzdGFuY2UsIGluIHRpbGUgdW5pdHMsIG9mIHRoaXMgdGlsZWQgbGluZSBmZWF0dXJlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxEaXN0YW5jZSArPSB2ZXJ0aWNlc1tpXS5kaXN0KHZlcnRpY2VzW2kgKyAxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1BvbHlnb24gPSB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdQb2x5Z29uJztcblxuICAgICAgICAvLyBJZiB0aGUgbGluZSBoYXMgZHVwbGljYXRlIHZlcnRpY2VzIGF0IHRoZSBlbmRzLCBhZGp1c3Qgc3RhcnQvbGVuZ3RoIHRvIHJlbW92ZSB0aGVtLlxuICAgICAgICBsZXQgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobGVuID49IDIgJiYgdmVydGljZXNbbGVuIC0gMV0uZXF1YWxzKHZlcnRpY2VzW2xlbiAtIDJdKSkge1xuICAgICAgICAgICAgbGVuLS07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpcnN0ID0gMDtcbiAgICAgICAgd2hpbGUgKGZpcnN0IDwgbGVuIC0gMSAmJiB2ZXJ0aWNlc1tmaXJzdF0uZXF1YWxzKHZlcnRpY2VzW2ZpcnN0ICsgMV0pKSB7XG4gICAgICAgICAgICBmaXJzdCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWdub3JlIGludmFsaWQgZ2VvbWV0cnkuXG4gICAgICAgIGlmIChsZW4gPCAoaXNQb2x5Z29uID8gMyA6IDIpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGpvaW4gPT09ICdiZXZlbCcpIG1pdGVyTGltaXQgPSAxLjA1O1xuXG4gICAgICAgIGNvbnN0IHNoYXJwQ29ybmVyT2Zmc2V0ID0gdGhpcy5vdmVyc2NhbGluZyA8PSAxNiA/XG4gICAgICAgICAgICBTSEFSUF9DT1JORVJfT0ZGU0VUICogRVhURU5UIC8gKDUxMiAqIHRoaXMub3ZlcnNjYWxpbmcpIDpcbiAgICAgICAgICAgIDA7XG5cbiAgICAgICAgLy8gd2UgY291bGQgYmUgbW9yZSBwcmVjaXNlLCBidXQgaXQgd291bGQgb25seSBzYXZlIGEgbmVnbGlnaWJsZSBhbW91bnQgb2Ygc3BhY2VcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobGVuICogMTAsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRWZXJ0ZXg7XG4gICAgICAgIGxldCBwcmV2VmVydGV4ID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IG5leHRWZXJ0ZXggPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgcHJldk5vcm1hbCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBuZXh0Tm9ybWFsID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcblxuICAgICAgICAvLyB0aGUgbGFzdCB0d28gdmVydGljZXMgYWRkZWRcbiAgICAgICAgdGhpcy5lMSA9IHRoaXMuZTIgPSAtMTtcblxuICAgICAgICBpZiAoaXNQb2x5Z29uKSB7XG4gICAgICAgICAgICBjdXJyZW50VmVydGV4ID0gdmVydGljZXNbbGVuIC0gMl07XG4gICAgICAgICAgICBuZXh0Tm9ybWFsID0gdmVydGljZXNbZmlyc3RdLnN1YihjdXJyZW50VmVydGV4KS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gZmlyc3Q7IGkgPCBsZW47IGkrKykge1xuXG4gICAgICAgICAgICBuZXh0VmVydGV4ID0gaSA9PT0gbGVuIC0gMSA/XG4gICAgICAgICAgICAgICAgKGlzUG9seWdvbiA/IHZlcnRpY2VzW2ZpcnN0ICsgMV0gOiAodW5kZWZpbmVkOiBhbnkpKSA6IC8vIGlmIGl0J3MgYSBwb2x5Z29uLCB0cmVhdCB0aGUgbGFzdCB2ZXJ0ZXggbGlrZSB0aGUgZmlyc3RcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpICsgMV07IC8vIGp1c3QgdGhlIG5leHQgdmVydGV4XG5cbiAgICAgICAgICAgIC8vIGlmIHR3byBjb25zZWN1dGl2ZSB2ZXJ0aWNlcyBleGlzdCwgc2tpcCB0aGUgY3VycmVudCBvbmVcbiAgICAgICAgICAgIGlmIChuZXh0VmVydGV4ICYmIHZlcnRpY2VzW2ldLmVxdWFscyhuZXh0VmVydGV4KSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Tm9ybWFsKSBwcmV2Tm9ybWFsID0gbmV4dE5vcm1hbDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmVydGV4KSBwcmV2VmVydGV4ID0gY3VycmVudFZlcnRleDtcblxuICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IHZlcnRpY2VzW2ldO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5vcm1hbCB0b3dhcmRzIHRoZSBuZXh0IHZlcnRleCBpbiB0aGlzIGxpbmUuIEluIGNhc2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIG5leHQgdmVydGV4LCBwcmV0ZW5kIHRoYXQgdGhlIGxpbmUgaXMgY29udGludWluZyBzdHJhaWdodCxcbiAgICAgICAgICAgIC8vIG1lYW5pbmcgdGhhdCB3ZSBhcmUganVzdCB1c2luZyB0aGUgcHJldmlvdXMgbm9ybWFsLlxuICAgICAgICAgICAgbmV4dE5vcm1hbCA9IG5leHRWZXJ0ZXggPyBuZXh0VmVydGV4LnN1YihjdXJyZW50VmVydGV4KS5fdW5pdCgpLl9wZXJwKCkgOiBwcmV2Tm9ybWFsO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgcHJldmlvdXMgbm9ybWFsLCB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYVxuICAgICAgICAgICAgLy8gbm9uLWNsb3NlZCBsaW5lLCBzbyB3ZSdyZSBkb2luZyBhIHN0cmFpZ2h0IFwiam9pblwiLlxuICAgICAgICAgICAgcHJldk5vcm1hbCA9IHByZXZOb3JtYWwgfHwgbmV4dE5vcm1hbDtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBub3JtYWwgb2YgdGhlIGpvaW4gZXh0cnVzaW9uLiBJdCBpcyB0aGUgYW5nbGUgYmlzZWN0b3JcbiAgICAgICAgICAgIC8vIG9mIHRoZSBzZWdtZW50cyBiZXR3ZWVuIHRoZSBwcmV2aW91cyBsaW5lIGFuZCB0aGUgbmV4dCBsaW5lLlxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgMTgww4LCsCBhbmdsZXMsIHRoZSBwcmV2IGFuZCBuZXh0IG5vcm1hbHMgY2FuY2VsIGVhY2ggb3RoZXIgb3V0OlxuICAgICAgICAgICAgLy8gcHJldk5vcm1hbCArIG5leHROb3JtYWwgPSAoMCwgMCksIGl0cyBtYWduaXR1ZGUgaXMgMCwgc28gdGhlIHVuaXQgdmVjdG9yIHdvdWxkIGJlXG4gICAgICAgICAgICAvLyB1bmRlZmluZWQuIEluIHRoYXQgY2FzZSwgd2UncmUga2VlcGluZyB0aGUgam9pbk5vcm1hbCBhdCAoMCwgMCksIHNvIHRoYXQgdGhlIGNvc0hhbGZBbmdsZVxuICAgICAgICAgICAgLy8gYmVsb3cgd2lsbCBhbHNvIGJlY29tZSAwIGFuZCBtaXRlckxlbmd0aCB3aWxsIGJlY29tZSBJbmZpbml0eS5cbiAgICAgICAgICAgIGxldCBqb2luTm9ybWFsID0gcHJldk5vcm1hbC5hZGQobmV4dE5vcm1hbCk7XG4gICAgICAgICAgICBpZiAoam9pbk5vcm1hbC54ICE9PSAwIHx8IGpvaW5Ob3JtYWwueSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX3VuaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qICBqb2luTm9ybWFsICAgICBwcmV2Tm9ybWFsXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICDDosKGwpYgICAgICDDosKGwpFcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIC5fX19fX19fXy4gcHJldlZlcnRleFxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICogbmV4dE5vcm1hbCAgw6LChsKQICB8ICBjdXJyZW50VmVydGV4XG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgKiAgICAgbmV4dFZlcnRleCAhXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBjb3NpbmVzIG9mIHRoZSBhbmdsZSAoYW5kIGl0cyBoYWxmKSB1c2luZyBkb3QgcHJvZHVjdFxuICAgICAgICAgICAgY29uc3QgY29zQW5nbGUgPSBwcmV2Tm9ybWFsLnggKiBuZXh0Tm9ybWFsLnggKyBwcmV2Tm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnk7XG4gICAgICAgICAgICBjb25zdCBjb3NIYWxmQW5nbGUgPSBqb2luTm9ybWFsLnggKiBuZXh0Tm9ybWFsLnggKyBqb2luTm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnk7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBtaXRlciAodGhlIHJhdGlvIG9mIHRoZSBtaXRlciB0byB0aGUgd2lkdGgpXG4gICAgICAgICAgICAvLyBhcyB0aGUgaW52ZXJzZSBvZiBjb3NpbmUgb2YgdGhlIGFuZ2xlIGJldHdlZW4gbmV4dCBhbmQgam9pbiBub3JtYWxzXG4gICAgICAgICAgICBjb25zdCBtaXRlckxlbmd0aCA9IGNvc0hhbGZBbmdsZSAhPT0gMCA/IDEgLyBjb3NIYWxmQW5nbGUgOiBJbmZpbml0eTtcblxuICAgICAgICAgICAgLy8gYXBwcm94aW1hdGUgYW5nbGUgZnJvbSBjb3NpbmVcbiAgICAgICAgICAgIGNvbnN0IGFwcHJveEFuZ2xlID0gMiAqIE1hdGguc3FydCgyIC0gMiAqIGNvc0hhbGZBbmdsZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzU2hhcnBDb3JuZXIgPSBjb3NIYWxmQW5nbGUgPCBDT1NfSEFMRl9TSEFSUF9DT1JORVIgJiYgcHJldlZlcnRleCAmJiBuZXh0VmVydGV4O1xuICAgICAgICAgICAgY29uc3QgbGluZVR1cm5zTGVmdCA9IHByZXZOb3JtYWwueCAqIG5leHROb3JtYWwueSAtIHByZXZOb3JtYWwueSAqIG5leHROb3JtYWwueCA+IDA7XG5cbiAgICAgICAgICAgIGlmIChpc1NoYXJwQ29ybmVyICYmIGkgPiBmaXJzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZTZWdtZW50TGVuZ3RoID0gY3VycmVudFZlcnRleC5kaXN0KHByZXZWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2U2VnbWVudExlbmd0aCA+IDIgKiBzaGFycENvcm5lck9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQcmV2VmVydGV4ID0gY3VycmVudFZlcnRleC5zdWIoY3VycmVudFZlcnRleC5zdWIocHJldlZlcnRleCkuX211bHQoc2hhcnBDb3JuZXJPZmZzZXQgLyBwcmV2U2VnbWVudExlbmd0aCkuX3JvdW5kKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3RhbmNlKHByZXZWZXJ0ZXgsIG5ld1ByZXZWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgobmV3UHJldlZlcnRleCwgcHJldk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZWZXJ0ZXggPSBuZXdQcmV2VmVydGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhlIGpvaW4gaWYgYSBtaWRkbGUgdmVydGV4LCBvdGhlcndpc2UgdGhlIGNhcC5cbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZVZlcnRleCA9IHByZXZWZXJ0ZXggJiYgbmV4dFZlcnRleDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Sm9pbiA9IG1pZGRsZVZlcnRleCA/IGpvaW4gOiBpc1BvbHlnb24gPyAnYnV0dCcgOiBjYXA7XG5cbiAgICAgICAgICAgIGlmIChtaWRkbGVWZXJ0ZXggJiYgY3VycmVudEpvaW4gPT09ICdyb3VuZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPCByb3VuZExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ21pdGVyJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pdGVyTGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnZmFrZXJvdW5kJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ21pdGVyJyAmJiBtaXRlckxlbmd0aCA+IG1pdGVyTGltaXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdiZXZlbCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2JldmVsJykge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGV4dHJ1ZGUgbGVuZ3RoIGlzIDEyOCAvIDYzID0gMiB0aW1lcyB0aGUgd2lkdGggb2YgdGhlIGxpbmVcbiAgICAgICAgICAgICAgICAvLyBzbyBpZiBtaXRlckxlbmd0aCA+PSAyIHdlIG5lZWQgdG8gZHJhdyBhIGRpZmZlcmVudCB0eXBlIG9mIGJldmVsIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoID4gMikgY3VycmVudEpvaW4gPSAnZmxpcGJldmVsJztcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtaXRlckxlbmd0aCBpcyByZWFsbHkgc21hbGwgYW5kIHRoZSBsaW5lIGJldmVsIHdvdWxkbid0IGJlIHZpc2libGUsXG4gICAgICAgICAgICAgICAgLy8ganVzdCBkcmF3IGEgbWl0ZXIgam9pbiB0byBzYXZlIGEgdHJpYW5nbGUuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoIDwgbWl0ZXJMaW1pdCkgY3VycmVudEpvaW4gPSAnbWl0ZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaG93IGZhciBhbG9uZyB0aGUgbGluZSB0aGUgY3VycmVudFZlcnRleCBpc1xuICAgICAgICAgICAgaWYgKHByZXZWZXJ0ZXgpIHRoaXMudXBkYXRlRGlzdGFuY2UocHJldlZlcnRleCwgY3VycmVudFZlcnRleCk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ21pdGVyJykge1xuXG4gICAgICAgICAgICAgICAgam9pbk5vcm1hbC5fbXVsdChtaXRlckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnZmxpcGJldmVsJykge1xuICAgICAgICAgICAgICAgIC8vIG1pdGVyIGlzIHRvbyBiaWcsIGZsaXAgdGhlIGRpcmVjdGlvbiB0byBtYWtlIGEgYmV2ZWxlZCBqb2luXG5cbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPiAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxtb3N0IHBhcmFsbGVsIGxpbmVzXG4gICAgICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwgPSBuZXh0Tm9ybWFsLm11bHQoLTEpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmV2ZWxMZW5ndGggPSBtaXRlckxlbmd0aCAqIHByZXZOb3JtYWwuYWRkKG5leHROb3JtYWwpLm1hZygpIC8gcHJldk5vcm1hbC5zdWIobmV4dE5vcm1hbCkubWFnKCk7XG4gICAgICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX3BlcnAoKS5fbXVsdChiZXZlbExlbmd0aCAqIChsaW5lVHVybnNMZWZ0ID8gLTEgOiAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbC5tdWx0KC0xKSwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdiZXZlbCcgfHwgY3VycmVudEpvaW4gPT09ICdmYWtlcm91bmQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gLU1hdGguc3FydChtaXRlckxlbmd0aCAqIG1pdGVyTGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0QSA9IGxpbmVUdXJuc0xlZnQgPyBvZmZzZXQgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEIgPSBsaW5lVHVybnNMZWZ0ID8gMCA6IG9mZnNldDtcblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIHByZXZpb3VzIHNlZ21lbnQgd2l0aCBhIGJldmVsXG4gICAgICAgICAgICAgICAgaWYgKHByZXZWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIHByZXZOb3JtYWwsIG9mZnNldEEsIG9mZnNldEIsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2Zha2Vyb3VuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGpvaW4gYW5nbGUgaXMgc2hhcnAgZW5vdWdoIHRoYXQgYSByb3VuZCBqb2luIHdvdWxkIGJlIHZpc2libGUuXG4gICAgICAgICAgICAgICAgICAgIC8vIEJldmVsIGpvaW5zIGZpbGwgdGhlIGdhcCBiZXR3ZWVuIHNlZ21lbnRzIHdpdGggYSBzaW5nbGUgcGllIHNsaWNlIHRyaWFuZ2xlLlxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByb3VuZCBqb2luIGJ5IGFkZGluZyBtdWx0aXBsZSBwaWUgc2xpY2VzLiBUaGUgam9pbiBpc24ndCBhY3R1YWxseSByb3VuZCwgYnV0XG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IGxvb2tzIGxpa2UgaXQgaXMgYXQgdGhlIHNpemVzIHdlIHJlbmRlciBsaW5lcyBhdC5cblxuICAgICAgICAgICAgICAgICAgICAvLyBwaWNrIHRoZSBudW1iZXIgb2YgdHJpYW5nbGVzIGZvciBhcHByb3hpbWF0aW5nIHJvdW5kIGpvaW4gYnkgYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gbm9ybWFsc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gTWF0aC5yb3VuZCgoYXBwcm94QW5nbGUgKiAxODAgLyBNYXRoLlBJKSAvIERFR19QRVJfVFJJQU5HTEUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAxOyBtIDwgbjsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IG0gLyBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgIT09IDAuNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcHJveGltYXRlIHNwaGVyaWNhbCBpbnRlcnBvbGF0aW9uIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbW91cm5lci9hcHByb3hpbWF0aW5nLWdlb21ldHJpYy1zbGVycFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQyID0gdCAtIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBID0gMS4wOTA0ICsgY29zQW5nbGUgKiAoLTMuMjQ1MiArIGNvc0FuZ2xlICogKDMuNTU2NDUgLSBjb3NBbmdsZSAqIDEuNDM1MTkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCID0gMC44NDgwMTMgKyBjb3NBbmdsZSAqICgtMS4wNjAyMSArIGNvc0FuZ2xlICogMC4yMTU2MzgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0ICsgdCAqIHQyICogKHQgLSAxKSAqIChBICogdDIgKiB0MiArIEIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0cnVkZSA9IG5leHROb3JtYWwuc3ViKHByZXZOb3JtYWwpLl9tdWx0KHQpLl9hZGQocHJldk5vcm1hbCkuX3VuaXQoKS5fbXVsdChsaW5lVHVybnNMZWZ0ID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChjdXJyZW50VmVydGV4LCBleHRydWRlLngsIGV4dHJ1ZGUueSwgZmFsc2UsIGxpbmVUdXJuc0xlZnQsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV4dCBzZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAtb2Zmc2V0QSwgLW9mZnNldEIsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2J1dHQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIDAsIDAsIHNlZ21lbnQpOyAvLyBidXR0IGNhcFxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnc3F1YXJlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHByZXZWZXJ0ZXggPyAxIDogLTE7IC8vIGNsb3Npbmcgb3Igc3RhcnRpbmcgc3F1YXJlIGNhcFxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCBvZmZzZXQsIG9mZnNldCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdyb3VuZCcpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHByZXZpb3VzIHNlZ21lbnQgd2l0aCBidXR0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcm91bmQgY2FwIG9yIGxpbmVqb2luIGF0IGVuZCBvZiBzZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCAxLCAxLCBzZWdtZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJvdW5kIGNhcCBiZWZvcmUgZmlyc3Qgc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgLTEsIC0xLCBzZWdtZW50LCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBuZXh0IHNlZ21lbnQgd2l0aCBhIGJ1dHRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzU2hhcnBDb3JuZXIgJiYgaSA8IGxlbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0U2VnbWVudExlbmd0aCA9IGN1cnJlbnRWZXJ0ZXguZGlzdChuZXh0VmVydGV4KTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dFNlZ21lbnRMZW5ndGggPiAyICogc2hhcnBDb3JuZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q3VycmVudFZlcnRleCA9IGN1cnJlbnRWZXJ0ZXguYWRkKG5leHRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXgpLl9tdWx0KHNoYXJwQ29ybmVyT2Zmc2V0IC8gbmV4dFNlZ21lbnRMZW5ndGgpLl9yb3VuZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXN0YW5jZShjdXJyZW50VmVydGV4LCBuZXdDdXJyZW50VmVydGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KG5ld0N1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmVydGV4ID0gbmV3Q3VycmVudFZlcnRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0d28gdmVydGljZXMgdG8gdGhlIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcCB0aGUgbGluZSB2ZXJ0ZXggdG8gYWRkIGJ1ZmZlciB2ZXJ0aWNlcyBmb3JcbiAgICAgKiBAcGFyYW0gbm9ybWFsIHZlcnRleCBub3JtYWxcbiAgICAgKiBAcGFyYW0gZW5kTGVmdCBleHRydWRlIHRvIHNoaWZ0IHRoZSBsZWZ0IHZlcnRleCBhbG9uZyB0aGUgbGluZVxuICAgICAqIEBwYXJhbSBlbmRSaWdodCBleHRydWRlIHRvIHNoaWZ0IHRoZSBsZWZ0IHZlcnRleCBhbG9uZyB0aGUgbGluZVxuICAgICAqIEBwYXJhbSBzZWdtZW50IHRoZSBzZWdtZW50IG9iamVjdCB0byBhZGQgdGhlIHZlcnRleCB0b1xuICAgICAqIEBwYXJhbSByb3VuZCB3aGV0aGVyIHRoaXMgaXMgYSByb3VuZCBjYXBcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZEN1cnJlbnRWZXJ0ZXgocDogUG9pbnQsIG5vcm1hbDogUG9pbnQsIGVuZExlZnQ6IG51bWJlciwgZW5kUmlnaHQ6IG51bWJlciwgc2VnbWVudDogU2VnbWVudCwgcm91bmQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICAvLyBsZWZ0IGFuZCByaWdodCBleHRydWRlIHZlY3RvcnMsIHBlcnBlbmRpY3VsYXJseSBzaGlmdGVkIGJ5IGVuZExlZnQvZW5kUmlnaHRcbiAgICAgICAgY29uc3QgbGVmdFggPSBub3JtYWwueCArIG5vcm1hbC55ICogZW5kTGVmdDtcbiAgICAgICAgY29uc3QgbGVmdFkgPSBub3JtYWwueSAtIG5vcm1hbC54ICogZW5kTGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHRYID0gLW5vcm1hbC54ICsgbm9ybWFsLnkgKiBlbmRSaWdodDtcbiAgICAgICAgY29uc3QgcmlnaHRZID0gLW5vcm1hbC55IC0gbm9ybWFsLnggKiBlbmRSaWdodDtcblxuICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgocCwgbGVmdFgsIGxlZnRZLCByb3VuZCwgZmFsc2UsIGVuZExlZnQsIHNlZ21lbnQpO1xuICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgocCwgcmlnaHRYLCByaWdodFksIHJvdW5kLCB0cnVlLCAtZW5kUmlnaHQsIHNlZ21lbnQpO1xuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgbWF4aW11bSBcImRpc3RhbmNlIGFsb25nIHRoZSBsaW5lXCIgdGhhdCB3ZSBjYW4gc3RvcmUgaW4gdGhlIGJ1ZmZlcnMuXG4gICAgICAgIC8vIFdoZW4gd2UgZ2V0IGNsb3NlIHRvIHRoZSBkaXN0YW5jZSwgcmVzZXQgaXQgdG8gemVybyBhbmQgYWRkIHRoZSB2ZXJ0ZXggYWdhaW4gd2l0aFxuICAgICAgICAvLyBhIGRpc3RhbmNlIG9mIHplcm8uIFRoZSBtYXggZGlzdGFuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgd2UgYWxsb2NhdGVcbiAgICAgICAgLy8gdG8gYGxpbmVzb2ZhcmAuXG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlID4gTUFYX0xJTkVfRElTVEFOQ0UgLyAyICYmIHRoaXMudG90YWxEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCwgbm9ybWFsLCBlbmRMZWZ0LCBlbmRSaWdodCwgc2VnbWVudCwgcm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSGFsZlZlcnRleCh7eCwgeX06IFBvaW50LCBleHRydWRlWDogbnVtYmVyLCBleHRydWRlWTogbnVtYmVyLCByb3VuZDogYm9vbGVhbiwgdXA6IGJvb2xlYW4sIGRpcjogbnVtYmVyLCBzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgICAgIC8vIHNjYWxlIGRvd24gc28gdGhhdCB3ZSBjYW4gc3RvcmUgbG9uZ2VyIGRpc3RhbmNlcyB3aGlsZSBzYWNyaWZpY2luZyBwcmVjaXNpb24uXG4gICAgICAgIGNvbnN0IGxpbmVzb2ZhciA9IHRoaXMuc2NhbGVkRGlzdGFuY2UgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAvLyBhX3Bvc19ub3JtYWxcbiAgICAgICAgICAgIC8vIEVuY29kZSByb3VuZC91cCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0c1xuICAgICAgICAgICAgKHggPDwgMSkgKyAocm91bmQgPyAxIDogMCksXG4gICAgICAgICAgICAoeSA8PCAxKSArICh1cCA/IDEgOiAwKSxcbiAgICAgICAgICAgIC8vIGFfZGF0YVxuICAgICAgICAgICAgLy8gYWRkIDEyOCB0byBzdG9yZSBhIGJ5dGUgaW4gYW4gdW5zaWduZWQgYnl0ZVxuICAgICAgICAgICAgTWF0aC5yb3VuZChFWFRSVURFX1NDQUxFICogZXh0cnVkZVgpICsgMTI4LFxuICAgICAgICAgICAgTWF0aC5yb3VuZChFWFRSVURFX1NDQUxFICogZXh0cnVkZVkpICsgMTI4LFxuICAgICAgICAgICAgLy8gRW5jb2RlIHRoZSAtMS8wLzEgZGlyZWN0aW9uIHZhbHVlIGludG8gdGhlIGZpcnN0IHR3byBiaXRzIG9mIC56IG9mIGFfZGF0YS5cbiAgICAgICAgICAgIC8vIENvbWJpbmUgaXQgd2l0aCB0aGUgbG93ZXIgNiBiaXRzIG9mIGBsaW5lc29mYXJgIChzaGlmdGVkIGJ5IDIgYml0ZXMgdG8gbWFrZVxuICAgICAgICAgICAgLy8gcm9vbSBmb3IgdGhlIGRpcmVjdGlvbiB2YWx1ZSkuIFRoZSB1cHBlciA4IGJpdHMgb2YgYGxpbmVzb2ZhcmAgYXJlIHBsYWNlZCBpblxuICAgICAgICAgICAgLy8gdGhlIGB3YCBjb21wb25lbnQuXG4gICAgICAgICAgICAoKGRpciA9PT0gMCA/IDAgOiAoZGlyIDwgMCA/IC0xIDogMSkpICsgMSkgfCAoKGxpbmVzb2ZhciAmIDB4M0YpIDw8IDIpLFxuICAgICAgICAgICAgbGluZXNvZmFyID4+IDYpO1xuXG4gICAgICAgIGNvbnN0IGUgPSBzZWdtZW50LnZlcnRleExlbmd0aCsrO1xuICAgICAgICBpZiAodGhpcy5lMSA+PSAwICYmIHRoaXMuZTIgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHRoaXMuZTEsIHRoaXMuZTIsIGUpO1xuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodXApIHtcbiAgICAgICAgICAgIHRoaXMuZTIgPSBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lMSA9IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVTY2FsZWREaXN0YW5jZSgpIHtcbiAgICAgICAgLy8gS25vd2luZyB0aGUgcmF0aW8gb2YgdGhlIGZ1bGwgbGluZXN0cmluZyBjb3ZlcmVkIGJ5IHRoaXMgdGlsZWQgZmVhdHVyZSwgYXMgd2VsbFxuICAgICAgICAvLyBhcyB0aGUgdG90YWwgZGlzdGFuY2UgKGluIHRpbGUgdW5pdHMpIG9mIHRoaXMgdGlsZWQgZmVhdHVyZSwgYW5kIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyAoaW4gdGlsZSB1bml0cykgb2YgdGhlIGN1cnJlbnQgdmVydGV4LCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSByZWxhdGl2ZSBkaXN0YW5jZVxuICAgICAgICAvLyBvZiB0aGlzIHZlcnRleCBhbG9uZyB0aGUgZnVsbCBsaW5lc3RyaW5nIGZlYXR1cmUgYW5kIHNjYWxlIGl0IHRvIFswLCAyXjE1KVxuICAgICAgICB0aGlzLnNjYWxlZERpc3RhbmNlID0gdGhpcy50b3RhbERpc3RhbmNlID4gMCA/XG4gICAgICAgICAgICAodGhpcy5jbGlwU3RhcnQgKyAodGhpcy5jbGlwRW5kIC0gdGhpcy5jbGlwU3RhcnQpICogdGhpcy5kaXN0YW5jZSAvIHRoaXMudG90YWxEaXN0YW5jZSkgICogKE1BWF9MSU5FX0RJU1RBTkNFIC0gMSkgOlxuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB1cGRhdGVEaXN0YW5jZShwcmV2OiBQb2ludCwgbmV4dDogUG9pbnQpIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSArPSBwcmV2LmRpc3QobmV4dCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdMaW5lQnVja2V0JywgTGluZUJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJywgJ3BhdHRlcm5GZWF0dXJlcyddfSk7XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVCdWNrZXQ7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJsaW5lLWNhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcImJ1dHRcIiB8IFwicm91bmRcIiB8IFwic3F1YXJlXCI+LFxuICAgIFwibGluZS1qb2luXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImJldmVsXCIgfCBcInJvdW5kXCIgfCBcIm1pdGVyXCI+LFxuICAgIFwibGluZS1taXRlci1saW1pdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1yb3VuZC1saW1pdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwibGluZS1jYXBcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1jYXBcIl0pLFxuICAgIFwibGluZS1qb2luXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLWpvaW5cIl0pLFxuICAgIFwibGluZS1taXRlci1saW1pdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLW1pdGVyLWxpbWl0XCJdKSxcbiAgICBcImxpbmUtcm91bmQtbGltaXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1yb3VuZC1saW1pdFwiXSksXG4gICAgXCJsaW5lLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLXNvcnQta2V5XCJdKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImxpbmUtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImxpbmUtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwibGluZS13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtZ2FwLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWRhc2hhcnJheVwiOiBDcm9zc0ZhZGVkUHJvcGVydHk8QXJyYXk8bnVtYmVyPj4sXG4gICAgXCJsaW5lLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbiAgICBcImxpbmUtZ3JhZGllbnRcIjogQ29sb3JSYW1wUHJvcGVydHksXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJsaW5lLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1vcGFjaXR5XCJdKSxcbiAgICBcImxpbmUtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1jb2xvclwiXSksXG4gICAgXCJsaW5lLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtdHJhbnNsYXRlXCJdKSxcbiAgICBcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJsaW5lLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtd2lkdGhcIl0pLFxuICAgIFwibGluZS1nYXAtd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1nYXAtd2lkdGhcIl0pLFxuICAgIFwibGluZS1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1vZmZzZXRcIl0pLFxuICAgIFwibGluZS1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtYmx1clwiXSksXG4gICAgXCJsaW5lLWRhc2hhcnJheVwiOiBuZXcgQ3Jvc3NGYWRlZFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWRhc2hhcnJheVwiXSksXG4gICAgXCJsaW5lLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtcGF0dGVyblwiXSksXG4gICAgXCJsaW5lLWdyYWRpZW50XCI6IG5ldyBDb2xvclJhbXBQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1ncmFkaWVudFwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcbmltcG9ydCBMaW5lQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi8uLi91dGlsL2ltYWdlJztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZX0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHtnZXRNYXhpbXVtUGFpbnRWYWx1ZSwgdHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9saW5lX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCByZW5kZXJDb2xvclJhbXAgZnJvbSAnLi4vLi4vdXRpbC9jb2xvcl9yYW1wJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIExheW91dCwgUG9zc2libHlFdmFsdWF0ZWQsIERhdGFEcml2ZW5Qcm9wZXJ0eX0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0LCBCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIExpbmVGbG9vcndpZHRoUHJvcGVydHkgZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPiB7XG4gICAgdXNlSW50ZWdlclpvb206IHRydWU7XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlLCBwYXJhbWV0ZXJzKSB7XG4gICAgICAgIHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnpvb20pLCB7XG4gICAgICAgICAgICBub3c6IHBhcmFtZXRlcnMubm93LFxuICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBwYXJhbWV0ZXJzLmZhZGVEdXJhdGlvbixcbiAgICAgICAgICAgIHpvb21IaXN0b3J5OiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5LFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogcGFyYW1ldGVycy50cmFuc2l0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3VwZXIucG9zc2libHlFdmFsdWF0ZSh2YWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWUsIGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSkge1xuICAgICAgICBnbG9iYWxzID0gZXh0ZW5kKHt9LCBnbG9iYWxzLCB7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSk7XG4gICAgICAgIHJldHVybiBzdXBlci5ldmFsdWF0ZSh2YWx1ZSwgZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICB9XG59XG5cbmNvbnN0IGxpbmVGbG9vcndpZHRoUHJvcGVydHkgPSBuZXcgTGluZUZsb29yd2lkdGhQcm9wZXJ0eShwcm9wZXJ0aWVzLnBhaW50LnByb3BlcnRpZXNbJ2xpbmUtd2lkdGgnXS5zcGVjaWZpY2F0aW9uKTtcbmxpbmVGbG9vcndpZHRoUHJvcGVydHkudXNlSW50ZWdlclpvb20gPSB0cnVlO1xuXG5jbGFzcyBMaW5lU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIGdyYWRpZW50OiA/UkdCQUltYWdlO1xuICAgIGdyYWRpZW50VGV4dHVyZTogP1RleHR1cmU7XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAnbGluZS1ncmFkaWVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdyYWRpZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlR3JhZGllbnQoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbJ2xpbmUtZ3JhZGllbnQnXS52YWx1ZS5leHByZXNzaW9uO1xuICAgICAgICB0aGlzLmdyYWRpZW50ID0gcmVuZGVyQ29sb3JSYW1wKGV4cHJlc3Npb24sICdsaW5lUHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5ncmFkaWVudFRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICAodGhpcy5wYWludC5fdmFsdWVzOiBhbnkpWydsaW5lLWZsb29yd2lkdGgnXSA9XG4gICAgICAgICAgICBsaW5lRmxvb3J3aWR0aFByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Ll92YWx1ZXNbJ2xpbmUtd2lkdGgnXS52YWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKGJ1Y2tldDogQnVja2V0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbGluZUJ1Y2tldDogTGluZUJ1Y2tldCA9IChidWNrZXQ6IGFueSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZ2V0TGluZVdpZHRoKFxuICAgICAgICAgICAgZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtd2lkdGgnLCB0aGlzLCBsaW5lQnVja2V0KSxcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLWdhcC13aWR0aCcsIHRoaXMsIGxpbmVCdWNrZXQpKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtb2Zmc2V0JywgdGhpcywgbGluZUJ1Y2tldCk7XG4gICAgICAgIHJldHVybiB3aWR0aCAvIDIgKyBNYXRoLmFicyhvZmZzZXQpICsgdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJykpO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5Z29uID0gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICBjb25zdCBoYWxmV2lkdGggPSBwaXhlbHNUb1RpbGVVbml0cyAvIDIgKiBnZXRMaW5lV2lkdGgoXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS1nYXAtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IHRoaXMucGFpbnQuZ2V0KCdsaW5lLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGlmIChsaW5lT2Zmc2V0KSB7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IG9mZnNldExpbmUoZ2VvbWV0cnksIGxpbmVPZmZzZXQgKiBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZSh0cmFuc2xhdGVkUG9seWdvbiwgZ2VvbWV0cnksIGhhbGZXaWR0aCk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lU3R5bGVMYXllcjtcblxuZnVuY3Rpb24gZ2V0TGluZVdpZHRoKGxpbmVXaWR0aCwgbGluZUdhcFdpZHRoKSB7XG4gICAgaWYgKGxpbmVHYXBXaWR0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGxpbmVHYXBXaWR0aCArIDIgKiBsaW5lV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxpbmVXaWR0aDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG9mZnNldExpbmUocmluZ3MsIG9mZnNldCkge1xuICAgIGNvbnN0IG5ld1JpbmdzID0gW107XG4gICAgY29uc3QgemVybyA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHJpbmdzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSByaW5nc1trXTtcbiAgICAgICAgY29uc3QgbmV3UmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByaW5nW2kgLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByaW5nW2ldO1xuICAgICAgICAgICAgY29uc3QgYyA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgYVRvQiA9IGkgPT09IDAgPyB6ZXJvIDogYi5zdWIoYSkuX3VuaXQoKS5fcGVycCgpO1xuICAgICAgICAgICAgY29uc3QgYlRvQyA9IGkgPT09IHJpbmcubGVuZ3RoIC0gMSA/IHplcm8gOiBjLnN1YihiKS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgICAgICBjb25zdCBleHRydWRlID0gYVRvQi5fYWRkKGJUb0MpLl91bml0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvc0hhbGZBbmdsZSA9IGV4dHJ1ZGUueCAqIGJUb0MueCArIGV4dHJ1ZGUueSAqIGJUb0MueTtcbiAgICAgICAgICAgIGV4dHJ1ZGUuX211bHQoMSAvIGNvc0hhbGZBbmdsZSk7XG5cbiAgICAgICAgICAgIG5ld1JpbmcucHVzaChleHRydWRlLl9tdWx0KG9mZnNldCkuX2FkZChiKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmluZ3MucHVzaChuZXdSaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1JpbmdzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGNvbnN0IHN5bWJvbExheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3Nfb2Zmc2V0JywgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9kYXRhJywgICAgICAgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdVaW50MTYnfSxcbiAgICB7bmFtZTogJ2FfcGl4ZWxvZmZzZXQnLCAgICAgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wcm9qZWN0ZWRfcG9zJywgY29tcG9uZW50czogMywgdHlwZTogJ0Zsb2F0MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcGxhY2VkJywgY29tcG9uZW50czogMiwgdHlwZTogJ1VpbnQ4J30sXG4gICAge25hbWU6ICdhX3NoaWZ0JywgY29tcG9uZW50czogMiwgdHlwZTogJ0Zsb2F0MzInfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3ggPSBjcmVhdGVMYXlvdXQoW1xuICAgIC8vIHRoZSBib3ggaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBhbmNob3IgcG9pbnRcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclBvaW50WCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRZJ30sXG5cbiAgICAvLyBkaXN0YW5jZXMgdG8gdGhlIGVkZ2VzIGZyb20gdGhlIGFuY2hvclxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneDEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3kxJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4Mid9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTInfSxcblxuICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgb3JpZ2luYWwgdmVjdG9ydGlsZVxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIC8vIHRoZSBzb3VyY2UgbGF5ZXIgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3NvdXJjZUxheWVySW5kZXgnfSxcbiAgICAvLyB0aGUgYnVja2V0IHRoZSBmZWF0dXJlIGFwcGVhcnMgaW5cbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdidWNrZXRJbmRleCd9LFxuXG4gICAgLy8gY29sbGlzaW9uIGNpcmNsZXMgZm9yIGxpbmVzIHN0b3JlIHRoZWlyIGRpc3RhbmNlIHRvIHRoZSBhbmNob3IgaW4gdGlsZSB1bml0c1xuICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYmUgaWdub3JlZCBpZiB0aGUgcHJvamVjdGVkIGxhYmVsIGRvZXNuJ3QgZXh0ZW5kIGludG9cbiAgICAvLyB0aGUgYm94IGFyZWFcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JhZGl1cyd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yJ31cbl0pO1xuXG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94TGF5b3V0ID0gY3JlYXRlTGF5b3V0KFsgLy8gdXNlZCB0byByZW5kZXIgY29sbGlzaW9uIGJveGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9hbmNob3JfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2V4dHJ1ZGUnLCAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGVMYXlvdXQgPSBjcmVhdGVMYXlvdXQoWyAvLyB1c2VkIHRvIHJlbmRlciBjb2xsaXNpb24gY2lyY2xlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXG4gICAge25hbWU6ICdhX3BvcycsICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfYW5jaG9yX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9leHRydWRlJywgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgcGxhY2VtZW50ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdnbHlwaFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1HbHlwaHMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICd2ZXJ0ZXhTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnbGluZVN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdsaW5lTGVuZ3RoJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnc2VnbWVudCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2xvd2VyU2l6ZSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3VwcGVyU2l6ZSd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdsaW5lT2Zmc2V0WSd9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAnd3JpdGluZ01vZGUnfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ3BsYWNlZE9yaWVudGF0aW9uJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICdoaWRkZW4nfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYXNzb2NpYXRlZEljb25JbmRleCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbEluc3RhbmNlID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclknfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3JpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2xlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3ZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdwbGFjZWRJY29uU3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3ZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAna2V5J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndGV4dEJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd0ZXh0Qm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxUZXh0Qm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdpY29uQm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ljb25Cb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bUhvcml6b250YWxHbHlwaFZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtSWNvblZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtVmVydGljYWxJY29uVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICd0ZXh0Qm94U2NhbGUnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBjb21wb25lbnRzOiAyLCBuYW1lOiAndGV4dE9mZnNldCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGdseXBoT2Zmc2V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnb2Zmc2V0WCd9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGxpbmVWZXJ0ZXggPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3InfVxuXSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BsdWdpbiBhcyBydGxUZXh0UGx1Z2lufSBmcm9tICcuLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcblxuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0KHRleHQ6IHN0cmluZywgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXRyYW5zZm9ybScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBpZiAodHJhbnNmb3JtID09PSAndXBwZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtID09PSAnbG93ZXJjYXNlJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZykge1xuICAgICAgICB0ZXh0ID0gcnRsVGV4dFBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcodGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRleHQ6IEZvcm1hdHRlZCwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGZlYXR1cmU6IEZlYXR1cmUpOiBGb3JtYXR0ZWQge1xuICAgIHRleHQuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgc2VjdGlvbi50ZXh0ID0gdHJhbnNmb3JtVGV4dChzZWN0aW9uLnRleHQsIGxheWVyLCBmZWF0dXJlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGV4dDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTeW1ib2xGZWF0dXJlfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGZlYXR1cmVzOiBBcnJheTxTeW1ib2xGZWF0dXJlPik6IEFycmF5PFN5bWJvbEZlYXR1cmU+IHtcbiAgICBjb25zdCBsZWZ0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IHJpZ2h0SW5kZXg6IHtbc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIGNvbnN0IG1lcmdlZEZlYXR1cmVzID0gW107XG4gICAgbGV0IG1lcmdlZEluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIGFkZChrKSB7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzLnB1c2goZmVhdHVyZXNba10pO1xuICAgICAgICBtZXJnZWRJbmRleCsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXk6IHN0cmluZywgcmlnaHRLZXk6IHN0cmluZywgZ2VvbSkge1xuICAgICAgICBjb25zdCBpID0gcmlnaHRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbbGVmdEtleV07XG4gICAgICAgIHJpZ2h0SW5kZXhbcmlnaHRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5wb3AoKTtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0gPSBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5jb25jYXQoZ2VvbVswXSk7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlRnJvbUxlZnQobGVmdEtleTogc3RyaW5nLCByaWdodEtleTogc3RyaW5nLCBnZW9tKSB7XG4gICAgICAgIGNvbnN0IGkgPSBsZWZ0SW5kZXhbcmlnaHRLZXldO1xuICAgICAgICBkZWxldGUgbGVmdEluZGV4W3JpZ2h0S2V5XTtcbiAgICAgICAgbGVmdEluZGV4W2xlZnRLZXldID0gaTtcblxuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXS5zaGlmdCgpO1xuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSA9IGdlb21bMF0uY29uY2F0KG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0S2V5KHRleHQsIGdlb20sIG9uUmlnaHQpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBvblJpZ2h0ID8gZ2VvbVswXVtnZW9tWzBdLmxlbmd0aCAtIDFdIDogZ2VvbVswXVswXTtcbiAgICAgICAgcmV0dXJuIGAke3RleHR9OiR7cG9pbnQueH06JHtwb2ludC55fWA7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBmZWF0dXJlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNba107XG4gICAgICAgIGNvbnN0IGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5O1xuICAgICAgICBjb25zdCB0ZXh0ID0gZmVhdHVyZS50ZXh0ID8gZmVhdHVyZS50ZXh0LnRvU3RyaW5nKCkgOiBudWxsO1xuXG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgYWRkKGspO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0S2V5ID0gZ2V0S2V5KHRleHQsIGdlb20pLFxuICAgICAgICAgICAgcmlnaHRLZXkgPSBnZXRLZXkodGV4dCwgZ2VvbSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpICYmIChyaWdodEtleSBpbiBsZWZ0SW5kZXgpICYmIChyaWdodEluZGV4W2xlZnRLZXldICE9PSBsZWZ0SW5kZXhbcmlnaHRLZXldKSkge1xuICAgICAgICAgICAgLy8gZm91bmQgbGluZXMgd2l0aCB0aGUgc2FtZSB0ZXh0IGFkamFjZW50IHRvIGJvdGggZW5kcyBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZSBhbGwgdGhyZWVcbiAgICAgICAgICAgIGNvbnN0IGogPSBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBtZXJnZUZyb21SaWdodChsZWZ0S2V5LCByaWdodEtleSwgbWVyZ2VkRmVhdHVyZXNbal0uZ2VvbWV0cnkpO1xuXG4gICAgICAgICAgICBkZWxldGUgbGVmdEluZGV4W2xlZnRLZXldO1xuICAgICAgICAgICAgZGVsZXRlIHJpZ2h0SW5kZXhbcmlnaHRLZXldO1xuXG4gICAgICAgICAgICByaWdodEluZGV4W2dldEtleSh0ZXh0LCBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeSwgdHJ1ZSldID0gaTtcbiAgICAgICAgICAgIG1lcmdlZEZlYXR1cmVzW2pdLmdlb21ldHJ5ID0gKG51bGw6IGFueSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChsZWZ0S2V5IGluIHJpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIG1lcmdlYWJsZSBsaW5lIGFkamFjZW50IHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZVxuICAgICAgICAgICAgbWVyZ2VGcm9tUmlnaHQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHRLZXkgaW4gbGVmdEluZGV4KSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBtZXJnZWFibGUgbGluZSBhZGphY2VudCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlXG4gICAgICAgICAgICBtZXJnZUZyb21MZWZ0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm8gYWRqYWNlbnQgbGluZXMsIGFkZCBhcyBhIG5ldyBpdGVtXG4gICAgICAgICAgICBhZGQoayk7XG4gICAgICAgICAgICBsZWZ0SW5kZXhbbGVmdEtleV0gPSBtZXJnZWRJbmRleCAtIDE7XG4gICAgICAgICAgICByaWdodEluZGV4W3JpZ2h0S2V5XSA9IG1lcmdlZEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRGZWF0dXJlcy5maWx0ZXIoKGYpID0+IGYuZ2VvbWV0cnkpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24sXG59IGZyb20gJy4vc2NyaXB0X2RldGVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXAgPSB7XG4gICAgJyEnOiAnw6/CuMKVJyxcbiAgICAnIyc6ICfDr8K8woMnLFxuICAgICckJzogJ8OvwrzChCcsXG4gICAgJyUnOiAnw6/CvMKFJyxcbiAgICAnJic6ICfDr8K8woYnLFxuICAgICcoJzogJ8OvwrjCtScsXG4gICAgJyknOiAnw6/CuMK2JyxcbiAgICAnKic6ICfDr8K8woonLFxuICAgICcrJzogJ8OvwrzCiycsXG4gICAgJywnOiAnw6/CuMKQJyxcbiAgICAnLSc6ICfDr8K4wrInLFxuICAgICcuJzogJ8OjwoPCuycsXG4gICAgJy8nOiAnw6/CvMKPJyxcbiAgICAnOic6ICfDr8K4wpMnLFxuICAgICc7JzogJ8OvwrjClCcsXG4gICAgJzwnOiAnw6/CuMK/JyxcbiAgICAnPSc6ICfDr8K8wp0nLFxuICAgICc+JzogJ8OvwrnCgCcsXG4gICAgJz8nOiAnw6/CuMKWJyxcbiAgICAnQCc6ICfDr8K8wqAnLFxuICAgICdbJzogJ8OvwrnChycsXG4gICAgJ1xcXFwnOiAnw6/CvMK8JyxcbiAgICAnXSc6ICfDr8K5wognLFxuICAgICdeJzogJ8OvwrzCvicsXG4gICAgJ18nOiAnw6/CuMKzJyxcbiAgICAnYCc6ICfDr8K9woAnLFxuICAgICd7JzogJ8OvwrjCtycsXG4gICAgJ3wnOiAnw6LCgMKVJyxcbiAgICAnfSc6ICfDr8K4wrgnLFxuICAgICd+JzogJ8Ovwr3CnicsXG4gICAgJ8OCwqInOiAnw6/Cv8KgJyxcbiAgICAnw4LCoyc6ICfDr8K/wqEnLFxuICAgICfDgsKlJzogJ8Ovwr/CpScsXG4gICAgJ8OCwqYnOiAnw6/Cv8KkJyxcbiAgICAnw4LCrCc6ICfDr8K/wqInLFxuICAgICfDgsKvJzogJ8Ovwr/CoycsXG4gICAgJ8OiwoDCkyc6ICfDr8K4wrInLFxuICAgICfDosKAwpQnOiAnw6/CuMKxJyxcbiAgICAnw6LCgMKYJzogJ8OvwrnCgycsXG4gICAgJ8OiwoDCmSc6ICfDr8K5woQnLFxuICAgICfDosKAwpwnOiAnw6/CucKBJyxcbiAgICAnw6LCgMKdJzogJ8OvwrnCgicsXG4gICAgJ8OiwoDCpic6ICfDr8K4wpknLFxuICAgICfDosKAwqcnOiAnw6PCg8K7JyxcbiAgICAnw6LCgsKpJzogJ8Ovwr/CpicsXG4gICAgJ8OjwoDCgSc6ICfDr8K4wpEnLFxuICAgICfDo8KAwoInOiAnw6/CuMKSJyxcbiAgICAnw6PCgMKIJzogJ8OvwrjCvycsXG4gICAgJ8OjwoDCiSc6ICfDr8K5woAnLFxuICAgICfDo8KAwoonOiAnw6/CuMK9JyxcbiAgICAnw6PCgMKLJzogJ8OvwrjCvicsXG4gICAgJ8OjwoDCjCc6ICfDr8K5woEnLFxuICAgICfDo8KAwo0nOiAnw6/CucKCJyxcbiAgICAnw6PCgMKOJzogJ8OvwrnCgycsXG4gICAgJ8OjwoDCjyc6ICfDr8K5woQnLFxuICAgICfDo8KAwpAnOiAnw6/CuMK7JyxcbiAgICAnw6PCgMKRJzogJ8OvwrjCvCcsXG4gICAgJ8OjwoDClCc6ICfDr8K4wrknLFxuICAgICfDo8KAwpUnOiAnw6/CuMK6JyxcbiAgICAnw6PCgMKWJzogJ8OvwrjClycsXG4gICAgJ8OjwoDClyc6ICfDr8K4wpgnLFxuICAgICfDr8K8woEnOiAnw6/CuMKVJyxcbiAgICAnw6/CvMKIJzogJ8OvwrjCtScsXG4gICAgJ8OvwrzCiSc6ICfDr8K4wrYnLFxuICAgICfDr8K8wownOiAnw6/CuMKQJyxcbiAgICAnw6/CvMKNJzogJ8OvwrjCsicsXG4gICAgJ8OvwrzCjic6ICfDo8KDwrsnLFxuICAgICfDr8K8wponOiAnw6/CuMKTJyxcbiAgICAnw6/CvMKbJzogJ8OvwrjClCcsXG4gICAgJ8OvwrzCnCc6ICfDr8K4wr8nLFxuICAgICfDr8K8wp4nOiAnw6/CucKAJyxcbiAgICAnw6/CvMKfJzogJ8OvwrjClicsXG4gICAgJ8OvwrzCuyc6ICfDr8K5wocnLFxuICAgICfDr8K8wr0nOiAnw6/CucKIJyxcbiAgICAnw6/CvMK/JzogJ8OvwrjCsycsXG4gICAgJ8Ovwr3Cmyc6ICfDr8K4wrcnLFxuICAgICfDr8K9wpwnOiAnw6LCgMKVJyxcbiAgICAnw6/CvcKdJzogJ8OvwrjCuCcsXG4gICAgJ8Ovwr3Cnyc6ICfDr8K4wrUnLFxuICAgICfDr8K9wqAnOiAnw6/CuMK2JyxcbiAgICAnw6/CvcKhJzogJ8OvwrjCkicsXG4gICAgJ8Ovwr3Coic6ICfDr8K5woEnLFxuICAgICfDr8K9wqMnOiAnw6/CucKCJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVydGljYWxpemVQdW5jdHVhdGlvbihpbnB1dDogc3RyaW5nKSB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgKyAxKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBwcmV2Q2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkgLSAxKSB8fCBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNhblJlcGxhY2VQdW5jdHVhdGlvbiA9IChcbiAgICAgICAgICAgICghbmV4dENoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24obmV4dENoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSArIDFdXSkgJiZcbiAgICAgICAgICAgICghcHJldkNoYXJDb2RlIHx8ICFjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24ocHJldkNoYXJDb2RlKSB8fCB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaSAtIDFdXSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2FuUmVwbGFjZVB1bmN0dWF0aW9uICYmIHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpXV0pIHtcbiAgICAgICAgICAgIG91dHB1dCArPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGlucHV0W2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuIiwiLy8gQGZsb3dcbi8vIE9ORV9FTSBjb25zdGFudCB1c2VkIHRvIGdvIGJldHdlZW4gXCJlbVwiIHVuaXRzIHVzZWQgaW4gc3R5bGUgc3BlYyBhbmQgXCJwb2ludHNcIiB1c2VkIGludGVybmFsbHkgZm9yIGxheW91dFxuXG5leHBvcnQgZGVmYXVsdCAyNDtcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYmY7XG5cbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpO1xuXG5mdW5jdGlvbiBQYmYoYnVmKSB7XG4gICAgdGhpcy5idWYgPSBBcnJheUJ1ZmZlci5pc1ZpZXcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGJ1ZikgPyBidWYgOiBuZXcgVWludDhBcnJheShidWYgfHwgMCk7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMudHlwZSA9IDA7XG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLmJ1Zi5sZW5ndGg7XG59XG5cblBiZi5WYXJpbnQgID0gMDsgLy8gdmFyaW50OiBpbnQzMiwgaW50NjQsIHVpbnQzMiwgdWludDY0LCBzaW50MzIsIHNpbnQ2NCwgYm9vbCwgZW51bVxuUGJmLkZpeGVkNjQgPSAxOyAvLyA2NC1iaXQ6IGRvdWJsZSwgZml4ZWQ2NCwgc2ZpeGVkNjRcblBiZi5CeXRlcyAgID0gMjsgLy8gbGVuZ3RoLWRlbGltaXRlZDogc3RyaW5nLCBieXRlcywgZW1iZWRkZWQgbWVzc2FnZXMsIHBhY2tlZCByZXBlYXRlZCBmaWVsZHNcblBiZi5GaXhlZDMyID0gNTsgLy8gMzItYml0OiBmbG9hdCwgZml4ZWQzMiwgc2ZpeGVkMzJcblxudmFyIFNISUZUX0xFRlRfMzIgPSAoMSA8PCAxNikgKiAoMSA8PCAxNiksXG4gICAgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMjtcblxuLy8gVGhyZXNob2xkIGNob3NlbiBiYXNlZCBvbiBib3RoIGJlbmNobWFya2luZyBhbmQga25vd2xlZGdlIGFib3V0IGJyb3dzZXIgc3RyaW5nXG4vLyBkYXRhIHN0cnVjdHVyZXMgKHdoaWNoIGN1cnJlbnRseSBzd2l0Y2ggc3RydWN0dXJlIHR5cGVzIGF0IDEyIGJ5dGVzIG9yIG1vcmUpXG52YXIgVEVYVF9ERUNPREVSX01JTl9MRU5HVEggPSAxMjtcbnZhciB1dGY4VGV4dERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpO1xuXG5QYmYucHJvdG90eXBlID0ge1xuXG4gICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gPT09IFJFQURJTkcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIHJlYWRGaWVsZHM6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0LCBlbmQpIHtcbiAgICAgICAgZW5kID0gZW5kIHx8IHRoaXMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMucmVhZFZhcmludCgpLFxuICAgICAgICAgICAgICAgIHRhZyA9IHZhbCA+PiAzLFxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zID0gdGhpcy5wb3M7XG5cbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbCAmIDB4NztcbiAgICAgICAgICAgIHJlYWRGaWVsZCh0YWcsIHJlc3VsdCwgdGhpcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA9PT0gc3RhcnRQb3MpIHRoaXMuc2tpcCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHJlYWRNZXNzYWdlOiBmdW5jdGlvbihyZWFkRmllbGQsIHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkRmllbGRzKHJlYWRGaWVsZCwgcmVzdWx0LCB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zKTtcbiAgICB9LFxuXG4gICAgcmVhZEZpeGVkMzI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkMzI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZEludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIDY0LWJpdCBpbnQgaGFuZGxpbmcgaXMgYmFzZWQgb24gZ2l0aHViLmNvbS9kcHcvbm9kZS1idWZmZXItbW9yZS1pbnRzIChNSVQtbGljZW5zZWQpXG5cbiAgICByZWFkRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcykgKyByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFNGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKSArIHJlYWRJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MgKyA0KSAqIFNISUZUX0xFRlRfMzI7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRGbG9hdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSBpZWVlNzU0LnJlYWQodGhpcy5idWYsIHRoaXMucG9zLCB0cnVlLCAyMywgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWREb3VibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gaWVlZTc1NC5yZWFkKHRoaXMuYnVmLCB0aGlzLnBvcywgdHJ1ZSwgNTIsIDgpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkVmFyaW50OiBmdW5jdGlvbihpc1NpZ25lZCkge1xuICAgICAgICB2YXIgYnVmID0gdGhpcy5idWYsXG4gICAgICAgICAgICB2YWwsIGI7XG5cbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsICA9ICBiICYgMHg3ZjsgICAgICAgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsIHw9IChiICYgMHg3ZikgPDwgNzsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsIHw9IChiICYgMHg3ZikgPDwgMTQ7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvcysrXTsgdmFsIHw9IChiICYgMHg3ZikgPDwgMjE7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHZhbDtcbiAgICAgICAgYiA9IGJ1Zlt0aGlzLnBvc107ICAgdmFsIHw9IChiICYgMHgwZikgPDwgMjg7XG5cbiAgICAgICAgcmV0dXJuIHJlYWRWYXJpbnRSZW1haW5kZXIodmFsLCBpc1NpZ25lZCwgdGhpcyk7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ2NDogZnVuY3Rpb24oKSB7IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdjIuMC4xXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRWYXJpbnQodHJ1ZSk7XG4gICAgfSxcblxuICAgIHJlYWRTVmFyaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG51bSA9IHRoaXMucmVhZFZhcmludCgpO1xuICAgICAgICByZXR1cm4gbnVtICUgMiA9PT0gMSA/IChudW0gKyAxKSAvIC0yIDogbnVtIC8gMjsgLy8gemlnemFnIGVuY29kaW5nXG4gICAgfSxcblxuICAgIHJlYWRCb29sZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkVmFyaW50KCkpO1xuICAgIH0sXG5cbiAgICByZWFkU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3M7XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgPSBlbmQ7XG5cbiAgICAgICAgaWYgKGVuZCAtIHBvcyA+PSBURVhUX0RFQ09ERVJfTUlOX0xFTkdUSCAmJiB1dGY4VGV4dERlY29kZXIpIHtcbiAgICAgICAgICAgIC8vIGxvbmdlciBzdHJpbmdzIGFyZSBmYXN0IHdpdGggdGhlIGJ1aWx0LWluIGJyb3dzZXIgVGV4dERlY29kZXIgQVBJXG4gICAgICAgICAgICByZXR1cm4gcmVhZFV0ZjhUZXh0RGVjb2Rlcih0aGlzLmJ1ZiwgcG9zLCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNob3J0IHN0cmluZ3MgYXJlIGZhc3Qgd2l0aCBvdXIgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHJldHVybiByZWFkVXRmOCh0aGlzLmJ1ZiwgcG9zLCBlbmQpO1xuICAgIH0sXG5cbiAgICByZWFkQnl0ZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyxcbiAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuYnVmLnN1YmFycmF5KHRoaXMucG9zLCBlbmQpO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLy8gdmVyYm9zZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczsgZG9lc24ndCBhZmZlY3QgZ3ppcHBlZCBzaXplXG5cbiAgICByZWFkUGFja2VkVmFyaW50OiBmdW5jdGlvbihhcnIsIGlzU2lnbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFZhcmludChpc1NpZ25lZCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFZhcmludChpc1NpZ25lZCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNWYXJpbnQ6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkQm9vbGVhbjogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGbG9hdDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZERvdWJsZTogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQzMjogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQzMjogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZpeGVkNjQ6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU0ZpeGVkNjQ6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuXG4gICAgc2tpcDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhciB0eXBlID0gdmFsICYgMHg3O1xuICAgICAgICBpZiAodHlwZSA9PT0gUGJmLlZhcmludCkgd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdID4gMHg3Zikge31cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkJ5dGVzKSB0aGlzLnBvcyA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3M7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDMyKSB0aGlzLnBvcyArPSA0O1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuRml4ZWQ2NCkgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1VuaW1wbGVtZW50ZWQgdHlwZTogJyArIHR5cGUpO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gV1JJVElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgd3JpdGVUYWc6IGZ1bmN0aW9uKHRhZywgdHlwZSkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KCh0YWcgPDwgMykgfCB0eXBlKTtcbiAgICB9LFxuXG4gICAgcmVhbGxvYzogZnVuY3Rpb24obWluKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8fCAxNjtcblxuICAgICAgICB3aGlsZSAobGVuZ3RoIDwgdGhpcy5wb3MgKyBtaW4pIGxlbmd0aCAqPSAyO1xuXG4gICAgICAgIGlmIChsZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGJ1Zi5zZXQodGhpcy5idWYpO1xuICAgICAgICAgICAgdGhpcy5idWYgPSBidWY7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zdWJhcnJheSgwLCB0aGlzLmxlbmd0aCk7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkMzI6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZUZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVNGaXhlZDY0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDgpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwgJiAtMSwgdGhpcy5wb3MpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCBNYXRoLmZsb29yKHZhbCAqIFNISUZUX1JJR0hUXzMyKSwgdGhpcy5wb3MgKyA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVWYXJpbnQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YWwgPSArdmFsIHx8IDA7XG5cbiAgICAgICAgaWYgKHZhbCA+IDB4ZmZmZmZmZiB8fCB2YWwgPCAwKSB7XG4gICAgICAgICAgICB3cml0ZUJpZ1ZhcmludCh2YWwsIHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuXG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gICAgICAgICAgIHZhbCAmIDB4N2YgIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+Pj0gNykgJiAweDdmKSB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj49IDcpICYgMHg3ZikgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gICAodmFsID4+PiA3KSAmIDB4N2Y7XG4gICAgfSxcblxuICAgIHdyaXRlU1ZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQodmFsIDwgMCA/IC12YWwgKiAyIC0gMSA6IHZhbCAqIDIpO1xuICAgIH0sXG5cbiAgICB3cml0ZUJvb2xlYW46IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odmFsKSk7XG4gICAgfSxcblxuICAgIHdyaXRlU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhzdHIubGVuZ3RoICogNCk7XG5cbiAgICAgICAgdGhpcy5wb3MrKzsgLy8gcmVzZXJ2ZSAxIGJ5dGUgZm9yIHNob3J0IHN0cmluZyBsZW5ndGhcblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgLy8gd3JpdGUgdGhlIHN0cmluZyBkaXJlY3RseSB0byB0aGUgYnVmZmVyIGFuZCBzZWUgaG93IG11Y2ggd2FzIHdyaXR0ZW5cbiAgICAgICAgdGhpcy5wb3MgPSB3cml0ZVV0ZjgodGhpcy5idWYsIHN0ciwgdGhpcy5wb3MpO1xuICAgICAgICB2YXIgbGVuID0gdGhpcy5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICBpZiAobGVuID49IDB4ODApIG1ha2VSb29tRm9yRXh0cmFMZW5ndGgoc3RhcnRQb3MsIGxlbiwgdGhpcyk7XG5cbiAgICAgICAgLy8gZmluYWxseSwgd3JpdGUgdGhlIG1lc3NhZ2UgbGVuZ3RoIGluIHRoZSByZXNlcnZlZCBwbGFjZSBhbmQgcmVzdG9yZSB0aGUgcG9zaXRpb25cbiAgICAgICAgdGhpcy5wb3MgPSBzdGFydFBvcyAtIDE7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQobGVuKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgIH0sXG5cbiAgICB3cml0ZUZsb2F0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICBpZWVlNzU0LndyaXRlKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zLCB0cnVlLCAyMywgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRG91YmxlOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDgpO1xuICAgICAgICBpZWVlNzU0LndyaXRlKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zLCB0cnVlLCA1MiwgOCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlQnl0ZXM6IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAgICAgICB2YXIgbGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnJlYWxsb2MobGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgdGhpcy5idWZbdGhpcy5wb3MrK10gPSBidWZmZXJbaV07XG4gICAgfSxcblxuICAgIHdyaXRlUmF3TWVzc2FnZTogZnVuY3Rpb24oZm4sIG9iaikge1xuICAgICAgICB0aGlzLnBvcysrOyAvLyByZXNlcnZlIDEgYnl0ZSBmb3Igc2hvcnQgbWVzc2FnZSBsZW5ndGhcblxuICAgICAgICAvLyB3cml0ZSB0aGUgbWVzc2FnZSBkaXJlY3RseSB0byB0aGUgYnVmZmVyIGFuZCBzZWUgaG93IG11Y2ggd2FzIHdyaXR0ZW5cbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5wb3M7XG4gICAgICAgIGZuKG9iaiwgdGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgIGlmIChsZW4gPj0gMHg4MCkgbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCB0aGlzKTtcblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlTWVzc2FnZTogZnVuY3Rpb24odGFnLCBmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuICAgICAgICB0aGlzLndyaXRlUmF3TWVzc2FnZShmbiwgb2JqKTtcbiAgICB9LFxuXG4gICAgd3JpdGVQYWNrZWRWYXJpbnQ6ICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRWYXJpbnQsIGFycik7ICAgfSxcbiAgICB3cml0ZVBhY2tlZFNWYXJpbnQ6ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNWYXJpbnQsIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkQm9vbGVhbjogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkQm9vbGVhbiwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRGbG9hdDogICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGbG9hdCwgYXJyKTsgICAgfSxcbiAgICB3cml0ZVBhY2tlZERvdWJsZTogICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZERvdWJsZSwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQzMjogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQzMiwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQzMjogZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQzMiwgYXJyKTsgfSxcbiAgICB3cml0ZVBhY2tlZEZpeGVkNjQ6ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZpeGVkNjQsIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkU0ZpeGVkNjQ6IGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU0ZpeGVkNjQsIGFycik7IH0sXG5cbiAgICB3cml0ZUJ5dGVzRmllbGQ6IGZ1bmN0aW9uKHRhZywgYnVmZmVyKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZXMoYnVmZmVyKTtcbiAgICB9LFxuICAgIHdyaXRlRml4ZWQzMkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTRml4ZWQzMkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlU0ZpeGVkMzIodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlRml4ZWQ2NEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTRml4ZWQ2NEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlU0ZpeGVkNjQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlVmFyaW50RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuVmFyaW50KTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTVmFyaW50RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuVmFyaW50KTtcbiAgICAgICAgdGhpcy53cml0ZVNWYXJpbnQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU3RyaW5nRmllbGQ6IGZ1bmN0aW9uKHRhZywgc3RyKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuQnl0ZXMpO1xuICAgICAgICB0aGlzLndyaXRlU3RyaW5nKHN0cik7XG4gICAgfSxcbiAgICB3cml0ZUZsb2F0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGbG9hdCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVEb3VibGVGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZURvdWJsZSh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVCb29sZWFuRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnRGaWVsZCh0YWcsIEJvb2xlYW4odmFsKSk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gcmVhZFZhcmludFJlbWFpbmRlcihsLCBzLCBwKSB7XG4gICAgdmFyIGJ1ZiA9IHAuYnVmLFxuICAgICAgICBoLCBiO1xuXG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCAgPSAoYiAmIDB4NzApID4+IDQ7ICBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMzsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAxMDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDE3OyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMjQ7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDAxKSA8PCAzMTsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQYWNrZWRFbmQocGJmKSB7XG4gICAgcmV0dXJuIHBiZi50eXBlID09PSBQYmYuQnl0ZXMgP1xuICAgICAgICBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyA6IHBiZi5wb3MgKyAxO1xufVxuXG5mdW5jdGlvbiB0b051bShsb3csIGhpZ2gsIGlzU2lnbmVkKSB7XG4gICAgaWYgKGlzU2lnbmVkKSB7XG4gICAgICAgIHJldHVybiBoaWdoICogMHgxMDAwMDAwMDAgKyAobG93ID4+PiAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKChoaWdoID4+PiAwKSAqIDB4MTAwMDAwMDAwKSArIChsb3cgPj4+IDApO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJpZ1ZhcmludCh2YWwsIHBiZikge1xuICAgIHZhciBsb3csIGhpZ2g7XG5cbiAgICBpZiAodmFsID49IDApIHtcbiAgICAgICAgbG93ICA9ICh2YWwgJSAweDEwMDAwMDAwMCkgfCAwO1xuICAgICAgICBoaWdoID0gKHZhbCAvIDB4MTAwMDAwMDAwKSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbG93ICA9IH4oLXZhbCAlIDB4MTAwMDAwMDAwKTtcbiAgICAgICAgaGlnaCA9IH4oLXZhbCAvIDB4MTAwMDAwMDAwKTtcblxuICAgICAgICBpZiAobG93IF4gMHhmZmZmZmZmZikge1xuICAgICAgICAgICAgbG93ID0gKGxvdyArIDEpIHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvdyA9IDA7XG4gICAgICAgICAgICBoaWdoID0gKGhpZ2ggKyAxKSB8IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsID49IDB4MTAwMDAwMDAwMDAwMDAwMDAgfHwgdmFsIDwgLTB4MTAwMDAwMDAwMDAwMDAwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXZlbiB2YXJpbnQgZG9lc25cXCd0IGZpdCBpbnRvIDEwIGJ5dGVzJyk7XG4gICAgfVxuXG4gICAgcGJmLnJlYWxsb2MoMTApO1xuXG4gICAgd3JpdGVCaWdWYXJpbnRMb3cobG93LCBoaWdoLCBwYmYpO1xuICAgIHdyaXRlQmlnVmFyaW50SGlnaChoaWdoLCBwYmYpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJpZ1ZhcmludExvdyhsb3csIGhpZ2gsIHBiZikge1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSA9IGxvdyAmIDB4N2YgfCAweDgwOyBsb3cgPj4+PSA3O1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSA9IGxvdyAmIDB4N2YgfCAweDgwOyBsb3cgPj4+PSA3O1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSA9IGxvdyAmIDB4N2YgfCAweDgwOyBsb3cgPj4+PSA3O1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSA9IGxvdyAmIDB4N2YgfCAweDgwOyBsb3cgPj4+PSA3O1xuICAgIHBiZi5idWZbcGJmLnBvc10gICA9IGxvdyAmIDB4N2Y7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50SGlnaChoaWdoLCBwYmYpIHtcbiAgICB2YXIgbHNiID0gKGhpZ2ggJiAweDA3KSA8PCA0O1xuXG4gICAgcGJmLmJ1ZltwYmYucG9zKytdIHw9IGxzYiAgICAgICAgIHwgKChoaWdoID4+Pj0gMykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2Y7XG59XG5cbmZ1bmN0aW9uIG1ha2VSb29tRm9yRXh0cmFMZW5ndGgoc3RhcnRQb3MsIGxlbiwgcGJmKSB7XG4gICAgdmFyIGV4dHJhTGVuID1cbiAgICAgICAgbGVuIDw9IDB4M2ZmZiA/IDEgOlxuICAgICAgICBsZW4gPD0gMHgxZmZmZmYgPyAyIDpcbiAgICAgICAgbGVuIDw9IDB4ZmZmZmZmZiA/IDMgOiBNYXRoLmZsb29yKE1hdGgubG9nKGxlbikgLyAoTWF0aC5MTjIgKiA3KSk7XG5cbiAgICAvLyBpZiAxIGJ5dGUgaXNuJ3QgZW5vdWdoIGZvciBlbmNvZGluZyBtZXNzYWdlIGxlbmd0aCwgc2hpZnQgdGhlIGRhdGEgdG8gdGhlIHJpZ2h0XG4gICAgcGJmLnJlYWxsb2MoZXh0cmFMZW4pO1xuICAgIGZvciAodmFyIGkgPSBwYmYucG9zIC0gMTsgaSA+PSBzdGFydFBvczsgaS0tKSBwYmYuYnVmW2kgKyBleHRyYUxlbl0gPSBwYmYuYnVmW2ldO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBhY2tlZFZhcmludChhcnIsIHBiZikgICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVWYXJpbnQoYXJyW2ldKTsgICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZFNWYXJpbnQoYXJyLCBwYmYpICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVTVmFyaW50KGFycltpXSk7ICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZEZsb2F0KGFyciwgcGJmKSAgICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVGbG9hdChhcnJbaV0pOyAgICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZERvdWJsZShhcnIsIHBiZikgICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVEb3VibGUoYXJyW2ldKTsgICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZEJvb2xlYW4oYXJyLCBwYmYpICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVCb29sZWFuKGFycltpXSk7ICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZEZpeGVkMzIoYXJyLCBwYmYpICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVGaXhlZDMyKGFycltpXSk7ICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZFNGaXhlZDMyKGFyciwgcGJmKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVTRml4ZWQzMihhcnJbaV0pOyB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZEZpeGVkNjQoYXJyLCBwYmYpICB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVGaXhlZDY0KGFycltpXSk7ICB9XG5mdW5jdGlvbiB3cml0ZVBhY2tlZFNGaXhlZDY0KGFyciwgcGJmKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBwYmYud3JpdGVTRml4ZWQ2NChhcnJbaV0pOyB9XG5cbi8vIEJ1ZmZlciBjb2RlIGJlbG93IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIsIE1JVC1saWNlbnNlZFxuXG5mdW5jdGlvbiByZWFkVUludDMyKGJ1ZiwgcG9zKSB7XG4gICAgcmV0dXJuICgoYnVmW3Bvc10pIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAxXSA8PCA4KSB8XG4gICAgICAgIChidWZbcG9zICsgMl0gPDwgMTYpKSArXG4gICAgICAgIChidWZbcG9zICsgM10gKiAweDEwMDAwMDApO1xufVxuXG5mdW5jdGlvbiB3cml0ZUludDMyKGJ1ZiwgdmFsLCBwb3MpIHtcbiAgICBidWZbcG9zXSA9IHZhbDtcbiAgICBidWZbcG9zICsgMV0gPSAodmFsID4+PiA4KTtcbiAgICBidWZbcG9zICsgMl0gPSAodmFsID4+PiAxNik7XG4gICAgYnVmW3BvcyArIDNdID0gKHZhbCA+Pj4gMjQpO1xufVxuXG5mdW5jdGlvbiByZWFkSW50MzIoYnVmLCBwb3MpIHtcbiAgICByZXR1cm4gKChidWZbcG9zXSkgfFxuICAgICAgICAoYnVmW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgKGJ1Zltwb3MgKyAzXSA8PCAyNCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRVdGY4KGJ1ZiwgcG9zLCBlbmQpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGkgPSBwb3M7XG5cbiAgICB3aGlsZSAoaSA8IGVuZCkge1xuICAgICAgICB2YXIgYjAgPSBidWZbaV07XG4gICAgICAgIHZhciBjID0gbnVsbDsgLy8gY29kZXBvaW50XG4gICAgICAgIHZhciBieXRlc1BlclNlcXVlbmNlID1cbiAgICAgICAgICAgIGIwID4gMHhFRiA/IDQgOlxuICAgICAgICAgICAgYjAgPiAweERGID8gMyA6XG4gICAgICAgICAgICBiMCA+IDB4QkYgPyAyIDogMTtcblxuICAgICAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPiBlbmQpIGJyZWFrO1xuXG4gICAgICAgIHZhciBiMSwgYjIsIGIzO1xuXG4gICAgICAgIGlmIChieXRlc1BlclNlcXVlbmNlID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoYjAgPCAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IGIwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDIpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweDFGKSA8PCAweDYgfCAoYjEgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweDdGKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChieXRlc1BlclNlcXVlbmNlID09PSAzKSB7XG4gICAgICAgICAgICBiMSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgICBiMiA9IGJ1ZltpICsgMl07XG4gICAgICAgICAgICBpZiAoKGIxICYgMHhDMCkgPT09IDB4ODAgJiYgKGIyICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gKGIwICYgMHhGKSA8PCAweEMgfCAoYjEgJiAweDNGKSA8PCAweDYgfCAoYjIgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweDdGRiB8fCAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChieXRlc1BlclNlcXVlbmNlID09PSA0KSB7XG4gICAgICAgICAgICBiMSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgICBiMiA9IGJ1ZltpICsgMl07XG4gICAgICAgICAgICBiMyA9IGJ1ZltpICsgM107XG4gICAgICAgICAgICBpZiAoKGIxICYgMHhDMCkgPT09IDB4ODAgJiYgKGIyICYgMHhDMCkgPT09IDB4ODAgJiYgKGIzICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gKGIwICYgMHhGKSA8PCAweDEyIHwgKGIxICYgMHgzRikgPDwgMHhDIHwgKGIyICYgMHgzRikgPDwgMHg2IHwgKGIzICYgMHgzRik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPD0gMHhGRkZGIHx8IGMgPj0gMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGMgPSAweEZGRkQ7XG4gICAgICAgICAgICBieXRlc1BlclNlcXVlbmNlID0gMTtcblxuICAgICAgICB9IGVsc2UgaWYgKGMgPiAweEZGRkYpIHtcbiAgICAgICAgICAgIGMgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuICAgICAgICAgICAgYyA9IDB4REMwMCB8IGMgJiAweDNGRjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gcmVhZFV0ZjhUZXh0RGVjb2RlcihidWYsIHBvcywgZW5kKSB7XG4gICAgcmV0dXJuIHV0ZjhUZXh0RGVjb2Rlci5kZWNvZGUoYnVmLnN1YmFycmF5KHBvcywgZW5kKSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVXRmOChidWYsIHN0ciwgcG9zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGMsIGxlYWQ7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBjb2RlIHBvaW50XG5cbiAgICAgICAgaWYgKGMgPiAweEQ3RkYgJiYgYyA8IDB4RTAwMCkge1xuICAgICAgICAgICAgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA8IDB4REMwMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IGxlYWQgLSAweEQ4MDAgPDwgMTAgfCBjIC0gMHhEQzAwIHwgMHgxMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA+IDB4REJGRiB8fCAoaSArIDEgPT09IHN0ci5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxlYWQpIHtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDYgfCAweEMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHhDIHwgMHhFMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDEyIHwgMHhGMDtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHhDICYgMHgzRiB8IDB4ODA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4NiAmIDB4M0YgfCAweDgwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IFByb3RvYnVmIGZyb20gJ3BiZic7XG5jb25zdCBib3JkZXIgPSAzO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi9zdHlsZV9nbHlwaCc7XG5cbmZ1bmN0aW9uIHJlYWRGb250c3RhY2tzKHRhZzogbnVtYmVyLCBnbHlwaHM6IEFycmF5PFN0eWxlR2x5cGg+LCBwYmY6IFByb3RvYnVmKSB7XG4gICAgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgICBwYmYucmVhZE1lc3NhZ2UocmVhZEZvbnRzdGFjaywgZ2x5cGhzKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRGb250c3RhY2sodGFnOiBudW1iZXIsIGdseXBoczogQXJyYXk8U3R5bGVHbHlwaD4sIHBiZjogUHJvdG9idWYpIHtcbiAgICBpZiAodGFnID09PSAzKSB7XG4gICAgICAgIGNvbnN0IHtpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIGFkdmFuY2V9ID0gcGJmLnJlYWRNZXNzYWdlKHJlYWRHbHlwaCwge30pO1xuICAgICAgICBnbHlwaHMucHVzaCh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGJpdG1hcDogbmV3IEFscGhhSW1hZ2Uoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCArIDIgKiBib3JkZXIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAyICogYm9yZGVyXG4gICAgICAgICAgICB9LCBiaXRtYXApLFxuICAgICAgICAgICAgbWV0cmljczoge3dpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgYWR2YW5jZX1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkR2x5cGgodGFnOiBudW1iZXIsIGdseXBoOiBPYmplY3QsIHBiZjogUHJvdG9idWYpIHtcbiAgICBpZiAodGFnID09PSAxKSBnbHlwaC5pZCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAyKSBnbHlwaC5iaXRtYXAgPSBwYmYucmVhZEJ5dGVzKCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAzKSBnbHlwaC53aWR0aCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA0KSBnbHlwaC5oZWlnaHQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNSkgZ2x5cGgubGVmdCA9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNikgZ2x5cGgudG9wID0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA3KSBnbHlwaC5hZHZhbmNlID0gcGJmLnJlYWRWYXJpbnQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGRhdGE6IEFycmF5QnVmZmVyIHwgVWludDhBcnJheSk6IEFycmF5PFN0eWxlR2x5cGg+IHtcbiAgICByZXR1cm4gbmV3IFByb3RvYnVmKGRhdGEpLnJlYWRGaWVsZHMocmVhZEZvbnRzdGFja3MsIFtdKTtcbn1cblxuZXhwb3J0IGNvbnN0IEdMWVBIX1BCRl9CT1JERVIgPSBib3JkZXI7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvdHBhY2soYm94ZXMpIHtcblxuICAgIC8vIGNhbGN1bGF0ZSB0b3RhbCBib3ggYXJlYSBhbmQgbWF4aW11bSBib3ggd2lkdGhcbiAgICBsZXQgYXJlYSA9IDA7XG4gICAgbGV0IG1heFdpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgYm94IG9mIGJveGVzKSB7XG4gICAgICAgIGFyZWEgKz0gYm94LncgKiBib3guaDtcbiAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgYm94LncpO1xuICAgIH1cblxuICAgIC8vIHNvcnQgdGhlIGJveGVzIGZvciBpbnNlcnRpb24gYnkgaGVpZ2h0LCBkZXNjZW5kaW5nXG4gICAgYm94ZXMuc29ydCgoYSwgYikgPT4gYi5oIC0gYS5oKTtcblxuICAgIC8vIGFpbSBmb3IgYSBzcXVhcmlzaCByZXN1bHRpbmcgY29udGFpbmVyLFxuICAgIC8vIHNsaWdodGx5IGFkanVzdGVkIGZvciBzdWItMTAwJSBzcGFjZSB1dGlsaXphdGlvblxuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSBNYXRoLm1heChNYXRoLmNlaWwoTWF0aC5zcXJ0KGFyZWEgLyAwLjk1KSksIG1heFdpZHRoKTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBzaW5nbGUgZW1wdHkgc3BhY2UsIHVuYm91bmRlZCBhdCB0aGUgYm90dG9tXG4gICAgY29uc3Qgc3BhY2VzID0gW3t4OiAwLCB5OiAwLCB3OiBzdGFydFdpZHRoLCBoOiBJbmZpbml0eX1dO1xuXG4gICAgbGV0IHdpZHRoID0gMDtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgIGZvciAoY29uc3QgYm94IG9mIGJveGVzKSB7XG4gICAgICAgIC8vIGxvb2sgdGhyb3VnaCBzcGFjZXMgYmFja3dhcmRzIHNvIHRoYXQgd2UgY2hlY2sgc21hbGxlciBzcGFjZXMgZmlyc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IHNwYWNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3Qgc3BhY2UgPSBzcGFjZXNbaV07XG5cbiAgICAgICAgICAgIC8vIGxvb2sgZm9yIGVtcHR5IHNwYWNlcyB0aGF0IGNhbiBhY2NvbW1vZGF0ZSB0aGUgY3VycmVudCBib3hcbiAgICAgICAgICAgIGlmIChib3gudyA+IHNwYWNlLncgfHwgYm94LmggPiBzcGFjZS5oKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gZm91bmQgdGhlIHNwYWNlOyBhZGQgdGhlIGJveCB0byBpdHMgdG9wLWxlZnQgY29ybmVyXG4gICAgICAgICAgICAvLyB8LS0tLS0tLXwtLS0tLS0tfFxuICAgICAgICAgICAgLy8gfCAgYm94ICB8ICAgICAgIHxcbiAgICAgICAgICAgIC8vIHxfX19fX19ffCAgICAgICB8XG4gICAgICAgICAgICAvLyB8ICAgICAgICAgc3BhY2UgfFxuICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgIGJveC54ID0gc3BhY2UueDtcbiAgICAgICAgICAgIGJveC55ID0gc3BhY2UueTtcblxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBib3gueSArIGJveC5oKTtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGJveC54ICsgYm94LncpO1xuXG4gICAgICAgICAgICBpZiAoYm94LncgPT09IHNwYWNlLncgJiYgYm94LmggPT09IHNwYWNlLmgpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGFjZSBtYXRjaGVzIHRoZSBib3ggZXhhY3RseTsgcmVtb3ZlIGl0XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IHNwYWNlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IHNwYWNlcy5sZW5ndGgpIHNwYWNlc1tpXSA9IGxhc3Q7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm94LmggPT09IHNwYWNlLmgpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGFjZSBtYXRjaGVzIHRoZSBib3ggaGVpZ2h0OyB1cGRhdGUgaXQgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICAvLyB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18XG4gICAgICAgICAgICAgICAgLy8gfCAgYm94ICB8IHVwZGF0ZWQgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19ffF9fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICBzcGFjZS54ICs9IGJveC53O1xuICAgICAgICAgICAgICAgIHNwYWNlLncgLT0gYm94Lnc7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm94LncgPT09IHNwYWNlLncpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGFjZSBtYXRjaGVzIHRoZSBib3ggd2lkdGg7IHVwZGF0ZSBpdCBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tLS0tLS0tLS18XG4gICAgICAgICAgICAgICAgLy8gfCAgICAgIGJveCAgICAgIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIC8vIHwgdXBkYXRlZCBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICBzcGFjZS55ICs9IGJveC5oO1xuICAgICAgICAgICAgICAgIHNwYWNlLmggLT0gYm94Lmg7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBib3ggc3BsaXRzIHRoZSBzcGFjZSBpbnRvIHR3byBzcGFjZXNcbiAgICAgICAgICAgICAgICAvLyB8LS0tLS0tLXwtLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICBib3ggIHwgbmV3IHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX3xfX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICAvLyB8IHVwZGF0ZWQgc3BhY2UgICAgIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICBzcGFjZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHNwYWNlLnggKyBib3gudyxcbiAgICAgICAgICAgICAgICAgICAgeTogc3BhY2UueSxcbiAgICAgICAgICAgICAgICAgICAgdzogc3BhY2UudyAtIGJveC53LFxuICAgICAgICAgICAgICAgICAgICBoOiBib3guaFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNwYWNlLnkgKz0gYm94Lmg7XG4gICAgICAgICAgICAgICAgc3BhY2UuaCAtPSBib3guaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdzogd2lkdGgsIC8vIGNvbnRhaW5lciB3aWR0aFxuICAgICAgICBoOiBoZWlnaHQsIC8vIGNvbnRhaW5lciBoZWlnaHRcbiAgICAgICAgZmlsbDogKGFyZWEgLyAod2lkdGggKiBoZWlnaHQpKSB8fCAwIC8vIHNwYWNlIHV0aWxpemF0aW9uXG4gICAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuXG5jb25zdCBJTUFHRV9QQURESU5HOiBudW1iZXIgPSAxO1xuZXhwb3J0IHtJTUFHRV9QQURESU5HfTtcblxudHlwZSBSZWN0ID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgdzogbnVtYmVyLFxuICAgIGg6IG51bWJlclxufTtcblxuZXhwb3J0IGNsYXNzIEltYWdlUG9zaXRpb24ge1xuICAgIHBhZGRlZFJlY3Q6IFJlY3Q7XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHZlcnNpb246IG51bWJlcjtcbiAgICBzdHJldGNoWTogP0FycmF5PFtudW1iZXIsIG51bWJlcl0+O1xuICAgIHN0cmV0Y2hYOiA/QXJyYXk8W251bWJlciwgbnVtYmVyXT47XG4gICAgY29udGVudDogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgY29uc3RydWN0b3IocGFkZGVkUmVjdDogUmVjdCwge3BpeGVsUmF0aW8sIHZlcnNpb24sIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH06IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5wYWRkZWRSZWN0ID0gcGFkZGVkUmVjdDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID0gcGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5zdHJldGNoWCA9IHN0cmV0Y2hYO1xuICAgICAgICB0aGlzLnN0cmV0Y2hZID0gc3RyZXRjaFk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IHRsKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnggKyBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnkgKyBJTUFHRV9QQURESU5HXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IGJyKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnggKyB0aGlzLnBhZGRlZFJlY3QudyAtIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueSArIHRoaXMucGFkZGVkUmVjdC5oIC0gSU1BR0VfUEFERElOR1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCB0bGJyKCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy50bC5jb25jYXQodGhpcy5icik7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlTaXplKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKHRoaXMucGFkZGVkUmVjdC53IC0gSU1BR0VfUEFERElORyAqIDIpIC8gdGhpcy5waXhlbFJhdGlvLFxuICAgICAgICAgICAgKHRoaXMucGFkZGVkUmVjdC5oIC0gSU1BR0VfUEFERElORyAqIDIpIC8gdGhpcy5waXhlbFJhdGlvXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUF0bGFzIHtcbiAgICBpbWFnZTogUkdCQUltYWdlO1xuICAgIGljb25Qb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn07XG4gICAgcGF0dGVyblBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufTtcbiAgICBoYXZlUmVuZGVyQ2FsbGJhY2tzOiBBcnJheTxzdHJpbmc+O1xuICAgIHVwbG9hZGVkOiA/Ym9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGljb25zOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LCBwYXR0ZXJuczoge1tzdHJpbmddOiBTdHlsZUltYWdlfSkge1xuICAgICAgICBjb25zdCBpY29uUG9zaXRpb25zID0ge30sIHBhdHRlcm5Qb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzID0gW107XG5cbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWRkSW1hZ2VzKGljb25zLCBpY29uUG9zaXRpb25zLCBiaW5zKTtcbiAgICAgICAgdGhpcy5hZGRJbWFnZXMocGF0dGVybnMsIHBhdHRlcm5Qb3NpdGlvbnMsIGJpbnMpO1xuXG4gICAgICAgIGNvbnN0IHt3LCBofSA9IHBvdHBhY2soYmlucyk7XG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGljb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpY29uc1tpZF07XG4gICAgICAgICAgICBjb25zdCBiaW4gPSBpY29uUG9zaXRpb25zW2lkXS5wYWRkZWRSZWN0O1xuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4OiBiaW4ueCArIElNQUdFX1BBRERJTkcsIHk6IGJpbi55ICsgSU1BR0VfUEFERElOR30sIHNyYy5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHBhdHRlcm5zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHBhdHRlcm5Qb3NpdGlvbnNbaWRdLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICBjb25zdCB4ID0gYmluLnggKyBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgICAgIHkgPSBiaW4ueSArIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgdyA9IHNyYy5kYXRhLndpZHRoLFxuICAgICAgICAgICAgICAgIGggPSBzcmMuZGF0YS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6IDB9LCB7eCwgeX0sIHNyYy5kYXRhKTtcbiAgICAgICAgICAgIC8vIEFkZCAxIHBpeGVsIHdyYXBwZWQgcGFkZGluZyBvbiBlYWNoIHNpZGUgb2YgdGhlIGltYWdlLlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogaCAtIDF9LCB7eCwgeTogeSAtIDF9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBUXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAgICAgMH0sIHt4LCB5OiB5ICsgaH0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIEJcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IHcgLSAxLCB5OiAwfSwge3g6IHggLSAxLCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gTFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgICAgIHk6IDB9LCB7eDogeCArIHcsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBSXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIHRoaXMuaWNvblBvc2l0aW9ucyA9IGljb25Qb3NpdGlvbnM7XG4gICAgICAgIHRoaXMucGF0dGVyblBvc2l0aW9ucyA9IHBhdHRlcm5Qb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2VzKGltYWdlczoge1tzdHJpbmddOiBTdHlsZUltYWdlfSwgcG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LCBiaW5zOiBBcnJheTxSZWN0Pikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2VzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgdzogc3JjLmRhdGEud2lkdGggKyAyICogSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICBoOiBzcmMuZGF0YS5oZWlnaHQgKyAyICogSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBiaW5zLnB1c2goYmluKTtcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpZF0gPSBuZXcgSW1hZ2VQb3NpdGlvbihiaW4sIHNyYyk7XG5cbiAgICAgICAgICAgIGlmIChzcmMuaGFzUmVuZGVyQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRjaFVwZGF0ZWRJbWFnZXMoaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXIsIHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgaW1hZ2VNYW5hZ2VyLmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzKHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcyk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBpbWFnZU1hbmFnZXIudXBkYXRlZEltYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbbmFtZV0sIGltYWdlTWFuYWdlci5nZXRJbWFnZShuYW1lKSwgdGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tuYW1lXSwgaW1hZ2VNYW5hZ2VyLmdldEltYWdlKG5hbWUpLCB0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhdGNoVXBkYXRlZEltYWdlKHBvc2l0aW9uOiA/SW1hZ2VQb3NpdGlvbiwgaW1hZ2U6ID9TdHlsZUltYWdlLCB0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGlmICghcG9zaXRpb24gfHwgIWltYWdlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnZlcnNpb24gPT09IGltYWdlLnZlcnNpb24pIHJldHVybjtcblxuICAgICAgICBwb3NpdGlvbi52ZXJzaW9uID0gaW1hZ2UudmVyc2lvbjtcbiAgICAgICAgY29uc3QgW3gsIHldID0gcG9zaXRpb24udGw7XG4gICAgICAgIHRleHR1cmUudXBkYXRlKGltYWdlLmRhdGEsIHVuZGVmaW5lZCwge3gsIHl9KTtcbiAgICB9XG5cbn1cblxucmVnaXN0ZXIoJ0ltYWdlUG9zaXRpb24nLCBJbWFnZVBvc2l0aW9uKTtcbnJlZ2lzdGVyKCdJbWFnZUF0bGFzJywgSW1hZ2VBdGxhcyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICAgIGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbixcbiAgICBjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyxcbiAgICBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdFxufSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHZlcnRpY2FsaXplUHVuY3R1YXRpb24gZnJvbSAnLi4vdXRpbC92ZXJ0aWNhbGl6ZV9wdW5jdHVhdGlvbic7XG5pbXBvcnQge3BsdWdpbiBhcyBydGxUZXh0UGx1Z2lufSBmcm9tICcuLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi9vbmVfZW0nO1xuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGgsIEdseXBoTWV0cmljc30gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHtHTFlQSF9QQkZfQk9SREVSfSBmcm9tICcuLi9zdHlsZS9wYXJzZV9nbHlwaF9wYmYnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQge0lNQUdFX1BBRERJTkd9IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7UmVjdCwgR2x5cGhQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2dseXBoX2F0bGFzJztcbmltcG9ydCBGb3JtYXR0ZWQsIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuY29uc3QgV3JpdGluZ01vZGUgPSB7XG4gICAgaG9yaXpvbnRhbDogMSxcbiAgICB2ZXJ0aWNhbDogMixcbiAgICBob3Jpem9udGFsT25seTogM1xufTtcblxuY29uc3QgU0hBUElOR19ERUZBVUxUX09GRlNFVCA9IC0xNztcbmV4cG9ydCB7c2hhcGVUZXh0LCBzaGFwZUljb24sIGZpdEljb25Ub1RleHQsIGdldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGUsIFNIQVBJTkdfREVGQVVMVF9PRkZTRVR9O1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgYSBnbHlwaCByZWxhdGl2ZSB0byB0aGUgdGV4dCdzIGFuY2hvciBwb2ludC5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRHbHlwaCA9IHtcbiAgICBnbHlwaDogbnVtYmVyLFxuICAgIGltYWdlTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHZlcnRpY2FsOiBib29sZWFuLFxuICAgIHNjYWxlOiBudW1iZXIsXG4gICAgZm9udFN0YWNrOiBzdHJpbmcsXG4gICAgc2VjdGlvbkluZGV4OiBudW1iZXIsXG4gICAgbWV0cmljczogR2x5cGhNZXRyaWNzLFxuICAgIHJlY3Q6IFJlY3QgfCBudWxsXG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmVkTGluZSA9IHtcbiAgICBwb3NpdGlvbmVkR2x5cGhzOiBBcnJheTxQb3NpdGlvbmVkR2x5cGg+LFxuICAgIGxpbmVPZmZzZXQ6IG51bWJlclxufTtcblxuLy8gQSBjb2xsZWN0aW9uIG9mIHBvc2l0aW9uZWQgZ2x5cGhzIGFuZCBzb21lIG1ldGFkYXRhXG5leHBvcnQgdHlwZSBTaGFwaW5nID0ge1xuICAgIHBvc2l0aW9uZWRMaW5lczogQXJyYXk8UG9zaXRpb25lZExpbmU+LFxuICAgIHRvcDogbnVtYmVyLFxuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICByaWdodDogbnVtYmVyLFxuICAgIHdyaXRpbmdNb2RlOiAxIHwgMixcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgaWNvbnNJblRleHQ6IGJvb2xlYW4sXG4gICAgdmVydGljYWxpemFibGU6IGJvb2xlYW5cbn07XG5cbmZ1bmN0aW9uIGlzRW1wdHkocG9zaXRpb25lZExpbmVzOiBBcnJheTxQb3NpdGlvbmVkTGluZT4pIHtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcG9zaXRpb25lZExpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnBvc2l0aW9uZWRHbHlwaHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEFuY2hvciA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG5leHBvcnQgdHlwZSBUZXh0SnVzdGlmeSA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuLy8gTWF4IG51bWJlciBvZiBpbWFnZXMgaW4gbGFiZWwgaXMgNjQwMSBVK0UwMDDDosKAwpNVK0Y4RkYgdGhhdCBjb3ZlcnNcbi8vIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSBVbmljb2RlIFByaXZhdGUgVXNlIEFyZWEgKFBVQSkuXG5jb25zdCBQVUFiZWdpbiA9IDB4RTAwMDtcbmNvbnN0IFBVQWVuZCA9IDB4RjhGRjtcblxuY2xhc3MgU2VjdGlvbk9wdGlvbnMge1xuICAgIC8vIFRleHQgb3B0aW9uc1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgZm9udFN0YWNrOiBzdHJpbmc7XG4gICAgLy8gSW1hZ2Ugb3B0aW9uc1xuICAgIGltYWdlTmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNjYWxlID0gMS4wO1xuICAgICAgICB0aGlzLmZvbnRTdGFjayA9IFwiXCI7XG4gICAgICAgIHRoaXMuaW1hZ2VOYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yVGV4dChzY2FsZTogbnVtYmVyIHwgbnVsbCwgZm9udFN0YWNrOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGV4dE9wdGlvbnMgPSBuZXcgU2VjdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgdGV4dE9wdGlvbnMuc2NhbGUgPSBzY2FsZSB8fCAxO1xuICAgICAgICB0ZXh0T3B0aW9ucy5mb250U3RhY2sgPSBmb250U3RhY2s7XG4gICAgICAgIHJldHVybiB0ZXh0T3B0aW9ucztcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ySW1hZ2UoaW1hZ2VOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VPcHRpb25zID0gbmV3IFNlY3Rpb25PcHRpb25zKCk7XG4gICAgICAgIGltYWdlT3B0aW9ucy5pbWFnZU5hbWUgPSBpbWFnZU5hbWU7XG4gICAgICAgIHJldHVybiBpbWFnZU9wdGlvbnM7XG4gICAgfVxuXG59XG5cbmNsYXNzIFRhZ2dlZFN0cmluZyB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHNlY3Rpb25JbmRleDogQXJyYXk8bnVtYmVyPiAvLyBtYXBzIGVhY2ggY2hhcmFjdGVyIGluICd0ZXh0JyB0byBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBpbiAnc2VjdGlvbnMnXG4gICAgc2VjdGlvbnM6IEFycmF5PFNlY3Rpb25PcHRpb25zPlxuICAgIGltYWdlU2VjdGlvbklEOiBudW1iZXIgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gW107XG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbWFnZVNlY3Rpb25JRCA9IG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21GZWF0dXJlKHRleHQ6IEZvcm1hdHRlZCwgZGVmYXVsdEZvbnRTdGFjazogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0LnNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGV4dC5zZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5pbWFnZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRUZXh0U2VjdGlvbihzZWN0aW9uLCBkZWZhdWx0Rm9udFN0YWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZEltYWdlU2VjdGlvbihzZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uKGluZGV4OiBudW1iZXIpOiBTZWN0aW9uT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25zW3RoaXMuc2VjdGlvbkluZGV4W2luZGV4XV07XG4gICAgfVxuXG4gICAgZ2V0U2VjdGlvbkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXhbaW5kZXhdO1xuICAgIH1cblxuICAgIGdldENoYXJDb2RlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0LmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIHZlcnRpY2FsaXplUHVuY3R1YXRpb24oKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHZlcnRpY2FsaXplUHVuY3R1YXRpb24odGhpcy50ZXh0KTtcbiAgICB9XG5cbiAgICB0cmltKCkge1xuICAgICAgICBsZXQgYmVnaW5uaW5nV2hpdGVzcGFjZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwO1xuICAgICAgICAgICAgaSA8IHRoaXMudGV4dC5sZW5ndGggJiYgd2hpdGVzcGFjZVt0aGlzLnRleHQuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICBpKyspIHtcbiAgICAgICAgICAgIGJlZ2lubmluZ1doaXRlc3BhY2UrKztcbiAgICAgICAgfVxuICAgICAgICBsZXQgdHJhaWxpbmdXaGl0ZXNwYWNlID0gdGhpcy50ZXh0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMudGV4dC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaSA+PSAwICYmIGkgPj0gYmVnaW5uaW5nV2hpdGVzcGFjZSAmJiB3aGl0ZXNwYWNlW3RoaXMudGV4dC5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgIGktLSkge1xuICAgICAgICAgICAgdHJhaWxpbmdXaGl0ZXNwYWNlLS07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdXaGl0ZXNwYWNlLCB0cmFpbGluZ1doaXRlc3BhY2UpO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IHRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKGJlZ2lubmluZ1doaXRlc3BhY2UsIHRyYWlsaW5nV2hpdGVzcGFjZSk7XG4gICAgfVxuXG4gICAgc3Vic3RyaW5nKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogVGFnZ2VkU3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3Vic3RyaW5nID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICBzdWJzdHJpbmcudGV4dCA9IHRoaXMudGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gICAgICAgIHN1YnN0cmluZy5zZWN0aW9uSW5kZXggPSB0aGlzLnNlY3Rpb25JbmRleC5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgICAgc3Vic3RyaW5nLnNlY3Rpb25zID0gdGhpcy5zZWN0aW9ucztcbiAgICAgICAgcmV0dXJuIHN1YnN0cmluZztcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cblxuICAgIGdldE1heFNjYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXgucmVkdWNlKChtYXgsIGluZGV4KSA9PiBNYXRoLm1heChtYXgsIHRoaXMuc2VjdGlvbnNbaW5kZXhdLnNjYWxlKSwgMCk7XG4gICAgfVxuXG4gICAgYWRkVGV4dFNlY3Rpb24oc2VjdGlvbjogRm9ybWF0dGVkU2VjdGlvbiwgZGVmYXVsdEZvbnRTdGFjazogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudGV4dCArPSBzZWN0aW9uLnRleHQ7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaChTZWN0aW9uT3B0aW9ucy5mb3JUZXh0KHNlY3Rpb24uc2NhbGUsIHNlY3Rpb24uZm9udFN0YWNrIHx8IGRlZmF1bHRGb250U3RhY2spKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlY3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbi50ZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25JbmRleC5wdXNoKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEltYWdlU2VjdGlvbihzZWN0aW9uOiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IHNlY3Rpb24uaW1hZ2UgPyBzZWN0aW9uLmltYWdlLm5hbWUgOiAnJztcbiAgICAgICAgaWYgKGltYWdlTmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGBDYW4ndCBhZGQgRm9ybWF0dGVkU2VjdGlvbiB3aXRoIGFuIGVtcHR5IGltYWdlLmApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlID0gdGhpcy5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTtcbiAgICAgICAgaWYgKCFuZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGBSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyAke1BVQWVuZCAtIFBVQWJlZ2luICsgMn1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaChTZWN0aW9uT3B0aW9ucy5mb3JJbWFnZShpbWFnZU5hbWUpKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXgucHVzaCh0aGlzLnNlY3Rpb25zLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGdldE5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlU2VjdGlvbklEKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlU2VjdGlvbklEID0gUFVBYmVnaW47XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVNlY3Rpb25JRDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlU2VjdGlvbklEID49IFBVQWVuZCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiArK3RoaXMuaW1hZ2VTZWN0aW9uSUQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBicmVha0xpbmVzKGlucHV0OiBUYWdnZWRTdHJpbmcsIGxpbmVCcmVha1BvaW50czogQXJyYXk8bnVtYmVyPik6IEFycmF5PFRhZ2dlZFN0cmluZz4ge1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgY29uc3QgdGV4dCA9IGlucHV0LnRleHQ7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGxpbmVCcmVhayBvZiBsaW5lQnJlYWtQb2ludHMpIHtcbiAgICAgICAgbGluZXMucHVzaChpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIGxpbmVCcmVhaykpO1xuICAgICAgICBzdGFydCA9IGxpbmVCcmVhaztcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICBsaW5lcy5wdXNoKGlucHV0LnN1YnN0cmluZyhzdGFydCwgdGV4dC5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzO1xufVxuXG5mdW5jdGlvbiBzaGFwZVRleHQodGV4dDogRm9ybWF0dGVkLFxuICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczoge1tzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICBkZWZhdWx0Rm9udFN0YWNrOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dEFuY2hvcjogU3ltYm9sQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgIHRleHRKdXN0aWZ5OiBUZXh0SnVzdGlmeSxcbiAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiAxIHwgMixcbiAgICAgICAgICAgICAgICAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIHN5bWJvbFBsYWNlbWVudDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemVUaGlzWm9vbTogbnVtYmVyKTogU2hhcGluZyB8IGZhbHNlIHtcbiAgICBjb25zdCBsb2dpY2FsSW5wdXQgPSBUYWdnZWRTdHJpbmcuZnJvbUZlYXR1cmUodGV4dCwgZGVmYXVsdEZvbnRTdGFjayk7XG5cbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgIGxvZ2ljYWxJbnB1dC52ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCk7XG4gICAgfVxuXG4gICAgbGV0IGxpbmVzOiBBcnJheTxUYWdnZWRTdHJpbmc+O1xuXG4gICAgY29uc3Qge3Byb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCwgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0fSA9IHJ0bFRleHRQbHVnaW47XG4gICAgaWYgKHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCAmJiBsb2dpY2FsSW5wdXQuc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIEJpZGkgZG9lc24ndCBoYXZlIHRvIGJlIHN0eWxlLWF3YXJlXG4gICAgICAgIGxpbmVzID0gW107XG4gICAgICAgIGNvbnN0IHVudGFnZ2VkTGluZXMgPVxuICAgICAgICAgICAgcHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0KGxvZ2ljYWxJbnB1dC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplKSk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB1bnRhZ2dlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdnZWRMaW5lID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS50ZXh0ID0gbGluZTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbnMgPSBsb2dpY2FsSW5wdXQuc2VjdGlvbnM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25JbmRleC5wdXNoKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZXMucHVzaCh0YWdnZWRMaW5lKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0KSB7XG4gICAgICAgIC8vIE5lZWQgdmVyc2lvbiBvZiBtYXBib3gtZ2wtcnRsLXRleHQgd2l0aCBzdHlsZSBzdXBwb3J0IGZvciBjb21iaW5pbmcgUlRMIHRleHRcbiAgICAgICAgLy8gd2l0aCBmb3JtYXR0aW5nXG4gICAgICAgIGxpbmVzID0gW107XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZExpbmVzID1cbiAgICAgICAgICAgIHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dChsb2dpY2FsSW5wdXQudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSW5wdXQuc2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplKSk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBwcm9jZXNzZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmVbMF07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25JbmRleCA9IGxpbmVbMV07XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgbGluZXMucHVzaCh0YWdnZWRMaW5lKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVzID0gYnJlYWtMaW5lcyhsb2dpY2FsSW5wdXQsIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb25lZExpbmVzID0gW107XG4gICAgY29uc3Qgc2hhcGluZyA9IHtcbiAgICAgICAgcG9zaXRpb25lZExpbmVzLFxuICAgICAgICB0ZXh0OiBsb2dpY2FsSW5wdXQudG9TdHJpbmcoKSxcbiAgICAgICAgdG9wOiB0cmFuc2xhdGVbMV0sXG4gICAgICAgIGJvdHRvbTogdHJhbnNsYXRlWzFdLFxuICAgICAgICBsZWZ0OiB0cmFuc2xhdGVbMF0sXG4gICAgICAgIHJpZ2h0OiB0cmFuc2xhdGVbMF0sXG4gICAgICAgIHdyaXRpbmdNb2RlLFxuICAgICAgICBpY29uc0luVGV4dDogZmFsc2UsXG4gICAgICAgIHZlcnRpY2FsaXphYmxlOiBmYWxzZVxuICAgIH07XG5cbiAgICBzaGFwZUxpbmVzKHNoYXBpbmcsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGxpbmVzLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLCB0ZXh0SnVzdGlmeSwgd3JpdGluZ01vZGUsIHNwYWNpbmcsIGFsbG93VmVydGljYWxQbGFjZW1lbnQsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgIGlmIChpc0VtcHR5KHBvc2l0aW9uZWRMaW5lcykpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzaGFwaW5nO1xufVxuXG4vLyB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMzgwXG4vKiBlc2xpbnQgbm8tdXNlbGVzcy1jb21wdXRlZC1rZXk6IDAgKi9cblxuY29uc3Qgd2hpdGVzcGFjZToge1tudW1iZXJdOiBib29sZWFufSA9IHtcbiAgICBbMHgwOV06IHRydWUsIC8vIHRhYlxuICAgIFsweDBhXTogdHJ1ZSwgLy8gbmV3bGluZVxuICAgIFsweDBiXTogdHJ1ZSwgLy8gdmVydGljYWwgdGFiXG4gICAgWzB4MGNdOiB0cnVlLCAvLyBmb3JtIGZlZWRcbiAgICBbMHgwZF06IHRydWUsIC8vIGNhcnJpYWdlIHJldHVyblxuICAgIFsweDIwXTogdHJ1ZSwgLy8gc3BhY2Vcbn07XG5cbmNvbnN0IGJyZWFrYWJsZToge1tudW1iZXJdOiBib29sZWFufSA9IHtcbiAgICBbMHgwYV06ICAgdHJ1ZSwgLy8gbmV3bGluZVxuICAgIFsweDIwXTogICB0cnVlLCAvLyBzcGFjZVxuICAgIFsweDI2XTogICB0cnVlLCAvLyBhbXBlcnNhbmRcbiAgICBbMHgyOF06ICAgdHJ1ZSwgLy8gbGVmdCBwYXJlbnRoZXNpc1xuICAgIFsweDI5XTogICB0cnVlLCAvLyByaWdodCBwYXJlbnRoZXNpc1xuICAgIFsweDJiXTogICB0cnVlLCAvLyBwbHVzIHNpZ25cbiAgICBbMHgyZF06ICAgdHJ1ZSwgLy8gaHlwaGVuLW1pbnVzXG4gICAgWzB4MmZdOiAgIHRydWUsIC8vIHNvbGlkdXNcbiAgICBbMHhhZF06ICAgdHJ1ZSwgLy8gc29mdCBoeXBoZW5cbiAgICBbMHhiN106ICAgdHJ1ZSwgLy8gbWlkZGxlIGRvdFxuICAgIFsweDIwMGJdOiB0cnVlLCAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgWzB4MjAxMF06IHRydWUsIC8vIGh5cGhlblxuICAgIFsweDIwMTNdOiB0cnVlLCAvLyBlbiBkYXNoXG4gICAgWzB4MjAyN106IHRydWUgIC8vIGludGVycHVuY3RcbiAgICAvLyBNYW55IG90aGVyIGNoYXJhY3RlcnMgbWF5IGJlIHJlYXNvbmFibGUgYnJlYWtwb2ludHNcbiAgICAvLyBDb25zaWRlciBcIm5ldXRyYWwgb3JpZW50YXRpb25cIiBjaGFyYWN0ZXJzIGF0IHNjcmlwdERldGVjdGlvbi5jaGFySGFzTmV1dHJhbFZlcnRpY2FsT3JpZW50YXRpb25cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM2NThcbn07XG5cbmZ1bmN0aW9uIGdldEdseXBoQWR2YW5jZShjb2RlUG9pbnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBTZWN0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghc2VjdGlvbi5pbWFnZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZ2x5cGhNYXBbc2VjdGlvbi5mb250U3RhY2tdO1xuICAgICAgICBjb25zdCBnbHlwaCA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcbiAgICAgICAgaWYgKCFnbHlwaCkgcmV0dXJuIDA7XG4gICAgICAgIHJldHVybiBnbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbWFnZVBvc2l0aW9uID0gaW1hZ2VQb3NpdGlvbnNbc2VjdGlvbi5pbWFnZU5hbWVdO1xuICAgICAgICBpZiAoIWltYWdlUG9zaXRpb24pIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gaW1hZ2VQb3NpdGlvbi5kaXNwbGF5U2l6ZVswXSAqIHNlY3Rpb24uc2NhbGUgKiBPTkVfRU0gLyBsYXlvdXRUZXh0U2l6ZSArIHNwYWNpbmc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVBdmVyYWdlTGluZVdpZHRoKGxvZ2ljYWxJbnB1dDogVGFnZ2VkU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W3N0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbG9naWNhbElucHV0Lmxlbmd0aCgpOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsb2dpY2FsSW5wdXQuZ2V0U2VjdGlvbihpbmRleCk7XG4gICAgICAgIHRvdGFsV2lkdGggKz0gZ2V0R2x5cGhBZHZhbmNlKGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpbmRleCksIHNlY3Rpb24sIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3BhY2luZywgbGF5b3V0VGV4dFNpemUpO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVDb3VudCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0b3RhbFdpZHRoIC8gbWF4V2lkdGgpKTtcbiAgICByZXR1cm4gdG90YWxXaWR0aCAvIGxpbmVDb3VudDtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlQmFkbmVzcyhsaW5lV2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RCcmVhazogYm9vbGVhbikge1xuICAgIGNvbnN0IHJhZ2dlZG5lc3MgPSBNYXRoLnBvdyhsaW5lV2lkdGggLSB0YXJnZXRXaWR0aCwgMik7XG4gICAgaWYgKGlzTGFzdEJyZWFrKSB7XG4gICAgICAgIC8vIEZhdm9yIGZpbmFscyBsaW5lcyBzaG9ydGVyIHRoYW4gYXZlcmFnZSBvdmVyIGxvbmdlciB0aGFuIGF2ZXJhZ2VcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA8IHRhcmdldFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFnZ2VkbmVzcyAvIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmFnZ2VkbmVzcyAqIDI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmFnZ2VkbmVzcyArIE1hdGguYWJzKHBlbmFsdHkpICogcGVuYWx0eTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlUGVuYWx0eShjb2RlUG9pbnQ6IG51bWJlciwgbmV4dENvZGVQb2ludDogbnVtYmVyLCBwZW5hbGl6YWJsZUlkZW9ncmFwaGljQnJlYWs6IGJvb2xlYW4pIHtcbiAgICBsZXQgcGVuYWx0eSA9IDA7XG4gICAgLy8gRm9yY2UgYnJlYWsgb24gbmV3bGluZVxuICAgIGlmIChjb2RlUG9pbnQgPT09IDB4MGEpIHtcbiAgICAgICAgcGVuYWx0eSAtPSAxMDAwMDtcbiAgICB9XG4gICAgLy8gUGVuYWxpemUgYnJlYWtzIGJldHdlZW4gY2hhcmFjdGVycyB0aGF0IGFsbG93IGlkZW9ncmFwaGljIGJyZWFraW5nIGJlY2F1c2VcbiAgICAvLyB0aGV5IGFyZSBsZXNzIHByZWZlcmFibGUgdGhhbiBicmVha3MgYXQgc3BhY2VzIChvciB6ZXJvIHdpZHRoIHNwYWNlcykuXG4gICAgaWYgKHBlbmFsaXphYmxlSWRlb2dyYXBoaWNCcmVhaykge1xuICAgICAgICBwZW5hbHR5ICs9IDE1MDtcbiAgICB9XG5cbiAgICAvLyBQZW5hbGl6ZSBvcGVuIHBhcmVudGhlc2lzIGF0IGVuZCBvZiBsaW5lXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gMHgyOCB8fCBjb2RlUG9pbnQgPT09IDB4ZmYwOCkge1xuICAgICAgICBwZW5hbHR5ICs9IDUwO1xuICAgIH1cblxuICAgIC8vIFBlbmFsaXplIGNsb3NlIHBhcmVudGhlc2lzIGF0IGJlZ2lubmluZyBvZiBsaW5lXG4gICAgaWYgKG5leHRDb2RlUG9pbnQgPT09IDB4MjkgfHwgbmV4dENvZGVQb2ludCA9PT0gMHhmZjA5KSB7XG4gICAgICAgIHBlbmFsdHkgKz0gNTA7XG4gICAgfVxuICAgIHJldHVybiBwZW5hbHR5O1xufVxuXG50eXBlIEJyZWFrID0ge1xuICAgIGluZGV4OiBudW1iZXIsXG4gICAgeDogbnVtYmVyLFxuICAgIHByaW9yQnJlYWs6ID9CcmVhayxcbiAgICBiYWRuZXNzOiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIGV2YWx1YXRlQnJlYWsoYnJlYWtJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBicmVha1g6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsQnJlYWtzOiBBcnJheTxCcmVhaz4sXG4gICAgICAgICAgICAgICAgICAgICAgIHBlbmFsdHk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0QnJlYWs6IGJvb2xlYW4pOiBCcmVhayB7XG4gICAgLy8gV2UgY291bGQgc2tpcCBldmFsdWF0aW5nIGJyZWFrcyB3aGVyZSB0aGUgbGluZSBsZW5ndGggKGJyZWFrWCAtIHByaW9yQnJlYWsueCkgPiBtYXhXaWR0aFxuICAgIC8vICAuLi5idXQgaW4gZmFjdCB3ZSBhbGxvdyBsaW5lcyBsb25nZXIgdGhhbiBtYXhXaWR0aCAoaWYgdGhlcmUncyBubyBicmVhayBwb2ludHMpXG4gICAgLy8gIC4uLmFuZCB3aGVuIHRhcmdldFdpZHRoIGFuZCBtYXhXaWR0aCBhcmUgY2xvc2UsIHN0cmljdGx5IGVuZm9yY2luZyBtYXhXaWR0aCBjYW4gZ2l2ZVxuICAgIC8vICAgICBtb3JlIGxvcHNpZGVkIHJlc3VsdHMuXG5cbiAgICBsZXQgYmVzdFByaW9yQnJlYWs6ID9CcmVhayA9IG51bGw7XG4gICAgbGV0IGJlc3RCcmVha0JhZG5lc3MgPSBjYWxjdWxhdGVCYWRuZXNzKGJyZWFrWCwgdGFyZ2V0V2lkdGgsIHBlbmFsdHksIGlzTGFzdEJyZWFrKTtcblxuICAgIGZvciAoY29uc3QgcG90ZW50aWFsQnJlYWsgb2YgcG90ZW50aWFsQnJlYWtzKSB7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IGJyZWFrWCAtIHBvdGVudGlhbEJyZWFrLng7XG4gICAgICAgIGNvbnN0IGJyZWFrQmFkbmVzcyA9XG4gICAgICAgICAgICBjYWxjdWxhdGVCYWRuZXNzKGxpbmVXaWR0aCwgdGFyZ2V0V2lkdGgsIHBlbmFsdHksIGlzTGFzdEJyZWFrKSArIHBvdGVudGlhbEJyZWFrLmJhZG5lc3M7XG4gICAgICAgIGlmIChicmVha0JhZG5lc3MgPD0gYmVzdEJyZWFrQmFkbmVzcykge1xuICAgICAgICAgICAgYmVzdFByaW9yQnJlYWsgPSBwb3RlbnRpYWxCcmVhaztcbiAgICAgICAgICAgIGJlc3RCcmVha0JhZG5lc3MgPSBicmVha0JhZG5lc3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleDogYnJlYWtJbmRleCxcbiAgICAgICAgeDogYnJlYWtYLFxuICAgICAgICBwcmlvckJyZWFrOiBiZXN0UHJpb3JCcmVhayxcbiAgICAgICAgYmFkbmVzczogYmVzdEJyZWFrQmFkbmVzc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGxlYXN0QmFkQnJlYWtzKGxhc3RMaW5lQnJlYWs6ID9CcmVhayk6IEFycmF5PG51bWJlcj4ge1xuICAgIGlmICghbGFzdExpbmVCcmVhaykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBsZWFzdEJhZEJyZWFrcyhsYXN0TGluZUJyZWFrLnByaW9yQnJlYWspLmNvbmNhdChsYXN0TGluZUJyZWFrLmluZGV4KTtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQ6IFRhZ2dlZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xQbGFjZW1lbnQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcik6IEFycmF5PG51bWJlcj4ge1xuICAgIGlmIChzeW1ib2xQbGFjZW1lbnQgIT09ICdwb2ludCcpXG4gICAgICAgIHJldHVybiBbXTtcblxuICAgIGlmICghbG9naWNhbElucHV0KVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICBjb25zdCBwb3RlbnRpYWxMaW5lQnJlYWtzID0gW107XG4gICAgY29uc3QgdGFyZ2V0V2lkdGggPSBkZXRlcm1pbmVBdmVyYWdlTGluZVdpZHRoKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgbGF5b3V0VGV4dFNpemUpO1xuXG4gICAgY29uc3QgaGFzU2VydmVyU3VnZ2VzdGVkQnJlYWtwb2ludHMgPSBsb2dpY2FsSW5wdXQudGV4dC5pbmRleE9mKFwiXFx1MjAwYlwiKSA+PSAwO1xuXG4gICAgbGV0IGN1cnJlbnRYID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9naWNhbElucHV0Lmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGxvZ2ljYWxJbnB1dC5nZXRTZWN0aW9uKGkpO1xuICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSBsb2dpY2FsSW5wdXQuZ2V0Q2hhckNvZGUoaSk7XG4gICAgICAgIGlmICghd2hpdGVzcGFjZVtjb2RlUG9pbnRdKSBjdXJyZW50WCArPSBnZXRHbHlwaEFkdmFuY2UoY29kZVBvaW50LCBzZWN0aW9uLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHNwYWNpbmcsIGxheW91dFRleHRTaXplKTtcblxuICAgICAgICAvLyBJZGVvZ3JhcGhpYyBjaGFyYWN0ZXJzLCBzcGFjZXMsIGFuZCB3b3JkLWJyZWFraW5nIHB1bmN0dWF0aW9uIHRoYXQgb2Z0ZW4gYXBwZWFyIHdpdGhvdXRcbiAgICAgICAgLy8gc3Vycm91bmRpbmcgc3BhY2VzLlxuICAgICAgICBpZiAoKGkgPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCkgLSAxKSkge1xuICAgICAgICAgICAgY29uc3QgaWRlb2dyYXBoaWNCcmVhayA9IGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNvZGVQb2ludCk7XG4gICAgICAgICAgICBpZiAoYnJlYWthYmxlW2NvZGVQb2ludF0gfHwgaWRlb2dyYXBoaWNCcmVhayB8fCBzZWN0aW9uLmltYWdlTmFtZSkge1xuXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsTGluZUJyZWFrcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZUJyZWFrKFxuICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsTGluZUJyZWFrcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBlbmFsdHkoY29kZVBvaW50LCBsb2dpY2FsSW5wdXQuZ2V0Q2hhckNvZGUoaSArIDEpLCBpZGVvZ3JhcGhpY0JyZWFrICYmIGhhc1NlcnZlclN1Z2dlc3RlZEJyZWFrcG9pbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGVhc3RCYWRCcmVha3MoXG4gICAgICAgIGV2YWx1YXRlQnJlYWsoXG4gICAgICAgICAgICBsb2dpY2FsSW5wdXQubGVuZ3RoKCksXG4gICAgICAgICAgICBjdXJyZW50WCxcbiAgICAgICAgICAgIHRhcmdldFdpZHRoLFxuICAgICAgICAgICAgcG90ZW50aWFsTGluZUJyZWFrcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0cnVlKSk7XG59XG5cbmZ1bmN0aW9uIGdldEFuY2hvckFsaWdubWVudChhbmNob3I6IFN5bWJvbEFuY2hvcikge1xuICAgIGxldCBob3Jpem9udGFsQWxpZ24gPSAwLjUsIHZlcnRpY2FsQWxpZ24gPSAwLjU7XG5cbiAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGhvcml6b250YWxBbGlnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIGhvcml6b250YWxBbGlnbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgdmVydGljYWxBbGlnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHZlcnRpY2FsQWxpZ24gPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn07XG59XG5cbmZ1bmN0aW9uIHNoYXBlTGluZXMoc2hhcGluZzogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczoge1tzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzOiBBcnJheTxUYWdnZWRTdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbmNob3I6IFN5bWJvbEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZTogMSB8IDIsXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemVUaGlzWm9vbTogbnVtYmVyKSB7XG5cbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUO1xuXG4gICAgbGV0IG1heExpbmVMZW5ndGggPSAwO1xuICAgIGxldCBtYXhMaW5lSGVpZ2h0ID0gMDtcblxuICAgIGNvbnN0IGp1c3RpZnkgPVxuICAgICAgICB0ZXh0SnVzdGlmeSA9PT0gJ3JpZ2h0JyA/IDEgOlxuICAgICAgICB0ZXh0SnVzdGlmeSA9PT0gJ2xlZnQnID8gMCA6IDAuNTtcblxuICAgIGxldCBsaW5lSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBsaW5lLnRyaW0oKTtcblxuICAgICAgICBjb25zdCBsaW5lTWF4U2NhbGUgPSBsaW5lLmdldE1heFNjYWxlKCk7XG4gICAgICAgIGNvbnN0IG1heExpbmVPZmZzZXQgPSAobGluZU1heFNjYWxlIC0gMSkgKiBPTkVfRU07XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uZWRMaW5lID0ge3Bvc2l0aW9uZWRHbHlwaHM6IFtdLCBsaW5lT2Zmc2V0OiAwfTtcbiAgICAgICAgc2hhcGluZy5wb3NpdGlvbmVkTGluZXNbbGluZUluZGV4XSA9IHBvc2l0aW9uZWRMaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmVkR2x5cGhzID0gcG9zaXRpb25lZExpbmUucG9zaXRpb25lZEdseXBocztcbiAgICAgICAgbGV0IGxpbmVPZmZzZXQgPSAwLjA7XG5cbiAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCgpKSB7XG4gICAgICAgICAgICB5ICs9IGxpbmVIZWlnaHQ7IC8vIFN0aWxsIG5lZWQgYSBsaW5lIGZlZWQgYWZ0ZXIgZW1wdHkgbGluZVxuICAgICAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGgoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gbGluZS5nZXRTZWN0aW9uKGkpO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gbGluZS5nZXRTZWN0aW9uSW5kZXgoaSk7XG4gICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSBsaW5lLmdldENoYXJDb2RlKGkpO1xuICAgICAgICAgICAgbGV0IGJhc2VsaW5lT2Zmc2V0ID0gMC4wO1xuICAgICAgICAgICAgbGV0IG1ldHJpY3MgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlY3QgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGltYWdlTmFtZSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdmVydGljYWxBZHZhbmNlID0gT05FX0VNO1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWwgPSAhKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsIHx8XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgdmVydGljYWxpemUgZ2x5cGhzIHRoYXQgaGF2ZSBubyB1cHJpZ2h0IG9yaWVudGF0aW9uIGlmIHZlcnRpY2FsIHBsYWNlbWVudCBpcyBkaXNhYmxlZC5cbiAgICAgICAgICAgICAgICAoIWFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIWNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjb2RlUG9pbnQpKSB8fFxuICAgICAgICAgICAgICAgIC8vIElmIHZlcnRpY2FsIHBsYWNlbWVudCBpcyBlbmFibGVkLCBkb24ndCB2ZXJ0aWNhbGl6ZSBnbHlwaHMgdGhhdFxuICAgICAgICAgICAgICAgIC8vIGFyZSBmcm9tIGNvbXBsZXggdGV4dCBsYXlvdXQgc2NyaXB0LCBvciB3aGl0ZXNwYWNlcy5cbiAgICAgICAgICAgICAgICAoYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiAod2hpdGVzcGFjZVtjb2RlUG9pbnRdIHx8IGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0KGNvZGVQb2ludCkpKSk7XG5cbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaFBvc2l0aW9uc1tzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgICAgICAgICAgY29uc3QgZ2x5cGhQb3NpdGlvbiA9IHBvc2l0aW9ucyAmJiBwb3NpdGlvbnNbY29kZVBvaW50XTtcbiAgICAgICAgICAgICAgICBpZiAoZ2x5cGhQb3NpdGlvbiAmJiBnbHlwaFBvc2l0aW9uLnJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdCA9IGdseXBoUG9zaXRpb24ucmVjdDtcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljcyA9IGdseXBoUG9zaXRpb24ubWV0cmljcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBnbHlwaE1hcFtzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoID0gZ2x5cGhzICYmIGdseXBoc1tjb2RlUG9pbnRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWdseXBoKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljcyA9IGdseXBoLm1ldHJpY3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYmFzZWxpbmUsIGJ1dCBzaW5jZSB3ZSdyZSBsYXlpbmcgb3V0XG4gICAgICAgICAgICAgICAgLy8gYXQgMjQgcG9pbnRzLCB3ZSBjYW4gY2FsY3VsYXRlIGhvdyBtdWNoIGl0IHdpbGwgbW92ZSB3aGVuXG4gICAgICAgICAgICAgICAgLy8gd2Ugc2NhbGUgdXAgb3IgZG93bi5cbiAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldCA9IChsaW5lTWF4U2NhbGUgLSBzZWN0aW9uLnNjYWxlKSAqIE9ORV9FTTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VQb3NpdGlvbiA9IGltYWdlUG9zaXRpb25zW3NlY3Rpb24uaW1hZ2VOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoIWltYWdlUG9zaXRpb24pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGltYWdlTmFtZSA9IHNlY3Rpb24uaW1hZ2VOYW1lO1xuICAgICAgICAgICAgICAgIHNoYXBpbmcuaWNvbnNJblRleHQgPSBzaGFwaW5nLmljb25zSW5UZXh0IHx8IHRydWU7XG4gICAgICAgICAgICAgICAgcmVjdCA9IGltYWdlUG9zaXRpb24ucGFkZGVkUmVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gaW1hZ2VQb3NpdGlvbi5kaXNwbGF5U2l6ZTtcbiAgICAgICAgICAgICAgICAvLyBJZiBuZWVkZWQsIGFsbG93IHRvIHNldCBzY2FsZSBmYWN0b3IgZm9yIGFuIGltYWdlIHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gYWxpYXMgXCJpbWFnZS1zY2FsZVwiIHRoYXQgY291bGQgYmUgYWxpYXMgZm9yIFwiZm9udC1zY2FsZVwiXG4gICAgICAgICAgICAgICAgLy8gd2hlbiBGb3JtYXR0ZWRTZWN0aW9uIGlzIGFuIGltYWdlIHNlY3Rpb24uXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5zY2FsZSA9IHNlY3Rpb24uc2NhbGUgKiBPTkVfRU0gLyBsYXlvdXRUZXh0U2l6ZVRoaXNab29tO1xuXG4gICAgICAgICAgICAgICAgbWV0cmljcyA9IHt3aWR0aDogc2l6ZVswXSxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplWzFdLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IC1HTFlQSF9QQkZfQk9SREVSLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlOiB2ZXJ0aWNhbCA/IHNpemVbMV0gOiBzaXplWzBdfTtcblxuICAgICAgICAgICAgICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiBvbmUgRU0gYW5kIGFuIGltYWdlIHNpemUuXG4gICAgICAgICAgICAgICAgLy8gQWxpZ25zIGJvdHRvbSBvZiBhbiBpbWFnZSB0byBhIGJhc2VsaW5lIGxldmVsLlxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlT2Zmc2V0ID0gT05FX0VNIC0gc2l6ZVsxXSAqIHNlY3Rpb24uc2NhbGU7XG4gICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXQgPSBtYXhMaW5lT2Zmc2V0ICsgaW1hZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdmVydGljYWxBZHZhbmNlID0gbWV0cmljcy5hZHZhbmNlO1xuXG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIGhlaWdodCBvZiBhbiBpbWFnZSBhbmQgb25lIEVNIGF0IG1heCBsaW5lIHNjYWxlLlxuICAgICAgICAgICAgICAgIC8vIFB1c2hlcyBjdXJyZW50IGxpbmUgZG93biBpZiBhbiBpbWFnZSBzaXplIGlzIG92ZXIgMSBFTSBhdCBtYXggbGluZSBzY2FsZS5cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB2ZXJ0aWNhbCA/IHNpemVbMF0gKiBzZWN0aW9uLnNjYWxlIC0gT05FX0VNICogbGluZU1heFNjYWxlIDpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZVsxXSAqIHNlY3Rpb24uc2NhbGUgLSBPTkVfRU0gKiBsaW5lTWF4U2NhbGU7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID4gbGluZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uZWRHbHlwaHMucHVzaCh7Z2x5cGg6IGNvZGVQb2ludCwgaW1hZ2VOYW1lLCB4LCB5OiB5ICsgYmFzZWxpbmVPZmZzZXQsIHZlcnRpY2FsLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4LCBtZXRyaWNzLCByZWN0fSk7XG4gICAgICAgICAgICAgICAgeCArPSBtZXRyaWNzLmFkdmFuY2UgKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hhcGluZy52ZXJ0aWNhbGl6YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZEdseXBocy5wdXNoKHtnbHlwaDogY29kZVBvaW50LCBpbWFnZU5hbWUsIHgsIHk6IHkgKyBiYXNlbGluZU9mZnNldCwgdmVydGljYWwsIHNjYWxlOiBzZWN0aW9uLnNjYWxlLCBmb250U3RhY2s6IHNlY3Rpb24uZm9udFN0YWNrLCBzZWN0aW9uSW5kZXgsIG1ldHJpY3MsIHJlY3R9KTtcbiAgICAgICAgICAgICAgICB4ICs9IHZlcnRpY2FsQWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBqdXN0aWZ5IGlmIHdlIHBsYWNlZCBhdCBsZWFzdCBvbmUgZ2x5cGhcbiAgICAgICAgaWYgKHBvc2l0aW9uZWRHbHlwaHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0geCAtIHNwYWNpbmc7XG4gICAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gTWF0aC5tYXgobGluZUxlbmd0aCwgbWF4TGluZUxlbmd0aCk7XG4gICAgICAgICAgICBqdXN0aWZ5TGluZShwb3NpdGlvbmVkR2x5cGhzLCAwLCBwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAtIDEsIGp1c3RpZnksIGxpbmVPZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgeCA9IDA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lSGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVNYXhTY2FsZSArIGxpbmVPZmZzZXQ7XG4gICAgICAgIHBvc2l0aW9uZWRMaW5lLmxpbmVPZmZzZXQgPSBNYXRoLm1heChsaW5lT2Zmc2V0LCBtYXhMaW5lT2Zmc2V0KTtcbiAgICAgICAgeSArPSBjdXJyZW50TGluZUhlaWdodDtcbiAgICAgICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KGN1cnJlbnRMaW5lSGVpZ2h0LCBtYXhMaW5lSGVpZ2h0KTtcbiAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3ggYW5kIGp1c3RpZnkgLyBhbGlnbiB0ZXh0IGJsb2NrLlxuICAgIGNvbnN0IGhlaWdodCA9IHkgLSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUO1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KHRleHRBbmNob3IpO1xuICAgIGFsaWduKHNoYXBpbmcucG9zaXRpb25lZExpbmVzLCBqdXN0aWZ5LCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ24sIG1heExpbmVMZW5ndGgsIG1heExpbmVIZWlnaHQsIGxpbmVIZWlnaHQsIGhlaWdodCwgbGluZXMubGVuZ3RoKTtcblxuICAgIHNoYXBpbmcudG9wICs9IC12ZXJ0aWNhbEFsaWduICogaGVpZ2h0O1xuICAgIHNoYXBpbmcuYm90dG9tID0gc2hhcGluZy50b3AgKyBoZWlnaHQ7XG4gICAgc2hhcGluZy5sZWZ0ICs9IC1ob3Jpem9udGFsQWxpZ24gKiBtYXhMaW5lTGVuZ3RoO1xuICAgIHNoYXBpbmcucmlnaHQgPSBzaGFwaW5nLmxlZnQgKyBtYXhMaW5lTGVuZ3RoO1xufVxuXG4vLyBqdXN0aWZ5IHJpZ2h0ID0gMSwgbGVmdCA9IDAsIGNlbnRlciA9IDAuNVxuZnVuY3Rpb24ganVzdGlmeUxpbmUocG9zaXRpb25lZEdseXBoczogQXJyYXk8UG9zaXRpb25lZEdseXBoPixcbiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnk6IDEgfCAwIHwgMC41LFxuICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldDogbnVtYmVyKSB7XG4gICAgaWYgKCFqdXN0aWZ5ICYmICFsaW5lT2Zmc2V0KVxuICAgICAgICByZXR1cm47XG5cbiAgICBjb25zdCBsYXN0UG9zaXRpb25lZEdseXBoID0gcG9zaXRpb25lZEdseXBoc1tlbmRdO1xuICAgIGNvbnN0IGxhc3RBZHZhbmNlID0gbGFzdFBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBsYXN0UG9zaXRpb25lZEdseXBoLnNjYWxlO1xuICAgIGNvbnN0IGxpbmVJbmRlbnQgPSAocG9zaXRpb25lZEdseXBoc1tlbmRdLnggKyBsYXN0QWR2YW5jZSkgKiBqdXN0aWZ5O1xuXG4gICAgZm9yIChsZXQgaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgIHBvc2l0aW9uZWRHbHlwaHNbal0ueCAtPSBsaW5lSW5kZW50O1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnkgKz0gbGluZU9mZnNldDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFsaWduKHBvc2l0aW9uZWRMaW5lczogQXJyYXk8UG9zaXRpb25lZExpbmU+LFxuICAgICAgICAgICAgICAganVzdGlmeTogbnVtYmVyLFxuICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduOiBudW1iZXIsXG4gICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBudW1iZXIsXG4gICAgICAgICAgICAgICBtYXhMaW5lTGVuZ3RoOiBudW1iZXIsXG4gICAgICAgICAgICAgICBtYXhMaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICBibG9ja0hlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgbGluZUNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBzaGlmdFggPSAoanVzdGlmeSAtIGhvcml6b250YWxBbGlnbikgKiBtYXhMaW5lTGVuZ3RoO1xuICAgIGxldCBzaGlmdFkgPSAwO1xuXG4gICAgaWYgKG1heExpbmVIZWlnaHQgIT09IGxpbmVIZWlnaHQpIHtcbiAgICAgICAgc2hpZnRZID0gLWJsb2NrSGVpZ2h0ICogdmVydGljYWxBbGlnbiAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2hpZnRZID0gKC12ZXJ0aWNhbEFsaWduICogbGluZUNvdW50ICsgMC41KSAqIGxpbmVIZWlnaHQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHBvc2l0aW9uZWRMaW5lcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBvc2l0aW9uZWRHbHlwaCBvZiBsaW5lLnBvc2l0aW9uZWRHbHlwaHMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uZWRHbHlwaC54ICs9IHNoaWZ0WDtcbiAgICAgICAgICAgIHBvc2l0aW9uZWRHbHlwaC55ICs9IHNoaWZ0WTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZEljb24gPSB7XG4gICAgaW1hZ2U6IEltYWdlUG9zaXRpb24sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgY29sbGlzaW9uUGFkZGluZz86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG59O1xuXG5mdW5jdGlvbiBzaGFwZUljb24oaW1hZ2U6IEltYWdlUG9zaXRpb24sIGljb25PZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sIGljb25BbmNob3I6IFN5bWJvbEFuY2hvcik6IFBvc2l0aW9uZWRJY29uIHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudChpY29uQW5jaG9yKTtcbiAgICBjb25zdCBkeCA9IGljb25PZmZzZXRbMF07XG4gICAgY29uc3QgZHkgPSBpY29uT2Zmc2V0WzFdO1xuICAgIGNvbnN0IHgxID0gZHggLSBpbWFnZS5kaXNwbGF5U2l6ZVswXSAqIGhvcml6b250YWxBbGlnbjtcbiAgICBjb25zdCB4MiA9IHgxICsgaW1hZ2UuZGlzcGxheVNpemVbMF07XG4gICAgY29uc3QgeTEgPSBkeSAtIGltYWdlLmRpc3BsYXlTaXplWzFdICogdmVydGljYWxBbGlnbjtcbiAgICBjb25zdCB5MiA9IHkxICsgaW1hZ2UuZGlzcGxheVNpemVbMV07XG4gICAgcmV0dXJuIHtpbWFnZSwgdG9wOiB5MSwgYm90dG9tOiB5MiwgbGVmdDogeDEsIHJpZ2h0OiB4Mn07XG59XG5cbmZ1bmN0aW9uIGZpdEljb25Ub1RleHQoc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24sIHNoYXBlZFRleHQ6IFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgIHRleHRGaXQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWyBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgaWNvbk9mZnNldDogWyBudW1iZXIsIG51bWJlciBdLCBmb250U2NhbGU6IG51bWJlcik6IFBvc2l0aW9uZWRJY29uIHtcbiAgICBhc3NlcnQodGV4dEZpdCAhPT0gJ25vbmUnKTtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYWRkaW5nKSAmJiBwYWRkaW5nLmxlbmd0aCA9PT0gNCk7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoaWNvbk9mZnNldCkgJiYgaWNvbk9mZnNldC5sZW5ndGggPT09IDIpO1xuXG4gICAgY29uc3QgaW1hZ2UgPSBzaGFwZWRJY29uLmltYWdlO1xuXG4gICAgbGV0IGNvbGxpc2lvblBhZGRpbmc7XG4gICAgaWYgKGltYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGltYWdlLmNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBpbWFnZS5waXhlbFJhdGlvIHx8IDE7XG4gICAgICAgIGNvbGxpc2lvblBhZGRpbmcgPSBbXG4gICAgICAgICAgICBjb250ZW50WzBdIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIGNvbnRlbnRbMV0gLyBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgaW1hZ2UuZGlzcGxheVNpemVbMF0gLSBjb250ZW50WzJdIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIGltYWdlLmRpc3BsYXlTaXplWzFdIC0gY29udGVudFszXSAvIHBpeGVsUmF0aW9cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvLyBXZSBkb24ndCByZXNwZWN0IHRoZSBpY29uLWFuY2hvciwgYmVjYXVzZSBpY29uLXRleHQtZml0IGlzIHNldC4gSW5zdGVhZCxcbiAgICAvLyB0aGUgaWNvbiB3aWxsIGJlIGNlbnRlcmVkIG9uIHRoZSB0ZXh0LCB0aGVuIHN0cmV0Y2hlZCBpbiB0aGUgZ2l2ZW5cbiAgICAvLyBkaW1lbnNpb25zLlxuXG4gICAgY29uc3QgdGV4dExlZnQgPSBzaGFwZWRUZXh0LmxlZnQgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dFJpZ2h0ID0gc2hhcGVkVGV4dC5yaWdodCAqIGZvbnRTY2FsZTtcblxuICAgIGxldCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7XG4gICAgaWYgKHRleHRGaXQgPT09ICd3aWR0aCcgfHwgdGV4dEZpdCA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIFN0cmV0Y2hlZCBob3Jpem9udGFsbHkgdG8gdGhlIHRleHQgd2lkdGhcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyB0ZXh0TGVmdCAtIHBhZGRpbmdbM107XG4gICAgICAgIHJpZ2h0ID0gaWNvbk9mZnNldFswXSArIHRleHRSaWdodCArIHBhZGRpbmdbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2VudGVyZWQgb24gdGhlIHRleHRcbiAgICAgICAgbGVmdCA9IGljb25PZmZzZXRbMF0gKyAodGV4dExlZnQgKyB0ZXh0UmlnaHQgLSBpbWFnZS5kaXNwbGF5U2l6ZVswXSkgLyAyO1xuICAgICAgICByaWdodCA9IGxlZnQgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0VG9wID0gc2hhcGVkVGV4dC50b3AgKiBmb250U2NhbGU7XG4gICAgY29uc3QgdGV4dEJvdHRvbSA9IHNoYXBlZFRleHQuYm90dG9tICogZm9udFNjYWxlO1xuICAgIGlmICh0ZXh0Rml0ID09PSAnaGVpZ2h0JyB8fCB0ZXh0Rml0ID09PSAnYm90aCcpIHtcbiAgICAgICAgLy8gU3RyZXRjaGVkIHZlcnRpY2FsbHkgdG8gdGhlIHRleHQgaGVpZ2h0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyB0ZXh0VG9wIC0gcGFkZGluZ1swXTtcbiAgICAgICAgYm90dG9tID0gaWNvbk9mZnNldFsxXSArIHRleHRCb3R0b20gKyBwYWRkaW5nWzJdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENlbnRlcmVkIG9uIHRoZSB0ZXh0XG4gICAgICAgIHRvcCA9IGljb25PZmZzZXRbMV0gKyAodGV4dFRvcCArIHRleHRCb3R0b20gLSBpbWFnZS5kaXNwbGF5U2l6ZVsxXSkgLyAyO1xuICAgICAgICBib3R0b20gPSB0b3AgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2ltYWdlLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIGNvbGxpc2lvblBhZGRpbmd9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5jbGFzcyBBbmNob3IgZXh0ZW5kcyBQb2ludCB7XG4gICAgYW5nbGU6IGFueTtcbiAgICBzZWdtZW50OiBudW1iZXIgfCB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIsIGFuZ2xlOiBudW1iZXIsIHNlZ21lbnQ/OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIoeCwgeSk7XG4gICAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZTtcbiAgICAgICAgaWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50ID0gc2VnbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLngsIHRoaXMueSwgdGhpcy5hbmdsZSwgdGhpcy5zZWdtZW50KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbmNob3InLCBBbmNob3IpO1xuXG5leHBvcnQgZGVmYXVsdCBBbmNob3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7UHJvcGVydHlWYWx1ZSwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uVHlwZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcblxuY29uc3QgU0laRV9QQUNLX0ZBQ1RPUiA9IDEyODtcblxuZXhwb3J0IHtnZXRTaXplRGF0YSwgZXZhbHVhdGVTaXplRm9yRmVhdHVyZSwgZXZhbHVhdGVTaXplRm9yWm9vbSwgU0laRV9QQUNLX0ZBQ1RPUn07XG5cbmV4cG9ydCB0eXBlIFNpemVEYXRhID0ge1xuICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgbGF5b3V0U2l6ZTogbnVtYmVyXG59IHwge1xuICAgIGtpbmQ6ICdzb3VyY2UnXG59IHwge1xuICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgbWluU2l6ZTogbnVtYmVyLFxuICAgIG1heFNpemU6IG51bWJlcixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59IHwge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgIG1pblpvb206IG51bWJlcixcbiAgICBtYXhab29tOiBudW1iZXIsXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuLy8gRm9yIHt0ZXh0LGljb259LXNpemUsIGdldCB0aGUgYnVja2V0LWxldmVsIGRhdGEgdGhhdCB3aWxsIGJlIG5lZWRlZCBieVxuLy8gdGhlIHBhaW50ZXIgdG8gc2V0IHN5bWJvbC1zaXplLXJlbGF0ZWQgdW5pZm9ybXNcbmZ1bmN0aW9uIGdldFNpemVEYXRhKHRpbGVab29tOiBudW1iZXIsIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPG51bWJlciwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4+KTogU2l6ZURhdGEge1xuICAgIGNvbnN0IHtleHByZXNzaW9ufSA9IHZhbHVlO1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICBjb25zdCBsYXlvdXRTaXplID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGlsZVpvb20gKyAxKSk7XG4gICAgICAgIHJldHVybiB7a2luZDogJ2NvbnN0YW50JywgbGF5b3V0U2l6ZX07XG5cbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiAnc291cmNlJ307XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7em9vbVN0b3BzLCBpbnRlcnBvbGF0aW9uVHlwZX0gPSBleHByZXNzaW9uO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBjb3ZlcmluZyB6b29tIHN0b3BzIGZvciB6b29tLWRlcGVuZGVudCB2YWx1ZXNcbiAgICAgICAgbGV0IGxvd2VyID0gMDtcbiAgICAgICAgd2hpbGUgKGxvd2VyIDwgem9vbVN0b3BzLmxlbmd0aCAmJiB6b29tU3RvcHNbbG93ZXJdIDw9IHRpbGVab29tKSBsb3dlcisrO1xuICAgICAgICBsb3dlciA9IE1hdGgubWF4KDAsIGxvd2VyIC0gMSk7XG4gICAgICAgIGxldCB1cHBlciA9IGxvd2VyO1xuICAgICAgICB3aGlsZSAodXBwZXIgPCB6b29tU3RvcHMubGVuZ3RoICYmIHpvb21TdG9wc1t1cHBlcl0gPCB0aWxlWm9vbSArIDEpIHVwcGVyKys7XG4gICAgICAgIHVwcGVyID0gTWF0aC5taW4oem9vbVN0b3BzLmxlbmd0aCAtIDEsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBtaW5ab29tID0gem9vbVN0b3BzW2xvd2VyXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHpvb21TdG9wc1t1cHBlcl07XG5cbiAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gdXNlIENhbWVyYUV4cHJlc3Npb24gb3IgQ29tcG9zaXRlRXhwcmVzc2lvbiBpbiB0aGVzZVxuICAgICAgICAvLyByZXR1cm4gdHlwZXMgcmF0aGVyIHRoYW4gRXhwcmVzc2lvblNwZWNpZmljYXRpb24sIGJ1dCB0aGUgZm9ybWVyIGFyZSBub3RcbiAgICAgICAgLy8gdHJhbnNmZXJyYWJsZSBhY3Jvc3MgV2ViIFdvcmtlciBib3VuZGFyaWVzLlxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHtraW5kOiAnY29tcG9zaXRlJywgbWluWm9vbSwgbWF4Wm9vbSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yIGNhbWVyYSBmdW5jdGlvbnMsIGFsc28gc2F2ZSBvZmYgdGhlIGZ1bmN0aW9uIHZhbHVlc1xuICAgICAgICAvLyBldmFsdWF0ZWQgYXQgdGhlIGNvdmVyaW5nIHpvb20gbGV2ZWxzXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSk7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSk7XG5cbiAgICAgICAgcmV0dXJuIHtraW5kOiAnY2FtZXJhJywgbWluWm9vbSwgbWF4Wm9vbSwgbWluU2l6ZSwgbWF4U2l6ZSwgaW50ZXJwb2xhdGlvblR5cGV9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVTaXplRm9yRmVhdHVyZShzaXplRGF0YTogU2l6ZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1U2l6ZSwgdVNpemVUfTogeyB1U2l6ZTogbnVtYmVyLCB1U2l6ZVQ6IG51bWJlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bG93ZXJTaXplLCB1cHBlclNpemV9OiB7IGxvd2VyU2l6ZTogbnVtYmVyLCB1cHBlclNpemU6IG51bWJlcn0pIHtcbiAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgcmV0dXJuIGxvd2VyU2l6ZSAvIFNJWkVfUEFDS19GQUNUT1I7XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUobG93ZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdXBwZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUiwgdVNpemVUKTtcbiAgICB9XG4gICAgcmV0dXJuIHVTaXplO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhOiBTaXplRGF0YSwgem9vbTogbnVtYmVyKSB7XG4gICAgbGV0IHVTaXplVCA9IDA7XG4gICAgbGV0IHVTaXplID0gMDtcblxuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIHVTaXplID0gc2l6ZURhdGEubGF5b3V0U2l6ZTtcblxuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgY29uc3Qge2ludGVycG9sYXRpb25UeXBlLCBtaW5ab29tLCBtYXhab29tfSA9IHNpemVEYXRhO1xuXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNvdWxkIGdldCB0aGUgZXhhY3QgdmFsdWUgb2YgdGhlIGNhbWVyYSBmdW5jdGlvblxuICAgICAgICAvLyBhdCB6ID0gdHIuem9vbSwgd2UgaW50ZW50aW9uYWxseSBkbyBub3Q6IGluc3RlYWQsIHdlIGludGVycG9sYXRlXG4gICAgICAgIC8vIGJldHdlZW4gdGhlIGNhbWVyYSBmdW5jdGlvbiB2YWx1ZXMgYXQgYSBwYWlyIG9mIHpvb20gc3RvcHMgY292ZXJpbmdcbiAgICAgICAgLy8gW3RpbGVab29tLCB0aWxlWm9vbSArIDFdIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGlzXG4gICAgICAgIC8vIHJlc3RyaWN0aW9uIG9uIGNvbXBvc2l0ZSBmdW5jdGlvbnNcbiAgICAgICAgY29uc3QgdCA9ICFpbnRlcnBvbGF0aW9uVHlwZSA/IDAgOiBjbGFtcChcbiAgICAgICAgICAgIEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvblR5cGUsIHpvb20sIG1pblpvb20sIG1heFpvb20pLCAwLCAxKTtcblxuICAgICAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NhbWVyYScpIHtcbiAgICAgICAgICAgIHVTaXplID0gaW50ZXJwb2xhdGUoc2l6ZURhdGEubWluU2l6ZSwgc2l6ZURhdGEubWF4U2l6ZSwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1U2l6ZVQgPSB0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt1U2l6ZVQsIHVTaXplfTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGNoZWNrTWF4QW5nbGU7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcblxuLyoqXG4gKiBMYWJlbHMgcGxhY2VkIGFyb3VuZCByZWFsbHkgc2hhcnAgYW5nbGVzIGFyZW4ndCByZWFkYWJsZS4gQ2hlY2sgaWYgYW55XG4gKiBwYXJ0IG9mIHRoZSBwb3RlbnRpYWwgbGFiZWwgaGFzIGEgY29tYmluZWQgYW5nbGUgdGhhdCBpcyB0b28gYmlnLlxuICpcbiAqIEBwYXJhbSBsaW5lXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBwb2ludCBvbiB0aGUgbGluZSBhcm91bmQgd2hpY2ggdGhlIGxhYmVsIGlzIGFuY2hvcmVkLlxuICogQHBhcmFtIGxhYmVsTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGxhYmVsIGluIGdlb21ldHJ5IHVuaXRzLlxuICogQHBhcmFtIHdpbmRvd1NpemUgVGhlIGNoZWNrIGZhaWxzIGlmIHRoZSBjb21iaW5lZCBhbmdsZXMgd2l0aGluIGEgcGFydCBvZiB0aGUgbGluZSB0aGF0IGlzIGB3aW5kb3dTaXplYCBsb25nIGlzIHRvbyBiaWcuXG4gKiBAcGFyYW0gbWF4QW5nbGUgVGhlIG1heGltdW0gY29tYmluZWQgYW5nbGUgdGhhdCBhbnkgd2luZG93IGFsb25nIHRoZSBsYWJlbCBpcyBhbGxvd2VkIHRvIGhhdmUuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBiZSBwbGFjZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrTWF4QW5nbGUobGluZTogQXJyYXk8UG9pbnQ+LCBhbmNob3I6IEFuY2hvciwgbGFiZWxMZW5ndGg6IG51bWJlciwgd2luZG93U2l6ZTogbnVtYmVyLCBtYXhBbmdsZTogbnVtYmVyKSB7XG5cbiAgICAvLyBob3Jpem9udGFsIGxhYmVscyBhbHdheXMgcGFzc1xuICAgIGlmIChhbmNob3Iuc2VnbWVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcblxuICAgIGxldCBwID0gYW5jaG9yO1xuICAgIGxldCBpbmRleCA9IGFuY2hvci5zZWdtZW50ICsgMTtcbiAgICBsZXQgYW5jaG9yRGlzdGFuY2UgPSAwO1xuXG4gICAgLy8gbW92ZSBiYWNrd2FyZHMgYWxvbmcgdGhlIGxpbmUgdG8gdGhlIGZpcnN0IHNlZ21lbnQgdGhlIGxhYmVsIGFwcGVhcnMgb25cbiAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgPiAtbGFiZWxMZW5ndGggLyAyKSB7XG4gICAgICAgIGluZGV4LS07XG5cbiAgICAgICAgLy8gdGhlcmUgaXNuJ3QgZW5vdWdoIHJvb20gZm9yIHRoZSBsYWJlbCBhZnRlciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICBhbmNob3JEaXN0YW5jZSAtPSBsaW5lW2luZGV4XS5kaXN0KHApO1xuICAgICAgICBwID0gbGluZVtpbmRleF07XG4gICAgfVxuXG4gICAgYW5jaG9yRGlzdGFuY2UgKz0gbGluZVtpbmRleF0uZGlzdChsaW5lW2luZGV4ICsgMV0pO1xuICAgIGluZGV4Kys7XG5cbiAgICAvLyBzdG9yZSByZWNlbnQgY29ybmVycyBhbmQgdGhlaXIgdG90YWwgYW5nbGUgZGlmZmVyZW5jZVxuICAgIGNvbnN0IHJlY2VudENvcm5lcnMgPSBbXTtcbiAgICBsZXQgcmVjZW50QW5nbGVEZWx0YSA9IDA7XG5cbiAgICAvLyBtb3ZlIGZvcndhcmRzIGJ5IHRoZSBsZW5ndGggb2YgdGhlIGxhYmVsIGFuZCBjaGVjayBhbmdsZXMgYWxvbmcgdGhlIHdheVxuICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSA8IGxhYmVsTGVuZ3RoIC8gMikge1xuICAgICAgICBjb25zdCBwcmV2ID0gbGluZVtpbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gbGluZVtpbmRleF07XG4gICAgICAgIGNvbnN0IG5leHQgPSBsaW5lW2luZGV4ICsgMV07XG5cbiAgICAgICAgLy8gdGhlcmUgaXNuJ3QgZW5vdWdoIHJvb20gZm9yIHRoZSBsYWJlbCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICBpZiAoIW5leHQpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBsZXQgYW5nbGVEZWx0YSA9IHByZXYuYW5nbGVUbyhjdXJyZW50KSAtIGN1cnJlbnQuYW5nbGVUbyhuZXh0KTtcbiAgICAgICAgLy8gcmVzdHJpY3QgYW5nbGUgdG8gLXBpLi5waSByYW5nZVxuICAgICAgICBhbmdsZURlbHRhID0gTWF0aC5hYnMoKChhbmdsZURlbHRhICsgMyAqIE1hdGguUEkpICUgKE1hdGguUEkgKiAyKSkgLSBNYXRoLlBJKTtcblxuICAgICAgICByZWNlbnRDb3JuZXJzLnB1c2goe1xuICAgICAgICAgICAgZGlzdGFuY2U6IGFuY2hvckRpc3RhbmNlLFxuICAgICAgICAgICAgYW5nbGVEZWx0YVxuICAgICAgICB9KTtcbiAgICAgICAgcmVjZW50QW5nbGVEZWx0YSArPSBhbmdsZURlbHRhO1xuXG4gICAgICAgIC8vIHJlbW92ZSBjb3JuZXJzIHRoYXQgYXJlIGZhciBlbm91Z2ggYXdheSBmcm9tIHRoZSBsaXN0IG9mIHJlY2VudCBhbmNob3JzXG4gICAgICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSAtIHJlY2VudENvcm5lcnNbMF0uZGlzdGFuY2UgPiB3aW5kb3dTaXplKSB7XG4gICAgICAgICAgICByZWNlbnRBbmdsZURlbHRhIC09IHJlY2VudENvcm5lcnMuc2hpZnQoKS5hbmdsZURlbHRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIHN1bSBvZiBhbmdsZXMgd2l0aGluIHRoZSB3aW5kb3cgYXJlYSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIGNoZWNrIGZhaWxzLlxuICAgICAgICBpZiAocmVjZW50QW5nbGVEZWx0YSA+IG1heEFuZ2xlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYW5jaG9yRGlzdGFuY2UgKz0gY3VycmVudC5kaXN0KG5leHQpO1xuICAgIH1cblxuICAgIC8vIG5vIHBhcnQgb2YgdGhlIGxpbmUgaGFkIGFuIGFuZ2xlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkLiBjaGVjayBwYXNzZXMuXG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcblxuaW1wb3J0IEFuY2hvciBmcm9tICcuLi9zeW1ib2wvYW5jaG9yJztcbmltcG9ydCBjaGVja01heEFuZ2xlIGZyb20gJy4vY2hlY2tfbWF4X2FuZ2xlJztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7U2hhcGluZywgUG9zaXRpb25lZEljb259IGZyb20gJy4vc2hhcGluZyc7XG5cbmV4cG9ydCB7Z2V0QW5jaG9ycywgZ2V0Q2VudGVyQW5jaG9yfTtcblxuZnVuY3Rpb24gZ2V0TGluZUxlbmd0aChsaW5lOiBBcnJheTxQb2ludD4pOiBudW1iZXIge1xuICAgIGxldCBsaW5lTGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmUubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgIGxpbmVMZW5ndGggKz0gbGluZVtrXS5kaXN0KGxpbmVbayArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVMZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGdldEFuZ2xlV2luZG93U2l6ZShzaGFwZWRUZXh0OiA/U2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2hhcGVkVGV4dCA/XG4gICAgICAgIDMgLyA1ICogZ2x5cGhTaXplICogYm94U2NhbGUgOlxuICAgICAgICAwO1xufVxuXG5mdW5jdGlvbiBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0OiA/U2hhcGluZywgc2hhcGVkSWNvbjogP1Bvc2l0aW9uZWRJY29uKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIHNoYXBlZFRleHQgPyBzaGFwZWRUZXh0LnJpZ2h0IC0gc2hhcGVkVGV4dC5sZWZ0IDogMCxcbiAgICAgICAgc2hhcGVkSWNvbiA/IHNoYXBlZEljb24ucmlnaHQgLSBzaGFwZWRJY29uLmxlZnQgOiAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2VudGVyQW5jaG9yKGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbmdsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246ID9Qb3NpdGlvbmVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyKSB7XG4gICAgY29uc3QgYW5nbGVXaW5kb3dTaXplID0gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQsIGdseXBoU2l6ZSwgYm94U2NhbGUpO1xuICAgIGNvbnN0IGxhYmVsTGVuZ3RoID0gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dCwgc2hhcGVkSWNvbikgKiBib3hTY2FsZTtcblxuICAgIGxldCBwcmV2RGlzdGFuY2UgPSAwO1xuICAgIGNvbnN0IGNlbnRlckRpc3RhbmNlID0gZ2V0TGluZUxlbmd0aChsaW5lKSAvIDI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYSA9IGxpbmVbaV0sXG4gICAgICAgICAgICBiID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudERpc3RhbmNlID0gYS5kaXN0KGIpO1xuXG4gICAgICAgIGlmIChwcmV2RGlzdGFuY2UgKyBzZWdtZW50RGlzdGFuY2UgPiBjZW50ZXJEaXN0YW5jZSkge1xuICAgICAgICAgICAgLy8gVGhlIGNlbnRlciBpcyBvbiB0aGlzIHNlZ21lbnRcbiAgICAgICAgICAgIGNvbnN0IHQgPSAoY2VudGVyRGlzdGFuY2UgLSBwcmV2RGlzdGFuY2UpIC8gc2VnbWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHggPSBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICAgICAgeSA9IGludGVycG9sYXRlKGEueSwgYi55LCB0KTtcblxuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IEFuY2hvcih4LCB5LCBiLmFuZ2xlVG8oYSksIGkpO1xuICAgICAgICAgICAgYW5jaG9yLl9yb3VuZCgpO1xuICAgICAgICAgICAgaWYgKCFhbmdsZVdpbmRvd1NpemUgfHwgY2hlY2tNYXhBbmdsZShsaW5lLCBhbmNob3IsIGxhYmVsTGVuZ3RoLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZEaXN0YW5jZSArPSBzZWdtZW50RGlzdGFuY2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRBbmNob3JzKGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBtYXhBbmdsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiA/U2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogP1Bvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgdGlsZUV4dGVudDogbnVtYmVyKSB7XG5cbiAgICAvLyBSZXNhbXBsZSBhIGxpbmUgdG8gZ2V0IGFuY2hvciBwb2ludHMgZm9yIGxhYmVscyBhbmQgY2hlY2sgdGhhdCBlYWNoXG4gICAgLy8gcG90ZW50aWFsIGxhYmVsIHBhc3NlcyB0ZXh0LW1heC1hbmdsZSBjaGVjayBhbmQgaGFzIGVub3VnaCBmcm9vbSB0byBmaXRcbiAgICAvLyBvbiB0aGUgbGluZS5cblxuICAgIGNvbnN0IGFuZ2xlV2luZG93U2l6ZSA9IGdldEFuZ2xlV2luZG93U2l6ZShzaGFwZWRUZXh0LCBnbHlwaFNpemUsIGJveFNjYWxlKTtcbiAgICBjb25zdCBzaGFwZWRMYWJlbExlbmd0aCA9IGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQsIHNoYXBlZEljb24pO1xuICAgIGNvbnN0IGxhYmVsTGVuZ3RoID0gc2hhcGVkTGFiZWxMZW5ndGggKiBib3hTY2FsZTtcblxuICAgIC8vIElzIHRoZSBsaW5lIGNvbnRpbnVlZCBmcm9tIG91dHNpZGUgdGhlIHRpbGUgYm91bmRhcnk/XG4gICAgY29uc3QgaXNMaW5lQ29udGludWVkID0gbGluZVswXS54ID09PSAwIHx8IGxpbmVbMF0ueCA9PT0gdGlsZUV4dGVudCB8fCBsaW5lWzBdLnkgPT09IDAgfHwgbGluZVswXS55ID09PSB0aWxlRXh0ZW50O1xuXG4gICAgLy8gSXMgdGhlIGxhYmVsIGxvbmcsIHJlbGF0aXZlIHRvIHRoZSBzcGFjaW5nP1xuICAgIC8vIElmIHNvLCBhZGp1c3QgdGhlIHNwYWNpbmcgc28gdGhlcmUgaXMgYWx3YXlzIGEgbWluaW11bSBzcGFjZSBvZiBgc3BhY2luZyAvIDRgIGJldHdlZW4gbGFiZWwgZWRnZXMuXG4gICAgaWYgKHNwYWNpbmcgLSBsYWJlbExlbmd0aCA8IHNwYWNpbmcgLyA0KSB7XG4gICAgICAgIHNwYWNpbmcgPSBsYWJlbExlbmd0aCArIHNwYWNpbmcgLyA0O1xuICAgIH1cblxuICAgIC8vIE9mZnNldCB0aGUgZmlyc3QgYW5jaG9yIGJ5OlxuICAgIC8vIEVpdGhlciBoYWxmIHRoZSBsYWJlbCBsZW5ndGggcGx1cyBhIGZpeGVkIGV4dHJhIG9mZnNldCBpZiB0aGUgbGluZSBpcyBub3QgY29udGludWVkXG4gICAgLy8gT3IgaGFsZiB0aGUgc3BhY2luZyBpZiB0aGUgbGluZSBpcyBjb250aW51ZWQuXG5cbiAgICAvLyBGb3Igbm9uLWNvbnRpbnVlZCBsaW5lcywgYWRkIGEgYml0IG9mIGZpeGVkIGV4dHJhIG9mZnNldCB0byBhdm9pZCBjb2xsaXNpb25zIGF0IFQgaW50ZXJzZWN0aW9ucy5cbiAgICBjb25zdCBmaXhlZEV4dHJhT2Zmc2V0ID0gZ2x5cGhTaXplICogMjtcblxuICAgIGNvbnN0IG9mZnNldCA9ICFpc0xpbmVDb250aW51ZWQgP1xuICAgICAgICAoKHNoYXBlZExhYmVsTGVuZ3RoIC8gMiArIGZpeGVkRXh0cmFPZmZzZXQpICogYm94U2NhbGUgKiBvdmVyc2NhbGluZykgJSBzcGFjaW5nIDpcbiAgICAgICAgKHNwYWNpbmcgLyAyICogb3ZlcnNjYWxpbmcpICUgc3BhY2luZztcblxuICAgIHJldHVybiByZXNhbXBsZShsaW5lLCBvZmZzZXQsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIGZhbHNlLCB0aWxlRXh0ZW50KTtcbn1cblxuZnVuY3Rpb24gcmVzYW1wbGUobGluZSwgb2Zmc2V0LCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCBwbGFjZUF0TWlkZGxlLCB0aWxlRXh0ZW50KSB7XG5cbiAgICBjb25zdCBoYWxmTGFiZWxMZW5ndGggPSBsYWJlbExlbmd0aCAvIDI7XG4gICAgY29uc3QgbGluZUxlbmd0aCA9IGdldExpbmVMZW5ndGgobGluZSk7XG5cbiAgICBsZXQgZGlzdGFuY2UgPSAwLFxuICAgICAgICBtYXJrZWREaXN0YW5jZSA9IG9mZnNldCAtIHNwYWNpbmc7XG5cbiAgICBsZXQgYW5jaG9ycyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGEgPSBsaW5lW2ldLFxuICAgICAgICAgICAgYiA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnREaXN0ID0gYS5kaXN0KGIpLFxuICAgICAgICAgICAgYW5nbGUgPSBiLmFuZ2xlVG8oYSk7XG5cbiAgICAgICAgd2hpbGUgKG1hcmtlZERpc3RhbmNlICsgc3BhY2luZyA8IGRpc3RhbmNlICsgc2VnbWVudERpc3QpIHtcbiAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlICs9IHNwYWNpbmc7XG5cbiAgICAgICAgICAgIGNvbnN0IHQgPSAobWFya2VkRGlzdGFuY2UgLSBkaXN0YW5jZSkgLyBzZWdtZW50RGlzdCxcbiAgICAgICAgICAgICAgICB4ID0gaW50ZXJwb2xhdGUoYS54LCBiLngsIHQpLFxuICAgICAgICAgICAgICAgIHkgPSBpbnRlcnBvbGF0ZShhLnksIGIueSwgdCk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgdGlsZSBib3VuZGFyaWVzIGFuZCB0aGF0XG4gICAgICAgICAgICAvLyB0aGUgbGFiZWwgd291bGQgZml0IGJlZm9yZSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGxpbmVcbiAgICAgICAgICAgIC8vIGlmIHBsYWNlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAgICAgaWYgKHggPj0gMCAmJiB4IDwgdGlsZUV4dGVudCAmJiB5ID49IDAgJiYgeSA8IHRpbGVFeHRlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgLSBoYWxmTGFiZWxMZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXJrZWREaXN0YW5jZSArIGhhbGZMYWJlbExlbmd0aCA8PSBsaW5lTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IEFuY2hvcih4LCB5LCBhbmdsZSwgaSk7XG4gICAgICAgICAgICAgICAgYW5jaG9yLl9yb3VuZCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFhbmdsZVdpbmRvd1NpemUgfHwgY2hlY2tNYXhBbmdsZShsaW5lLCBhbmNob3IsIGxhYmVsTGVuZ3RoLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlKSkge1xuICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZSArPSBzZWdtZW50RGlzdDtcbiAgICB9XG5cbiAgICBpZiAoIXBsYWNlQXRNaWRkbGUgJiYgIWFuY2hvcnMubGVuZ3RoICYmICFpc0xpbmVDb250aW51ZWQpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IGF0dGVtcHQgYXQgZmluZGluZyBhbmNob3JzIGF0IHdoaWNoIGxhYmVscyBjYW4gYmUgcGxhY2VkIGZhaWxlZC5cbiAgICAgICAgLy8gVHJ5IGFnYWluLCBidXQgdGhpcyB0aW1lIGp1c3QgdHJ5IHBsYWNpbmcgb25lIGFuY2hvciBhdCB0aGUgbWlkZGxlIG9mIHRoZSBsaW5lLlxuICAgICAgICAvLyBUaGlzIGhhcyB0aGUgbW9zdCBlZmZlY3QgZm9yIHNob3J0IGxpbmVzIGluIG92ZXJzY2FsZWQgdGlsZXMsIHNpbmNlIHRoZVxuICAgICAgICAvLyBpbml0aWFsIG9mZnNldCB1c2VkIGluIG92ZXJzY2FsZWQgdGlsZXMgaXMgY2FsY3VsYXRlZCB0byBhbGlnbiBsYWJlbHMgd2l0aCBwb3NpdGlvbnMgaW5cbiAgICAgICAgLy8gcGFyZW50IHRpbGVzIGluc3RlYWQgb2YgcGxhY2luZyB0aGUgbGFiZWwgYXMgY2xvc2UgdG8gdGhlIGJlZ2lubmluZyBhcyBwb3NzaWJsZS5cbiAgICAgICAgYW5jaG9ycyA9IHJlc2FtcGxlKGxpbmUsIGRpc3RhbmNlIC8gMiwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgdHJ1ZSwgdGlsZUV4dGVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2hvcnM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsaXBMaW5lO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcnQgb2YgYSBtdWx0aWxpbmUgdGhhdCBpbnRlcnNlY3RzIHdpdGggdGhlIHByb3ZpZGVkIHJlY3Rhbmd1bGFyIGJveC5cbiAqXG4gKiBAcGFyYW0gbGluZXNcbiAqIEBwYXJhbSB4MSB0aGUgbGVmdCBlZGdlIG9mIHRoZSBib3hcbiAqIEBwYXJhbSB5MSB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHgyIHRoZSByaWdodCBlZGdlIG9mIHRoZSBib3hcbiAqIEBwYXJhbSB5MiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJveFxuICogQHJldHVybnMgbGluZXNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsaXBMaW5lKGxpbmVzOiBBcnJheTxBcnJheTxQb2ludD4+LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKTogQXJyYXk8QXJyYXk8UG9pbnQ+PiB7XG4gICAgY29uc3QgY2xpcHBlZExpbmVzID0gW107XG5cbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tsXTtcbiAgICAgICAgbGV0IGNsaXBwZWRMaW5lO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBwMCA9IGxpbmVbaV07XG4gICAgICAgICAgICBsZXQgcDEgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICAgICAgaWYgKHAwLnggPCB4MSAmJiBwMS54IDwgeDEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueCA8IHgxKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQoeDEsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MSAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS54IDwgeDEpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludCh4MSwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgxIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwMC55IDwgeTEgJiYgcDEueSA8IHkxKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnkgPCB5MSkge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHAwLnggKyAocDEueCAtIHAwLngpICogKCh5MSAtIHAwLnkpIC8gKHAxLnkgLSBwMC55KSksIHkxKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueSA8IHkxKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkxIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTEpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocDAueCA+PSB4MiAmJiBwMS54ID49IHgyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnggPj0geDIpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludCh4MiwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgyIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnggPj0geDIpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludCh4MiwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgyIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwMC55ID49IHkyICYmIHAxLnkgPj0geTIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueSA+PSB5Mikge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHAwLnggKyAocDEueCAtIHAwLngpICogKCh5MiAtIHAwLnkpIC8gKHAxLnkgLSBwMC55KSksIHkyKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueSA+PSB5Mikge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHAwLnggKyAocDEueCAtIHAwLngpICogKCh5MiAtIHAwLnkpIC8gKHAxLnkgLSBwMC55KSksIHkyKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjbGlwcGVkTGluZSB8fCAhcDAuZXF1YWxzKGNsaXBwZWRMaW5lW2NsaXBwZWRMaW5lLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgIGNsaXBwZWRMaW5lID0gW3AwXTtcbiAgICAgICAgICAgICAgICBjbGlwcGVkTGluZXMucHVzaChjbGlwcGVkTGluZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsaXBwZWRMaW5lLnB1c2gocDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaXBwZWRMaW5lcztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHtHTFlQSF9QQkZfQk9SREVSfSBmcm9tICcuLi9zdHlsZS9wYXJzZV9nbHlwaF9wYmYnO1xuXG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuaW1wb3J0IHR5cGUge1Bvc2l0aW9uZWRJY29uLCBTaGFwaW5nfSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHtTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUfSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHtJTUFHRV9QQURESU5HfSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbi8qKlxuICogQSB0ZXh0dXJlZCBxdWFkIGZvciByZW5kZXJpbmcgYSBzaW5nbGUgaWNvbiBvciBnbHlwaC5cbiAqXG4gKiBUaGUgem9vbSByYW5nZSB0aGUgZ2x5cGggY2FuIGJlIHNob3duIGlzIGRlZmluZWQgYnkgbWluU2NhbGUgYW5kIG1heFNjYWxlLlxuICpcbiAqIEBwYXJhbSB0bCBUaGUgb2Zmc2V0IG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIHRyIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCByaWdodCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIGJsIFRoZSBvZmZzZXQgb2YgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gYnIgVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gdGV4IFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFN5bWJvbFF1YWQgPSB7XG4gICAgdGw6IFBvaW50LFxuICAgIHRyOiBQb2ludCxcbiAgICBibDogUG9pbnQsXG4gICAgYnI6IFBvaW50LFxuICAgIHRleDoge1xuICAgICAgICB4OiBudW1iZXIsXG4gICAgICAgIHk6IG51bWJlcixcbiAgICAgICAgdzogbnVtYmVyLFxuICAgICAgICBoOiBudW1iZXJcbiAgICB9LFxuICAgIHBpeGVsT2Zmc2V0VEw6IFBvaW50LFxuICAgIHBpeGVsT2Zmc2V0QlI6IFBvaW50LFxuICAgIHdyaXRpbmdNb2RlOiBhbnkgfCB2b2lkLFxuICAgIGdseXBoT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHNlY3Rpb25JbmRleDogbnVtYmVyLFxuICAgIGlzU0RGOiBib29sZWFuLFxuICAgIG1pbkZvbnRTY2FsZVg6IG51bWJlcixcbiAgICBtaW5Gb250U2NhbGVZOiBudW1iZXJcbn07XG5cbi8vIElmIHlvdSBoYXZlIGEgMTBweCBpY29uIHRoYXQgaXNuJ3QgcGVyZmVjdGx5IGFsaWduZWQgdG8gdGhlIHBpeGVsIGdyaWQgaXQgd2lsbCBjb3ZlciAxMSBhY3R1YWxcbi8vIHBpeGVscy4gVGhlIHF1YWQgbmVlZHMgdG8gYmUgcGFkZGVkIHRvIGFjY291bnQgZm9yIHRoaXMsIG90aGVyd2lzZSB0aGV5J2xsIGxvb2sgc2xpZ2h0bHkgY2xpcHBlZFxuLy8gb24gb25lIGVkZ2UgaW4gc29tZSBjYXNlcy5cbmNvbnN0IGJvcmRlciA9IElNQUdFX1BBRERJTkc7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBxdWFkcyB1c2VkIGZvciByZW5kZXJpbmcgYW4gaWNvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uUXVhZHMoXG4gICAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgICAgaWNvblJvdGF0ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIGlzU0RGSWNvbjogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdDogYm9vbGVhbik6IEFycmF5PFN5bWJvbFF1YWQ+IHtcbiAgICBjb25zdCBxdWFkcyA9IFtdO1xuXG4gICAgY29uc3QgaW1hZ2UgPSBzaGFwZWRJY29uLmltYWdlO1xuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBpbWFnZS5waXhlbFJhdGlvO1xuICAgIGNvbnN0IGltYWdlV2lkdGggPSBpbWFnZS5wYWRkZWRSZWN0LncgLSAyICogYm9yZGVyO1xuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gaW1hZ2UucGFkZGVkUmVjdC5oIC0gMiAqIGJvcmRlcjtcblxuICAgIGNvbnN0IGljb25XaWR0aCA9IHNoYXBlZEljb24ucmlnaHQgLSBzaGFwZWRJY29uLmxlZnQ7XG4gICAgY29uc3QgaWNvbkhlaWdodCA9IHNoYXBlZEljb24uYm90dG9tIC0gc2hhcGVkSWNvbi50b3A7XG5cbiAgICBjb25zdCBzdHJldGNoWCA9IGltYWdlLnN0cmV0Y2hYIHx8IFtbMCwgaW1hZ2VXaWR0aF1dO1xuICAgIGNvbnN0IHN0cmV0Y2hZID0gaW1hZ2Uuc3RyZXRjaFkgfHwgW1swLCBpbWFnZUhlaWdodF1dO1xuXG4gICAgY29uc3QgcmVkdWNlUmFuZ2VzID0gKHN1bSwgcmFuZ2UpID0+IHN1bSArIHJhbmdlWzFdIC0gcmFuZ2VbMF07XG4gICAgY29uc3Qgc3RyZXRjaFdpZHRoID0gc3RyZXRjaFgucmVkdWNlKHJlZHVjZVJhbmdlcywgMCk7XG4gICAgY29uc3Qgc3RyZXRjaEhlaWdodCA9IHN0cmV0Y2hZLnJlZHVjZShyZWR1Y2VSYW5nZXMsIDApO1xuICAgIGNvbnN0IGZpeGVkV2lkdGggPSBpbWFnZVdpZHRoIC0gc3RyZXRjaFdpZHRoO1xuICAgIGNvbnN0IGZpeGVkSGVpZ2h0ID0gaW1hZ2VIZWlnaHQgLSBzdHJldGNoSGVpZ2h0O1xuXG4gICAgbGV0IHN0cmV0Y2hPZmZzZXRYID0gMDtcbiAgICBsZXQgc3RyZXRjaENvbnRlbnRXaWR0aCA9IHN0cmV0Y2hXaWR0aDtcbiAgICBsZXQgc3RyZXRjaE9mZnNldFkgPSAwO1xuICAgIGxldCBzdHJldGNoQ29udGVudEhlaWdodCA9IHN0cmV0Y2hIZWlnaHQ7XG4gICAgbGV0IGZpeGVkT2Zmc2V0WCA9IDA7XG4gICAgbGV0IGZpeGVkQ29udGVudFdpZHRoID0gZml4ZWRXaWR0aDtcbiAgICBsZXQgZml4ZWRPZmZzZXRZID0gMDtcbiAgICBsZXQgZml4ZWRDb250ZW50SGVpZ2h0ID0gZml4ZWRIZWlnaHQ7XG5cbiAgICBpZiAoaW1hZ2UuY29udGVudCAmJiBoYXNJY29uVGV4dEZpdCkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gaW1hZ2UuY29udGVudDtcbiAgICAgICAgc3RyZXRjaE9mZnNldFggPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWCwgMCwgY29udGVudFswXSk7XG4gICAgICAgIHN0cmV0Y2hPZmZzZXRZID0gc3VtV2l0aGluUmFuZ2Uoc3RyZXRjaFksIDAsIGNvbnRlbnRbMV0pO1xuICAgICAgICBzdHJldGNoQ29udGVudFdpZHRoID0gc3VtV2l0aGluUmFuZ2Uoc3RyZXRjaFgsIGNvbnRlbnRbMF0sIGNvbnRlbnRbMl0pO1xuICAgICAgICBzdHJldGNoQ29udGVudEhlaWdodCA9IHN1bVdpdGhpblJhbmdlKHN0cmV0Y2hZLCBjb250ZW50WzFdLCBjb250ZW50WzNdKTtcbiAgICAgICAgZml4ZWRPZmZzZXRYID0gY29udGVudFswXSAtIHN0cmV0Y2hPZmZzZXRYO1xuICAgICAgICBmaXhlZE9mZnNldFkgPSBjb250ZW50WzFdIC0gc3RyZXRjaE9mZnNldFk7XG4gICAgICAgIGZpeGVkQ29udGVudFdpZHRoID0gY29udGVudFsyXSAtIGNvbnRlbnRbMF0gLSBzdHJldGNoQ29udGVudFdpZHRoO1xuICAgICAgICBmaXhlZENvbnRlbnRIZWlnaHQgPSBjb250ZW50WzNdIC0gY29udGVudFsxXSAtIHN0cmV0Y2hDb250ZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIGNvbnN0IG1ha2VCb3ggPSAobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XG5cbiAgICAgICAgY29uc3QgbGVmdEVtID0gZ2V0RW1PZmZzZXQobGVmdC5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFgsIHN0cmV0Y2hDb250ZW50V2lkdGgsIGljb25XaWR0aCwgc2hhcGVkSWNvbi5sZWZ0KTtcbiAgICAgICAgY29uc3QgbGVmdFB4ID0gZ2V0UHhPZmZzZXQobGVmdC5maXhlZCAtIGZpeGVkT2Zmc2V0WCwgZml4ZWRDb250ZW50V2lkdGgsIGxlZnQuc3RyZXRjaCwgc3RyZXRjaFdpZHRoKTtcblxuICAgICAgICBjb25zdCB0b3BFbSA9IGdldEVtT2Zmc2V0KHRvcC5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFksIHN0cmV0Y2hDb250ZW50SGVpZ2h0LCBpY29uSGVpZ2h0LCBzaGFwZWRJY29uLnRvcCk7XG4gICAgICAgIGNvbnN0IHRvcFB4ID0gZ2V0UHhPZmZzZXQodG9wLmZpeGVkIC0gZml4ZWRPZmZzZXRZLCBmaXhlZENvbnRlbnRIZWlnaHQsIHRvcC5zdHJldGNoLCBzdHJldGNoSGVpZ2h0KTtcblxuICAgICAgICBjb25zdCByaWdodEVtID0gZ2V0RW1PZmZzZXQocmlnaHQuc3RyZXRjaCAtIHN0cmV0Y2hPZmZzZXRYLCBzdHJldGNoQ29udGVudFdpZHRoLCBpY29uV2lkdGgsIHNoYXBlZEljb24ubGVmdCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0UHggPSBnZXRQeE9mZnNldChyaWdodC5maXhlZCAtIGZpeGVkT2Zmc2V0WCwgZml4ZWRDb250ZW50V2lkdGgsIHJpZ2h0LnN0cmV0Y2gsIHN0cmV0Y2hXaWR0aCk7XG5cbiAgICAgICAgY29uc3QgYm90dG9tRW0gPSBnZXRFbU9mZnNldChib3R0b20uc3RyZXRjaCAtIHN0cmV0Y2hPZmZzZXRZLCBzdHJldGNoQ29udGVudEhlaWdodCwgaWNvbkhlaWdodCwgc2hhcGVkSWNvbi50b3ApO1xuICAgICAgICBjb25zdCBib3R0b21QeCA9IGdldFB4T2Zmc2V0KGJvdHRvbS5maXhlZCAtIGZpeGVkT2Zmc2V0WSwgZml4ZWRDb250ZW50SGVpZ2h0LCBib3R0b20uc3RyZXRjaCwgc3RyZXRjaEhlaWdodCk7XG5cbiAgICAgICAgY29uc3QgdGwgPSBuZXcgUG9pbnQobGVmdEVtLCB0b3BFbSk7XG4gICAgICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHJpZ2h0RW0sIHRvcEVtKTtcbiAgICAgICAgY29uc3QgYnIgPSBuZXcgUG9pbnQocmlnaHRFbSwgYm90dG9tRW0pO1xuICAgICAgICBjb25zdCBibCA9IG5ldyBQb2ludChsZWZ0RW0sIGJvdHRvbUVtKTtcbiAgICAgICAgY29uc3QgcGl4ZWxPZmZzZXRUTCA9IG5ldyBQb2ludChsZWZ0UHggLyBwaXhlbFJhdGlvLCB0b3BQeCAvIHBpeGVsUmF0aW8pO1xuICAgICAgICBjb25zdCBwaXhlbE9mZnNldEJSID0gbmV3IFBvaW50KHJpZ2h0UHggLyBwaXhlbFJhdGlvLCBib3R0b21QeCAvIHBpeGVsUmF0aW8pO1xuXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gaWNvblJvdGF0ZSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSksXG4gICAgICAgICAgICAgICAgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgICAgIG1hdHJpeCA9IFtjb3MsIC1zaW4sIHNpbiwgY29zXTtcblxuICAgICAgICAgICAgdGwuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIHRyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICBibC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgYnIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHgxID0gbGVmdC5zdHJldGNoICsgbGVmdC5maXhlZDtcbiAgICAgICAgY29uc3QgeDIgPSByaWdodC5zdHJldGNoICsgcmlnaHQuZml4ZWQ7XG4gICAgICAgIGNvbnN0IHkxID0gdG9wLnN0cmV0Y2ggKyB0b3AuZml4ZWQ7XG4gICAgICAgIGNvbnN0IHkyID0gYm90dG9tLnN0cmV0Y2ggKyBib3R0b20uZml4ZWQ7XG5cbiAgICAgICAgY29uc3Qgc3ViUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IGltYWdlLnBhZGRlZFJlY3QueCArIGJvcmRlciArIHgxLFxuICAgICAgICAgICAgeTogaW1hZ2UucGFkZGVkUmVjdC55ICsgYm9yZGVyICsgeTEsXG4gICAgICAgICAgICB3OiB4MiAtIHgxLFxuICAgICAgICAgICAgaDogeTIgLSB5MVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1pbkZvbnRTY2FsZVggPSBmaXhlZENvbnRlbnRXaWR0aCAvIHBpeGVsUmF0aW8gLyBpY29uV2lkdGg7XG4gICAgICAgIGNvbnN0IG1pbkZvbnRTY2FsZVkgPSBmaXhlZENvbnRlbnRIZWlnaHQgLyBwaXhlbFJhdGlvIC8gaWNvbkhlaWdodDtcblxuICAgICAgICAvLyBJY29uIHF1YWQgaXMgcGFkZGVkLCBzbyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFsc28gbmVlZCB0byBiZSBwYWRkZWQuXG4gICAgICAgIHJldHVybiB7dGwsIHRyLCBibCwgYnIsIHRleDogc3ViUmVjdCwgd3JpdGluZ01vZGU6IHVuZGVmaW5lZCwgZ2x5cGhPZmZzZXQ6IFswLCAwXSwgc2VjdGlvbkluZGV4OiAwLCBwaXhlbE9mZnNldFRMLCBwaXhlbE9mZnNldEJSLCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZLCBpc1NERjogaXNTREZJY29ufTtcbiAgICB9O1xuXG4gICAgaWYgKCFoYXNJY29uVGV4dEZpdCB8fCAoIWltYWdlLnN0cmV0Y2hYICYmICFpbWFnZS5zdHJldGNoWSkpIHtcbiAgICAgICAgcXVhZHMucHVzaChtYWtlQm94KFxuICAgICAgICAgICAge2ZpeGVkOiAwLCBzdHJldGNoOiAtMX0sXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IC0xfSxcbiAgICAgICAgICAgIHtmaXhlZDogMCwgc3RyZXRjaDogaW1hZ2VXaWR0aCArIDF9LFxuICAgICAgICAgICAge2ZpeGVkOiAwLCBzdHJldGNoOiBpbWFnZUhlaWdodCArIDF9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeEN1dHMgPSBzdHJldGNoWm9uZXNUb0N1dHMoc3RyZXRjaFgsIGZpeGVkV2lkdGgsIHN0cmV0Y2hXaWR0aCk7XG4gICAgICAgIGNvbnN0IHlDdXRzID0gc3RyZXRjaFpvbmVzVG9DdXRzKHN0cmV0Y2hZLCBmaXhlZEhlaWdodCwgc3RyZXRjaEhlaWdodCk7XG5cbiAgICAgICAgZm9yIChsZXQgeGkgPSAwOyB4aSA8IHhDdXRzLmxlbmd0aCAtIDE7IHhpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHgxID0geEN1dHNbeGldO1xuICAgICAgICAgICAgY29uc3QgeDIgPSB4Q3V0c1t4aSArIDFdO1xuICAgICAgICAgICAgZm9yIChsZXQgeWkgPSAwOyB5aSA8IHlDdXRzLmxlbmd0aCAtIDE7IHlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5MSA9IHlDdXRzW3lpXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5MiA9IHlDdXRzW3lpICsgMV07XG4gICAgICAgICAgICAgICAgcXVhZHMucHVzaChtYWtlQm94KHgxLCB5MSwgeDIsIHkyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVhZHM7XG59XG5cbmZ1bmN0aW9uIHN1bVdpdGhpblJhbmdlKHJhbmdlcywgbWluLCBtYXgpIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHJhbmdlcykge1xuICAgICAgICBzdW0gKz0gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHJhbmdlWzFdKSkgLSBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgcmFuZ2VbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cblxuZnVuY3Rpb24gc3RyZXRjaFpvbmVzVG9DdXRzKHN0cmV0Y2hab25lcywgZml4ZWRTaXplLCBzdHJldGNoU2l6ZSkge1xuICAgIGNvbnN0IGN1dHMgPSBbe2ZpeGVkOiAtYm9yZGVyLCBzdHJldGNoOiAwfV07XG5cbiAgICBmb3IgKGNvbnN0IFtjMSwgYzJdIG9mIHN0cmV0Y2hab25lcykge1xuICAgICAgICBjb25zdCBsYXN0ID0gY3V0c1tjdXRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjdXRzLnB1c2goe1xuICAgICAgICAgICAgZml4ZWQ6IGMxIC0gbGFzdC5zdHJldGNoLFxuICAgICAgICAgICAgc3RyZXRjaDogbGFzdC5zdHJldGNoXG4gICAgICAgIH0pO1xuICAgICAgICBjdXRzLnB1c2goe1xuICAgICAgICAgICAgZml4ZWQ6IGMxIC0gbGFzdC5zdHJldGNoLFxuICAgICAgICAgICAgc3RyZXRjaDogbGFzdC5zdHJldGNoICsgKGMyIC0gYzEpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjdXRzLnB1c2goe1xuICAgICAgICBmaXhlZDogZml4ZWRTaXplICsgYm9yZGVyLFxuICAgICAgICBzdHJldGNoOiBzdHJldGNoU2l6ZVxuICAgIH0pO1xuICAgIHJldHVybiBjdXRzO1xufVxuXG5mdW5jdGlvbiBnZXRFbU9mZnNldChzdHJldGNoT2Zmc2V0LCBzdHJldGNoU2l6ZSwgaWNvblNpemUsIGljb25PZmZzZXQpIHtcbiAgICByZXR1cm4gc3RyZXRjaE9mZnNldCAvIHN0cmV0Y2hTaXplICogaWNvblNpemUgKyBpY29uT2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRQeE9mZnNldChmaXhlZE9mZnNldCwgZml4ZWRTaXplLCBzdHJldGNoT2Zmc2V0LCBzdHJldGNoU2l6ZSkge1xuICAgIHJldHVybiBmaXhlZE9mZnNldCAtIGZpeGVkU2l6ZSAqIHN0cmV0Y2hPZmZzZXQgLyBzdHJldGNoU2l6ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHF1YWRzIHVzZWQgZm9yIHJlbmRlcmluZyBhIHRleHQgbGFiZWwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2x5cGhRdWFkcyhhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZzogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4pOiBBcnJheTxTeW1ib2xRdWFkPiB7XG5cbiAgICBjb25zdCB0ZXh0Um90YXRlID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgKiBNYXRoLlBJIC8gMTgwO1xuICAgIGNvbnN0IHF1YWRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2hhcGluZy5wb3NpdGlvbmVkTGluZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwb3NpdGlvbmVkR2x5cGggb2YgbGluZS5wb3NpdGlvbmVkR2x5cGhzKSB7XG4gICAgICAgICAgICBpZiAoIXBvc2l0aW9uZWRHbHlwaC5yZWN0KSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHRleHR1cmVSZWN0ID0gcG9zaXRpb25lZEdseXBoLnJlY3QgfHwge307XG5cbiAgICAgICAgICAgIC8vIFRoZSByZWN0cyBoYXZlIGFuIGFkZGl0aW9uYWwgYnVmZmVyIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZWlyIHNpemUuXG4gICAgICAgICAgICBjb25zdCBnbHlwaFBhZGRpbmcgPSAxLjA7XG4gICAgICAgICAgICBsZXQgcmVjdEJ1ZmZlciA9IEdMWVBIX1BCRl9CT1JERVIgKyBnbHlwaFBhZGRpbmc7XG4gICAgICAgICAgICBsZXQgaXNTREYgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHBpeGVsUmF0aW8gPSAxLjA7XG4gICAgICAgICAgICBsZXQgbGluZU9mZnNldCA9IDAuMDtcblxuICAgICAgICAgICAgY29uc3Qgcm90YXRlVmVydGljYWxHbHlwaCA9IChhbG9uZ0xpbmUgfHwgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCkgJiYgcG9zaXRpb25lZEdseXBoLnZlcnRpY2FsO1xuICAgICAgICAgICAgY29uc3QgaGFsZkFkdmFuY2UgPSBwb3NpdGlvbmVkR2x5cGgubWV0cmljcy5hZHZhbmNlICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC8gMjtcblxuICAgICAgICAgICAgLy8gQWxpZ24gaW1hZ2VzIGFuZCBzY2FsZWQgZ2x5cGhzIGluIHRoZSBtaWRkbGUgb2YgYSB2ZXJ0aWNhbCBsaW5lLlxuICAgICAgICAgICAgaWYgKGFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc2hhcGluZy52ZXJ0aWNhbGl6YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlZEdseXBoT2Zmc2V0ID0gKHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAtIDEpICogT05FX0VNO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlT2Zmc2V0ID0gKE9ORV9FTSAtIHBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLndpZHRoICogcG9zaXRpb25lZEdseXBoLnNjYWxlKSAvIDI7XG4gICAgICAgICAgICAgICAgbGluZU9mZnNldCA9IGxpbmUubGluZU9mZnNldCAvIDIgLSAocG9zaXRpb25lZEdseXBoLmltYWdlTmFtZSA/IC1pbWFnZU9mZnNldCA6IHNjYWxlZEdseXBoT2Zmc2V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRHbHlwaC5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlTWFwW3Bvc2l0aW9uZWRHbHlwaC5pbWFnZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlzU0RGID0gaW1hZ2Uuc2RmO1xuICAgICAgICAgICAgICAgIHBpeGVsUmF0aW8gPSBpbWFnZS5waXhlbFJhdGlvO1xuICAgICAgICAgICAgICAgIHJlY3RCdWZmZXIgPSBJTUFHRV9QQURESU5HIC8gcGl4ZWxSYXRpbztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2x5cGhPZmZzZXQgPSBhbG9uZ0xpbmUgP1xuICAgICAgICAgICAgICAgIFtwb3NpdGlvbmVkR2x5cGgueCArIGhhbGZBZHZhbmNlLCBwb3NpdGlvbmVkR2x5cGgueV0gOlxuICAgICAgICAgICAgICAgIFswLCAwXTtcblxuICAgICAgICAgICAgbGV0IGJ1aWx0SW5PZmZzZXQgPSBhbG9uZ0xpbmUgP1xuICAgICAgICAgICAgICAgIFswLCAwXSA6XG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uZWRHbHlwaC54ICsgaGFsZkFkdmFuY2UgKyB0ZXh0T2Zmc2V0WzBdLCBwb3NpdGlvbmVkR2x5cGgueSArIHRleHRPZmZzZXRbMV0gLSBsaW5lT2Zmc2V0XTtcblxuICAgICAgICAgICAgbGV0IHZlcnRpY2FsaXplZExhYmVsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgaWYgKHJvdGF0ZVZlcnRpY2FsR2x5cGgpIHtcbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBQT0kgbGFiZWxzIHRoYXQgYXJlIHJvdGF0ZWQgOTBkZWcgQ1cgYW5kIHdob3NlIGdseXBocyBtdXN0IHByZXNlcnZlIHVwcmlnaHQgb3JpZW50YXRpb25cbiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIHJvdGF0ZWQgOTBkZWcgQ0NXLiBBZnRlciBhIHF1YWQgaXMgcm90YXRlZCwgaXQgaXMgdHJhbnNsYXRlZCB0byB0aGUgb3JpZ2luYWwgYnVpbHQtaW4gb2Zmc2V0LlxuICAgICAgICAgICAgICAgIHZlcnRpY2FsaXplZExhYmVsT2Zmc2V0ID0gYnVpbHRJbk9mZnNldDtcbiAgICAgICAgICAgICAgICBidWlsdEluT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB4MSA9IChwb3NpdGlvbmVkR2x5cGgubWV0cmljcy5sZWZ0IC0gcmVjdEJ1ZmZlcikgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLSBoYWxmQWR2YW5jZSArIGJ1aWx0SW5PZmZzZXRbMF07XG4gICAgICAgICAgICBjb25zdCB5MSA9ICgtcG9zaXRpb25lZEdseXBoLm1ldHJpY3MudG9wIC0gcmVjdEJ1ZmZlcikgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgKyBidWlsdEluT2Zmc2V0WzFdO1xuICAgICAgICAgICAgY29uc3QgeDIgPSB4MSArIHRleHR1cmVSZWN0LncgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLyBwaXhlbFJhdGlvO1xuICAgICAgICAgICAgY29uc3QgeTIgPSB5MSArIHRleHR1cmVSZWN0LmggKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLyBwaXhlbFJhdGlvO1xuXG4gICAgICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludCh4MSwgeTEpO1xuICAgICAgICAgICAgY29uc3QgdHIgPSBuZXcgUG9pbnQoeDIsIHkxKTtcbiAgICAgICAgICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KHgxLCB5Mik7XG4gICAgICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludCh4MiwgeTIpO1xuXG4gICAgICAgICAgICBpZiAocm90YXRlVmVydGljYWxHbHlwaCkge1xuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsLXN1cHBvcnRpbmcgZ2x5cGhzIGFyZSBsYWlkIG91dCBpbiAyNHgyNCBwb2ludCBib3hlcyAoMSBzcXVhcmUgZW0pXG4gICAgICAgICAgICAgICAgLy8gSW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbiwgdGhlIHkgdmFsdWVzIGZvciBnbHlwaHMgYXJlIGJlbG93IHRoZSBtaWRsaW5lXG4gICAgICAgICAgICAgICAgLy8gYW5kIHdlIHVzZSBhIFwieU9mZnNldFwiIG9mIC0xNyB0byBwdWxsIHRoZW0gdXAgdG8gdGhlIG1pZGRsZS5cbiAgICAgICAgICAgICAgICAvLyBCeSByb3RhdGluZyBjb3VudGVyLWNsb2Nrd2lzZSBhcm91bmQgdGhlIHBvaW50IGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxlZnRcbiAgICAgICAgICAgICAgICAvLyBlZGdlIG9mIGEgMjR4MjQgbGF5b3V0IGJveCBjZW50ZXJlZCBiZWxvdyB0aGUgbWlkbGluZSwgd2UgYWxpZ24gdGhlIGNlbnRlclxuICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBnbHlwaHMgd2l0aCB0aGUgaG9yaXpvbnRhbCBtaWRsaW5lLCBzbyB0aGUgeU9mZnNldCBpcyBubyBsb25nZXJcbiAgICAgICAgICAgICAgICAvLyBuZWNlc3NhcnksIGJ1dCB3ZSBhbHNvIHB1bGwgdGhlIGdseXBoIHRvIHRoZSBsZWZ0IGFsb25nIHRoZSB4IGF4aXMuXG4gICAgICAgICAgICAgICAgLy8gVGhlIHkgY29vcmRpbmF0ZSBpbmNsdWRlcyBiYXNlbGluZSB5T2Zmc2V0LCB0aHVzIG5lZWRzIHRvIGJlIGFjY291bnRlZFxuICAgICAgICAgICAgICAgIC8vIGZvciB3aGVuIGdseXBoIGlzIHJvdGF0ZWQgYW5kIHRyYW5zbGF0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IFBvaW50KC1oYWxmQWR2YW5jZSwgaGFsZkFkdmFuY2UgLSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFJvdGF0aW9uID0gLU1hdGguUEkgLyAyO1xuXG4gICAgICAgICAgICAgICAgLy8geEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24gaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gZnVsbC13aWR0aCBhbmQgaGFsZi13aWR0aFxuICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UsIHNob3VsZCBiZSAwIGZvciBmdWxsLXdpZHRoIGdseXBocyBhbmQgd2lsbCBwdWxsIHVwIGhhbGYtd2lkdGggZ2x5cGhzLlxuICAgICAgICAgICAgICAgIGNvbnN0IHhIYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uID0gT05FX0VNIC8gMiAtIGhhbGZBZHZhbmNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHlJbWFnZU9mZnNldENvcnJlY3Rpb24gPSBwb3NpdGlvbmVkR2x5cGguaW1hZ2VOYW1lID8geEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24gOiAwLjA7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiA9IG5ldyBQb2ludCg1IC0gU0hBUElOR19ERUZBVUxUX09GRlNFVCAtIHhIYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uLCAteUltYWdlT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxPZmZzZXRDb3JyZWN0aW9uID0gbmV3IFBvaW50KC4uLnZlcnRpY2FsaXplZExhYmVsT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB0bC5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZChoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICAgICAgdHIuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJsLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBici5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZChoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ZXh0Um90YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4odGV4dFJvdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGNvcyA9IE1hdGguY29zKHRleHRSb3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBbY29zLCAtc2luLCBzaW4sIGNvc107XG5cbiAgICAgICAgICAgICAgICB0bC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgICAgIHRyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgYmwuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgICAgICBici5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwaXhlbE9mZnNldFRMID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICAgICAgY29uc3QgcGl4ZWxPZmZzZXRCUiA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbkZvbnRTY2FsZVggPSAwO1xuICAgICAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWSA9IDA7XG4gICAgICAgICAgICBxdWFkcy5wdXNoKHt0bCwgdHIsIGJsLCBiciwgdGV4OiB0ZXh0dXJlUmVjdCwgd3JpdGluZ01vZGU6IHNoYXBpbmcud3JpdGluZ01vZGUsIGdseXBoT2Zmc2V0LCBzZWN0aW9uSW5kZXg6IHBvc2l0aW9uZWRHbHlwaC5zZWN0aW9uSW5kZXgsIGlzU0RGLCBwaXhlbE9mZnNldFRMLCBwaXhlbE9mZnNldEJSLCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVhZHM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcblxuLyoqXG4gKiBBIENvbGxpc2lvbkZlYXR1cmUgcmVwcmVzZW50cyB0aGUgYXJlYSBvZiB0aGUgdGlsZSBjb3ZlcmVkIGJ5IGEgc2luZ2xlIGxhYmVsLlxuICogSXQgaXMgdXNlZCB3aXRoIENvbGxpc2lvbkluZGV4IHRvIGNoZWNrIGlmIHRoZSBsYWJlbCBvdmVybGFwcyB3aXRoIGFueVxuICogcHJldmlvdXMgbGFiZWxzLiBBIENvbGxpc2lvbkZlYXR1cmUgaXMgbW9zdGx5IGp1c3QgYSBzZXQgb2YgQ29sbGlzaW9uQm94XG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkZlYXR1cmUge1xuICAgIGJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBib3hFbmRJbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgQ29sbGlzaW9uRmVhdHVyZSwgYWRkaW5nIGl0cyBjb2xsaXNpb24gYm94IGRhdGEgdG8gdGhlIGdpdmVuIGNvbGxpc2lvbkJveEFycmF5IGluIHRoZSBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxpbmUgVGhlIGdlb21ldHJ5IHRoZSBsYWJlbCBpcyBwbGFjZWQgb24uXG4gICAgICogQHBhcmFtIGFuY2hvciBUaGUgcG9pbnQgYWxvbmcgdGhlIGxpbmUgYXJvdW5kIHdoaWNoIHRoZSBsYWJlbCBpcyBhbmNob3JlZC5cbiAgICAgKiBAcGFyYW0gc2hhcGVkIFRoZSB0ZXh0IG9yIGljb24gc2hhcGluZyByZXN1bHRzLlxuICAgICAqIEBwYXJhbSBib3hTY2FsZSBBIG1hZ2ljIG51bWJlciB1c2VkIHRvIGNvbnZlcnQgZnJvbSBnbHlwaCBtZXRyaWNzIHVuaXRzIHRvIGdlb21ldHJ5IHVuaXRzLlxuICAgICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBhbW91bnQgb2YgcGFkZGluZyB0byBhZGQgYXJvdW5kIHRoZSBsYWJlbCBlZGdlcy5cbiAgICAgKiBAcGFyYW0gYWxpZ25MaW5lIFdoZXRoZXIgdGhlIGxhYmVsIGlzIGFsaWduZWQgd2l0aCB0aGUgbGluZSBvciB0aGUgdmlld3BvcnQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgIGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzaGFwZWQ6IE9iamVjdCxcbiAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICByb3RhdGU6IG51bWJlcikge1xuICAgICAgICBsZXQgeTEgPSBzaGFwZWQudG9wICogYm94U2NhbGUgLSBwYWRkaW5nO1xuICAgICAgICBsZXQgeTIgPSBzaGFwZWQuYm90dG9tICogYm94U2NhbGUgKyBwYWRkaW5nO1xuICAgICAgICBsZXQgeDEgPSBzaGFwZWQubGVmdCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgbGV0IHgyID0gc2hhcGVkLnJpZ2h0ICogYm94U2NhbGUgKyBwYWRkaW5nO1xuXG4gICAgICAgIGNvbnN0IGNvbGxpc2lvblBhZGRpbmcgPSBzaGFwZWQuY29sbGlzaW9uUGFkZGluZztcbiAgICAgICAgaWYgKGNvbGxpc2lvblBhZGRpbmcpIHtcbiAgICAgICAgICAgIHgxIC09IGNvbGxpc2lvblBhZGRpbmdbMF0gKiBib3hTY2FsZTtcbiAgICAgICAgICAgIHkxIC09IGNvbGxpc2lvblBhZGRpbmdbMV0gKiBib3hTY2FsZTtcbiAgICAgICAgICAgIHgyICs9IGNvbGxpc2lvblBhZGRpbmdbMl0gKiBib3hTY2FsZTtcbiAgICAgICAgICAgIHkyICs9IGNvbGxpc2lvblBhZGRpbmdbM10gKiBib3hTY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm94U3RhcnRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgICAgICBpZiAoYWxpZ25MaW5lKSB7XG5cbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB5MiAtIHkxO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0geDIgLSB4MTtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbWluaW11bSBib3ggaGVpZ2h0IHRvIGF2b2lkIHZlcnkgbWFueSBzbWFsbCBsYWJlbHNcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCgxMCAqIGJveFNjYWxlLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgKGFuY2hvci5zZWdtZW50OiBhbnkpLCBsZW5ndGgsIGhlaWdodCwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgb3ZlcnNjYWxpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocm90YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgKi1yb3RhdGUgaW4gcG9pbnQgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82MDc1XG4gICAgICAgICAgICAgICAgLy8gRG9lc24ndCBhY2NvdW50IGZvciBpY29uLXRleHQtZml0XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludCh4MSwgeTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHgyLCB5MSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludCh4MiwgeTIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlUmFkaWFucyA9IHJvdGF0ZSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICAgICAgICAgICAgICB0bC5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIHRyLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgYmwuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBici5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29sbGlzaW9uIGZlYXR1cmVzIHJlcXVpcmUgYW4gXCJvbi1heGlzXCIgZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgLy8gc28gdGFrZSB0aGUgZW52ZWxvcGUgb2YgdGhlIHJvdGF0ZWQgZ2VvbWV0cnlcbiAgICAgICAgICAgICAgICAvLyAobWF5IGJlIHF1aXRlIGxhcmdlIGZvciB3aWRlIGxhYmVscyByb3RhdGVkIDQ1IGRlZ3JlZXMpXG4gICAgICAgICAgICAgICAgeDEgPSBNYXRoLm1pbih0bC54LCB0ci54LCBibC54LCBici54KTtcbiAgICAgICAgICAgICAgICB4MiA9IE1hdGgubWF4KHRsLngsIHRyLngsIGJsLngsIGJyLngpO1xuICAgICAgICAgICAgICAgIHkxID0gTWF0aC5taW4odGwueSwgdHIueSwgYmwueSwgYnIueSk7XG4gICAgICAgICAgICAgICAgeTIgPSBNYXRoLm1heCh0bC55LCB0ci55LCBibC55LCBici55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LmVtcGxhY2VCYWNrKGFuY2hvci54LCBhbmNob3IueSwgeDEsIHkxLCB4MiwgeTIsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgMCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJveEVuZEluZGV4ID0gY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHNldCBvZiBDb2xsaXNpb25Cb3ggb2JqZWN0cyBmb3IgYSBsaW5lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGxhYmVsIGluIGdlb21ldHJ5IHVuaXRzLlxuICAgICAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gICAgICogQHBhcmFtIGJveFNpemUgVGhlIHNpemUgb2YgdGhlIGNvbGxpc2lvbiBib3hlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9hZGRMaW5lQ29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsTGVuZ3RoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBib3hTaXplIC8gMjtcbiAgICAgICAgY29uc3QgbkJveGVzID0gTWF0aC5mbG9vcihsYWJlbExlbmd0aCAvIHN0ZXApIHx8IDE7XG4gICAgICAgIC8vIFdlIGNhbGN1bGF0ZSBsaW5lIGNvbGxpc2lvbiBjaXJjbGVzIG91dCB0byAzMDAlIG9mIHdoYXQgd291bGQgbm9ybWFsbHkgYmUgb3VyXG4gICAgICAgIC8vIG1heCBzaXplLCB0byBhbGxvdyBjb2xsaXNpb24gZGV0ZWN0aW9uIHRvIHdvcmsgb24gbGFiZWxzIHRoYXQgZXhwYW5kIGFzXG4gICAgICAgIC8vIHRoZXkgbW92ZSBpbnRvIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyBWZXJ0aWNhbGx5IG9yaWVudGVkIGxhYmVscyBpbiB0aGUgZGlzdGFudCBmaWVsZCBjYW4gZXh0ZW5kIHBhc3QgdGhpcyBwYWRkaW5nXG4gICAgICAgIC8vIFRoaXMgaXMgYSBub3RpY2VhYmxlIHByb2JsZW0gaW4gb3ZlcnNjYWxlZCB0aWxlcyB3aGVyZSB0aGUgcGl0Y2ggMC1iYXNlZFxuICAgICAgICAvLyBzeW1ib2wgc3BhY2luZyB3aWxsIHB1dCBsYWJlbHMgdmVyeSBjbG9zZSB0b2dldGhlciBpbiBhIHBpdGNoZWQgbWFwLlxuICAgICAgICAvLyBUbyByZWR1Y2UgdGhlIGNvc3Qgb2YgYWRkaW5nIGV4dHJhIGNvbGxpc2lvbiBjaXJjbGVzLCB3ZSBzbG93bHkgaW5jcmVhc2VcbiAgICAgICAgLy8gdGhlbSBmb3Igb3ZlcnNjYWxlZCB0aWxlcy5cbiAgICAgICAgY29uc3Qgb3ZlcnNjYWxpbmdQYWRkaW5nRmFjdG9yID0gMSArIC40ICogTWF0aC5sb2cob3ZlcnNjYWxpbmcpIC8gTWF0aC5MTjI7XG4gICAgICAgIGNvbnN0IG5QaXRjaFBhZGRpbmdCb3hlcyA9IE1hdGguZmxvb3IobkJveGVzICogb3ZlcnNjYWxpbmdQYWRkaW5nRmFjdG9yIC8gMik7XG5cbiAgICAgICAgLy8gb2Zmc2V0IHRoZSBjZW50ZXIgb2YgdGhlIGZpcnN0IGJveCBieSBoYWxmIGEgYm94IHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlXG4gICAgICAgIC8vIGJveCBpcyBhdCB0aGUgZWRnZSBvZiB0aGUgbGFiZWwuXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94T2Zmc2V0ID0gLWJveFNpemUgLyAyO1xuXG4gICAgICAgIGxldCBwID0gYW5jaG9yO1xuICAgICAgICBsZXQgaW5kZXggPSBzZWdtZW50ICsgMTtcbiAgICAgICAgbGV0IGFuY2hvckRpc3RhbmNlID0gZmlyc3RCb3hPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGxhYmVsU3RhcnREaXN0YW5jZSA9IC1sYWJlbExlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdTdGFydERpc3RhbmNlID0gbGFiZWxTdGFydERpc3RhbmNlIC0gbGFiZWxMZW5ndGggLyA0O1xuICAgICAgICAvLyBtb3ZlIGJhY2t3YXJkcyBhbG9uZyB0aGUgbGluZSB0byB0aGUgZmlyc3Qgc2VnbWVudCB0aGUgbGFiZWwgYXBwZWFycyBvblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpbmRleC0tO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvckRpc3RhbmNlID4gbGFiZWxTdGFydERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVja01heEFuZ2xlIHNob3VsZCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsaW5lIGRvZXNuJ3QgZXh0ZW5kIGZhciBlbm91Z2ggYmFjayBmb3IgYWxsIG9mIG91ciBwYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2UgZ290IGZhciBlbm91Z2ggdG8gc2hvdyB0aGUgbGFiZWwgdW5kZXIgbW9zdCBjb25kaXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yRGlzdGFuY2UgLT0gbGluZVtpbmRleF0uZGlzdChwKTtcbiAgICAgICAgICAgICAgICBwID0gbGluZVtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGFuY2hvckRpc3RhbmNlID4gcGFkZGluZ1N0YXJ0RGlzdGFuY2UpO1xuXG4gICAgICAgIGxldCBzZWdtZW50TGVuZ3RoID0gbGluZVtpbmRleF0uZGlzdChsaW5lW2luZGV4ICsgMV0pO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAtblBpdGNoUGFkZGluZ0JveGVzOyBpIDwgbkJveGVzICsgblBpdGNoUGFkZGluZ0JveGVzOyBpKyspIHtcblxuICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIHRoZSBib3ggd2lsbCBiZSBmcm9tIHRoZSBhbmNob3JcbiAgICAgICAgICAgIGNvbnN0IGJveE9mZnNldCA9IGkgKiBzdGVwO1xuICAgICAgICAgICAgbGV0IGJveERpc3RhbmNlVG9BbmNob3IgPSBsYWJlbFN0YXJ0RGlzdGFuY2UgKyBib3hPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIGRpc3RhbmNlIGJldHdlZW4gcGl0Y2ggcGFkZGluZyBib3hlcyBiaWdnZXJcbiAgICAgICAgICAgIGlmIChib3hPZmZzZXQgPCAwKSBib3hEaXN0YW5jZVRvQW5jaG9yICs9IGJveE9mZnNldDtcbiAgICAgICAgICAgIGlmIChib3hPZmZzZXQgPiBsYWJlbExlbmd0aCkgYm94RGlzdGFuY2VUb0FuY2hvciArPSBib3hPZmZzZXQgLSBsYWJlbExlbmd0aDtcblxuICAgICAgICAgICAgaWYgKGJveERpc3RhbmNlVG9BbmNob3IgPCBhbmNob3JEaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBsaW5lIGRvZXNuJ3QgZXh0ZW5kIGZhciBlbm91Z2ggYmFjayBmb3IgdGhpcyBib3gsIHNraXAgaXRcbiAgICAgICAgICAgICAgICAvLyAoVGhpcyBjb3VsZCBhbGxvdyBmb3IgbGluZSBjb2xsaXNpb25zIG9uIGRpc3RhbnQgdGlsZXMpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBib3ggaXMgbm90IG9uIHRoZSBjdXJyZW50IHNlZ21lbnQuIE1vdmUgdG8gdGhlIG5leHQgc2VnbWVudC5cbiAgICAgICAgICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSArIHNlZ21lbnRMZW5ndGggPCBib3hEaXN0YW5jZVRvQW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yRGlzdGFuY2UgKz0gc2VnbWVudExlbmd0aDtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgZW5vdWdoIHJvb20gYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIHRoZSBib3ggd2lsbCBiZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnRcbiAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRCb3hEaXN0YW5jZSA9IGJveERpc3RhbmNlVG9BbmNob3IgLSBhbmNob3JEaXN0YW5jZTtcblxuICAgICAgICAgICAgY29uc3QgcDAgPSBsaW5lW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gbGluZVtpbmRleCArIDFdO1xuICAgICAgICAgICAgY29uc3QgYm94QW5jaG9yUG9pbnQgPSBwMS5zdWIocDApLl91bml0KCkuX211bHQoc2VnbWVudEJveERpc3RhbmNlKS5fYWRkKHAwKS5fcm91bmQoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyB3aXRoaW4gYm94U2l6ZSBvZiB0aGUgYW5jaG9yLCBmb3JjZSB0aGUgYm94IHRvIGJlIHVzZWRcbiAgICAgICAgICAgIC8vIChzbyBldmVuIDAtd2lkdGggbGFiZWxzIHVzZSBhdCBsZWFzdCBvbmUgYm94KVxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgLjggbXVsdGlwbGljYXRpb24gZ2l2ZXMgdXMgYSBsaXR0bGUgYml0IG9mIGNvbnNlcnZhdGl2ZVxuICAgICAgICAgICAgLy8gcGFkZGluZyBpbiBjaG9vc2luZyB3aGljaCBib3hlcyB0byB1c2UgKHNlZSBDb2xsaXNpb25JbmRleCNwbGFjZWRDb2xsaXNpb25DaXJjbGVzKVxuICAgICAgICAgICAgY29uc3QgcGFkZGVkQW5jaG9yRGlzdGFuY2UgPSBNYXRoLmFicyhib3hEaXN0YW5jZVRvQW5jaG9yIC0gZmlyc3RCb3hPZmZzZXQpIDwgc3RlcCA/XG4gICAgICAgICAgICAgICAgMCA6XG4gICAgICAgICAgICAgICAgKGJveERpc3RhbmNlVG9BbmNob3IgLSBmaXJzdEJveE9mZnNldCkgKiAwLjg7XG5cbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LmVtcGxhY2VCYWNrKGJveEFuY2hvclBvaW50LngsIGJveEFuY2hvclBvaW50LnksXG4gICAgICAgICAgICAgICAgLWJveFNpemUgLyAyLCAtYm94U2l6ZSAvIDIsIGJveFNpemUgLyAyLCBib3hTaXplIC8gMixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIGJveFNpemUgLyAyLCBwYWRkZWRBbmNob3JEaXN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxpc2lvbkZlYXR1cmU7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbnlRdWV1ZSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSA9IFtdLCBjb21wYXJlID0gZGVmYXVsdENvbXBhcmUpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLmNvbXBhcmUgPSBjb21wYXJlO1xuXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAodGhpcy5sZW5ndGggPj4gMSkgLSAxOyBpID49IDA7IGktLSkgdGhpcy5fZG93bihpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goaXRlbSkge1xuICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgICAgdGhpcy5fdXAodGhpcy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmRhdGFbMF07XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZGF0YS5wb3AoKTtcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbMF0gPSBib3R0b207XG4gICAgICAgICAgICB0aGlzLl9kb3duKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICBwZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhWzBdO1xuICAgIH1cblxuICAgIF91cChwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gZGF0YVtwYXJlbnRdO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgY3VycmVudCkgPj0gMCkgYnJlYWs7XG4gICAgICAgICAgICBkYXRhW3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgcG9zID0gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG5cbiAgICBfZG93bihwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IHRoaXMubGVuZ3RoID4+IDE7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgd2hpbGUgKHBvcyA8IGhhbGZMZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBsZWZ0ID0gKHBvcyA8PCAxKSArIDE7XG4gICAgICAgICAgICBsZXQgYmVzdCA9IGRhdGFbbGVmdF07XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyAxO1xuXG4gICAgICAgICAgICBpZiAocmlnaHQgPCB0aGlzLmxlbmd0aCAmJiBjb21wYXJlKGRhdGFbcmlnaHRdLCBiZXN0KSA8IDApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmVzdCA9IGRhdGFbcmlnaHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmUoYmVzdCwgaXRlbSkgPj0gMCkgYnJlYWs7XG5cbiAgICAgICAgICAgIGRhdGFbcG9zXSA9IGJlc3Q7XG4gICAgICAgICAgICBwb3MgPSBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUXVldWUgZnJvbSAndGlueXF1ZXVlJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtkaXN0VG9TZWdtZW50U3F1YXJlZH0gZnJvbSAnLi9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuXG4vKipcbiAqIEZpbmRzIGFuIGFwcHJveGltYXRpb24gb2YgYSBwb2x5Z29uJ3MgUG9sZSBPZiBJbmFjY2Vzc2liaWxpeSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2xlX29mX2luYWNjZXNzaWJpbGl0eVxuICogVGhpcyBpcyBhIGNvcHkgb2YgaHR0cDovL2dpdGh1Yi5jb20vbWFwYm94L3BvbHlsYWJlbCBhZGFwdGVkIHRvIHVzZSBQb2ludHNcbiAqXG4gKiBAcGFyYW0gcG9seWdvblJpbmdzIGZpcnN0IGl0ZW0gaW4gYXJyYXkgaXMgdGhlIG91dGVyIHJpbmcgZm9sbG93ZWQgb3B0aW9uYWxseSBieSB0aGUgbGlzdCBvZiBob2xlcywgc2hvdWxkIGJlIGFuIGVsZW1lbnQgb2YgdGhlIHJlc3VsdCBvZiB1dGlsL2NsYXNzaWZ5X3JpbmdzXG4gKiBAcGFyYW0gcHJlY2lzaW9uIFNwZWNpZmllZCBpbiBpbnB1dCBjb29yZGluYXRlIHVuaXRzLiBJZiAwIHJldHVybnMgYWZ0ZXIgZmlyc3QgcnVuLCBpZiA+IDAgcmVwZWF0ZWRseSBuYXJyb3dzIHRoZSBzZWFyY2ggc3BhY2UgdW50aWwgdGhlIHJhZGl1cyBvZiB0aGUgYXJlYSBzZWFyY2hlZCBmb3IgdGhlIGJlc3QgcG9sZSBpcyBsZXNzIHRoYW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0gZGVidWcgUHJpbnQgc29tZSBzdGF0aXN0aWNzIHRvIHRoZSBjb25zb2xlIGR1cmluZyBleGVjdXRpb25cbiAqIEByZXR1cm5zIFBvbGUgb2YgSW5hY2Nlc3NpYmlsaXkuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocG9seWdvblJpbmdzOiBBcnJheTxBcnJheTxQb2ludD4+LCBwcmVjaXNpb24/OiBudW1iZXIgPSAxLCBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZSk6IFBvaW50IHtcbiAgICAvLyBmaW5kIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG91dGVyIHJpbmdcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LCBtaW5ZID0gSW5maW5pdHksIG1heFggPSAtSW5maW5pdHksIG1heFkgPSAtSW5maW5pdHk7XG4gICAgY29uc3Qgb3V0ZXJSaW5nID0gcG9seWdvblJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0ZXJSaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBvdXRlclJpbmdbaV07XG4gICAgICAgIGlmICghaSB8fCBwLnggPCBtaW5YKSBtaW5YID0gcC54O1xuICAgICAgICBpZiAoIWkgfHwgcC55IDwgbWluWSkgbWluWSA9IHAueTtcbiAgICAgICAgaWYgKCFpIHx8IHAueCA+IG1heFgpIG1heFggPSBwLng7XG4gICAgICAgIGlmICghaSB8fCBwLnkgPiBtYXhZKSBtYXhZID0gcC55O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgY29uc3QgaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgY2VsbFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcbiAgICBsZXQgaCA9IGNlbGxTaXplIC8gMjtcblxuICAgIC8vIGEgcHJpb3JpdHkgcXVldWUgb2YgY2VsbHMgaW4gb3JkZXIgb2YgdGhlaXIgXCJwb3RlbnRpYWxcIiAobWF4IGRpc3RhbmNlIHRvIHBvbHlnb24pXG4gICAgY29uc3QgY2VsbFF1ZXVlID0gbmV3IFF1ZXVlKFtdLCBjb21wYXJlTWF4KTtcblxuICAgIGlmIChjZWxsU2l6ZSA9PT0gMCkgcmV0dXJuIG5ldyBQb2ludChtaW5YLCBtaW5ZKTtcblxuICAgIC8vIGNvdmVyIHBvbHlnb24gd2l0aCBpbml0aWFsIGNlbGxzXG4gICAgZm9yIChsZXQgeCA9IG1pblg7IHggPCBtYXhYOyB4ICs9IGNlbGxTaXplKSB7XG4gICAgICAgIGZvciAobGV0IHkgPSBtaW5ZOyB5IDwgbWF4WTsgeSArPSBjZWxsU2l6ZSkge1xuICAgICAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoeCArIGgsIHkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRha2UgY2VudHJvaWQgYXMgdGhlIGZpcnN0IGJlc3QgZ3Vlc3NcbiAgICBsZXQgYmVzdENlbGwgPSBnZXRDZW50cm9pZENlbGwocG9seWdvblJpbmdzKTtcbiAgICBsZXQgbnVtUHJvYmVzID0gY2VsbFF1ZXVlLmxlbmd0aDtcblxuICAgIHdoaWxlIChjZWxsUXVldWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIHBpY2sgdGhlIG1vc3QgcHJvbWlzaW5nIGNlbGwgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxRdWV1ZS5wb3AoKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGJlc3QgY2VsbCBpZiB3ZSBmb3VuZCBhIGJldHRlciBvbmVcbiAgICAgICAgaWYgKGNlbGwuZCA+IGJlc3RDZWxsLmQgfHwgIWJlc3RDZWxsLmQpIHtcbiAgICAgICAgICAgIGJlc3RDZWxsID0gY2VsbDtcbiAgICAgICAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5sb2coJ2ZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzJywgTWF0aC5yb3VuZCgxZTQgKiBjZWxsLmQpIC8gMWU0LCBudW1Qcm9iZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG8gbm90IGRyaWxsIGRvd24gZnVydGhlciBpZiB0aGVyZSdzIG5vIGNoYW5jZSBvZiBhIGJldHRlciBzb2x1dGlvblxuICAgICAgICBpZiAoY2VsbC5tYXggLSBiZXN0Q2VsbC5kIDw9IHByZWNpc2lvbikgY29udGludWU7XG5cbiAgICAgICAgLy8gc3BsaXQgdGhlIGNlbGwgaW50byBmb3VyIGNlbGxzXG4gICAgICAgIGggPSBjZWxsLmggLyAyO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCAtIGgsIGNlbGwucC55IC0gaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54ICsgaCwgY2VsbC5wLnkgLSBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggLSBoLCBjZWxsLnAueSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCArIGgsIGNlbGwucC55ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIG51bVByb2JlcyArPSA0O1xuICAgIH1cblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhgbnVtIHByb2JlczogJHtudW1Qcm9iZXN9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBiZXN0IGRpc3RhbmNlOiAke2Jlc3RDZWxsLmR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RDZWxsLnA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNYXgoYSwgYikge1xuICAgIHJldHVybiBiLm1heCAtIGEubWF4O1xufVxuXG5mdW5jdGlvbiBDZWxsKHgsIHksIGgsIHBvbHlnb24pIHtcbiAgICB0aGlzLnAgPSBuZXcgUG9pbnQoeCwgeSk7XG4gICAgdGhpcy5oID0gaDsgLy8gaGFsZiB0aGUgY2VsbCBzaXplXG4gICAgdGhpcy5kID0gcG9pbnRUb1BvbHlnb25EaXN0KHRoaXMucCwgcG9seWdvbik7IC8vIGRpc3RhbmNlIGZyb20gY2VsbCBjZW50ZXIgdG8gcG9seWdvblxuICAgIHRoaXMubWF4ID0gdGhpcy5kICsgdGhpcy5oICogTWF0aC5TUVJUMjsgLy8gbWF4IGRpc3RhbmNlIHRvIHBvbHlnb24gd2l0aGluIGEgY2VsbFxufVxuXG4vLyBzaWduZWQgZGlzdGFuY2UgZnJvbSBwb2ludCB0byBwb2x5Z29uIG91dGxpbmUgKG5lZ2F0aXZlIGlmIHBvaW50IGlzIG91dHNpZGUpXG5mdW5jdGlvbiBwb2ludFRvUG9seWdvbkRpc3QocCwgcG9seWdvbikge1xuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBsZXQgbWluRGlzdFNxID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IHBvbHlnb25ba107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJpbmdbaV07XG4gICAgICAgICAgICBjb25zdCBiID0gcmluZ1tqXTtcblxuICAgICAgICAgICAgaWYgKChhLnkgPiBwLnkgIT09IGIueSA+IHAueSkgJiZcbiAgICAgICAgICAgICAgICAocC54IDwgKGIueCAtIGEueCkgKiAocC55IC0gYS55KSAvIChiLnkgLSBhLnkpICsgYS54KSkgaW5zaWRlID0gIWluc2lkZTtcblxuICAgICAgICAgICAgbWluRGlzdFNxID0gTWF0aC5taW4obWluRGlzdFNxLCBkaXN0VG9TZWdtZW50U3F1YXJlZChwLCBhLCBiKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGluc2lkZSA/IDEgOiAtMSkgKiBNYXRoLnNxcnQobWluRGlzdFNxKTtcbn1cblxuLy8gZ2V0IHBvbHlnb24gY2VudHJvaWRcbmZ1bmN0aW9uIGdldENlbnRyb2lkQ2VsbChwb2x5Z29uKSB7XG4gICAgbGV0IGFyZWEgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IDA7XG4gICAgY29uc3QgcG9pbnRzID0gcG9seWdvblswXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgYiA9IHBvaW50c1tqXTtcbiAgICAgICAgY29uc3QgZiA9IGEueCAqIGIueSAtIGIueCAqIGEueTtcbiAgICAgICAgeCArPSAoYS54ICsgYi54KSAqIGY7XG4gICAgICAgIHkgKz0gKGEueSArIGIueSkgKiBmO1xuICAgICAgICBhcmVhICs9IGYgKiAzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENlbGwoeCAvIGFyZWEsIHkgLyBhcmVhLCAwLCBwb2x5Z29uKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG5pbXBvcnQge2dldEFuY2hvcnMsIGdldENlbnRlckFuY2hvcn0gZnJvbSAnLi9nZXRfYW5jaG9ycyc7XG5pbXBvcnQgY2xpcExpbmUgZnJvbSAnLi9jbGlwX2xpbmUnO1xuaW1wb3J0IHtzaGFwZVRleHQsIHNoYXBlSWNvbiwgV3JpdGluZ01vZGUsIGZpdEljb25Ub1RleHR9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge2dldEdseXBoUXVhZHMsIGdldEljb25RdWFkc30gZnJvbSAnLi9xdWFkcyc7XG5pbXBvcnQgQ29sbGlzaW9uRmVhdHVyZSBmcm9tICcuL2NvbGxpc2lvbl9mZWF0dXJlJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICAgIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUsXG4gICAgYWxsb3dzTGV0dGVyU3BhY2luZ1xufSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkgZnJvbSAnLi4vdXRpbC9maW5kX3BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCBjbGFzc2lmeVJpbmdzIGZyb20gJy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQge1NJWkVfUEFDS19GQUNUT1J9IGZyb20gJy4vc3ltYm9sX3NpemUnO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5cbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbiwgVGV4dEp1c3RpZnl9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUge1N5bWJvbEZlYXR1cmV9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBtdXJtdXIzIGZyb20gJ211cm11cmhhc2gtanMnO1xuXG4vLyBUaGUgc3ltYm9sIGxheW91dCBwcm9jZXNzIG5lZWRzIGB0ZXh0LXNpemVgIGV2YWx1YXRlZCBhdCB1cCB0byBmaXZlIGRpZmZlcmVudCB6b29tIGxldmVscywgYW5kXG4vLyBgaWNvbi1zaXplYCBhdCB1cCB0byB0aHJlZTpcbi8vXG4vLyAgIDEuIGB0ZXh0LXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGB0ZXh0LXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucywgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYm94IGRpbWVuc2lvbnMgZm9yIGljb24tdGV4dC1maXQuXG4vLyAgIDIuIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGBpY29uLXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucy5cbi8vICAgMy4gYHRleHQtc2l6ZWAgYW5kIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQsIHBsdXMgb25lLiBVc2VkIHRvIGNhbGN1bGF0ZSBjb2xsaXNpb24gYm94ZXMuXG4vLyAgIDQuIGB0ZXh0LXNpemVgIGF0IHpvb20gbGV2ZWwgMTguIFVzZWQgZm9yIHNvbWV0aGluZyBsaW5lLXN5bWJvbC1wbGFjZW1lbnQtcmVsYXRlZC5cbi8vICAgNS4gIEZvciBjb21wb3NpdGUgYCotc2l6ZWAgZXhwcmVzc2lvbnM6IHR3byB6b29tIGxldmVscyBvZiBjdXJ2ZSBzdG9wcyB0aGF0IFwiY292ZXJcIiB0aGUgem9vbSBsZXZlbCBvZiB0aGVcbi8vICAgICAgIGJ1Y2tldC4gVGhlc2UgZ28gaW50byBhIHZlcnRleCBidWZmZXIgYW5kIGFyZSB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gaW50ZXJwb2xhdGUgdGhlIHNpemUgYXQgcmVuZGVyIHRpbWUuXG4vL1xuLy8gKDEpIGFuZCAoMikgYXJlIHN0b3JlZCBpbiBgYnVja2V0LmxheWVyc1swXS5sYXlvdXRgLiBUaGUgcmVtYWluZGVyIGFyZSBiZWxvdy5cbi8vXG50eXBlIFNpemVzID0ge1xuICAgIGxheW91dFRleHRTaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgLy8gKDMpXG4gICAgbGF5b3V0SWNvblNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAvLyAoMylcbiAgICB0ZXh0TWF4U2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sICAgIC8vICg0KVxuICAgIGNvbXBvc2l0ZVRleHRTaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxuICAgIGNvbXBvc2l0ZUljb25TaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxufTtcblxuZXhwb3J0IHR5cGUgVGV4dEFuY2hvciA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG5cbi8vIFRoZSByYWRpYWwgb2Zmc2V0IGlzIHRvIHRoZSBlZGdlIG9mIHRoZSB0ZXh0IGJveFxuLy8gSW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLCB0aGUgZWRnZSBvZiB0aGUgdGV4dCBib3ggaXMgd2hlcmUgZ2x5cGhzIHN0YXJ0XG4vLyBCdXQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiwgdGhlIGdseXBocyBhcHBlYXIgdG8gXCJzdGFydFwiIGF0IHRoZSBiYXNlbGluZVxuLy8gV2UgZG9uJ3QgYWN0dWFsbHkgbG9hZCBiYXNlbGluZSBkYXRhLCBidXQgd2UgYXNzdW1lIGFuIG9mZnNldCBvZiBPTkVfRU0gLSAxN1xuLy8gKHNlZSBcInlPZmZzZXRcIiBpbiBzaGFwaW5nLmpzKVxuY29uc3QgYmFzZWxpbmVPZmZzZXQgPSA3O1xuY29uc3QgSU5WQUxJRF9URVhUX09GRlNFVCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCBvZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0pIHtcblxuICAgIGZ1bmN0aW9uIGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCByYWRpYWxPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgICBpZiAocmFkaWFsT2Zmc2V0IDwgMCkgcmFkaWFsT2Zmc2V0ID0gMDsgLy8gSWdub3JlIG5lZ2F0aXZlIG9mZnNldC5cbiAgICAgICAgLy8gc29sdmUgZm9yIHIgd2hlcmUgcl4yICsgcl4yID0gcmFkaWFsT2Zmc2V0XjJcbiAgICAgICAgY29uc3QgaHlwb3RlbnVzZSA9IHJhZGlhbE9mZnNldCAvIE1hdGguc3FydCgyKTtcbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICAgICAgeSA9IGh5cG90ZW51c2UgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgICAgICB5ID0gLWh5cG90ZW51c2UgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1yYWRpYWxPZmZzZXQgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgeSA9IHJhZGlhbE9mZnNldCAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICAgICAgeCA9IC1oeXBvdGVudXNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgeCA9IGh5cG90ZW51c2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21UZXh0T2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgb2Zmc2V0WDogbnVtYmVyLCBvZmZzZXRZOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgLy8gVXNlIGFic29sdXRlIG9mZnNldCB2YWx1ZXMuXG4gICAgICAgIG9mZnNldFggPSBNYXRoLmFicyhvZmZzZXRYKTtcbiAgICAgICAgb2Zmc2V0WSA9IE1hdGguYWJzKG9mZnNldFkpO1xuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHkgPSBvZmZzZXRZIC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1vZmZzZXRZICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gKG9mZnNldFsxXSAhPT0gSU5WQUxJRF9URVhUX09GRlNFVCkgPyBmcm9tVGV4dE9mZnNldChhbmNob3IsIG9mZnNldFswXSwgb2Zmc2V0WzFdKSA6IGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yLCBvZmZzZXRbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczoge1tzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4pIHtcbiAgICBidWNrZXQuY3JlYXRlQXJyYXlzKCk7XG5cbiAgICBjb25zdCB0aWxlU2l6ZSA9IDUxMiAqIGJ1Y2tldC5vdmVyc2NhbGluZztcbiAgICBidWNrZXQudGlsZVBpeGVsUmF0aW8gPSBFWFRFTlQgLyB0aWxlU2l6ZTtcbiAgICBidWNrZXQuY29tcGFyZVRleHQgPSB7fTtcbiAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gZmFsc2U7XG5cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGJ1Y2tldC5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7XG5cbiAgICBjb25zdCBzaXplcyA9IHt9O1xuXG4gICAgaWYgKGJ1Y2tldC50ZXh0U2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgY29uc3Qge21pblpvb20sIG1heFpvb219ID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICAgICAgc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzID0gW1xuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pKSxcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoYnVja2V0Lmljb25TaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICBjb25zdCB7bWluWm9vbSwgbWF4Wm9vbX0gPSBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXMgPSBbXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWluWm9vbSkpLFxuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNpemVzLmxheW91dFRleHRTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSkpO1xuICAgIHNpemVzLmxheW91dEljb25TaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSkpO1xuICAgIHNpemVzLnRleHRNYXhTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKDE4KSk7XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gbGF5b3V0LmdldCgndGV4dC1saW5lLWhlaWdodCcpICogT05FX0VNO1xuICAgIGNvbnN0IHRleHRBbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCc7XG4gICAgY29uc3Qga2VlcFVwcmlnaHQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWtlZXAtdXByaWdodCcpO1xuICAgIGNvbnN0IHRleHRTaXplID0gbGF5b3V0LmdldCgndGV4dC1zaXplJyk7XG5cbiAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgYnVja2V0LmZlYXR1cmVzKSB7XG4gICAgICAgIGNvbnN0IGZvbnRzdGFjayA9IGxheW91dC5nZXQoJ3RleHQtZm9udCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5qb2luKCcsJyk7XG4gICAgICAgIGNvbnN0IGxheW91dFRleHRTaXplVGhpc1pvb20gPSB0ZXh0U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgIGNvbnN0IGxheW91dFRleHRTaXplID0gc2l6ZXMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICBjb25zdCBsYXlvdXRJY29uU2l6ZSA9IHNpemVzLmxheW91dEljb25TaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcblxuICAgICAgICBjb25zdCBzaGFwZWRUZXh0T3JpZW50YXRpb25zID0ge1xuICAgICAgICAgICAgaG9yaXpvbnRhbDoge30sXG4gICAgICAgICAgICB2ZXJ0aWNhbDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRleHQgPSBmZWF0dXJlLnRleHQ7XG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgdW5mb3JtYXR0ZWRUZXh0ID0gdGV4dC50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2luZyA9IGxheW91dC5nZXQoJ3RleHQtbGV0dGVyLXNwYWNpbmcnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgKiBPTkVfRU07XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nSWZBbGxvd2VkID0gYWxsb3dzTGV0dGVyU3BhY2luZyh1bmZvcm1hdHRlZFRleHQpID8gc3BhY2luZyA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBsYXlvdXQuZ2V0KCd0ZXh0LWFuY2hvcicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlVGV4dEFuY2hvciA9IGxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAgICAgICAgIGlmICghdmFyaWFibGVUZXh0QW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkaWFsT2Zmc2V0ID0gbGF5b3V0LmdldCgndGV4dC1yYWRpYWwtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICAgICAgICAgIC8vIExheWVycyB3aXRoIHZhcmlhYmxlIGFuY2hvcnMgdXNlIHRoZSBgdGV4dC1yYWRpYWwtb2Zmc2V0YCBwcm9wZXJ0eSBhbmQgdGhlIFt4LCB5XSBvZmZzZXQgdmVjdG9yXG4gICAgICAgICAgICAgICAgLy8gaXMgY2FsY3VsYXRlZCBhdCBwbGFjZW1lbnQgdGltZSBpbnN0ZWFkIG9mIGxheW91dCB0aW1lXG4gICAgICAgICAgICAgICAgaWYgKHJhZGlhbE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3R5bGUgc3BlYyBzYXlzIGRvbid0IHVzZSBgdGV4dC1vZmZzZXRgIGFuZCBgdGV4dC1yYWRpYWwtb2Zmc2V0YCB0b2dldGhlclxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgZG9lc24ndCBhY3R1YWxseSBzcGVjaWZ5IHdoYXQgaGFwcGVucyBpZiB5b3UgdXNlIGJvdGguIFdlIGdvIHdpdGggdGhlIHJhZGlhbCBvZmZzZXQuXG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KHRleHRBbmNob3IsIFtyYWRpYWxPZmZzZXQgKiBPTkVfRU0sIElOVkFMSURfVEVYVF9PRkZTRVRdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gKGxheW91dC5nZXQoJ3RleHQtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30pLm1hcCh0ID0+IHQgKiBPTkVfRU0pOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRleHRKdXN0aWZ5ID0gdGV4dEFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgXCJjZW50ZXJcIiA6XG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1qdXN0aWZ5JykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuXG4gICAgICAgICAgICBjb25zdCBzeW1ib2xQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHN5bWJvbFBsYWNlbWVudCA9PT0gJ3BvaW50JyA/XG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1tYXgtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgKiBPTkVfRU0gOlxuICAgICAgICAgICAgICAgIDA7XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSh1bmZvcm1hdHRlZFRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIFBPSSBsYWJlbCBwbGFjZW1lbnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmb3Igc2NyaXB0cyB0aGF0IHN1cHBvcnQgdmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGluZyBtb2RlLCB0aHVzLCBkZWZhdWx0IGxlZnQganVzdGlmaWNhdGlvbiBpcyB1c2VkLiBJZiBMYXRpblxuICAgICAgICAgICAgICAgICAgICAvLyBzY3JpcHRzIHdvdWxkIG5lZWQgdG8gYmUgc3VwcG9ydGVkLCB0aGlzIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCBvdGhlciBqdXN0aWZpY2F0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0Jywgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUudmVydGljYWwsIHRydWUsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgdXNlcyB0ZXh0LXZhcmlhYmxlLWFuY2hvciwgZ2VuZXJhdGUgc2hhcGluZ3MgZm9yIGFsbCBqdXN0aWZpY2F0aW9uIHBvc3NpYmlsaXRpZXMuXG4gICAgICAgICAgICBpZiAoIXRleHRBbG9uZ0xpbmUgJiYgdmFyaWFibGVUZXh0QW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB0ZXh0SnVzdGlmeSA9PT0gXCJhdXRvXCIgP1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVRleHRBbmNob3IubWFwKGEgPT4gZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihhKSkgOlxuICAgICAgICAgICAgICAgICAgICBbdGV4dEp1c3RpZnldO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNpbmdsZUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGp1c3RpZmljYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb246IFRleHRKdXN0aWZ5ID0ganVzdGlmaWNhdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNoYXBpbmcgZm9yIHRoZSBmaXJzdCBqdXN0aWZpY2F0aW9uIHdhcyBvbmx5IGEgc2luZ2xlIGxpbmUsIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gcmUtdXNlIGl0IGZvciB0aGUgb3RoZXIganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFswXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHVzaW5nIHRleHQtdmFyaWFibGUtYW5jaG9yIGZvciB0aGUgbGF5ZXIsIHdlIHVzZSBhIGNlbnRlciBhbmNob3IgZm9yIGFsbCBzaGFwaW5ncyBhbmQgYXBwbHlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvZmZzZXRzIGZvciB0aGUgYW5jaG9yIGluIHRoZSBwbGFjZW1lbnQgc3RlcC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZmljYXRpb24sIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLmhvcml6b250YWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dID0gc2hhcGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVMaW5lID0gc2hhcGluZy5wb3NpdGlvbmVkTGluZXMubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0SnVzdGlmeSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnkgPSBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKHRleHRBbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEhvcml6b250YWwgcG9pbnQgb3IgbGluZSBsYWJlbC5cbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCBzcGFjaW5nSWZBbGxvd2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUuaG9yaXpvbnRhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgIGlmIChzaGFwaW5nKSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbdGV4dEp1c3RpZnldID0gc2hhcGluZztcblxuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIHBvaW50IGxhYmVsIChpZiBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50IGlzIGVuYWJsZWQpLlxuICAgICAgICAgICAgICAgIGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWxpemVkIGxpbmUgbGFiZWwuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodW5mb3JtYXR0ZWRUZXh0KSAmJiB0ZXh0QWxvbmdMaW5lICYmIGtlZXBVcHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgdGV4dEFuY2hvciwgdGV4dEp1c3RpZnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUudmVydGljYWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2hhcGVkSWNvbjtcbiAgICAgICAgbGV0IGlzU0RGSWNvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZmVhdHVyZS5pY29uICYmIGZlYXR1cmUuaWNvbi5uYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlTWFwW2ZlYXR1cmUuaWNvbi5uYW1lXTtcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICAgIHNoYXBlZEljb24gPSBzaGFwZUljb24oXG4gICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zW2ZlYXR1cmUuaWNvbi5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSksXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tYW5jaG9yJykuZXZhbHVhdGUoZmVhdHVyZSwge30pKTtcbiAgICAgICAgICAgICAgICBpc1NERkljb24gPSBpbWFnZS5zZGY7XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5zZGZJY29ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5zZGZJY29ucyA9IGltYWdlLnNkZjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5zZGZJY29ucyAhPT0gaW1hZ2Uuc2RmKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWFnZS5waXhlbFJhdGlvICE9PSBidWNrZXQucGl4ZWxSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dC5nZXQoJ2ljb24tcm90YXRlJykuY29uc3RhbnRPcigxKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCkgfHwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbDtcbiAgICAgICAgYnVja2V0Lmljb25zSW5UZXh0ID0gc2hhcGVkVGV4dCA/IHNoYXBlZFRleHQuaWNvbnNJblRleHQgOiBmYWxzZTtcbiAgICAgICAgaWYgKHNoYXBlZFRleHQgfHwgc2hhcGVkSWNvbikge1xuICAgICAgICAgICAgYWRkRmVhdHVyZShidWNrZXQsIGZlYXR1cmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGltYWdlTWFwLCBzaXplcywgbGF5b3V0VGV4dFNpemUsIGxheW91dEljb25TaXplLCB0ZXh0T2Zmc2V0LCBpc1NERkljb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dDb2xsaXNpb25Cb3hlcykge1xuICAgICAgICBidWNrZXQuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKTtcbiAgICB9XG59XG5cbi8vIENob29zZSB0aGUganVzdGlmaWNhdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgVGV4dEFuY2hvclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuY2hvckp1c3RpZmljYXRpb24oYW5jaG9yOiBUZXh0QW5jaG9yKTogVGV4dEp1c3RpZnkgIHtcbiAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuICAgIHJldHVybiAnY2VudGVyJztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGZlYXR1cmUgYW5kIGl0cyBzaGFwZWQgdGV4dCBhbmQgaWNvbiBkYXRhLCBhZGQgYSAnc3ltYm9sXG4gKiBpbnN0YW5jZScgZm9yIGVhY2ggX3Bvc3NpYmxlXyBwbGFjZW1lbnQgb2YgdGhlIHN5bWJvbCBmZWF0dXJlLlxuICogKEF0IHJlbmRlciB0aW1lUGxhY2VTeW1ib2xzI3BsYWNlKCkgc2VsZWN0cyB3aGljaCBvZiB0aGVzZSBpbnN0YW5jZXMgdG9cbiAqIHNob3cgb3IgaGlkZSBiYXNlZCBvbiBjb2xsaXNpb25zIHdpdGggc3ltYm9scyBpbiBvdGhlciBsYXllcnMuKVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkRmVhdHVyZShidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9uczogYW55LFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEljb25TaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgIGlzU0RGSWNvbjogYm9vbGVhbikge1xuICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxhYmVscyB0aGF0IGp1bXAgYXJvdW5kIHdoZW4gem9vbWluZyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIGEgdGV4dC1zaXplIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB6b29tIGxldmVscy5cbiAgICAvLyBidWNrZXQgY2FsY3VsYXRlcyB0ZXh0LXNpemUgYXQgYSBoaWdoIHpvb20gbGV2ZWwgc28gdGhhdCBhbGwgdGlsZXMgY2FuXG4gICAgLy8gdXNlIHRoZSBzYW1lIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgYW5jaG9yIHBvc2l0aW9ucy5cbiAgICBsZXQgdGV4dE1heFNpemUgPSBzaXplcy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgaWYgKHRleHRNYXhTaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dE1heFNpemUgPSBsYXlvdXRUZXh0U2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCBpY29uT2Zmc2V0ID0gbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgY29uc3QgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nID0gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk7XG4gICAgY29uc3QgZ2x5cGhTaXplID0gMjQsXG4gICAgICAgIGZvbnRTY2FsZSA9IGxheW91dFRleHRTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICB0ZXh0Qm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBmb250U2NhbGUsXG4gICAgICAgIHRleHRNYXhCb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIHRleHRNYXhTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICBpY29uQm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXRJY29uU2l6ZSxcbiAgICAgICAgc3ltYm9sTWluRGlzdGFuY2UgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXQuZ2V0KCdzeW1ib2wtc3BhY2luZycpLFxuICAgICAgICB0ZXh0UGFkZGluZyA9IGxheW91dC5nZXQoJ3RleHQtcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICBpY29uUGFkZGluZyA9IGxheW91dC5nZXQoJ2ljb24tcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICB0ZXh0TWF4QW5nbGUgPSBsYXlvdXQuZ2V0KCd0ZXh0LW1heC1hbmdsZScpIC8gMTgwICogTWF0aC5QSSxcbiAgICAgICAgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgaWNvbkFsb25nTGluZSA9IGxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgc3ltYm9sUGxhY2VtZW50ID0gbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpLFxuICAgICAgICB0ZXh0UmVwZWF0RGlzdGFuY2UgPSBzeW1ib2xNaW5EaXN0YW5jZSAvIDI7XG5cbiAgICBjb25zdCBpY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKTtcbiAgICBsZXQgdmVydGljYWxseVNoYXBlZEljb247XG4gICAgLy8gQWRqdXN0IHNoYXBlZCBpY29uIHNpemUgd2hlbiBpY29uLXRleHQtZml0IGlzIHVzZWQuXG4gICAgaWYgKHNoYXBlZEljb24gJiYgaWNvblRleHRGaXQgIT09ICdub25lJykge1xuICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdmVydGljYWxseVNoYXBlZEljb24gPSBmaXRJY29uVG9UZXh0KHNoYXBlZEljb24sIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwsIGljb25UZXh0Rml0LFxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQtcGFkZGluZycpLCBpY29uT2Zmc2V0LCBmb250U2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcpIHtcbiAgICAgICAgICAgIHNoYXBlZEljb24gPSBmaXRJY29uVG9UZXh0KHNoYXBlZEljb24sIGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZywgaWNvblRleHRGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0LXBhZGRpbmcnKSwgaWNvbk9mZnNldCwgZm9udFNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkZFN5bWJvbEF0QW5jaG9yID0gKGxpbmUsIGFuY2hvcikgPT4ge1xuICAgICAgICBpZiAoYW5jaG9yLnggPCAwIHx8IGFuY2hvci54ID49IEVYVEVOVCB8fCBhbmNob3IueSA8IDAgfHwgYW5jaG9yLnkgPj0gRVhURU5UKSB7XG4gICAgICAgICAgICAvLyBTeW1ib2wgbGF5ZXJzIGFyZSBkcmF3biBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzLCBXZSBmaWx0ZXIgb3V0IHN5bWJvbHNcbiAgICAgICAgICAgIC8vIG91dHNpZGUgb3VyIHRpbGUgYm91bmRhcmllcyAod2hpY2ggbWF5IGJlIGluY2x1ZGVkIGluIHZlY3RvciB0aWxlIGJ1ZmZlcnMpXG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IGRvdWJsZS1kcmF3aW5nIHN5bWJvbHMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRTeW1ib2woYnVja2V0LCBhbmNob3IsIGxpbmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGltYWdlTWFwLCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiwgYnVja2V0LmxheWVyc1swXSxcbiAgICAgICAgICAgIGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheSwgZmVhdHVyZS5pbmRleCwgZmVhdHVyZS5zb3VyY2VMYXllckluZGV4LCBidWNrZXQuaW5kZXgsXG4gICAgICAgICAgICB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgaWNvbkJveFNjYWxlLCBpY29uUGFkZGluZywgaWNvbkFsb25nTGluZSwgaWNvbk9mZnNldCxcbiAgICAgICAgICAgIGZlYXR1cmUsIHNpemVzLCBpc1NERkljb24pO1xuICAgIH07XG5cbiAgICBpZiAoc3ltYm9sUGxhY2VtZW50ID09PSAnbGluZScpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGNsaXBMaW5lKGZlYXR1cmUuZ2VvbWV0cnksIDAsIDAsIEVYVEVOVCwgRVhURU5UKSkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IGdldEFuY2hvcnMoXG4gICAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgICBzeW1ib2xNaW5EaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB0ZXh0TWF4QW5nbGUsXG4gICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCB8fCBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgc2hhcGVkSWNvbixcbiAgICAgICAgICAgICAgICBnbHlwaFNpemUsXG4gICAgICAgICAgICAgICAgdGV4dE1heEJveFNjYWxlLFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5vdmVyc2NhbGluZyxcbiAgICAgICAgICAgICAgICBFWFRFTlRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFuY2hvciBvZiBhbmNob3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhcGVkVGV4dCA9IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZztcbiAgICAgICAgICAgICAgICBpZiAoIXNoYXBlZFRleHQgfHwgIWFuY2hvcklzVG9vQ2xvc2UoYnVja2V0LCBzaGFwZWRUZXh0LnRleHQsIHRleHRSZXBlYXREaXN0YW5jZSwgYW5jaG9yKSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRTeW1ib2xBdEFuY2hvcihsaW5lLCBhbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3ltYm9sUGxhY2VtZW50ID09PSAnbGluZS1jZW50ZXInKSB7XG4gICAgICAgIC8vIE5vIGNsaXBwaW5nLCBtdWx0aXBsZSBsaW5lcyBwZXIgZmVhdHVyZSBhcmUgYWxsb3dlZFxuICAgICAgICAvLyBcImxpbmVzXCIgd2l0aCBvbmx5IG9uZSBwb2ludCBhcmUgaWdub3JlZCBhcyBpbiBjbGlwTGluZXNcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBnZXRDZW50ZXJBbmNob3IoXG4gICAgICAgICAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICAgICAgICAgIHRleHRNYXhBbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCB8fCBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb24sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE1heEJveFNjYWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChmZWF0dXJlLnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgY2xhc3NpZnlSaW5ncyhmZWF0dXJlLmdlb21ldHJ5LCAwKSkge1xuICAgICAgICAgICAgLy8gMTYgaGVyZSByZXByZXNlbnRzIDIgcGl4ZWxzXG4gICAgICAgICAgICBjb25zdCBwb2kgPSBmaW5kUG9sZU9mSW5hY2Nlc3NpYmlsaXR5KHBvbHlnb24sIDE2KTtcbiAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKHBvbHlnb25bMF0sIG5ldyBBbmNob3IocG9pLngsIHBvaS55LCAwKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zODA4XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBmZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICBhZGRTeW1ib2xBdEFuY2hvcihsaW5lLCBuZXcgQW5jaG9yKGxpbmVbMF0ueCwgbGluZVswXS55LCAwKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ1BvaW50Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHBvaW50cyBvZiBmZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKFtwb2ludF0sIG5ldyBBbmNob3IocG9pbnQueCwgcG9pbnQueSwgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBNQVhfR0xZUEhfSUNPTl9TSVpFID0gMjU1O1xuY29uc3QgTUFYX1BBQ0tFRF9TSVpFID0gTUFYX0dMWVBIX0lDT05fU0laRSAqIFNJWkVfUEFDS19GQUNUT1I7XG5leHBvcnQge01BWF9QQUNLRURfU0laRX07XG5cbmZ1bmN0aW9uIGFkZFRleHRWZXJ0aWNlcyhidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I6IFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHQ6IFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBTeW1ib2xGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGluZUFycmF5OiB7bGluZVN0YXJ0SW5kZXg6IG51bWJlciwgbGluZUxlbmd0aDogbnVtYmVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudFR5cGVzOiBBcnJheTwndmVydGljYWwnIHwgJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlczoge1tzdHJpbmddOiBudW1iZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZEljb25JbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcykge1xuICAgIGNvbnN0IGdseXBoUXVhZHMgPSBnZXRHbHlwaFF1YWRzKGFuY2hvciwgc2hhcGVkVGV4dCwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSwgaW1hZ2VNYXAsIGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50KTtcblxuICAgIGNvbnN0IHNpemVEYXRhID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICBsZXQgdGV4dFNpemVEYXRhID0gbnVsbDtcblxuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICB0ZXh0U2l6ZURhdGEgPSBbXG4gICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogbGF5ZXIubGF5b3V0LmdldCgndGV4dC1zaXplJykuZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgIF07XG4gICAgICAgIGlmICh0ZXh0U2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcInRleHQtc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIHRleHRTaXplRGF0YSA9IFtcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUoZmVhdHVyZSwge30pLFxuICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplc1sxXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSB8fCB0ZXh0U2l6ZURhdGFbMV0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcInRleHQtc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgYnVja2V0LnRleHQsXG4gICAgICAgIGdseXBoUXVhZHMsXG4gICAgICAgIHRleHRTaXplRGF0YSxcbiAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgdGV4dEFsb25nTGluZSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgcGxhY2VkSWNvbkluZGV4KTtcblxuICAgIC8vIFRoZSBwbGFjZWRTeW1ib2xBcnJheSBpcyB1c2VkIGF0IHJlbmRlciB0aW1lIGluIGRyYXdUaWxlU3ltYm9sc1xuICAgIC8vIFRoZXNlIGluZGljZXMgYWxsb3cgYWNjZXNzIHRvIHRoZSBhcnJheSBhdCBjb2xsaXNpb24gZGV0ZWN0aW9uIHRpbWVcbiAgICBmb3IgKGNvbnN0IHBsYWNlbWVudFR5cGUgb2YgcGxhY2VtZW50VHlwZXMpIHtcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXNbcGxhY2VtZW50VHlwZV0gPSBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaFF1YWRzLmxlbmd0aCAqIDQ7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRIb3Jpem9udGFsU2hhcGluZyhob3Jpem9udGFsU2hhcGluZzoge1tUZXh0SnVzdGlmeV06IFNoYXBpbmd9KTogU2hhcGluZyB8IG51bGwge1xuICAgIC8vIFdlIGRvbid0IGNhcmUgd2hpY2ggc2hhcGluZyB3ZSBnZXQgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIGNvbGxpc2lvbiBwdXJwb3Nlc1xuICAgIC8vIGFuZCBhbGwgdGhlIGp1c3RpZmljYXRpb25zIGhhdmUgdGhlIHNhbWUgY29sbGlzaW9uIGJveFxuICAgIGZvciAoY29uc3QganVzdGlmaWNhdGlvbjogYW55IGluIGhvcml6b250YWxTaGFwaW5nKSB7XG4gICAgICAgIHJldHVybiBob3Jpem9udGFsU2hhcGluZ1tqdXN0aWZpY2F0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIGxhYmVsICYgaWNvbiBwbGFjZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkU3ltYm9sKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgIGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgIGxpbmU6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zOiBhbnksXG4gICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W3N0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsbHlTaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRQYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dEFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGljb25Cb3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGljb25QYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgaWNvbkFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgc2l6ZXM6IFNpemVzLFxuICAgICAgICAgICAgICAgICAgIGlzU0RGSWNvbjogYm9vbGVhbikge1xuICAgIGNvbnN0IGxpbmVBcnJheSA9IGJ1Y2tldC5hZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3IsIGxpbmUpO1xuXG4gICAgbGV0IHRleHRDb2xsaXNpb25GZWF0dXJlLCBpY29uQ29sbGlzaW9uRmVhdHVyZSwgdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSwgdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZTtcblxuICAgIGxldCBudW1JY29uVmVydGljZXMgPSAwO1xuICAgIGxldCBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4ID0gLTE7XG4gICAgbGV0IHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID0gLTE7XG4gICAgY29uc3QgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMgPSB7fTtcbiAgICBsZXQga2V5ID0gbXVybXVyMygnJyk7XG5cbiAgICBsZXQgdGV4dE9mZnNldDAgPSAwO1xuICAgIGxldCB0ZXh0T2Zmc2V0MSA9IDA7XG4gICAgaWYgKGxheWVyLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSgndGV4dC1yYWRpYWwtb2Zmc2V0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBbdGV4dE9mZnNldDAsIHRleHRPZmZzZXQxXSA9IChsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KS5tYXAodCA9PiB0ICogT05FX0VNKTogYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0T2Zmc2V0MCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcmFkaWFsLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE9ORV9FTTtcbiAgICAgICAgdGV4dE9mZnNldDEgPSBJTlZBTElEX1RFWFRfT0ZGU0VUO1xuICAgIH1cblxuICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IHRleHRSb3RhdGlvbiA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRSb3RhdGlvbiA9IHRleHRSb3RhdGlvbiArIDkwLjA7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU2hhcGluZyA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWw7XG4gICAgICAgIHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgbGluZSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCB2ZXJ0aWNhbFNoYXBpbmcsIHRleHRCb3hTY2FsZSwgdGV4dFBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIGJ1Y2tldC5vdmVyc2NhbGluZywgdmVydGljYWxUZXh0Um90YXRpb24pO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNhbGx5U2hhcGVkSWNvbikge1xuICAgICAgICAgICAgdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHZlcnRpY2FsbHlTaGFwZWRJY29uLCBpY29uQm94U2NhbGUsIGljb25QYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCBidWNrZXQub3ZlcnNjYWxpbmcsIHZlcnRpY2FsVGV4dFJvdGF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vUGxhY2UgaWNvbiBmaXJzdCwgc28gdGV4dCBjYW4gaGF2ZSBhIHJlZmVyZW5jZSB0byBpdHMgaW5kZXggaW4gdGhlIHBsYWNlZCBzeW1ib2wgYXJyYXkuXG4gICAgLy9UZXh0IHN5bWJvbHMgY2FuIGxhemlseSBzaGlmdCBhdCByZW5kZXItdGltZSBiZWNhdXNlIG9mIHZhcmlhYmxlIGFuY2hvciBwbGFjZW1lbnQuXG4gICAgLy9JZiB0aGUgc3R5bGUgc3BlY2lmaWVzIGFuIGBpY29uLXRleHQtZml0YCB0aGVuIHRoZSBpY29uIHdvdWxkIGhhdmUgdG8gc2hpZnQgYWxvbmcgd2l0aCBpdC5cbiAgICAvLyBGb3IgbW9yZSBpbmZvIGNoZWNrIGB1cGRhdGVWYXJpYWJsZUFuY2hvcnNgIGluIGBkcmF3X3N5bWJvbC5qc2AgLlxuICAgIGlmIChzaGFwZWRJY29uKSB7XG4gICAgICAgIGNvbnN0IGljb25Sb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgY29uc3QgaWNvblF1YWRzID0gZ2V0SWNvblF1YWRzKHNoYXBlZEljb24sIGljb25Sb3RhdGUsIGlzU0RGSWNvbiwgaGFzSWNvblRleHRGaXQpO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbEljb25RdWFkcyA9IHZlcnRpY2FsbHlTaGFwZWRJY29uID8gZ2V0SWNvblF1YWRzKHZlcnRpY2FsbHlTaGFwZWRJY29uLCBpY29uUm90YXRlLCBpc1NERkljb24sIGhhc0ljb25UZXh0Rml0KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWNvbkNvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgbGluZSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCBzaGFwZWRJY29uLCBpY29uQm94U2NhbGUsIGljb25QYWRkaW5nLCAvKmFsaWduIGJveGVzIHRvIGxpbmUqL2ZhbHNlLCBidWNrZXQub3ZlcnNjYWxpbmcsIGljb25Sb3RhdGUpO1xuXG4gICAgICAgIG51bUljb25WZXJ0aWNlcyA9IGljb25RdWFkcy5sZW5ndGggKiA0O1xuXG4gICAgICAgIGNvbnN0IHNpemVEYXRhID0gYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgbGV0IGljb25TaXplRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBpY29uU2l6ZURhdGEgPSBbXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIGxheWVyLmxheW91dC5nZXQoJ2ljb24tc2l6ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpY29uU2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJpY29uLXNpemVcIiBpcyA+PSAke01BWF9HTFlQSF9JQ09OX1NJWkV9LiBSZWR1Y2UgeW91ciBcImljb24tc2l6ZVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgICAgICBpY29uU2l6ZURhdGEgPSBbXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSksXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaWNvblNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFIHx8IGljb25TaXplRGF0YVsxXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcImljb24tc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwiaWNvbi1zaXplXCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uLFxuICAgICAgICAgICAgaWNvblF1YWRzLFxuICAgICAgICAgICAgaWNvblNpemVEYXRhLFxuICAgICAgICAgICAgaWNvbk9mZnNldCxcbiAgICAgICAgICAgIGljb25BbG9uZ0xpbmUsXG4gICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgICAgIC8vIFRoZSBpY29uIGl0c2VsZiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgc3ltYm9sIHNpbmNlIHRoZSB0ZXh0IGlzbnQgcGxhY2VkIHlldFxuICAgICAgICAgICAgLTEpO1xuXG4gICAgICAgIHBsYWNlZEljb25TeW1ib2xJbmRleCA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsSWNvblF1YWRzKSB7XG4gICAgICAgICAgICBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyA9IHZlcnRpY2FsSWNvblF1YWRzLmxlbmd0aCAqIDQ7XG5cbiAgICAgICAgICAgIGJ1Y2tldC5hZGRTeW1ib2xzKFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsSWNvblF1YWRzLFxuICAgICAgICAgICAgICAgIGljb25TaXplRGF0YSxcbiAgICAgICAgICAgICAgICBpY29uT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGljb25BbG9uZ0xpbmUsXG4gICAgICAgICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICAgICAgICBXcml0aW5nTW9kZS52ZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGxpbmVBcnJheS5saW5lTGVuZ3RoLFxuICAgICAgICAgICAgICAgIC8vIFRoZSBpY29uIGl0c2VsZiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgc3ltYm9sIHNpbmNlIHRoZSB0ZXh0IGlzbnQgcGxhY2VkIHlldFxuICAgICAgICAgICAgICAgIC0xKTtcblxuICAgICAgICAgICAgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBqdXN0aWZpY2F0aW9uOiBhbnkgaW4gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl07XG5cbiAgICAgICAgaWYgKCF0ZXh0Q29sbGlzaW9uRmVhdHVyZSkge1xuICAgICAgICAgICAga2V5ID0gbXVybXVyMyhzaGFwaW5nLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICAgICAgLy8gQXMgYSBjb2xsaXNpb24gYXBwcm94aW1hdGlvbiwgd2UgY2FuIHVzZSBlaXRoZXIgdGhlIHZlcnRpY2FsIG9yIGFueSBvZiB0aGUgaG9yaXpvbnRhbCB2ZXJzaW9ucyBvZiB0aGUgZmVhdHVyZVxuICAgICAgICAgICAgLy8gV2UncmUgY291bnRpbmcgb24gYWxsIHZlcnNpb25zIGhhdmluZyBzaW1pbGFyIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHRleHRDb2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgc2hhcGluZywgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCB0ZXh0Um90YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbmdsZUxpbmUgPSBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGggPT09IDE7XG4gICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzICs9IGFkZFRleHRWZXJ0aWNlcyhcbiAgICAgICAgICAgIGJ1Y2tldCwgYW5jaG9yLCBzaGFwaW5nLCBpbWFnZU1hcCwgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsIHRleHRPZmZzZXQsIGxpbmVBcnJheSxcbiAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPyBXcml0aW5nTW9kZS5ob3Jpem9udGFsIDogV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksXG4gICAgICAgICAgICBzaW5nbGVMaW5lID8gKE9iamVjdC5rZXlzKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk6IGFueSkgOiBbanVzdGlmaWNhdGlvbl0sXG4gICAgICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcywgcGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcyk7XG5cbiAgICAgICAgaWYgKHNpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwpIHtcbiAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzICs9IGFkZFRleHRWZXJ0aWNlcyhcbiAgICAgICAgICAgIGJ1Y2tldCwgYW5jaG9yLCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsLCBpbWFnZU1hcCwgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsXG4gICAgICAgICAgICB0ZXh0T2Zmc2V0LCBsaW5lQXJyYXksIFdyaXRpbmdNb2RlLnZlcnRpY2FsLCBbJ3ZlcnRpY2FsJ10sIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCwgc2l6ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRCb3hTdGFydEluZGV4ID0gdGV4dENvbGxpc2lvbkZlYXR1cmUgPyB0ZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB0ZXh0Qm94RW5kSW5kZXggPSB0ZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHRleHRDb2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXggPSB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCA9IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IGljb25Cb3hTdGFydEluZGV4ID0gaWNvbkNvbGxpc2lvbkZlYXR1cmUgPyBpY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCBpY29uQm94RW5kSW5kZXggPSBpY29uQ29sbGlzaW9uRmVhdHVyZSA/IGljb25Db2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXggPSB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCA9IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChidWNrZXQuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGggPj0gU3ltYm9sQnVja2V0Lk1BWF9HTFlQSFMpIHdhcm5PbmNlKFxuICAgICAgICBcIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwN1wiXG4gICAgKTtcblxuICAgIGlmIChmZWF0dXJlLnNvcnRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBidWNrZXQuYWRkVG9Tb3J0S2V5UmFuZ2VzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZW1wbGFjZUJhY2soXG4gICAgICAgIGFuY2hvci54LFxuICAgICAgICBhbmNob3IueSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMucmlnaHQgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnJpZ2h0IDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmNlbnRlciA+PSAwID8gcGxhY2VkVGV4dFN5bWJvbEluZGljZXMuY2VudGVyIDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmxlZnQgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmxlZnQgOiAtMSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMudmVydGljYWwgfHwgLTEsXG4gICAgICAgIHBsYWNlZEljb25TeW1ib2xJbmRleCxcbiAgICAgICAgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgsXG4gICAgICAgIGtleSxcbiAgICAgICAgdGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgIGljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICBpY29uQm94RW5kSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHZlcnRpY2FsSWNvbkJveEVuZEluZGV4LFxuICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsXG4gICAgICAgIG51bUljb25WZXJ0aWNlcyxcbiAgICAgICAgbnVtVmVydGljYWxJY29uVmVydGljZXMsXG4gICAgICAgIDAsXG4gICAgICAgIHRleHRCb3hTY2FsZSxcbiAgICAgICAgdGV4dE9mZnNldDAsXG4gICAgICAgIHRleHRPZmZzZXQxKTtcbn1cblxuZnVuY3Rpb24gYW5jaG9ySXNUb29DbG9zZShidWNrZXQ6IGFueSwgdGV4dDogc3RyaW5nLCByZXBlYXREaXN0YW5jZTogbnVtYmVyLCBhbmNob3I6IFBvaW50KSB7XG4gICAgY29uc3QgY29tcGFyZVRleHQgPSBidWNrZXQuY29tcGFyZVRleHQ7XG4gICAgaWYgKCEodGV4dCBpbiBjb21wYXJlVGV4dCkpIHtcbiAgICAgICAgY29tcGFyZVRleHRbdGV4dF0gPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdGhlckFuY2hvcnMgPSBjb21wYXJlVGV4dFt0ZXh0XTtcbiAgICAgICAgZm9yIChsZXQgayA9IG90aGVyQW5jaG9ycy5sZW5ndGggLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICAgICAgaWYgKGFuY2hvci5kaXN0KG90aGVyQW5jaG9yc1trXSkgPCByZXBlYXREaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mgd2l0aGluIHJlcGVhdERpc3RhbmNlIG9mIG9uZSBhbmNob3IsIHN0b3AgbG9va2luZ1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIGFuY2hvciBpcyBub3Qgd2l0aGluIHJlcGVhdERpc3RhbmNlIG9mIGFueSBvdGhlciBhbmNob3IsIGFkZCB0byBhcnJheVxuICAgIGNvbXBhcmVUZXh0W3RleHRdLnB1c2goYW5jaG9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3N5bWJvbExheW91dEF0dHJpYnV0ZXMsXG4gICAgY29sbGlzaW9uVmVydGV4QXR0cmlidXRlcyxcbiAgICBjb2xsaXNpb25Cb3hMYXlvdXQsXG4gICAgY29sbGlzaW9uQ2lyY2xlTGF5b3V0LFxuICAgIGR5bmFtaWNMYXlvdXRBdHRyaWJ1dGVzXG59IGZyb20gJy4vc3ltYm9sX2F0dHJpYnV0ZXMnO1xuXG5pbXBvcnQge1N5bWJvbExheW91dEFycmF5LFxuICAgIFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSxcbiAgICBTeW1ib2xPcGFjaXR5QXJyYXksXG4gICAgQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksXG4gICAgQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgQ29sbGlzaW9uVmVydGV4QXJyYXksXG4gICAgUGxhY2VkU3ltYm9sQXJyYXksXG4gICAgU3ltYm9sSW5zdGFuY2VBcnJheSxcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheX0gZnJvbSAnLi4vaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgdHJhbnNmb3JtVGV4dCBmcm9tICcuLi8uLi9zeW1ib2wvdHJhbnNmb3JtX3RleHQnO1xuaW1wb3J0IG1lcmdlTGluZXMgZnJvbSAnLi4vLi4vc3ltYm9sL21lcmdlbGluZXMnO1xuaW1wb3J0IHthbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlLCBzdHJpbmdDb250YWluc1JUTFRleHR9IGZyb20gJy4uLy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQge1dyaXRpbmdNb2RlfSBmcm9tICcuLi8uLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQge3ZlcnRpY2FsaXplZENoYXJhY3Rlck1hcH0gZnJvbSAnLi4vLi4vdXRpbC92ZXJ0aWNhbGl6ZV9wdW5jdHVhdGlvbic7XG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uLy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IHtnZXRTaXplRGF0YX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7TUFYX1BBQ0tFRF9TSVpFfSBmcm9tICcuLi8uLi9zeW1ib2wvc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB7cGx1Z2luIGFzIGdsb2JhbFJUTFRleHRQbHVnaW4sIGdldFJUTFRleHRQbHVnaW5TdGF0dXN9IGZyb20gJy4uLy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXksIENvbGxpc2lvbkJveCwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheSwgU3RydWN0QXJyYXlNZW1iZXJ9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtTeW1ib2xRdWFkfSBmcm9tICcuLi8uLi9zeW1ib2wvcXVhZHMnO1xuaW1wb3J0IHR5cGUge1NpemVEYXRhfSBmcm9tICcuLi8uLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNvbGxpc2lvbkJveCA9IHtcbiAgICB4MTogbnVtYmVyO1xuICAgIHkxOiBudW1iZXI7XG4gICAgeDI6IG51bWJlcjtcbiAgICB5MjogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50WTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uQXJyYXlzID0ge1xuICAgIHRleHRCb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdmVydGljYWxUZXh0Qm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIGljb25Cb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdmVydGljYWxJY29uQm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHRleHRDaXJjbGVzPzogQXJyYXk8bnVtYmVyPjtcbiAgICB0ZXh0RmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICBpY29uRmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEZlYXR1cmUgPSB7fFxuICAgIHNvcnRLZXk6IG51bWJlciB8IHZvaWQsXG4gICAgdGV4dDogRm9ybWF0dGVkIHwgdm9pZCxcbiAgICBpY29uOiBSZXNvbHZlZEltYWdlIHwgdm9pZCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QsXG4gICAgdHlwZTogJ1BvaW50JyB8ICdMaW5lU3RyaW5nJyB8ICdQb2x5Z29uJyxcbiAgICBpZD86IGFueVxufH07XG5cbmV4cG9ydCB0eXBlIFNvcnRLZXlSYW5nZSA9IHtcbiAgICBzb3J0S2V5OiBudW1iZXIsXG4gICAgc3ltYm9sSW5zdGFuY2VTdGFydDogbnVtYmVyLFxuICAgIHN5bWJvbEluc3RhbmNlRW5kOiBudW1iZXJcbn07XG5cbi8vIE9wYWNpdHkgYXJyYXlzIGFyZSBmcmVxdWVudGx5IHVwZGF0ZWQgYnV0IGRvbid0IGNvbnRhaW4gYSBsb3Qgb2YgaW5mb3JtYXRpb24sIHNvIHdlIHBhY2sgdGhlbVxuLy8gdGlnaHQuIEVhY2ggVWludDMyIGlzIGFjdHVhbGx5IGZvdXIgZHVwbGljYXRlIFVpbnQ4cyBmb3IgdGhlIGZvdXIgY29ybmVycyBvZiBhIGdseXBoXG4vLyA3IGJpdHMgYXJlIGZvciB0aGUgY3VycmVudCBvcGFjaXR5LCBhbmQgdGhlIGxvd2VzdCBiaXQgaXMgdGhlIHRhcmdldCBvcGFjaXR5XG5cbi8vIGFjdHVhbGx5IGRlZmluZWQgaW4gc3ltYm9sX2F0dHJpYnV0ZXMuanNcbi8vIGNvbnN0IHBsYWNlbWVudE9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuLy8gICAgIHsgbmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQzMicgfVxuLy8gXTtcbmNvbnN0IHNoYWRlck9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuICAgIHtuYW1lOiAnYV9mYWRlX29wYWNpdHknLCBjb21wb25lbnRzOiAxLCB0eXBlOiAnVWludDgnLCBvZmZzZXQ6IDB9XG5dO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgoYXJyYXksIGFuY2hvclgsIGFuY2hvclksIG94LCBveSwgdHgsIHR5LCBzaXplVmVydGV4LCBpc1NERjogYm9vbGVhbiwgcGl4ZWxPZmZzZXRYLCBwaXhlbE9mZnNldFksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpIHtcbiAgICBjb25zdCBhU2l6ZVggPSBzaXplVmVydGV4ID8gTWF0aC5taW4oTUFYX1BBQ0tFRF9TSVpFLCBNYXRoLnJvdW5kKHNpemVWZXJ0ZXhbMF0pKSA6IDA7XG4gICAgY29uc3QgYVNpemVZID0gc2l6ZVZlcnRleCA/IE1hdGgubWluKE1BWF9QQUNLRURfU0laRSwgTWF0aC5yb3VuZChzaXplVmVydGV4WzFdKSkgOiAwO1xuICAgIGFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAvLyBhX3Bvc19vZmZzZXRcbiAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgYW5jaG9yWSxcbiAgICAgICAgTWF0aC5yb3VuZChveCAqIDMyKSxcbiAgICAgICAgTWF0aC5yb3VuZChveSAqIDMyKSxcblxuICAgICAgICAvLyBhX2RhdGFcbiAgICAgICAgdHgsIC8vIHggY29vcmRpbmF0ZSBvZiBzeW1ib2wgb24gZ2x5cGggYXRsYXMgdGV4dHVyZVxuICAgICAgICB0eSwgLy8geSBjb29yZGluYXRlIG9mIHN5bWJvbCBvbiBnbHlwaCBhdGxhcyB0ZXh0dXJlXG4gICAgICAgIChhU2l6ZVggPDwgMSkgKyAoaXNTREYgPyAxIDogMCksXG4gICAgICAgIGFTaXplWSxcbiAgICAgICAgcGl4ZWxPZmZzZXRYICogMTYsXG4gICAgICAgIHBpeGVsT2Zmc2V0WSAqIDE2LFxuICAgICAgICBtaW5Gb250U2NhbGVYICogMjU2LFxuICAgICAgICBtaW5Gb250U2NhbGVZICogMjU2XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgcDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpIHtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNSVExUZXh0KGZvcm1hdHRlZFRleHQ6IEZvcm1hdHRlZCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtYXR0ZWRUZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzdHJpbmdDb250YWluc1JUTFRleHQoc2VjdGlvbi50ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY2xhc3MgU3ltYm9sQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG5cbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBvcGFjaXR5VmVydGV4QXJyYXk6IFN5bWJvbE9wYWNpdHlBcnJheTtcbiAgICBvcGFjaXR5VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXk7XG4gICAgY29sbGlzaW9uVmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBwbGFjZWRTeW1ib2xBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IHByb2dyYW1Db25maWd1cmF0aW9ucztcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xPcGFjaXR5QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wbGFjZWRTeW1ib2xBcnJheSA9IG5ldyBQbGFjZWRTeW1ib2xBcnJheSgpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQsIGR5bmFtaWNJbmRleEJ1ZmZlcjogYm9vbGVhbiwgdXBsb2FkPzogYm9vbGVhbiwgdXBkYXRlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSwgZHluYW1pY0luZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcywgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaGFjayBzbyB0aGF0IHdlIGNhbiB3cml0ZSB0byBvcGFjaXR5VmVydGV4QXJyYXkgd2l0aCB1aW50MzJzXG4gICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgc2hhZGVycyByZWFkIHVpbnQ4c1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBsb2FkIHx8IHVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1ZmZlcnMnLCBTeW1ib2xCdWZmZXJzKTtcblxuY2xhc3MgQ29sbGlzaW9uQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29uc3RydWN0b3IoTGF5b3V0QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PixcbiAgICAgICAgICAgICAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgICAgICAgICAgICAgSW5kZXhBcnJheTogQ2xhc3M8VHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXk+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IEluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXkgPSBuZXcgQ29sbGlzaW9uVmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMubGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQ29sbGlzaW9uQnVmZmVycycsIENvbGxpc2lvbkJ1ZmZlcnMpO1xuXG4vKipcbiAqIFVubGlrZSBvdGhlciBidWNrZXRzLCB3aGljaCBzaW1wbHkgaW1wbGVtZW50ICNhZGRGZWF0dXJlIHdpdGggdHlwZS1zcGVjaWZpY1xuICogbG9naWMgZm9yIChlc3NlbnRpYWxseSkgdHJpYW5ndWxhdGluZyBmZWF0dXJlIGdlb21ldHJpZXMsIFN5bWJvbEJ1Y2tldFxuICogcmVxdWlyZXMgc3BlY2lhbGl6ZWQgYmVoYXZpb3I6XG4gKlxuICogMS4gV29ya2VyVGlsZSNwYXJzZSgpLCB0aGUgbG9naWNhbCBvd25lciBvZiB0aGUgYnVja2V0IGNyZWF0aW9uIHByb2Nlc3MsXG4gKiAgICBjYWxscyBTeW1ib2xCdWNrZXQjcG9wdWxhdGUoKSwgd2hpY2ggcmVzb2x2ZXMgdGV4dCBhbmQgaWNvbiB0b2tlbnMgb25cbiAqICAgIGVhY2ggZmVhdHVyZSwgYWRkcyBlYWNoIGdseXBocyBhbmQgc3ltYm9scyBuZWVkZWQgdG8gdGhlIHBhc3NlZC1pblxuICogICAgY29sbGVjdGlvbnMgb3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzLCBhbmRcbiAqICAgIHN0b3JlcyB0aGUgZmVhdHVyZSBkYXRhIGZvciB1c2UgaW4gc3Vic2VxdWVudCBzdGVwICh0aGlzLmZlYXR1cmVzKS5cbiAqXG4gKiAyLiBXb3JrZXJUaWxlIGFzeW5jaHJvbm91c2x5IHJlcXVlc3RzIGZyb20gdGhlIG1haW4gdGhyZWFkIGFsbCBvZiB0aGUgZ2x5cGhzXG4gKiAgICBhbmQgaWNvbnMgbmVlZGVkIChieSB0aGlzIGJ1Y2tldCBhbmQgYW55IG90aGVycykuIFdoZW4gZ2x5cGhzIGFuZCBpY29uc1xuICogICAgaGF2ZSBiZWVuIHJlY2VpdmVkLCB0aGUgV29ya2VyVGlsZSBjcmVhdGVzIGEgQ29sbGlzaW9uSW5kZXggYW5kIGludm9rZXM6XG4gKlxuICogMy4gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQsIHN0YWNrcywgaWNvbnMpIHBlcmZvcm0gdGV4dHMgc2hhcGluZyBhbmRcbiAqICAgIGxheW91dCBvbiBhIFN5bWJvbCBCdWNrZXQuIFRoaXMgc3RlcCBwb3B1bGF0ZXM6XG4gKiAgICAgIGB0aGlzLnN5bWJvbEluc3RhbmNlc2A6IG1ldGFkYXRhIG9uIGdlbmVyYXRlZCBzeW1ib2xzXG4gKiAgICAgIGB0aGlzLmNvbGxpc2lvbkJveEFycmF5YDogY29sbGlzaW9uIGRhdGEgZm9yIHVzZSBieSBmb3JlZ3JvdW5kXG4gKiAgICAgIGB0aGlzLnRleHRgOiBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IHN5bWJvbHNcbiAqICAgICAgYHRoaXMuaWNvbnNgOiBTeW1ib2xCdWZmZXJzIGZvciBpY29uc1xuICogICAgICBgdGhpcy5pY29uQ29sbGlzaW9uQm94YDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgaWNvbiBjb2xsaXNpb24gYm94ZXNcbiAqICAgICAgYHRoaXMudGV4dENvbGxpc2lvbkJveGA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIHRleHQgY29sbGlzaW9uIGJveGVzXG4gKiAgICAgIGB0aGlzLmljb25Db2xsaXNpb25DaXJjbGVgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciBpY29uIGNvbGxpc2lvbiBjaXJjbGVzXG4gKiAgICAgIGB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGVgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IGNvbGxpc2lvbiBjaXJjbGVzXG4gKiAgICBUaGUgcmVzdWx0cyBhcmUgc2VudCB0byB0aGUgZm9yZWdyb3VuZCBmb3IgcmVuZGVyaW5nXG4gKlxuICogNC4gcGVyZm9ybVN5bWJvbFBsYWNlbWVudChidWNrZXQsIGNvbGxpc2lvbkluZGV4KSBpcyBydW4gb24gdGhlIGZvcmVncm91bmQsXG4gKiAgICBhbmQgdXNlcyB0aGUgQ29sbGlzaW9uSW5kZXggYWxvbmcgd2l0aCBjdXJyZW50IGNhbWVyYSBzZXR0aW5ncyB0byBkZXRlcm1pbmVcbiAqICAgIHdoaWNoIHN5bWJvbHMgY2FuIGFjdHVhbGx5IHNob3cgb24gdGhlIG1hcC4gQ29sbGlkZWQgc3ltYm9scyBhcmUgaGlkZGVuXG4gKiAgICB1c2luZyBhIGR5bmFtaWMgXCJPcGFjaXR5VmVydGV4QXJyYXlcIi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTeW1ib2xCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIHN0YXRpYyBNQVhfR0xZUEhTOiBudW1iZXI7XG4gICAgc3RhdGljIGFkZER5bmFtaWNBdHRyaWJ1dGVzOiB0eXBlb2YgYWRkRHluYW1pY0F0dHJpYnV0ZXM7XG5cbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxTeW1ib2xTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc2RmSWNvbnM6IGJvb2xlYW47XG4gICAgaWNvbnNJblRleHQ6IGJvb2xlYW47XG4gICAgaWNvbnNOZWVkTGluZWFyOiBib29sZWFuO1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBqdXN0UmVsb2FkZWQ6IGJvb2xlYW47XG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcblxuICAgIHRleHRTaXplRGF0YTogU2l6ZURhdGE7XG4gICAgaWNvblNpemVEYXRhOiBTaXplRGF0YTtcblxuICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgZmVhdHVyZXM6IEFycmF5PFN5bWJvbEZlYXR1cmU+O1xuICAgIHN5bWJvbEluc3RhbmNlczogU3ltYm9sSW5zdGFuY2VBcnJheTtcbiAgICBjb2xsaXNpb25BcnJheXM6IEFycmF5PENvbGxpc2lvbkFycmF5cz47XG4gICAgc29ydEtleVJhbmdlczogQXJyYXk8U29ydEtleVJhbmdlPjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVBpeGVsUmF0aW86IG51bWJlcjtcbiAgICBjb21wYXJlVGV4dDoge1tzdHJpbmddOiBBcnJheTxQb2ludD59O1xuICAgIGZhZGVTdGFydFRpbWU6IG51bWJlcjtcbiAgICBzb3J0RmVhdHVyZXNCeUtleTogYm9vbGVhbjtcbiAgICBzb3J0RmVhdHVyZXNCeVk6IGJvb2xlYW47XG4gICAgc29ydGVkQW5nbGU6IG51bWJlcjtcbiAgICBmZWF0dXJlU29ydE9yZGVyOiBBcnJheTxudW1iZXI+O1xuXG4gICAgdGV4dDogU3ltYm9sQnVmZmVycztcbiAgICBpY29uOiBTeW1ib2xCdWZmZXJzO1xuICAgIHRleHRDb2xsaXNpb25Cb3g6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgaWNvbkNvbGxpc2lvbkJveDogQ29sbGlzaW9uQnVmZmVycztcbiAgICB0ZXh0Q29sbGlzaW9uQ2lyY2xlOiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIGljb25Db2xsaXNpb25DaXJjbGU6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUlEOiBzdHJpbmc7XG4gICAgc3ltYm9sSW5zdGFuY2VJbmRleGVzOiBBcnJheTxudW1iZXI+O1xuICAgIHdyaXRpbmdNb2RlczogQXJyYXk8bnVtYmVyPjtcbiAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIGhhc1JUTFRleHQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPFN5bWJvbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQm94QXJyYXkgPSBvcHRpb25zLmNvbGxpc2lvbkJveEFycmF5O1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IG9wdGlvbnMucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5zb3VyY2VMYXllckluZGV4ID0gb3B0aW9ucy5zb3VyY2VMYXllckluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNSVExUZXh0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ydEtleVJhbmdlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnNbMF07XG4gICAgICAgIGNvbnN0IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzID0gbGF5ZXIuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7XG5cbiAgICAgICAgdGhpcy50ZXh0U2l6ZURhdGEgPSBnZXRTaXplRGF0YSh0aGlzLnpvb20sIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXSk7XG4gICAgICAgIHRoaXMuaWNvblNpemVEYXRhID0gZ2V0U2l6ZURhdGEodGhpcy56b29tLCB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10pO1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgY29uc3Qgc29ydEtleSA9IGxheW91dC5nZXQoJ3N5bWJvbC1zb3J0LWtleScpO1xuICAgICAgICBjb25zdCB6T3JkZXIgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtei1vcmRlcicpO1xuICAgICAgICB0aGlzLnNvcnRGZWF0dXJlc0J5S2V5ID0gek9yZGVyICE9PSAndmlld3BvcnQteScgJiYgc29ydEtleS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHpPcmRlckJ5Vmlld3BvcnRZID0gek9yZGVyID09PSAndmlld3BvcnQteScgfHwgKHpPcmRlciA9PT0gJ2F1dG8nICYmICF0aGlzLnNvcnRGZWF0dXJlc0J5S2V5KTtcbiAgICAgICAgdGhpcy5zb3J0RmVhdHVyZXNCeVkgPSB6T3JkZXJCeVZpZXdwb3J0WSAmJiAobGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJykgfHwgbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJykgfHxcbiAgICAgICAgICAgIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpIHx8IGxheW91dC5nZXQoJ2ljb24taWdub3JlLXBsYWNlbWVudCcpKTtcblxuICAgICAgICBpZiAobGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAncG9pbnQnKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRpbmdNb2RlcyA9IGxheW91dC5nZXQoJ3RleHQtd3JpdGluZy1tb2RlJykubWFwKHdtID0+IFdyaXRpbmdNb2RlW3dtXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuXG4gICAgICAgIHRoaXMuc291cmNlSUQgPSBvcHRpb25zLnNvdXJjZUlEO1xuICAgIH1cblxuICAgIGNyZWF0ZUFycmF5cygpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gbmV3IFN5bWJvbEJ1ZmZlcnMobmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdGhpcy5sYXllcnMsIHRoaXMuem9vbSwgcHJvcGVydHkgPT4gL150ZXh0Ly50ZXN0KHByb3BlcnR5KSkpO1xuICAgICAgICB0aGlzLmljb24gPSBuZXcgU3ltYm9sQnVmZmVycyhuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQoc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0aGlzLmxheWVycywgdGhpcy56b29tLCBwcm9wZXJ0eSA9PiAvXmljb24vLnRlc3QocHJvcGVydHkpKSk7XG5cbiAgICAgICAgdGhpcy5nbHlwaE9mZnNldEFycmF5ID0gbmV3IEdseXBoT2Zmc2V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5saW5lVmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sTGluZVZlcnRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc3ltYm9sSW5zdGFuY2VzID0gbmV3IFN5bWJvbEluc3RhbmNlQXJyYXkoKTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyh0ZXh0OiBzdHJpbmcsIHN0YWNrOiB7W251bWJlcl06IGJvb2xlYW59LCB0ZXh0QWxvbmdMaW5lOiBib29sZWFuLCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuLCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlOiBib29sZWFuKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3RhY2tbdGV4dC5jaGFyQ29kZUF0KGkpXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoKHRleHRBbG9uZ0xpbmUgfHwgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCkgJiYgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsQ2hhciA9IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFt0ZXh0LmNoYXJBdChpKV07XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsQ2hhcikge1xuICAgICAgICAgICAgICAgICAgICBzdGFja1t2ZXJ0aWNhbENoYXIuY2hhckNvZGVBdCgwKV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBsYXllci5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3QgdGV4dEZvbnQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZvbnQnKTtcbiAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gbGF5b3V0LmdldCgndGV4dC1maWVsZCcpO1xuICAgICAgICBjb25zdCBpY29uSW1hZ2UgPSBsYXlvdXQuZ2V0KCdpY29uLWltYWdlJyk7XG4gICAgICAgIGNvbnN0IGhhc1RleHQgPVxuICAgICAgICAgICAgKHRleHRGaWVsZC52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICAgICAgKHRleHRGaWVsZC52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCAmJiAhdGV4dEZpZWxkLnZhbHVlLnZhbHVlLmlzRW1wdHkoKSkgfHxcbiAgICAgICAgICAgICAgICB0ZXh0RmllbGQudmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgKHRleHRGb250LnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgdGV4dEZvbnQudmFsdWUudmFsdWUubGVuZ3RoID4gMCk7XG4gICAgICAgIC8vIHdlIHNob3VsZCBhbHdheXMgcmVzb2x2ZSB0aGUgaWNvbi1pbWFnZSB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgd2FzIGRlZmluZWQgaW4gdGhlIHN0eWxlXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHVzIHRvIGZpcmUgdGhlIHN0eWxlaW1hZ2VtaXNzaW5nIGV2ZW50IGlmIGltYWdlIGV2YWx1YXRpb24gcmV0dXJucyBudWxsXG4gICAgICAgIC8vIHRoZSBvbmx5IHdheSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG51bGwgcmV0dXJuZWQgZnJvbSBhIGNvYWxlc2NlIHN0YXRlbWVudCB3aXRoIG5vIHZhbGlkIGltYWdlc1xuICAgICAgICAvLyBhbmQgbnVsbCByZXR1cm5lZCBiZWNhdXNlIGljb24taW1hZ2Ugd2Fzbid0IGRlZmluZWQgaXMgdG8gY2hlY2sgd2hldGhlciBvciBub3QgaWNvbkltYWdlLnBhcmFtZXRlcnMgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgIGNvbnN0IGhhc0ljb24gPSAoaWNvbkltYWdlLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgISFpY29uSW1hZ2UudmFsdWUudmFsdWUpICYmIE9iamVjdC5rZXlzKGljb25JbWFnZS5wYXJhbWV0ZXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzeW1ib2xTb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGlmICghaGFzVGV4dCAmJiAhaGFzSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWNvbnMgPSBvcHRpb25zLmljb25EZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUltYWdlcyA9IG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzO1xuICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgaWYgKCFsYXllci5fZmVhdHVyZUZpbHRlcihnbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdGV4dDogRm9ybWF0dGVkIHwgdm9pZDtcbiAgICAgICAgICAgIGlmIChoYXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjb2VyY2UgdG8gRm9ybWF0dGVkXG4gICAgICAgICAgICAgICAgLy8gYnV0IHBsYWluIHN0cmluZyB0b2tlbiBldmFsdWF0aW9uIHNraXBzIHRoYXQgcGF0aHdheSBzbyBkbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGhlcmUuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUb2tlbnMgPSBsYXllci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoJ3RleHQtZmllbGQnLCBmZWF0dXJlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFRleHQgPSBGb3JtYXR0ZWQuZmFjdG9yeShyZXNvbHZlZFRva2Vucyk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zUlRMVGV4dChmb3JtYXR0ZWRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmhhc1JUTFRleHQgfHwgLy8gbm9uLXJ0bCB0ZXh0IHNvIGNhbiBwcm9jZWVkIHNhZmVseVxuICAgICAgICAgICAgICAgICAgICBnZXRSVExUZXh0UGx1Z2luU3RhdHVzKCkgPT09ICd1bmF2YWlsYWJsZScgfHwgLy8gV2UgZG9uJ3QgaW50ZW5kIHRvIGxhenktbG9hZCB0aGUgcnRsIHRleHQgcGx1Z2luLCBzbyBwcm9jZWVkIHdpdGggaW5jb3JyZWN0IHNoYXBpbmdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNSVExUZXh0ICYmIGdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKSAvLyBVc2UgdGhlIHJ0bFRleHQgcGx1Z2luIHRvIHNoYXBlIHRleHRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybVRleHQoZm9ybWF0dGVkVGV4dCwgbGF5ZXIsIGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGljb246IFJlc29sdmVkSW1hZ2UgfCB2b2lkO1xuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBJbWFnZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBwbGFpbiBzdHJpbmcgdG9rZW4gZXZhbHVhdGlvbiBza2lwcyB0aGF0IHBhdGh3YXkgc28gZG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBoZXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVG9rZW5zID0gbGF5ZXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCdpY29uLWltYWdlJywgZmVhdHVyZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRUb2tlbnMgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGljb24gPSByZXNvbHZlZFRva2VucztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gUmVzb2x2ZWRJbWFnZS5mcm9tU3RyaW5nKHJlc29sdmVkVG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGV4dCAmJiAhaWNvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3J0S2V5ID0gdGhpcy5zb3J0RmVhdHVyZXNCeUtleSA/XG4gICAgICAgICAgICAgICAgc3ltYm9sU29ydEtleS5ldmFsdWF0ZShmZWF0dXJlLCB7fSkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgY29uc3Qgc3ltYm9sRmVhdHVyZTogU3ltYm9sRmVhdHVyZSA9IHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbG9hZEdlb21ldHJ5KGZlYXR1cmUpLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzW2ZlYXR1cmUudHlwZV0sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaChzeW1ib2xGZWF0dXJlKTtcblxuICAgICAgICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICBpY29uc1tpY29uLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb250U3RhY2sgPSB0ZXh0Rm9udC5ldmFsdWF0ZShmZWF0dXJlLCB7fSkuam9pbignLCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRBbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCc7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ID0gdGhpcy53cml0aW5nTW9kZXMgJiYgdGhpcy53cml0aW5nTW9kZXMuaW5kZXhPZihXcml0aW5nTW9kZS52ZXJ0aWNhbCkgPj0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGV4dC5zZWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlY3Rpb24uaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHRleHQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uRm9udCA9IHNlY3Rpb24uZm9udFN0YWNrIHx8IGZvbnRTdGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25TdGFjayA9IHN0YWNrc1tzZWN0aW9uRm9udF0gPSBzdGFja3Nbc2VjdGlvbkZvbnRdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyhzZWN0aW9uLnRleHQsIHNlY3Rpb25TdGFjaywgdGV4dEFsb25nTGluZSwgdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBzZWN0aW9uIGltYWdlIHRvIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zW3NlY3Rpb24uaW1hZ2UubmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSA9PT0gJ2xpbmUnKSB7XG4gICAgICAgICAgICAvLyBNZXJnZSBhZGphY2VudCBsaW5lcyB3aXRoIHRoZSBzYW1lIHRleHQgdG8gaW1wcm92ZSBsYWJlbGxpbmcuXG4gICAgICAgICAgICAvLyBJdCdzIGJldHRlciB0byBwbGFjZSBsYWJlbHMgb24gb25lIGxvbmcgbGluZSB0aGFuIG9uIG1hbnkgc2hvcnQgc2VnbWVudHMuXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzID0gbWVyZ2VMaW5lcyh0aGlzLmZlYXR1cmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gc29ydEZlYXR1cmVzQnlLZXkgaXMgdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W3N0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMubGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLmxheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGJ1Y2tldCBlbmNvdW50ZXJzIG9ubHkgcnRsLXRleHQgYnV0IHRoZSBwbHVnaW4gaXNudCBsb2FkZWQsIG5vIHN5bWJvbCBpbnN0YW5jZXMgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAgICAvLyBJbiBvcmRlciBmb3IgdGhlIGJ1Y2tldCB0byBiZSBzZXJpYWxpemVkLCBhbmQgbm90IGRpc2NhcmRlZCBhcyBhbiBlbXB0eSBidWNrZXQgYm90aCBjaGVja3MgYXJlIG5lY2Vzc2FyeS5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5oYXNSVExUZXh0O1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkIHx8IHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQ7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkICYmIHRoaXMuaGFzRGVidWdEYXRhKCkpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkJveC51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLmljb25Db2xsaXNpb25Cb3gudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZS51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0LnVwbG9hZChjb250ZXh0LCB0aGlzLnNvcnRGZWF0dXJlc0J5WSwgIXRoaXMudXBsb2FkZWQsIHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpO1xuICAgICAgICB0aGlzLmljb24udXBsb2FkKGNvbnRleHQsIHRoaXMuc29ydEZlYXR1cmVzQnlZLCAhdGhpcy51cGxvYWRlZCwgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3lEZWJ1Z0RhdGEoKSB7XG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkJveC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZS5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uLmRlc3Ryb3koKTtcblxuICAgICAgICBpZiAodGhpcy5oYXNEZWJ1Z0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95RGVidWdEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3I6IEFuY2hvciwgbGluZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gdGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBpZiAoYW5jaG9yLnNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHN1bUZvcndhcmRMZW5ndGggPSBhbmNob3IuZGlzdChsaW5lW2FuY2hvci5zZWdtZW50ICsgMV0pO1xuICAgICAgICAgICAgbGV0IHN1bUJhY2t3YXJkTGVuZ3RoID0gYW5jaG9yLmRpc3QobGluZVthbmNob3Iuc2VnbWVudF0pO1xuICAgICAgICAgICAgY29uc3QgdmVydGljZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNob3Iuc2VnbWVudCArIDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1Gb3J3YXJkTGVuZ3RofTtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbmUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW1Gb3J3YXJkTGVuZ3RoICs9IGxpbmVbaSArIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFuY2hvci5zZWdtZW50IHx8IDA7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1CYWNrd2FyZExlbmd0aH07XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bUJhY2t3YXJkTGVuZ3RoICs9IGxpbmVbaSAtIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVMZW5ndGg6IHRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aCAtIGxpbmVTdGFydEluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkU3ltYm9scyhhcnJheXM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgICAgICAgICBxdWFkczogQXJyYXk8U3ltYm9sUXVhZD4sXG4gICAgICAgICAgICAgICBzaXplVmVydGV4OiBhbnksXG4gICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBhbnksXG4gICAgICAgICAgICAgICBsYWJlbEFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmRleEFycmF5ID0gYXJyYXlzLmluZGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCAqIHF1YWRzLmxlbmd0aCwgbGF5b3V0VmVydGV4QXJyYXksIGluZGV4QXJyYXksIGZlYXR1cmUuc29ydEtleSk7XG4gICAgICAgIGNvbnN0IGdseXBoT2Zmc2V0QXJyYXlTdGFydCA9IHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZlcnRleFN0YXJ0SW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICBjb25zdCBhbmdsZSA9ICh0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgd3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGZlYXR1cmUudGV4dCAmJiBmZWF0dXJlLnRleHQuc2VjdGlvbnM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWFkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qge3RsLCB0ciwgYmwsIGJyLCB0ZXgsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVksIGdseXBoT2Zmc2V0LCBpc1NERiwgc2VjdGlvbkluZGV4fSA9IHF1YWRzW2ldO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgeSA9IGdseXBoT2Zmc2V0WzFdO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0bC54LCB5ICsgdGwueSwgdGV4LngsIHRleC55LCBzaXplVmVydGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRUTC54LCBwaXhlbE9mZnNldFRMLnksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0ci54LCB5ICsgdHIueSwgdGV4LnggKyB0ZXgudywgdGV4LnksIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldEJSLngsIHBpeGVsT2Zmc2V0VEwueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIGJsLngsIHkgKyBibC55LCB0ZXgueCwgdGV4LnkgKyB0ZXguaCwgc2l6ZVZlcnRleCwgaXNTREYsIHBpeGVsT2Zmc2V0VEwueCwgcGl4ZWxPZmZzZXRCUi55LCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKTtcbiAgICAgICAgICAgIGFkZFZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSwgYnIueCwgeSArIGJyLnksIHRleC54ICsgdGV4LncsIHRleC55ICsgdGV4LmgsIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldEJSLngsIHBpeGVsT2Zmc2V0QlIueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG5cbiAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGFycmF5cy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLCBhbmdsZSk7XG5cbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAxLCBpbmRleCArIDIsIGluZGV4ICsgMyk7XG5cbiAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuXG4gICAgICAgICAgICB0aGlzLmdseXBoT2Zmc2V0QXJyYXkuZW1wbGFjZUJhY2soZ2x5cGhPZmZzZXRbMF0pO1xuXG4gICAgICAgICAgICBpZiAoaSA9PT0gcXVhZHMubGVuZ3RoIC0gMSB8fCBzZWN0aW9uSW5kZXggIT09IHF1YWRzW2kgKyAxXS5zZWN0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBhcnJheXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMobGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBmZWF0dXJlLmluZGV4LCB7fSwgc2VjdGlvbnMgJiYgc2VjdGlvbnNbc2VjdGlvbkluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheXMucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2sobGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSxcbiAgICAgICAgICAgIGdseXBoT2Zmc2V0QXJyYXlTdGFydCwgdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCAtIGdseXBoT2Zmc2V0QXJyYXlTdGFydCwgdmVydGV4U3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lTGVuZ3RoLCAobGFiZWxBbmNob3Iuc2VnbWVudDogYW55KSxcbiAgICAgICAgICAgIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzBdIDogMCwgc2l6ZVZlcnRleCA/IHNpemVWZXJ0ZXhbMV0gOiAwLFxuICAgICAgICAgICAgbGluZU9mZnNldFswXSwgbGluZU9mZnNldFsxXSxcbiAgICAgICAgICAgIHdyaXRpbmdNb2RlLFxuICAgICAgICAgICAgLy8gcGxhY2VkT3JpZW50YXRpb24gaXMgbnVsbCBpbml0aWFsbHk7IHdpbGwgYmUgdXBkYXRlZCB0byBob3Jpem9udGFsKDEpL3ZlcnRpY2FsKDIpIGlmIHBsYWNlZFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIChmYWxzZTogYW55KSxcbiAgICAgICAgICAgIC8vIFRoZSBjcm9zc1RpbGVJRCBpcyBvbmx5IGZpbGxlZC91c2VkIG9uIHRoZSBmb3JlZ3JvdW5kIGZvciBkeW5hbWljIHRleHQgYW5jaG9yc1xuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIHBvaW50OiBQb2ludCwgYW5jaG9yWDogbnVtYmVyLCBhbmNob3JZOiBudW1iZXIsIGV4dHJ1ZGU6IFBvaW50KSB7XG4gICAgICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICByZXR1cm4gbGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAvLyBwb3NcbiAgICAgICAgICAgIHBvaW50LngsXG4gICAgICAgICAgICBwb2ludC55LFxuICAgICAgICAgICAgLy8gYV9hbmNob3JfcG9zXG4gICAgICAgICAgICBhbmNob3JYLFxuICAgICAgICAgICAgYW5jaG9yWSxcbiAgICAgICAgICAgIC8vIGV4dHJ1ZGVcbiAgICAgICAgICAgIE1hdGgucm91bmQoZXh0cnVkZS54KSxcbiAgICAgICAgICAgIE1hdGgucm91bmQoZXh0cnVkZS55KSk7XG4gICAgfVxuXG4gICAgYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBhcnJheXM6IENvbGxpc2lvbkJ1ZmZlcnMsIGJveEFuY2hvclBvaW50OiBQb2ludCwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBpc0NpcmNsZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gYXJyYXlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheSwgYXJyYXlzLmluZGV4QXJyYXkpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBcnJheSA9IGFycmF5cy5jb2xsaXNpb25WZXJ0ZXhBcnJheTtcblxuICAgICAgICBjb25zdCBhbmNob3JYID0gc3ltYm9sSW5zdGFuY2UuYW5jaG9yWDtcbiAgICAgICAgY29uc3QgYW5jaG9yWSA9IHN5bWJvbEluc3RhbmNlLmFuY2hvclk7XG5cbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgxLCB5MSkpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDIsIHkxKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MiwgeTIpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgxLCB5MikpO1xuXG4gICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgIGlmIChpc0NpcmNsZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5ID0gKGFycmF5cy5pbmRleEFycmF5OiBhbnkpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAyLCBpbmRleCArIDMpO1xuXG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhBcnJheTogTGluZUluZGV4QXJyYXkgPSAoYXJyYXlzLmluZGV4QXJyYXk6IGFueSk7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMiwgaW5kZXggKyAzKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAzLCBpbmRleCk7XG5cbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBpc1RleHQ6IGJvb2xlYW4pIHtcbiAgICAgICAgZm9yIChsZXQgYiA9IHN0YXJ0SW5kZXg7IGIgPCBlbmRJbmRleDsgYisrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9ICh0aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChiKTogYW55KTtcbiAgICAgICAgICAgIGNvbnN0IHgxID0gYm94LngxO1xuICAgICAgICAgICAgY29uc3QgeTEgPSBib3gueTE7XG4gICAgICAgICAgICBjb25zdCB4MiA9IGJveC54MjtcbiAgICAgICAgICAgIGNvbnN0IHkyID0gYm94LnkyO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgcmFkaXVzID4gMCwgdGhpcyBjb2xsaXNpb24gYm94IGlzIGFjdHVhbGx5IGEgY2lyY2xlXG4gICAgICAgICAgICAvLyBUaGUgZGF0YSB3ZSBhZGQgdG8gdGhlIGJ1ZmZlcnMgaXMgZXhhY3RseSB0aGUgc2FtZSwgYnV0IHdlJ2xsIHJlbmRlciB3aXRoIGEgZGlmZmVyZW50IHNoYWRlci5cbiAgICAgICAgICAgIGNvbnN0IGlzQ2lyY2xlID0gYm94LnJhZGl1cyA+IDA7XG4gICAgICAgICAgICB0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMoeDEsIHkxLCB4MiwgeTIsIGlzQ2lyY2xlID9cbiAgICAgICAgICAgICAgICAoaXNUZXh0ID8gdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlIDogdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlKSA6IChpc1RleHQgPyB0aGlzLnRleHRDb2xsaXNpb25Cb3ggOiB0aGlzLmljb25Db2xsaXNpb25Cb3gpLFxuICAgICAgICAgICAgICAgIGJveC5hbmNob3JQb2ludCwgc3ltYm9sSW5zdGFuY2UsIGlzQ2lyY2xlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEZWJ1Z0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95RGVidWdEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3ggPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSwgY29sbGlzaW9uQm94TGF5b3V0Lm1lbWJlcnMsIExpbmVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94ID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksIGNvbGxpc2lvbkJveExheW91dC5tZW1iZXJzLCBMaW5lSW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZSA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LCBjb2xsaXNpb25DaXJjbGVMYXlvdXQubWVtYmVycywgVHJpYW5nbGVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksIGNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCBUcmlhbmdsZUluZGV4QXJyYXkpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnRleHRCb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS50ZXh0Qm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLmljb25Cb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS5pY29uQm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94U3RhcnRJbmRleCwgc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGVzZSBmbGF0IGFycmF5cyBhcmUgbWVhbnQgdG8gYmUgcXVpY2tlciB0byBpdGVyYXRlIG92ZXIgdGhhbiB0aGUgc291cmNlXG4gICAgLy8gQ29sbGlzaW9uQm94QXJyYXlcbiAgICBfZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbChjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgIHRleHRTdGFydEluZGV4OiBudW1iZXIsIHRleHRFbmRJbmRleDogbnVtYmVyLFxuICAgICAgICB2ZXJ0aWNhbFRleHRTdGFydEluZGV4OiBudW1iZXIsIHZlcnRpY2FsVGV4dEVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIGljb25TdGFydEluZGV4OiBudW1iZXIsIGljb25FbmRJbmRleDogbnVtYmVyLFxuICAgICAgICB2ZXJ0aWNhbEljb25TdGFydEluZGV4OiBudW1iZXIsIHZlcnRpY2FsSWNvbkVuZEluZGV4OiBudW1iZXIpOiBDb2xsaXNpb25BcnJheXMge1xuXG4gICAgICAgIGNvbnN0IGNvbGxpc2lvbkFycmF5cyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBrID0gdGV4dFN0YXJ0SW5kZXg7IGsgPCB0ZXh0RW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgaWYgKGJveC5yYWRpdXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlZCA9IDE7IC8vIE1heSBiZSB1cGRhdGVkIGF0IGNvbGxpc2lvbiBkZXRlY3Rpb24gdGltZVxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcy5wdXNoKGJveC5hbmNob3JQb2ludFgsIGJveC5hbmNob3JQb2ludFksIGJveC5yYWRpdXMsIGJveC5zaWduZWREaXN0YW5jZUZyb21BbmNob3IsIHVzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSB2ZXJ0aWNhbFRleHRTdGFydEluZGV4OyBrIDwgdmVydGljYWxUZXh0RW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgaWYgKGJveC5yYWRpdXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gT25seSBvbmUgYm94IGFsbG93ZWQgcGVyIGluc3RhbmNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IGljb25TdGFydEluZGV4OyBrIDwgaWNvbkVuZEluZGV4OyBrKyspIHtcbiAgICAgICAgICAgIC8vIEFuIGljb24gY2FuIG9ubHkgaGF2ZSBvbmUgYm94IG5vdywgc28gdGhpcyBpbmRleGluZyBpcyBhIGJpdCB2ZXN0aWdpYWwuLi5cbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKGNvbGxpc2lvbkJveEFycmF5LmdldChrKTogYW55KTtcbiAgICAgICAgICAgIGlmIChib3gucmFkaXVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25Cb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gT25seSBvbmUgYm94IGFsbG93ZWQgcGVyIGluc3RhbmNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IHZlcnRpY2FsSWNvblN0YXJ0SW5kZXg7IGsgPCB2ZXJ0aWNhbEljb25FbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICAvLyBBbiBpY29uIGNhbiBvbmx5IGhhdmUgb25lIGJveCBub3csIHNvIHRoaXMgaW5kZXhpbmcgaXMgYSBiaXQgdmVzdGlnaWFsLi4uXG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGlzaW9uQXJyYXlzO1xuICAgIH1cblxuICAgIGRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5KSB7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQXJyYXlzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMucHVzaCh0aGlzLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKFxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1RleHREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNEZWJ1Z0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRDb2xsaXNpb25Cb3ggJiYgdGhpcy5pY29uQ29sbGlzaW9uQm94ICYmIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZSAmJiB0aGlzLmljb25Db2xsaXNpb25DaXJjbGU7XG4gICAgfVxuXG4gICAgaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpICYmIHRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSAmJiB0aGlzLmljb25Db2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkgJiYgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpICYmIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2woaWNvbk9yVGV4dDogU3ltYm9sQnVmZmVycywgcGxhY2VkU3ltYm9sSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwbGFjZWRTeW1ib2wgPSBpY29uT3JUZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChwbGFjZWRTeW1ib2xJbmRleCk7XG5cbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBwbGFjZWRTeW1ib2wudmVydGV4U3RhcnRJbmRleCArIHBsYWNlZFN5bWJvbC5udW1HbHlwaHMgKiA0O1xuICAgICAgICBmb3IgKGxldCB2ZXJ0ZXhJbmRleCA9IHBsYWNlZFN5bWJvbC52ZXJ0ZXhTdGFydEluZGV4OyB2ZXJ0ZXhJbmRleCA8IGVuZEluZGV4OyB2ZXJ0ZXhJbmRleCArPSA0KSB7XG4gICAgICAgICAgICBpY29uT3JUZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4SW5kZXgsIHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyKTtcbiAgICAgICAgICAgIGljb25PclRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMiwgdmVydGV4SW5kZXggKyAzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNvcnRlZFN5bWJvbEluZGV4ZXMoYW5nbGU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zb3J0ZWRBbmdsZSA9PT0gYW5nbGUgJiYgdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCByb3RhdGVkWXMgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHJvdGF0ZWRZcy5wdXNoKE1hdGgucm91bmQoc2luICogc3ltYm9sSW5zdGFuY2UuYW5jaG9yWCArIGNvcyAqIHN5bWJvbEluc3RhbmNlLmFuY2hvclkpIHwgMCk7XG4gICAgICAgICAgICBmZWF0dXJlSW5kZXhlcy5wdXNoKHN5bWJvbEluc3RhbmNlLmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc29ydCgoYUluZGV4LCBiSW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocm90YXRlZFlzW2FJbmRleF0gLSByb3RhdGVkWXNbYkluZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAoZmVhdHVyZUluZGV4ZXNbYkluZGV4XSAtIGZlYXR1cmVJbmRleGVzW2FJbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFkZFRvU29ydEtleVJhbmdlcyhzeW1ib2xJbnN0YW5jZUluZGV4OiBudW1iZXIsIHNvcnRLZXk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5zb3J0S2V5UmFuZ2VzW3RoaXMuc29ydEtleVJhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC5zb3J0S2V5ID09PSBzb3J0S2V5KSB7XG4gICAgICAgICAgICBsYXN0LnN5bWJvbEluc3RhbmNlRW5kID0gc3ltYm9sSW5zdGFuY2VJbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRLZXlSYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc29ydEtleSxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZVN0YXJ0OiBzeW1ib2xJbnN0YW5jZUluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlRW5kOiBzeW1ib2xJbnN0YW5jZUluZGV4ICsgMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzb3J0RmVhdHVyZXMoYW5nbGU6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuc29ydEZlYXR1cmVzQnlZKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEFuZ2xlID09PSBhbmdsZSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFRoZSBjdXJyZW50IGFwcHJvYWNoIHRvIHNvcnRpbmcgZG9lc24ndCBzb3J0IGFjcm9zcyBzZWdtZW50cyBzbyBkb24ndCB0cnkuXG4gICAgICAgIC8vIFNvcnRpbmcgd2l0aGluIHNlZ21lbnRzIHNlcGFyYXRlbHkgc2VlbWVkIG5vdCB0byBiZSB3b3J0aCB0aGUgY29tcGxleGl0eS5cbiAgICAgICAgaWYgKHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAxIHx8IHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAxKSByZXR1cm47XG5cbiAgICAgICAgLy8gSWYgdGhlIHN5bWJvbHMgYXJlIGFsbG93ZWQgdG8gb3ZlcmxhcCBzb3J0IHRoZW0gYnkgdGhlaXIgdmVydGljYWwgc2NyZWVuIHBvc2l0aW9uLlxuICAgICAgICAvLyBUaGUgaW5kZXggYXJyYXkgYnVmZmVyIGlzIHJld3JpdHRlbiB0byByZWZlcmVuY2UgdGhlICh1bmNoYW5nZWQpIHZlcnRpY2VzIGluIHRoZVxuICAgICAgICAvLyBzb3J0ZWQgb3JkZXIuXG5cbiAgICAgICAgLy8gVG8gYXZvaWQgc29ydGluZyB0aGUgYWN0dWFsIHN5bWJvbEluc3RhbmNlIGFycmF5IHdlIHNvcnQgYW4gYXJyYXkgb2YgaW5kZXhlcy5cbiAgICAgICAgdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMgPSB0aGlzLmdldFNvcnRlZFN5bWJvbEluZGV4ZXMoYW5nbGUpO1xuICAgICAgICB0aGlzLnNvcnRlZEFuZ2xlID0gYW5nbGU7XG5cbiAgICAgICAgdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVTb3J0T3JkZXIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlU29ydE9yZGVyLnB1c2goc3ltYm9sSW5zdGFuY2UuZmVhdHVyZUluZGV4KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgICAgICBdLmZvckVhY2goKGluZGV4LCBpLCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYWRkIGEgZ2l2ZW4gaW5kZXggdGhlIGZpcnN0IHRpbWUgaXQgc2hvd3MgdXAsXG4gICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgZHVwbGljYXRlIG9wYWNpdHkgZW50cmllcyB3aGVuIG11bHRpcGxlIGp1c3RpZmljYXRpb25zXG4gICAgICAgICAgICAgICAgLy8gc2hhcmUgdGhlIHNhbWUgZ2x5cGhzLlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGFycmF5LmluZGV4T2YoaW5kZXgpID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLnRleHQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLmljb24sIHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMuaWNvbiwgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGV4dC5pbmRleEJ1ZmZlcikgdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpO1xuICAgICAgICBpZiAodGhpcy5pY29uLmluZGV4QnVmZmVyKSB0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignU3ltYm9sQnVja2V0JywgU3ltYm9sQnVja2V0LCB7XG4gICAgb21pdDogWydsYXllcnMnLCAnY29sbGlzaW9uQm94QXJyYXknLCAnZmVhdHVyZXMnLCAnY29tcGFyZVRleHQnXVxufSk7XG5cbi8vIHRoaXMgY29uc3RhbnQgaXMgYmFzZWQgb24gdGhlIHNpemUgb2YgU3RydWN0QXJyYXkgaW5kZXhlcyB1c2VkIGluIGEgc3ltYm9sXG4vLyBidWNrZXQtLW5hbWVseSwgZ2x5cGhPZmZzZXRBcnJheVN0YXJ0XG4vLyBlZyB0aGUgbWF4IHZhbGlkIFVJbnQxNiBpcyA2NSw1MzVcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyBmb3IgbW90aXZhdGlvblxuLy8gbGluZVN0YXJ0SW5kZXggYW5kIHRleHRCb3hTdGFydEluZGV4IGNvdWxkIHBvdGVudGlhbGx5IGJlIGNvbmNlcm5zXG4vLyBidXQgd2UgZXhwZWN0IHRoZXJlIHRvIGJlIG1hbnkgZmV3ZXIgYm94ZXMvbGluZXMgdGhhbiBnbHlwaHNcblN5bWJvbEJ1Y2tldC5NQVhfR0xZUEhTID0gNjU1MzU7XG5cblN5bWJvbEJ1Y2tldC5hZGREeW5hbWljQXR0cmlidXRlcyA9IGFkZER5bmFtaWNBdHRyaWJ1dGVzO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2xCdWNrZXQ7XG5leHBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfTtcbiIsIi8vIEBmbG93XG5leHBvcnQgZGVmYXVsdCByZXNvbHZlVG9rZW5zO1xuXG4vKipcbiAqIFJlcGxhY2UgdG9rZW5zIGluIGEgc3RyaW5nIHRlbXBsYXRlIHdpdGggdmFsdWVzIGluIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIGEga2V5L3ZhbHVlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRva2VucyBhbmQgcmVwbGFjZW1lbnRzXG4gKiBAcGFyYW0gdGV4dCB0aGUgdGVtcGxhdGUgc3RyaW5nXG4gKiBAcmV0dXJucyB0aGUgdGVtcGxhdGUgd2l0aCB0b2tlbnMgcmVwbGFjZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUb2tlbnMocHJvcGVydGllczogeytbc3RyaW5nXTogbWl4ZWR9LCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL3soW157fV0rKX0vZywgKG1hdGNoLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4ga2V5IGluIHByb3BlcnRpZXMgPyBTdHJpbmcocHJvcGVydGllc1trZXldKSA6ICcnO1xuICAgIH0pO1xufVxuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuaW1wb3J0IHtcbiAgICBDb2xvclR5cGVcbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwic3ltYm9sLXBsYWNlbWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcInBvaW50XCIgfCBcImxpbmVcIiB8IFwibGluZS1jZW50ZXJcIj4sXG4gICAgXCJzeW1ib2wtc3BhY2luZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwic3ltYm9sLWF2b2lkLWVkZ2VzXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwic3ltYm9sLXNvcnQta2V5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwic3ltYm9sLXotb3JkZXJcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJhdXRvXCIgfCBcInZpZXdwb3J0LXlcIiB8IFwic291cmNlXCI+LFxuICAgIFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1vcHRpb25hbFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJpY29uLXNpemVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLXRleHQtZml0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibm9uZVwiIHwgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwiYm90aFwiPixcbiAgICBcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLWltYWdlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbiAgICBcImljb24tcm90YXRlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1wYWRkaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWtlZXAtdXByaWdodFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24tb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImljb24tYW5jaG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImNlbnRlclwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiPixcbiAgICBcImljb24tcGl0Y2gtYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtZmllbGRcIjogRGF0YURyaXZlblByb3BlcnR5PEZvcm1hdHRlZD4sXG4gICAgXCJ0ZXh0LWZvbnRcIjogRGF0YURyaXZlblByb3BlcnR5PEFycmF5PHN0cmluZz4+LFxuICAgIFwidGV4dC1zaXplXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1tYXgtd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1qdXN0aWZ5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImF1dG9cIiB8IFwibGVmdFwiIHwgXCJjZW50ZXJcIiB8IFwicmlnaHRcIj4sXG4gICAgXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXZhcmlhYmxlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxBcnJheTxcImNlbnRlclwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiPj4sXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4sXG4gICAgXCJ0ZXh0LW1heC1hbmdsZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC13cml0aW5nLW1vZGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8QXJyYXk8XCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI+PixcbiAgICBcInRleHQtcm90YXRlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1wYWRkaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWtlZXAtdXByaWdodFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInRleHQtdHJhbnNmb3JtXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcIm5vbmVcIiB8IFwidXBwZXJjYXNlXCIgfCBcImxvd2VyY2FzZVwiPixcbiAgICBcInRleHQtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcInRleHQtYWxsb3ctb3ZlcmxhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInRleHQtb3B0aW9uYWxcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcInN5bWJvbC1wbGFjZW1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtcGxhY2VtZW50XCJdKSxcbiAgICBcInN5bWJvbC1zcGFjaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXNwYWNpbmdcIl0pLFxuICAgIFwic3ltYm9sLWF2b2lkLWVkZ2VzXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLWF2b2lkLWVkZ2VzXCJdKSxcbiAgICBcInN5bWJvbC1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtc29ydC1rZXlcIl0pLFxuICAgIFwic3ltYm9sLXotb3JkZXJcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtei1vcmRlclwiXSksXG4gICAgXCJpY29uLWFsbG93LW92ZXJsYXBcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWFsbG93LW92ZXJsYXBcIl0pLFxuICAgIFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCJdKSxcbiAgICBcImljb24tb3B0aW9uYWxcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLW9wdGlvbmFsXCJdKSxcbiAgICBcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFxuICAgIFwiaWNvbi1zaXplXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tc2l6ZVwiXSksXG4gICAgXCJpY29uLXRleHQtZml0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi10ZXh0LWZpdFwiXSksXG4gICAgXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIl0pLFxuICAgIFwiaWNvbi1pbWFnZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWltYWdlXCJdKSxcbiAgICBcImljb24tcm90YXRlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcm90YXRlXCJdKSxcbiAgICBcImljb24tcGFkZGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcGFkZGluZ1wiXSksXG4gICAgXCJpY29uLWtlZXAtdXByaWdodFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24ta2VlcC11cHJpZ2h0XCJdKSxcbiAgICBcImljb24tb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tb2Zmc2V0XCJdKSxcbiAgICBcImljb24tYW5jaG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tYW5jaG9yXCJdKSxcbiAgICBcImljb24tcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtZmllbGRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1maWVsZFwiXSksXG4gICAgXCJ0ZXh0LWZvbnRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1mb250XCJdKSxcbiAgICBcInRleHQtc2l6ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXNpemVcIl0pLFxuICAgIFwidGV4dC1tYXgtd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1tYXgtd2lkdGhcIl0pLFxuICAgIFwidGV4dC1saW5lLWhlaWdodFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbGluZS1oZWlnaHRcIl0pLFxuICAgIFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCJdKSxcbiAgICBcInRleHQtanVzdGlmeVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWp1c3RpZnlcIl0pLFxuICAgIFwidGV4dC1yYWRpYWwtb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcmFkaWFsLW9mZnNldFwiXSksXG4gICAgXCJ0ZXh0LXZhcmlhYmxlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtdmFyaWFibGUtYW5jaG9yXCJdKSxcbiAgICBcInRleHQtYW5jaG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtYW5jaG9yXCJdKSxcbiAgICBcInRleHQtbWF4LWFuZ2xlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1tYXgtYW5nbGVcIl0pLFxuICAgIFwidGV4dC13cml0aW5nLW1vZGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXdyaXRpbmctbW9kZVwiXSksXG4gICAgXCJ0ZXh0LXJvdGF0ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJvdGF0ZVwiXSksXG4gICAgXCJ0ZXh0LXBhZGRpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXBhZGRpbmdcIl0pLFxuICAgIFwidGV4dC1rZWVwLXVwcmlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWtlZXAtdXByaWdodFwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zZm9ybVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zZm9ybVwiXSksXG4gICAgXCJ0ZXh0LW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW9mZnNldFwiXSksXG4gICAgXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIl0pLFxuICAgIFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1pZ25vcmUtcGxhY2VtZW50XCJdKSxcbiAgICBcInRleHQtb3B0aW9uYWxcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW9wdGlvbmFsXCJdKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImljb24tb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImljb24taGFsby1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaWNvbi1oYWxvLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1oYWxvLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcInRleHQtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcInRleHQtaGFsby1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwidGV4dC1oYWxvLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1oYWxvLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImljb24tb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tb3BhY2l0eVwiXSksXG4gICAgXCJpY29uLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1jb2xvclwiXSksXG4gICAgXCJpY29uLWhhbG8tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWhhbG8tY29sb3JcIl0pLFxuICAgIFwiaWNvbi1oYWxvLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1oYWxvLXdpZHRoXCJdKSxcbiAgICBcImljb24taGFsby1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1oYWxvLWJsdXJcIl0pLFxuICAgIFwiaWNvbi10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tdHJhbnNsYXRlXCJdKSxcbiAgICBcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcInRleHQtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtb3BhY2l0eVwiXSksXG4gICAgXCJ0ZXh0LWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1jb2xvclwiXSwgeyBydW50aW1lVHlwZTogQ29sb3JUeXBlLCBnZXRPdmVycmlkZTogKG8pID0+IG8udGV4dENvbG9yLCBoYXNPdmVycmlkZTogKG8pID0+ICEhby50ZXh0Q29sb3IgfSksXG4gICAgXCJ0ZXh0LWhhbG8tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWhhbG8tY29sb3JcIl0pLFxuICAgIFwidGV4dC1oYWxvLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1oYWxvLXdpZHRoXCJdKSxcbiAgICBcInRleHQtaGFsby1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1oYWxvLWJsdXJcIl0pLFxuICAgIFwidGV4dC10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtdHJhbnNsYXRlXCJdKSxcbiAgICBcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50LCBsYXlvdXQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4sIGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1pvb21Db25zdGFudEV4cHJlc3Npb259IGZyb20gJy4uLy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHtOdWxsVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uLy4uLy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0U2VjdGlvbk92ZXJyaWRlPFQ+IGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBkZWZhdWx0VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPjtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+KSB7XG4gICAgICAgIGFzc2VydChkZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnR5cGUgPSBkZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzID8gZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcy5ydW50aW1lVHlwZSA6IE51bGxUeXBlO1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGlmIChjdHguZm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlcyAmJiBvdmVycmlkZXMuaGFzT3ZlcnJpZGUoY3R4LmZvcm1hdHRlZFNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlcy5nZXRPdmVycmlkZShjdHguZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3R4LmZlYXR1cmUgJiYgY3R4LmZlYXR1cmVTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKGN0eC5mZWF0dXJlLCBjdHguZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwcjogWm9vbUNvbnN0YW50RXhwcmVzc2lvbjwnc291cmNlJz4gPSAoKHRoaXMuZGVmYXVsdFZhbHVlLnZhbHVlKTogYW55KTtcbiAgICAgICAgICAgIGZuKGV4cHIuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbm5vdCBiZSBzdGF0aWNhbGx5IGV2YWx1YXRlZCwgYXMgdGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBldmFsdWF0aW9uIGNvbnRleHQuXG4gICAgcG9zc2libGVPdXRwdXRzKCk6IEFycmF5PFZhbHVlIHwgdm9pZD4ge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdGb3JtYXRTZWN0aW9uT3ZlcnJpZGUnLCBGb3JtYXRTZWN0aW9uT3ZlcnJpZGUsIHtvbWl0OiBbJ2RlZmF1bHRWYWx1ZSddfSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgcmVzb2x2ZVRva2VucyBmcm9tICcuLi8uLi91dGlsL3Jlc29sdmVfdG9rZW5zJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIFRyYW5zaXRpb25hYmxlLFxuICAgIFRyYW5zaXRpb25pbmcsXG4gICAgTGF5b3V0LFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkLFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSxcbiAgICBQcm9wZXJ0eVZhbHVlXG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIGlzRXhwcmVzc2lvbixcbiAgICBTdHlsZUV4cHJlc3Npb24sXG4gICAgWm9vbUNvbnN0YW50RXhwcmVzc2lvbixcbiAgICBab29tRGVwZW5kZW50RXhwcmVzc2lvblxufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlLCBTb3VyY2VFeHByZXNzaW9uLCBDb21wb3NpdGVFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9leHByZXNzaW9uJztcbmltcG9ydCB7Rm9ybWF0dGVkVHlwZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdmFsdWVzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0U2VjdGlvbk92ZXJyaWRlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXRfc2VjdGlvbl9vdmVycmlkZSc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0JztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9saXRlcmFsJztcblxuY2xhc3MgU3ltYm9sU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1snaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB1bnNwZWNpZmllZCwgYCotcGl0Y2gtYWxpZ25tZW50YCBpbmhlcml0cyBgKi1yb3RhdGlvbi1hbGlnbm1lbnRgXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1waXRjaC1hbGlnbm1lbnQnXSA9IHRoaXMubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcGl0Y2gtYWxpZ25tZW50J10gPSB0aGlzLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyaXRpbmdNb2RlcyA9IHRoaXMubGF5b3V0LmdldCgndGV4dC13cml0aW5nLW1vZGUnKTtcbiAgICAgICAgICAgIGlmICh3cml0aW5nTW9kZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcywgcHJlc2VydmluZyBvcmRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZHVwZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2Ygd3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWR1cGVkLmluZGV4T2YobSkgPCAwKSBkZWR1cGVkLnB1c2gobSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtd3JpdGluZy1tb2RlJ10gPSBkZWR1cGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXdyaXRpbmctbW9kZSddID0gWydob3Jpem9udGFsJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRQYWludE92ZXJyaWRlcygpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhuYW1lOiAqLCBmZWF0dXJlOiBGZWF0dXJlLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmxheW91dC5nZXQobmFtZSkuZXZhbHVhdGUoZmVhdHVyZSwge30sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHVuZXZhbHVhdGVkID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1tuYW1lXTtcbiAgICAgICAgaWYgKCF1bmV2YWx1YXRlZC5pc0RhdGFEcml2ZW4oKSAmJiAhaXNFeHByZXNzaW9uKHVuZXZhbHVhdGVkLnZhbHVlKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVUb2tlbnMoZmVhdHVyZS5wcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlKTsgLy8gU2hvdWxkIHRha2UgYSBkaWZmZXJlbnQgcGF0aCBpbiBGZWF0dXJlSW5kZXhcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9zZXRQYWludE92ZXJyaWRlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBvdmVycmlkYWJsZSBvZiBwcm9wZXJ0aWVzLnBhaW50Lm92ZXJyaWRhYmxlUHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsIG92ZXJyaWRhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVuID0gdGhpcy5wYWludC5nZXQob3ZlcnJpZGFibGUpO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBuZXcgRm9ybWF0U2VjdGlvbk92ZXJyaWRlKG92ZXJyaWRlbik7XG4gICAgICAgICAgICBjb25zdCBzdHlsZUV4cHJlc3Npb24gPSBuZXcgU3R5bGVFeHByZXNzaW9uKG92ZXJyaWRlLCBvdmVycmlkZW4ucHJvcGVydHkuc3BlY2lmaWNhdGlvbik7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgfHwgb3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignc291cmNlJywgc3R5bGVFeHByZXNzaW9uKTogU291cmNlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjb21wb3NpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4udmFsdWUuem9vbVN0b3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlbi52YWx1ZS5faW50ZXJwb2xhdGlvblR5cGUpOiBDb21wb3NpdGVFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFpbnQuX3ZhbHVlc1tvdmVycmlkYWJsZV0gPSBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKG92ZXJyaWRlbi5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4ucGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPFQsIFI+KG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sIG5ld1ZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXQgfHwgb2xkVmFsdWUuaXNEYXRhRHJpdmVuKCkgfHwgbmV3VmFsdWUuaXNEYXRhRHJpdmVuKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3ltYm9sU3R5bGVMYXllci5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LCBuYW1lKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaGFzUGFpbnRPdmVycmlkZShsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gbGF5b3V0LmdldCgndGV4dC1maWVsZCcpO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMucGFpbnQucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICBsZXQgaGFzT3ZlcnJpZGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY2hlY2tTZWN0aW9ucyA9IChzZWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm92ZXJyaWRlcyAmJiBwcm9wZXJ0eS5vdmVycmlkZXMuaGFzT3ZlcnJpZGUoc2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzT3ZlcnJpZGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgJiYgdGV4dEZpZWxkLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICBjaGVja1NlY3Rpb25zKHRleHRGaWVsZC52YWx1ZS52YWx1ZS5zZWN0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrRXhwcmVzc2lvbiA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc092ZXJyaWRlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBMaXRlcmFsICYmIHR5cGVPZihleHByZXNzaW9uLnZhbHVlKSA9PT0gRm9ybWF0dGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IEZvcm1hdHRlZCA9ICgoZXhwcmVzc2lvbi52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZm9ybWF0dGVkLnNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBGb3JtYXRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZXhwcmVzc2lvbi5zZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5lYWNoQ2hpbGQoY2hlY2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBleHByOiBab29tQ29uc3RhbnRFeHByZXNzaW9uPCdzb3VyY2UnPiA9ICgodGV4dEZpZWxkLnZhbHVlKTogYW55KTtcbiAgICAgICAgICAgIGlmIChleHByLl9zdHlsZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24oZXhwci5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhc092ZXJyaWRlcztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZFByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1jb2xvclwiXSksXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1wYXR0ZXJuXCJdKSxcbiAgICBcImJhY2tncm91bmQtb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfYmFja2dyb3VuZFwiXVtcImJhY2tncm91bmQtb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tncm91bmRTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcInJhc3Rlci1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWluXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1zYXR1cmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItY29udHJhc3RcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1yZXNhbXBsaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibGluZWFyXCIgfCBcIm5lYXJlc3RcIj4sXG4gICAgXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwicmFzdGVyLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1vcGFjaXR5XCJdKSxcbiAgICBcInJhc3Rlci1odWUtcm90YXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiXSksXG4gICAgXCJyYXN0ZXItc2F0dXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFxuICAgIFwicmFzdGVyLWNvbnRyYXN0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItY29udHJhc3RcIl0pLFxuICAgIFwicmFzdGVyLXJlc2FtcGxpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1yZXNhbXBsaW5nXCJdKSxcbiAgICBcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vLi4vdWkvbWFwJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxudHlwZSBDdXN0b21SZW5kZXJNZXRob2QgPSAoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgbWF0cml4OiBBcnJheTxudW1iZXI+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY3VzdG9tIHN0eWxlIGxheWVycy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ3VzdG9tIGxheWVycyBhbGxvdyBhIHVzZXIgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIG1hcCdzIEdMIGNvbnRleHQgdXNpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAqIFRoZXNlIGxheWVycyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBhbnkgcmVndWxhciBsYXllcnMgdXNpbmcge0BsaW5rIE1hcCNhZGRMYXllcn0uXG4gKlxuICogQ3VzdG9tIGxheWVycyBtdXN0IGhhdmUgYSB1bmlxdWUgYGlkYCBhbmQgbXVzdCBoYXZlIHRoZSBgdHlwZWAgb2YgYFwiY3VzdG9tXCJgLlxuICogVGhleSBtdXN0IGltcGxlbWVudCBgcmVuZGVyYCBhbmQgbWF5IGltcGxlbWVudCBgcHJlcmVuZGVyYCwgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYC5cbiAqIFRoZXkgY2FuIHRyaWdnZXIgcmVuZGVyaW5nIHVzaW5nIHtAbGluayBNYXAjdHJpZ2dlclJlcGFpbnR9XG4gKiBhbmQgdGhleSBzaG91bGQgYXBwcm9wcmlhdGVseSBoYW5kbGUge0BsaW5rIE1hcC5ldmVudDp3ZWJnbGNvbnRleHRsb3N0fSBhbmRcbiAqIHtAbGluayBNYXAuZXZlbnQ6d2ViZ2xjb250ZXh0cmVzdG9yZWR9LlxuICpcbiAqIFRoZSBgcmVuZGVyaW5nTW9kZWAgcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUgbGF5ZXIgaXMgdHJlYXRlZCBhcyBhIGBcIjJkXCJgIG9yIGBcIjNkXCJgIG1hcCBsYXllci4gVXNlOlxuICogLSBgXCJyZW5kZXJpbmdNb2RlXCI6IFwiM2RcImAgdG8gdXNlIHRoZSBkZXB0aCBidWZmZXIgYW5kIHNoYXJlIGl0IHdpdGggb3RoZXIgbGF5ZXJzXG4gKiAtIGBcInJlbmRlcmluZ01vZGVcIjogXCIyZFwiYCB0byBhZGQgYSBsYXllciB3aXRoIG5vIGRlcHRoLiBJZiB5b3UgbmVlZCB0byB1c2UgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgYSBgXCIyZFwiYCBsYXllciB5b3UgbXVzdCB1c2UgYW4gb2Zmc2NyZWVuXG4gKiAgIGZyYW1lYnVmZmVyIGFuZCB7QGxpbmsgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UjcHJlcmVuZGVyfVxuICpcbiAqIEBpbnRlcmZhY2UgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBBIHVuaXF1ZSBsYXllciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBsYXllcidzIHR5cGUuIE11c3QgYmUgYFwiY3VzdG9tXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbmRlcmluZ01vZGUgRWl0aGVyIGBcIjJkXCJgIG9yIGBcIjNkXCJgLiBEZWZhdWx0cyB0byBgXCIyZFwiYC5cbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gbGF5ZXIgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBOdWxsSXNsYW5kTGF5ZXIge1xuICogICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgICB0aGlzLmlkID0gJ251bGwtaXNsYW5kJztcbiAqICAgICAgICAgdGhpcy50eXBlID0gJ2N1c3RvbSc7XG4gKiAgICAgICAgIHRoaXMucmVuZGVyaW5nTW9kZSA9ICcyZCc7XG4gKiAgICAgfVxuICpcbiAqICAgICBvbkFkZChtYXAsIGdsKSB7XG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGBcbiAqICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuICogICAgICAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNCgwLjUsIDAuNSwgMC4wLCAxLjApO1xuICogICAgICAgICAgICAgZ2xfUG9pbnRTaXplID0gMjAuMDtcbiAqICAgICAgICAgfWA7XG4gKlxuICogICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGBcbiAqICAgICAgICAgdm9pZCBtYWluKCkge1xuICogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApO1xuICogICAgICAgICB9YDtcbiAqXG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTtcbiAqICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICogICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpO1xuICogICAgICAgICBnbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XG4gKlxuICogICAgICAgICB0aGlzLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcbiAqICAgICAgICAgZ2wubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICB9XG4gKlxuICogICAgIHJlbmRlcihnbCwgbWF0cml4KSB7XG4gKiAgICAgICAgIGdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBcInVfbWF0cml4XCIpLCBmYWxzZSwgbWF0cml4KTtcbiAqICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBtYXAub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAqICAgICBtYXAuYWRkTGF5ZXIobmV3IE51bGxJc2xhbmRMYXllcigpKTtcbiAqIH0pO1xuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBpbml0aWFsaXplIGdsIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXAgdGhpcyBjdXN0b20gbGF5ZXIgd2FzIGp1c3QgYWRkZWQgdG8uXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIGdsIGNvbnRleHQgZm9yIHRoZSBtYXAuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBjbGVhbiB1cCBnbCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBnbCBjb250ZXh0IGZvciB0aGUgbWFwLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgdG8gYWxsb3cgYSBsYXllciB0byBwcmVwYXJlIHJlc291cmNlcyBvciByZW5kZXIgaW50byBhIHRleHR1cmUuXG4gKlxuICogVGhlIGxheWVyIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCBHTCBzdGF0ZSBhbmQgbXVzdCBiaW5kIGEgZnJhbWVidWZmZXIgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBwcmVyZW5kZXJcbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgbWFwJ3MgZ2wgY29udGV4dC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbWF0cml4IFRoZSBtYXAncyBjYW1lcmEgbWF0cml4LiBJdCBwcm9qZWN0cyBzcGhlcmljYWwgbWVyY2F0b3JcbiAqIGNvb3JkaW5hdGVzIHRvIGdsIGNvb3JkaW5hdGVzLiBUaGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuXG4vKipcbiAqIENhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgYWxsb3dpbmcgdGhlIGxheWVyIHRvIGRyYXcgaW50byB0aGUgR0wgY29udGV4dC5cbiAqXG4gKiBUaGUgbGF5ZXIgY2FuIGFzc3VtZSBibGVuZGluZyBhbmQgZGVwdGggc3RhdGUgaXMgc2V0IHRvIGFsbG93IHRoZSBsYXllciB0byBwcm9wZXJseVxuICogYmxlbmQgYW5kIGNsaXAgb3RoZXIgbGF5ZXJzLiBUaGUgbGF5ZXIgY2Fubm90IG1ha2UgYW55IG90aGVyIGFzc3VtcHRpb25zIGFib3V0IHRoZVxuICogY3VycmVudCBHTCBzdGF0ZS5cbiAqXG4gKiBJZiB0aGUgbGF5ZXIgbmVlZHMgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgaXQgc2hvdWxkIGltcGxlbWVudCB0aGUgYHByZXJlbmRlcmAgbWV0aG9kXG4gKiB0byBkbyB0aGlzIGFuZCBvbmx5IHVzZSB0aGUgYHJlbmRlcmAgbWV0aG9kIGZvciBkcmF3aW5nIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZnJhbWVidWZmZXIuXG4gKlxuICogVGhlIGJsZW5kIGZ1bmN0aW9uIGlzIHNldCB0byBgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLiBUaGlzIGV4cGVjdHNcbiAqIGNvbG9ycyB0byBiZSBwcm92aWRlZCBpbiBwcmVtdWx0aXBsaWVkIGFscGhhIGZvcm0gd2hlcmUgdGhlIGByYCwgYGdgIGFuZCBgYmAgdmFsdWVzIGFyZSBhbHJlYWR5XG4gKiBtdWx0aXBsaWVkIGJ5IHRoZSBgYWAgdmFsdWUuIElmIHlvdSBhcmUgdW5hYmxlIHRvIHByb3ZpZGUgY29sb3JzIGluIHByZW11bHRpcGxpZWQgZm9ybSB5b3VcbiAqIG1heSB3YW50IHRvIGNoYW5nZSB0aGUgYmxlbmQgZnVuY3Rpb24gdG9cbiAqIGBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHJlbmRlclxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBtYXAncyBnbCBjb250ZXh0LlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtYXRyaXggVGhlIG1hcCdzIGNhbWVyYSBtYXRyaXguIEl0IHByb2plY3RzIHNwaGVyaWNhbCBtZXJjYXRvclxuICogY29vcmRpbmF0ZXMgdG8gZ2wgY29vcmRpbmF0ZXMuIFRoZSBzcGhlcmljYWwgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UgPSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgIHJlbmRlcmluZ01vZGU6IFwiMmRcIiB8IFwiM2RcIixcbiAgICByZW5kZXI6IEN1c3RvbVJlbmRlck1ldGhvZCxcbiAgICBwcmVyZW5kZXI6ID9DdXN0b21SZW5kZXJNZXRob2QsXG4gICAgb25BZGQ6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWQsXG4gICAgb25SZW1vdmU6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihsYXllck9iamVjdDogQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBpZCA9IGxheWVyT2JqZWN0LmlkO1xuXG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImlkXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsYXllck9iamVjdC5yZW5kZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCBcInJlbmRlclwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAmJlxuICAgICAgICBsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICE9PSAnMmQnICYmXG4gICAgICAgIGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgIT09ICczZCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogcHJvcGVydHkgXCJyZW5kZXJpbmdNb2RlXCIgbXVzdCBiZSBlaXRoZXIgXCIyZFwiIG9yIFwiM2RcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuY2xhc3MgQ3VzdG9tU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlO1xuXG4gICAgY29uc3RydWN0b3IoaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKGltcGxlbWVudGF0aW9uLCB7fSk7XG4gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcbiAgICB9XG5cbiAgICBpczNEKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGxlbWVudGF0aW9uLnByZXJlbmRlciAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKCkge31cbiAgICB1cGRhdGVUcmFuc2l0aW9ucygpIHt9XG4gICAgaGFzVHJhbnNpdGlvbigpIHt9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgXCJDdXN0b20gbGF5ZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKG1hcCwgbWFwLnBhaW50ZXIuY29udGV4dC5nbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZShtYXAsIG1hcC5wYWludGVyLmNvbnRleHQuZ2wpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGNpcmNsZSBmcm9tICcuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgZmlsbCBmcm9tICcuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGZpbGxFeHRydXNpb24gZnJvbSAnLi9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgbGluZSBmcm9tICcuL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHJhc3RlciBmcm9tICcuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgQ3VzdG9tU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNvbnN0IHN1YmNsYXNzZXMgPSB7XG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgaGlsbHNoYWRlLFxuICAgIGZpbGwsXG4gICAgJ2ZpbGwtZXh0cnVzaW9uJzogZmlsbEV4dHJ1c2lvbixcbiAgICBsaW5lLFxuICAgIHN5bWJvbCxcbiAgICBiYWNrZ3JvdW5kLFxuICAgIHJhc3RlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21TdHlsZUxheWVyKGxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IHN1YmNsYXNzZXNbbGF5ZXIudHlwZV0obGF5ZXIpO1xuICAgIH1cbn1cblxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5jb25zdCB7SFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEhUTUxWaWRlb0VsZW1lbnQsIEltYWdlRGF0YSwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1JHQkFJbWFnZSwgQWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFRleHR1cmVGb3JtYXQgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdSR0JBJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnQUxQSEEnPjtcbmV4cG9ydCB0eXBlIFRleHR1cmVGaWx0ZXIgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVInPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVJfTUlQTUFQX05FQVJFU1QnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdORUFSRVNUJz47XG5leHBvcnQgdHlwZSBUZXh0dXJlV3JhcCA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1JFUEVBVCc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0NMQU1QX1RPX0VER0UnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdNSVJST1JFRF9SRVBFQVQnPjtcblxudHlwZSBFbXB0eUltYWdlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogbnVsbFxufVxuXG5leHBvcnQgdHlwZSBUZXh0dXJlSW1hZ2UgPVxuICAgIHwgUkdCQUltYWdlXG4gICAgfCBBbHBoYUltYWdlXG4gICAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gICAgfCBIVE1MQ2FudmFzRWxlbWVudFxuICAgIHwgSFRNTFZpZGVvRWxlbWVudFxuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBFbXB0eUltYWdlXG4gICAgfCBJbWFnZUJpdG1hcDtcblxuY2xhc3MgVGV4dHVyZSB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgICBmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG4gICAgZmlsdGVyOiA/VGV4dHVyZUZpbHRlcjtcbiAgICB3cmFwOiA/VGV4dHVyZVdyYXA7XG4gICAgdXNlTWlwbWFwOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1hZ2U6IFRleHR1cmVJbWFnZSwgZm9ybWF0OiBUZXh0dXJlRm9ybWF0LCBvcHRpb25zOiA/eyBwcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW4gfSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gY29udGV4dC5nbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlKGltYWdlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoaW1hZ2U6IFRleHR1cmVJbWFnZSwgb3B0aW9uczogP3twcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW59LCBwb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBpbWFnZTtcbiAgICAgICAgY29uc3QgcmVzaXplID0gKCF0aGlzLnNpemUgfHwgdGhpcy5zaXplWzBdICE9PSB3aWR0aCB8fCB0aGlzLnNpemVbMV0gIT09IGhlaWdodCkgJiYgIXBvc2l0aW9uO1xuICAgICAgICBjb25zdCB7Y29udGV4dH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7Z2x9ID0gY29udGV4dDtcblxuICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnVzZU1pcG1hcCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldCgxKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQgPT09IGdsLlJHQkEgJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMucHJlbXVsdGlwbHkgIT09IGZhbHNlKSk7XG5cbiAgICAgICAgaWYgKHJlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaXplID0gW3dpZHRoLCBoZWlnaHRdO1xuXG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhIHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3gsIHl9ID0gcG9zaXRpb24gfHwge3g6IDAsIHk6IDB9O1xuICAgICAgICAgICAgaWYgKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEltYWdlRGF0YSB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHgsIHksIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiB0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKGZpbHRlcjogVGV4dHVyZUZpbHRlciwgd3JhcDogVGV4dHVyZVdyYXAsIG1pbkZpbHRlcjogP1RleHR1cmVGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qge2NvbnRleHR9ID0gdGhpcztcbiAgICAgICAgY29uc3Qge2dsfSA9IGNvbnRleHQ7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgaWYgKG1pbkZpbHRlciA9PT0gZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUICYmICF0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIG1pbkZpbHRlciB8fCBmaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXApO1xuICAgICAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2l6ZVBvd2VyT2ZUd28oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemVbMF0gPT09IHRoaXMuc2l6ZVsxXSAmJiAoTWF0aC5sb2codGhpcy5zaXplWzBdKSAvIE1hdGguTE4yKSAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xuICAgICAgICB0aGlzLnRleHR1cmUgPSAobnVsbDogYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEludm9rZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gaW4gYSBub24tYmxvY2tpbmcgd2F5IHdoZW4gdHJpZ2dlcigpIGlzIGNhbGxlZC4gSW52b2NhdGlvbiByZXF1ZXN0c1xuICogYXJlIGlnbm9yZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBpbnZva2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRocm90dGxlZEludm9rZXIge1xuICAgIF9jaGFubmVsOiBNZXNzYWdlQ2hhbm5lbDtcbiAgICBfdHJpZ2dlcmVkOiBib29sZWFuO1xuICAgIF9jYWxsYmFjazogRnVuY3Rpb25cblxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDIub25tZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoYW5uZWw7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gKCkgPT4ge307XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaHJvdHRsZWRJbnZva2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiaW5kQWxsLCBpc1dvcmtlciwgaXNTYWZhcml9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7c2VyaWFsaXplLCBkZXNlcmlhbGl6ZX0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBUaHJvdHRsZWRJbnZva2VyIGZyb20gJy4vdGhyb3R0bGVkX2ludm9rZXInO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQWN0b3IgZGVzaWduIHBhdHRlcm5dKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWN0b3JfbW9kZWwpXG4gKiB0aGF0IG1haW50YWlucyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXN5bmNocm9ub3VzIHRhc2tzIGFuZCB0aGUgb2JqZWN0c1xuICogdGhhdCBzcGluIHRoZW0gb2ZmIC0gaW4gdGhpcyBjYXNlLCB0YXNrcyBsaWtlIHBhcnNpbmcgcGFydHMgb2Ygc3R5bGVzLFxuICogb3duZWQgYnkgdGhlIHN0eWxlc1xuICpcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSB0YXJnZXRcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbWFwSWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE1hcCBpbnN0YW5jZSB1c2luZyB0aGlzIEFjdG9yLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQWN0b3Ige1xuICAgIHRhcmdldDogYW55O1xuICAgIHBhcmVudDogYW55O1xuICAgIG1hcElkOiA/bnVtYmVyO1xuICAgIGNhbGxiYWNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0YXNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIHRhc2tRdWV1ZTogQXJyYXk8bnVtYmVyPjtcbiAgICBjYW5jZWxDYWxsYmFja3M6IHsgbnVtYmVyOiBDYW5jZWxhYmxlIH07XG4gICAgaW52b2tlcjogVGhyb3R0bGVkSW52b2tlcjtcbiAgICBnbG9iYWxTY29wZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IodGFyZ2V0OiBhbnksIHBhcmVudDogYW55LCBtYXBJZDogP251bWJlcikge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMubWFwSWQgPSBtYXBJZDtcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSB7fTtcbiAgICAgICAgdGhpcy50YXNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmNhbmNlbENhbGxiYWNrcyA9IHt9O1xuICAgICAgICBiaW5kQWxsKFsncmVjZWl2ZScsICdwcm9jZXNzJ10sIHRoaXMpO1xuICAgICAgICB0aGlzLmludm9rZXIgPSBuZXcgVGhyb3R0bGVkSW52b2tlcih0aGlzLnByb2Nlc3MpO1xuICAgICAgICB0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsU2NvcGUgPSBpc1dvcmtlcigpID8gdGFyZ2V0IDogd2luZG93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSBmcm9tIGEgbWFpbi10aHJlYWQgbWFwIHRvIGEgV29ya2VyIG9yIGZyb20gYSBXb3JrZXIgYmFjayB0b1xuICAgICAqIGEgbWFpbi10aHJlYWQgbWFwIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBtZXRob2QgdG8gaW52b2tlIG9yICdbc291cmNlLXR5cGVdLltzb3VyY2UtbmFtZV0ubmFtZScgZm9yIGEgbWV0aG9kIG9uIGEgV29ya2VyU291cmNlLlxuICAgICAqIEBwYXJhbSB0YXJnZXRNYXBJZCBBIHBhcnRpY3VsYXIgbWFwSWQgdG8gd2hpY2ggdG8gc2VuZCB0aGlzIG1lc3NhZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZW5kKHR5cGU6IHN0cmluZywgZGF0YTogbWl4ZWQsIGNhbGxiYWNrOiA/RnVuY3Rpb24sIHRhcmdldE1hcElkOiA/c3RyaW5nLCBtdXN0UXVldWU6IGJvb2xlYW4gPSBmYWxzZSk6ID9DYW5jZWxhYmxlIHtcbiAgICAgICAgLy8gV2UncmUgdXNpbmcgYSBzdHJpbmcgSUQgaW5zdGVhZCBvZiBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcgdXNlZCBhcyBvYmplY3Qga2V5c1xuICAgICAgICAvLyBhbnl3YXksIGFuZCB0aHVzIHN0cmluZ2lmaWVkIGltcGxpY2l0bHkuIFdlIHVzZSByYW5kb20gSURzIGJlY2F1c2UgYW4gYWN0b3IgbWF5IHJlY2VpdmVcbiAgICAgICAgLy8gbWVzc2FnZSBmcm9tIG11bHRpcGxlIG90aGVyIGFjdG9ycyB3aGljaCBjb3VsZCBydW4gaW4gZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBBXG4gICAgICAgIC8vIGxpbmVhcmx5IGluY3JlYXNpbmcgSUQgY291bGQgcHJvZHVjZSBjb2xsaXNpb25zLlxuICAgICAgICBjb25zdCBpZCA9IE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAxZTE4KSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBoYXNDYWxsYmFjazogISFjYWxsYmFjayxcbiAgICAgICAgICAgIHRhcmdldE1hcElkLFxuICAgICAgICAgICAgbXVzdFF1ZXVlLFxuICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemUoZGF0YSwgYnVmZmVycylcbiAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHNvIHRoYXQgaXQgbmV2ZXIgZmlyZXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxjYW5jZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcElkOiB0aGlzLm1hcElkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVjZWl2ZShtZXNzYWdlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAgIGlkID0gZGF0YS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50YXJnZXRNYXBJZCAmJiB0aGlzLm1hcElkICE9PSBkYXRhLnRhcmdldE1hcElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnPGNhbmNlbD4nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgcXVldWUuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBpdFxuICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4ga2lja2VkIG9mZiB5ZXQuIFRoZSBpZCB3aWxsIHJlbWFpbiBpbiB0aGUgcXVldWUsIGJ1dCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIHRhc2ssIGl0IHdpbGwgYmUgZHJvcHBlZCBvbmNlIGl0J3MgdGltZSB0byBleGVjdXRlIGl0LlxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFza3NbaWRdO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1dvcmtlcigpIHx8IGRhdGEubXVzdFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gd29ya2Vycywgc3RvcmUgdGhlIHRhc2tzIHRoYXQgd2UgbmVlZCB0byBwcm9jZXNzIGJlZm9yZSBhY3R1YWxseSBwcm9jZXNzaW5nIHRoZW0uIFRoaXNcbiAgICAgICAgICAgICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgcmVjZWl2aW5nIG1lc3NhZ2VzLCBhbmQgaW4gcGFydGljdWxhcixcbiAgICAgICAgICAgICAgICAvLyA8Y2FuY2VsPiBtZXNzYWdlcy4gU29tZSB0YXNrcyBtYXkgdGFrZSBhIHdoaWxlIGluIHRoZSB3b3JrZXIgdGhyZWFkLCBzbyBiZWZvcmVcbiAgICAgICAgICAgICAgICAvLyBleGVjdXRpbmcgdGhlIG5leHQgdGFzayBpbiBvdXIgcXVldWUsIHBvc3RNZXNzYWdlIHByZWVtcHRzIHRoaXMgYW5kIDxjYW5jZWw+XG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgY2FuIGJlIHByb2Nlc3NlZC4gV2UncmUgdXNpbmcgYSBNZXNzYWdlQ2hhbm5lbCBvYmplY3QgdG8gZ2V0IHRocm90dGxlIHRoZVxuICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBmbG93IHRvIG9uZSBhdCBhIHRpbWUuXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrc1tpZF0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlci50cmlnZ2VyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtYWluIHRocmVhZCwgcHJvY2VzcyBtZXNzYWdlcyBpbW1lZGlhdGVseSBzbyB0aGF0IG90aGVyIHdvcmsgZG9lcyBub3Qgc2xpcCBpblxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gZ2V0dGluZyBwYXJ0aWFsIGRhdGEgYmFjayBmcm9tIHdvcmtlcnMuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVGFzayhpZCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzKCkge1xuICAgICAgICBpZiAoIXRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50YXNrUXVldWUuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMudGFza3NbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy50YXNrc1tpZF07XG4gICAgICAgIC8vIFNjaGVkdWxlIGFub3RoZXIgcHJvY2VzcyBjYWxsIGlmIHdlIGtub3cgdGhlcmUncyBtb3JlIHRvIHByb2Nlc3MgX2JlZm9yZV8gaW52b2tpbmcgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgdGFzay4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBldmVuIGlmIHRoZSBjdXJyZW50IHRhc2tcbiAgICAgICAgLy8gZG9lc24ndCBleGVjdXRlIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgaWYgKHRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIElEIGRvZXNuJ3QgaGF2ZSBhc3NvY2lhdGVkIHRhc2sgZGF0YSBhbnltb3JlLCBpdCB3YXMgY2FuY2VsZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NUYXNrKGlkLCB0YXNrKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVGFzayhpZDogbnVtYmVyLCB0YXNrOiBhbnkpIHtcbiAgICAgICAgaWYgKHRhc2sudHlwZSA9PT0gJzxyZXNwb25zZT4nKSB7XG4gICAgICAgICAgICAvLyBUaGUgZG9uZSgpIGZ1bmN0aW9uIGluIHRoZSBjb3VudGVycGFydCBoYXMgYmVlbiBjYWxsZWQsIGFuZCB3ZSBhcmUgbm93XG4gICAgICAgICAgICAvLyBmaXJpbmcgdGhlIGNhbGxiYWNrIGluIHRoZSBvcmlnaW5hdGluZyBhY3RvciwgaWYgdGhlcmUgaXMgb25lLlxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGEgcmVzcG9uc2UsIGJ1dCBkb24ndCBoYXZlIGEgY2FsbGJhY2ssIHRoZSByZXF1ZXN0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgICBpZiAodGFzay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkZXNlcmlhbGl6ZSh0YXNrLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVzZXJpYWxpemUodGFzay5kYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IHRhc2suaGFzQ2FsbGJhY2sgPyAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICc8cmVzcG9uc2U+JyxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPyBzZXJpYWxpemUoZXJyKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHNlcmlhbGl6ZShkYXRhLCBidWZmZXJzKVxuICAgICAgICAgICAgICAgIH0sIGJ1ZmZlcnMpO1xuICAgICAgICAgICAgfSA6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSAoZGVzZXJpYWxpemUodGFzay5kYXRhKTogYW55KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFt0YXNrLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFzay50eXBlID09ICdsb2FkVGlsZScsICdyZW1vdmVUaWxlJywgZXRjLlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdGhpcy5wYXJlbnRbdGFzay50eXBlXSh0YXNrLnNvdXJjZU1hcElkLCBwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gc291cmNldHlwZS5tZXRob2RcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gdGFzay50eXBlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NvcGUgPSAodGhpcy5wYXJlbnQ6IGFueSkuZ2V0V29ya2VyU291cmNlKHRhc2suc291cmNlTWFwSWQsIGtleXNbMF0sIHBhcmFtcy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gc2NvcGVba2V5c1sxXV0ocGFyYW1zLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gZnVuY3Rpb24gd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBmdW5jdGlvbiAke3Rhc2sudHlwZX1gKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29tcGxldGVkICYmIGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93cyBjYW5jZWxpbmcgdGhlIHRhc2sgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5pbnZva2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBY3RvcjtcbiIsImV4cG9ydCB7IGdldFVSTCwgZ2V0VGlsZUJCb3gsIGdldE1lcmNDb29yZHMgfTtcblxuXG4vKipcbiAqIGdldFVSTFxuICpcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgYmFzZVVybCAgQmFzZSB1cmwgb2YgdGhlIFdNUyBzZXJ2ZXJcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgbGF5ZXIgICAgTGF5ZXIgbmFtZVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICAgICAgICBUaWxlIHpvb21cbiAqIEBwYXJhbSAgICB7T2JqZWN0fSAgW29wdGlvbnNdXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLmZvcm1hdD0naW1hZ2UvcG5nJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuc2VydmljZT0nV01TJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMudmVyc2lvbj0nMS4xLjEnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5yZXF1ZXN0PSdHZXRNYXAnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zcnM9J0VQU0c6Mzg1NyddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLndpZHRoPScyNTYnXVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICBbb3B0aW9ucy5oZWlnaHQ9JzI1NiddXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIHVybFxuICogQGV4YW1wbGVcbiAqIHZhciBiYXNlVXJsID0gJ2h0dHA6Ly9nZW9kYXRhLnN0YXRlLm5qLnVzL2ltYWdlcnl3bXMvTmF0dXJhbDIwMTUnO1xuICogdmFyIGxheWVyID0gJ05hdHVyYWwyMDE1JztcbiAqIHZhciB1cmwgPSB3aG9vdHMuZ2V0VVJMKGJhc2VVcmwsIGxheWVyLCAxNTQzMDgsIDE5NzE2NywgMTkpO1xuICovXG5mdW5jdGlvbiBnZXRVUkwoYmFzZVVybCwgbGF5ZXIsIHgsIHksIHosIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHZhciB1cmwgPSBiYXNlVXJsICsgJz8nICsgW1xuICAgICAgICAnYmJveD0nICAgICsgZ2V0VGlsZUJCb3goeCwgeSwgeiksXG4gICAgICAgICdmb3JtYXQ9JyAgKyAob3B0aW9ucy5mb3JtYXQgfHwgJ2ltYWdlL3BuZycpLFxuICAgICAgICAnc2VydmljZT0nICsgKG9wdGlvbnMuc2VydmljZSB8fCAnV01TJyksXG4gICAgICAgICd2ZXJzaW9uPScgKyAob3B0aW9ucy52ZXJzaW9uIHx8ICcxLjEuMScpLFxuICAgICAgICAncmVxdWVzdD0nICsgKG9wdGlvbnMucmVxdWVzdCB8fCAnR2V0TWFwJyksXG4gICAgICAgICdzcnM9JyAgICAgKyAob3B0aW9ucy5zcnMgfHwgJ0VQU0c6Mzg1NycpLFxuICAgICAgICAnd2lkdGg9JyAgICsgKG9wdGlvbnMud2lkdGggfHwgMjU2KSxcbiAgICAgICAgJ2hlaWdodD0nICArIChvcHRpb25zLmhlaWdodCB8fCAyNTYpLFxuICAgICAgICAnbGF5ZXJzPScgICsgbGF5ZXJcbiAgICBdLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiB1cmw7XG59XG5cblxuLyoqXG4gKiBnZXRUaWxlQkJveFxuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgVGlsZSBjb29yZGluYXRlIHhcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeSAgVGlsZSBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIFN0cmluZyBvZiB0aGUgYm91bmRpbmcgYm94XG4gKi9cbmZ1bmN0aW9uIGdldFRpbGVCQm94KHgsIHksIHopIHtcbiAgICAvLyBmb3IgR29vZ2xlL09TTSB0aWxlIHNjaGVtZSB3ZSBuZWVkIHRvIGFsdGVyIHRoZSB5XG4gICAgeSA9IChNYXRoLnBvdygyLCB6KSAtIHkgLSAxKTtcblxuICAgIHZhciBtaW4gPSBnZXRNZXJjQ29vcmRzKHggKiAyNTYsIHkgKiAyNTYsIHopLFxuICAgICAgICBtYXggPSBnZXRNZXJjQ29vcmRzKCh4ICsgMSkgKiAyNTYsICh5ICsgMSkgKiAyNTYsIHopO1xuXG4gICAgcmV0dXJuIG1pblswXSArICcsJyArIG1pblsxXSArICcsJyArIG1heFswXSArICcsJyArIG1heFsxXTtcbn1cblxuXG4vKipcbiAqIGdldE1lcmNDb29yZHNcbiAqXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggIFBpeGVsIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBQaXhlbCBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge0FycmF5fSAgIFt4LCB5XVxuICovXG5mdW5jdGlvbiBnZXRNZXJjQ29vcmRzKHgsIHksIHopIHtcbiAgICB2YXIgcmVzb2x1dGlvbiA9ICgyICogTWF0aC5QSSAqIDYzNzgxMzcgLyAyNTYpIC8gTWF0aC5wb3coMiwgeiksXG4gICAgICAgIG1lcmNfeCA9ICh4ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApLFxuICAgICAgICBtZXJjX3kgPSAoeSAqIHJlc29sdXRpb24gLSAyICogTWF0aC5QSSAgKiA2Mzc4MTM3IC8gMi4wKTtcblxuICAgIHJldHVybiBbbWVyY194LCBtZXJjX3ldO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2xuZ19sYXQnO1xuXG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi9sbmdfbGF0JztcblxuLyoqXG4gKiBBIGBMbmdMYXRCb3VuZHNgIG9iamVjdCByZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIGJvdW5kaW5nIGJveCxcbiAqIGRlZmluZWQgYnkgaXRzIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBpbiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLlxuICpcbiAqIElmIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBhIGBudWxsYCBib3VuZGluZyBib3ggaXMgY3JlYXRlZC5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIHtAbGluayBMbmdMYXRMaWtlfSBjb25zdHJ1Y3RzIGFuZCB3aWxsIHBlcmZvcm0gYW4gaW1wbGljaXQgY29udmVyc2lvbi5cbiAqIFRoaXMgZmxleGlibGUgdHlwZSBpcyBkb2N1bWVudGVkIGFzIHtAbGluayBMbmdMYXRCb3VuZHNMaWtlfS5cbiAqXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtzd10gVGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW25lXSBUaGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQGV4YW1wbGVcbiAqIHZhciBzdyA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk4NzYsIDQwLjc2NjEpO1xuICogdmFyIG5lID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTM5NywgNDAuODAwMik7XG4gKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhzdywgbmUpO1xuICovXG5jbGFzcyBMbmdMYXRCb3VuZHMge1xuICAgIF9uZTogTG5nTGF0O1xuICAgIF9zdzogTG5nTGF0O1xuXG4gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB0b28gZmxleGlibGUgdG8gdHlwZS4gSXQgc2hvdWxkIG5vdCBiZSBzbyBmbGV4aWJsZS5cbiAgICBjb25zdHJ1Y3RvcihzdzogYW55LCBuZTogYW55KSB7XG4gICAgICAgIGlmICghc3cpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChuZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3cpLnNldE5vcnRoRWFzdChuZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3cubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChbc3dbMF0sIHN3WzFdXSkuc2V0Tm9ydGhFYXN0KFtzd1syXSwgc3dbM11dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KHN3WzBdKS5zZXROb3J0aEVhc3Qoc3dbMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbmVcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXROb3J0aEVhc3QobmU6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbmUgPSBuZSBpbnN0YW5jZW9mIExuZ0xhdCA/IG5ldyBMbmdMYXQobmUubG5nLCBuZS5sYXQpIDogTG5nTGF0LmNvbnZlcnQobmUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBzd1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFNvdXRoV2VzdChzdzogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9zdyA9IHN3IGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChzdy5sbmcsIHN3LmxhdCkgOiBMbmdMYXQuY29udmVydChzdyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dGVuZCB0aGUgYm91bmRzIHRvIGluY2x1ZGUgYSBnaXZlbiBMbmdMYXQgb3IgTG5nTGF0Qm91bmRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXR8TG5nTGF0Qm91bmRzfSBvYmogb2JqZWN0IHRvIGV4dGVuZCB0b1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIGV4dGVuZChvYmo6IExuZ0xhdCB8IExuZ0xhdEJvdW5kcykge1xuICAgICAgICBjb25zdCBzdyA9IHRoaXMuX3N3LFxuICAgICAgICAgICAgbmUgPSB0aGlzLl9uZTtcbiAgICAgICAgbGV0IHN3MiwgbmUyO1xuXG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBMbmdMYXQpIHtcbiAgICAgICAgICAgIHN3MiA9IG9iajtcbiAgICAgICAgICAgIG5lMiA9IG9iajtcblxuICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykge1xuICAgICAgICAgICAgc3cyID0gb2JqLl9zdztcbiAgICAgICAgICAgIG5lMiA9IG9iai5fbmU7XG5cbiAgICAgICAgICAgIGlmICghc3cyIHx8ICFuZTIpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5ldmVyeShBcnJheS5pc0FycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0Qm91bmRzLmNvbnZlcnQob2JqKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKExuZ0xhdC5jb252ZXJ0KG9iaikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdyAmJiAhbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N3ID0gbmV3IExuZ0xhdChzdzIubG5nLCBzdzIubGF0KTtcbiAgICAgICAgICAgIHRoaXMuX25lID0gbmV3IExuZ0xhdChuZTIubG5nLCBuZTIubGF0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcbiAgICAgICAgICAgIHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XG4gICAgICAgICAgICBuZS5sbmcgPSBNYXRoLm1heChuZTIubG5nLCBuZS5sbmcpO1xuICAgICAgICAgICAgbmUubGF0ID0gTWF0aC5tYXgobmUyLmxhdCwgbmUubGF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIGVxdWlkaXN0YW50IGZyb20gdGhlIGJvdW5kaW5nIGJveCdzIGNvcm5lcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgYm91bmRpbmcgYm94J3MgY2VudGVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLmdldENlbnRlcigpOyAvLyA9IExuZ0xhdCB7bG5nOiAtNzMuOTYzNjUsIGxhdDogNDAuNzgzMTV9XG4gICAgICovXG4gICAgZ2V0Q2VudGVyKCk6IExuZ0xhdCB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KCh0aGlzLl9zdy5sbmcgKyB0aGlzLl9uZS5sbmcpIC8gMiwgKHRoaXMuX3N3LmxhdCArIHRoaXMuX25lLmxhdCkgLyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFNvdXRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gdGhpcy5fc3c7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9uZTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aFdlc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRXZXN0KCksIHRoaXMuZ2V0Tm9ydGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiBuZXcgTG5nTGF0KHRoaXMuZ2V0RWFzdCgpLCB0aGlzLmdldFNvdXRoKCkpOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB3ZXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRXZXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9zdy5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxhdDsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZWFzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0RWFzdCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbmUubG5nOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sYXQ7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gVGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheSwgY29uc2lzdGluZyBvZiB0aGVcbiAgICAgKiAgIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IGNvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGluZyByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbnVtYmVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b0FycmF5KCk7IC8vID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9zdy50b0FycmF5KCksIHRoaXMuX25lLnRvQXJyYXkoKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudHMgYXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdFxuICAgICAqICAgYCdMbmdMYXRCb3VuZHMoTG5nTGF0KGxuZywgbGF0KSwgTG5nTGF0KGxuZywgbGF0KSknYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b1N0cmluZygpOyAvLyA9IFwiTG5nTGF0Qm91bmRzKExuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksIExuZ0xhdCgtNzMuOTM5NywgNDAuODAwMikpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBMbmdMYXRCb3VuZHMoJHt0aGlzLl9zdy50b1N0cmluZygpfSwgJHt0aGlzLl9uZS50b1N0cmluZygpfSlgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBib3VuZGluZyBib3ggaXMgYW4gZW1wdHkvYG51bGxgLXR5cGUgYm94LlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYm91bmRzIGhhdmUgYmVlbiBkZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5fc3cgJiYgdGhpcy5fbmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQ2hlY2sgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nbGF0IGdlb2dyYXBoaWMgcG9pbnQgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqL1xuICAgIGNvbnRhaW5zKGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICBjb25zdCB7bG5nLCBsYXR9ID0gTG5nTGF0LmNvbnZlcnQobG5nbGF0KTtcblxuICAgICAgICBjb25zdCBjb250YWluc0xhdGl0dWRlID0gdGhpcy5fc3cubGF0IDw9IGxhdCAmJiBsYXQgPD0gdGhpcy5fbmUubGF0O1xuICAgICAgICBsZXQgY29udGFpbnNMb25naXR1ZGUgPSB0aGlzLl9zdy5sbmcgPD0gbG5nICYmIGxuZyA8PSB0aGlzLl9uZS5sbmc7XG4gICAgICAgIGlmICh0aGlzLl9zdy5sbmcgPiB0aGlzLl9uZS5sbmcpIHsgLy8gd3JhcHBlZCBjb29yZGluYXRlc1xuICAgICAgICAgICAgY29udGFpbnNMb25naXR1ZGUgPSB0aGlzLl9zdy5sbmcgPj0gbG5nICYmIGxuZyA+PSB0aGlzLl9uZS5sbmc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGFpbnNMYXRpdHVkZSAmJiBjb250YWluc0xvbmdpdHVkZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSB0byBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIElmIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IGlzIHBhc3NlZCBpbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICAgICAqXG4gICAgICogSW50ZXJuYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGxzIGBMbmdMYXQjY29udmVydGAgdG8gY29udmVydCBhcnJheXMgdG8gYExuZ0xhdGAgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBpbnB1dCBBbiBhcnJheSBvZiB0d28gY29vcmRpbmF0ZXMgdG8gY29udmVydCwgb3IgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IEEgbmV3IGBMbmdMYXRCb3VuZHNgIG9iamVjdCwgaWYgYSBjb252ZXJzaW9uIG9jY3VycmVkLCBvciB0aGUgb3JpZ2luYWwgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGFyciA9IFtbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdXTtcbiAgICAgKiB2YXIgbGxiID0gbWFwYm94Z2wuTG5nTGF0Qm91bmRzLmNvbnZlcnQoYXJyKTtcbiAgICAgKiBsbGI7ICAgLy8gPSBMbmdMYXRCb3VuZHMge19zdzogTG5nTGF0IHtsbmc6IC03My45ODc2LCBsYXQ6IDQwLjc2NjF9LCBfbmU6IExuZ0xhdCB7bG5nOiAtNzMuOTM5NywgbGF0OiA0MC44MDAyfX1cbiAgICAgKi9cbiAgICBzdGF0aWMgY29udmVydChpbnB1dDogTG5nTGF0Qm91bmRzTGlrZSk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIGlmICghaW5wdXQgfHwgaW5wdXQgaW5zdGFuY2VvZiBMbmdMYXRCb3VuZHMpIHJldHVybiBpbnB1dDtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoaW5wdXQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBMbmdMYXRCb3VuZHN9IG9iamVjdCwgYW4gYXJyYXkgb2Yge0BsaW5rIExuZ0xhdExpa2V9IG9iamVjdHMgaW4gW3N3LCBuZV0gb3JkZXIsXG4gKiBvciBhbiBhcnJheSBvZiBudW1iZXJzIGluIFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIG9yZGVyLlxuICpcbiAqIEB0eXBlZGVmIHtMbmdMYXRCb3VuZHMgfCBbTG5nTGF0TGlrZSwgTG5nTGF0TGlrZV0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXX0gTG5nTGF0Qm91bmRzTGlrZVxuICogQGV4YW1wbGVcbiAqIHZhciB2MSA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoXG4gKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk4NzYsIDQwLjc2NjEpLFxuICogICBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKVxuICogKTtcbiAqIHZhciB2MiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSlcbiAqIHZhciB2MyA9IFtbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdXTtcbiAqL1xuZXhwb3J0IHR5cGUgTG5nTGF0Qm91bmRzTGlrZSA9IExuZ0xhdEJvdW5kcyB8IFtMbmdMYXRMaWtlLCBMbmdMYXRMaWtlXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgZGVmYXVsdCBMbmdMYXRCb3VuZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dyYXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vbG5nX2xhdF9ib3VuZHMnO1xuXG4vKlxuKiBBcHByb3hpbWF0ZSByYWRpdXMgb2YgdGhlIGVhcnRoIGluIG1ldGVycy5cbiogVXNlcyB0aGUgV0dTLTg0IGFwcHJveGltYXRpb24uIFRoZSByYWRpdXMgYXQgdGhlIGVxdWF0b3IgaXMgfjYzNzgxMzcgYW5kIGF0IHRoZSBwb2xlcyBpcyB+NjM1Njc1Mi4gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV29ybGRfR2VvZGV0aWNfU3lzdGVtI1dHUzg0XG4qIDYzNzEwMDguOCBpcyBvbmUgcHVibGlzaGVkIFwiYXZlcmFnZSByYWRpdXNcIiBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRWFydGhfcmFkaXVzI01lYW5fcmFkaXVzLCBvciBmdHA6Ly9hdGhlbmEuZnN2LmN2dXQuY3ovWkZHL2dyczgwLU1vcml0ei5wZGYgcC40XG4qL1xuZXhwb3J0IGNvbnN0IGVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuXG4vKipcbiAqIEEgYExuZ0xhdGAgb2JqZWN0IHJlcHJlc2VudHMgYSBnaXZlbiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGNvb3JkaW5hdGUsIG1lYXN1cmVkIGluIGRlZ3JlZXMuXG4gKlxuICogTWFwYm94IEdMIHVzZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBjb29yZGluYXRlIG9yZGVyIChhcyBvcHBvc2VkIHRvIGxhdGl0dWRlLCBsb25naXR1ZGUpIHRvIG1hdGNoIEdlb0pTT04uXG4gKlxuICogTm90ZSB0aGF0IGFueSBNYXBib3ggR0wgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIGBMbmdMYXRgIG9iamVjdCBhcyBhbiBhcmd1bWVudCBvciBvcHRpb25cbiAqIGNhbiBhbHNvIGFjY2VwdCBhbiBgQXJyYXlgIG9mIHR3byBudW1iZXJzIGFuZCB3aWxsIHBlcmZvcm0gYW4gaW1wbGljaXQgY29udmVyc2lvbi5cbiAqIFRoaXMgZmxleGlibGUgdHlwZSBpcyBkb2N1bWVudGVkIGFzIHtAbGluayBMbmdMYXRMaWtlfS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG5nIExvbmdpdHVkZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGUsIG1lYXN1cmVkIGluIGRlZ3JlZXMuXG4gKiBAZXhhbXBsZVxuICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLylcbiAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gKiBAc2VlIFtDcmVhdGUgYSB0aW1lbGluZSBhbmltYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGltZWxpbmUtYW5pbWF0aW9uLylcbiAqL1xuY2xhc3MgTG5nTGF0IHtcbiAgICBsbmc6IG51bWJlcjtcbiAgICBsYXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xuICAgICAgICBpZiAoaXNOYU4obG5nKSB8fCBpc05hTihsYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgTG5nTGF0IG9iamVjdDogKCR7bG5nfSwgJHtsYXR9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gK2xuZztcbiAgICAgICAgdGhpcy5sYXQgPSArbGF0O1xuICAgICAgICBpZiAodGhpcy5sYXQgPiA5MCB8fCB0aGlzLmxhdCA8IC05MCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgYExuZ0xhdGAgb2JqZWN0IHdob3NlIGxvbmdpdHVkZSBpcyB3cmFwcGVkIHRvIHRoZSByYW5nZSAoLTE4MCwgMTgwKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSB3cmFwcGVkIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoMjg2LjAyNTEsIDQwLjc3MzYpO1xuICAgICAqIHZhciB3cmFwcGVkID0gbGwud3JhcCgpO1xuICAgICAqIHdyYXBwZWQubG5nOyAvLyA9IC03My45NzQ5XG4gICAgICovXG4gICAgd3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQod3JhcCh0aGlzLmxuZywgLTE4MCwgMTgwKSwgdGhpcy5sYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PG51bWJlcj59IFRoZSBjb29yZGluYXRlcyByZXByZXNldGVkIGFzIGFuIGFycmF5IG9mIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b0FycmF5KCk7IC8vID0gWy03My45NzQ5LCA0MC43NzM2XVxuICAgICAqL1xuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5sbmcsIHRoaXMubGF0XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyByZXByZXNlbnQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdCBgJ0xuZ0xhdChsbmcsIGxhdCknYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvU3RyaW5nKCk7IC8vID0gXCJMbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBMbmdMYXQoJHt0aGlzLmxuZ30sICR7dGhpcy5sYXR9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYXBwcm94aW1hdGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2YgY29vcmRpbmF0ZXMgaW4gbWV0ZXJzXG4gICAgICogVXNlcyB0aGUgSGF2ZXJzaW5lIEZvcm11bGEgKGZyb20gUi5XLiBTaW5ub3R0LCBcIlZpcnR1ZXMgb2YgdGhlIEhhdmVyc2luZVwiLCBTa3kgYW5kIFRlbGVzY29wZSwgdm9sLiA2OCwgbm8uIDIsIDE5ODQsIHAuIDE1OSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdMYXQgY29vcmRpbmF0ZXMgdG8gY29tcHV0ZSB0aGUgZGlzdGFuY2UgdG9cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEaXN0YW5jZSBpbiBtZXRlcnMgYmV0d2VlbiB0aGUgdHdvIGNvb3JkaW5hdGVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG5ld195b3JrID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzQuMDA2MCwgNDAuNzEyOCk7XG4gICAgICogdmFyIGxvc19hbmdlbGVzID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtMTE4LjI0MzcsIDM0LjA1MjIpO1xuICAgICAqIG5ld195b3JrLmRpc3RhbmNlVG8obG9zX2FuZ2VsZXMpOyAvLyA9IDM5MzU3NTEuNjkwODkzOTg3LCBcInRydWUgZGlzdGFuY2VcIiB1c2luZyBhIG5vbi1zcGhlcmljYWwgYXBwcm94aW1hdGlvbiBpcyB+Mzk2NmttXG4gICAgICovXG4gICAgZGlzdGFuY2VUbyhsbmdMYXQ6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCByYWQgPSBNYXRoLlBJIC8gMTgwO1xuICAgICAgICBjb25zdCBsYXQxID0gdGhpcy5sYXQgKiByYWQ7XG4gICAgICAgIGNvbnN0IGxhdDIgPSBsbmdMYXQubGF0ICogcmFkO1xuICAgICAgICBjb25zdCBhID0gTWF0aC5zaW4obGF0MSkgKiBNYXRoLnNpbihsYXQyKSArIE1hdGguY29zKGxhdDEpICogTWF0aC5jb3MobGF0MikgKiBNYXRoLmNvcygobG5nTGF0LmxuZyAtIHRoaXMubG5nKSAqIHJhZCk7XG5cbiAgICAgICAgY29uc3QgbWF4TWV0ZXJzID0gZWFydGhSYWRpdXMgKiBNYXRoLmFjb3MoTWF0aC5taW4oYSwgMSkpO1xuICAgICAgICByZXR1cm4gbWF4TWV0ZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgTG5nTGF0Qm91bmRzYCBmcm9tIHRoZSBjb29yZGluYXRlcyBleHRlbmRlZCBieSBhIGdpdmVuIGByYWRpdXNgLiBUaGUgcmV0dXJuZWQgYExuZ0xhdEJvdW5kc2AgY29tcGxldGVseSBjb250YWlucyB0aGUgYHJhZGl1c2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0wXSBEaXN0YW5jZSBpbiBtZXRlcnMgZnJvbSB0aGUgY29vcmRpbmF0ZXMgdG8gZXh0ZW5kIHRoZSBib3VuZHMuXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gQSBuZXcgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29vcmRpbmF0ZXMgZXh0ZW5kZWQgYnkgdGhlIGByYWRpdXNgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9Cb3VuZHMoMTAwKS50b0FycmF5KCk7IC8vID0gW1stNzMuOTc1MDE4NjIxNDEzMjgsIDQwLjc3MzUxMDE2ODQ3MjI5XSwgWy03My45NzQ3ODEzNzg1ODY3MywgNDAuNzczNjg5ODMxNTI3NzFdXVxuICAgICAqL1xuICAgIHRvQm91bmRzKHJhZGl1cz86IG51bWJlciA9IDApIHtcbiAgICAgICAgY29uc3QgZWFydGhDaXJjdW1mZXJlbmNlSW5NZXRlcnNBdEVxdWF0b3IgPSA0MDA3NTAxNztcbiAgICAgICAgY29uc3QgbGF0QWNjdXJhY3kgPSAzNjAgKiByYWRpdXMgLyBlYXJ0aENpcmN1bWZlcmVuY2VJbk1ldGVyc0F0RXF1YXRvcixcbiAgICAgICAgICAgIGxuZ0FjY3VyYWN5ID0gbGF0QWNjdXJhY3kgLyBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLmxhdCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMobmV3IExuZ0xhdCh0aGlzLmxuZyAtIGxuZ0FjY3VyYWN5LCB0aGlzLmxhdCAtIGxhdEFjY3VyYWN5KSxcbiAgICAgICAgICAgIG5ldyBMbmdMYXQodGhpcy5sbmcgKyBsbmdBY2N1cmFjeSwgdGhpcy5sYXQgKyBsYXRBY2N1cmFjeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIG9yIGFuIG9iamVjdCB3aXRoIGBsbmdgIGFuZCBgbGF0YCBvciBgbG9uYCBhbmQgYGxhdGAgcHJvcGVydGllc1xuICAgICAqIHRvIGEgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBgTG5nTGF0YCBvYmplY3QgaXMgcGFzc2VkIGluLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGlucHV0IEFuIGFycmF5IG9mIHR3byBudW1iZXJzIG9yIG9iamVjdCB0byBjb252ZXJ0LCBvciBhIGBMbmdMYXRgIG9iamVjdCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gQSBuZXcgYExuZ0xhdGAgb2JqZWN0LCBpZiBhIGNvbnZlcnNpb24gb2NjdXJyZWQsIG9yIHRoZSBvcmlnaW5hbCBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYXJyID0gWy03My45NzQ5LCA0MC43NzM2XTtcbiAgICAgKiB2YXIgbGwgPSBtYXBib3hnbC5MbmdMYXQuY29udmVydChhcnIpO1xuICAgICAqIGxsOyAgIC8vID0gTG5nTGF0IHtsbmc6IC03My45NzQ5LCBsYXQ6IDQwLjc3MzZ9XG4gICAgICovXG4gICAgc3RhdGljIGNvbnZlcnQoaW5wdXQ6IExuZ0xhdExpa2UpOiBMbmdMYXQge1xuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBMbmdMYXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkgJiYgKGlucHV0Lmxlbmd0aCA9PT0gMiB8fCBpbnB1dC5sZW5ndGggPT09IDMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChOdW1iZXIoaW5wdXRbMF0pLCBOdW1iZXIoaW5wdXRbMV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG5nTGF0KFxuICAgICAgICAgICAgICAgIC8vIGZsb3cgY2FuJ3QgcmVmaW5lIHRoaXMgdG8gaGF2ZSBvbmUgb2YgbG5nIG9yIGxhdCwgc28gd2UgaGF2ZSB0byBjYXN0IHRvIGFueVxuICAgICAgICAgICAgICAgIE51bWJlcignbG5nJyBpbiBpbnB1dCA/IChpbnB1dDogYW55KS5sbmcgOiAoaW5wdXQ6IGFueSkubG9uKSxcbiAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXQubGF0KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dXCIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBMbmdMYXR9IG9iamVjdCwgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUsXG4gKiBvciBhbiBvYmplY3Qgd2l0aCBgbG5nYCBhbmQgYGxhdGAgb3IgYGxvbmAgYW5kIGBsYXRgIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVkZWYge0xuZ0xhdCB8IHtsbmc6IG51bWJlciwgbGF0OiBudW1iZXJ9IHwge2xvbjogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCBbbnVtYmVyLCBudW1iZXJdfSBMbmdMYXRMaWtlXG4gKiBAZXhhbXBsZVxuICogdmFyIHYxID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtMTIyLjQyMDY3OSwgMzcuNzcyNTM3KTtcbiAqIHZhciB2MiA9IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XTtcbiAqIHZhciB2MyA9IHtsb246IC0xMjIuNDIwNjc5LCBsYXQ6IDM3Ljc3MjUzN307XG4gKi9cbmV4cG9ydCB0eXBlIExuZ0xhdExpa2UgPSBMbmdMYXQgfCB7bG5nOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IHtsb246IG51bWJlciwgbGF0OiBudW1iZXJ9IHwgW251bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGRlZmF1bHQgTG5nTGF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCwge2VhcnRoUmFkaXVzfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuXG4vKlxuICogVGhlIGF2ZXJhZ2UgY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgaW4gbWV0ZXJzLlxuICovXG5jb25zdCBlYXJ0aENpcmN1bWZyZW5jZSA9IDIgKiBNYXRoLlBJICogZWFydGhSYWRpdXM7IC8vIG1ldGVyc1xuXG4vKlxuICogVGhlIGNpcmN1bWZlcmVuY2UgYXQgYSBsaW5lIG9mIGxhdGl0dWRlIGluIG1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0aXR1ZGU6IG51bWJlcikge1xuICAgIHJldHVybiBlYXJ0aENpcmN1bWZyZW5jZSAqIE1hdGguY29zKGxhdGl0dWRlICogTWF0aC5QSSAvIDE4MCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclhmcm9tTG5nKGxuZzogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgxODAgKyBsbmcpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JZZnJvbUxhdChsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwIC0gKDE4MCAvIE1hdGguUEkgKiBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGxhdCAqIE1hdGguUEkgLyAzNjApKSkpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JaZnJvbUFsdGl0dWRlKGFsdGl0dWRlOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFsdGl0dWRlIC8gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxuZ0Zyb21NZXJjYXRvclgoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHggKiAzNjAgLSAxODA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRGcm9tTWVyY2F0b3JZKHk6IG51bWJlcikge1xuICAgIGNvbnN0IHkyID0gMTgwIC0geSAqIDM2MDtcbiAgICByZXR1cm4gMzYwIC8gTWF0aC5QSSAqIE1hdGguYXRhbihNYXRoLmV4cCh5MiAqIE1hdGguUEkgLyAxODApKSAtIDkwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0aXR1ZGVGcm9tTWVyY2F0b3JaKHo6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHogKiBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXRGcm9tTWVyY2F0b3JZKHkpKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIE1lcmNhdG9yIHNjYWxlIGZhY3RvciBmb3IgYSBnaXZlbiBsYXRpdHVkZSwgc2VlXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZXJjYXRvcl9wcm9qZWN0aW9uI1NjYWxlX2ZhY3RvclxuICpcbiAqIEF0IHRoZSBlcXVhdG9yIHRoZSBzY2FsZSBmYWN0b3Igd2lsbCBiZSAxLCB3aGljaCBpbmNyZWFzZXMgYXQgaGlnaGVyIGxhdGl0dWRlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGF0IExhdGl0dWRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBzY2FsZSBmYWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclNjYWxlKGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIDEgLyBNYXRoLmNvcyhsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbn1cblxuLyoqXG4gKiBBIGBNZXJjYXRvckNvb3JkaW5hdGVgIG9iamVjdCByZXByZXNlbnRzIGEgcHJvamVjdGVkIHRocmVlIGRpbWVuc2lvbmFsIHBvc2l0aW9uLlxuICpcbiAqIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVzZXMgdGhlIHdlYiBtZXJjYXRvciBwcm9qZWN0aW9uIChbRVBTRzozODU3XShodHRwczovL2Vwc2cuaW8vMzg1NykpIHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50IHVuaXRzOlxuICogLSB0aGUgc2l6ZSBvZiAxIHVuaXQgaXMgdGhlIHdpZHRoIG9mIHRoZSBwcm9qZWN0ZWQgd29ybGQgaW5zdGVhZCBvZiB0aGUgXCJtZXJjYXRvciBtZXRlclwiXG4gKiAtIHRoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaXMgYXQgdGhlIG5vcnRoLXdlc3QgY29ybmVyIGluc3RlYWQgb2YgdGhlIG1pZGRsZVxuICpcbiAqIEZvciBleGFtcGxlLCBgTWVyY2F0b3JDb29yZGluYXRlKDAsIDAsIDApYCBpcyB0aGUgbm9ydGgtd2VzdCBjb3JuZXIgb2YgdGhlIG1lcmNhdG9yIHdvcmxkIGFuZFxuICogYE1lcmNhdG9yQ29vcmRpbmF0ZSgxLCAxLCAwKWAgaXMgdGhlIHNvdXRoLWVhc3QgY29ybmVyLiBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGhcbiAqIFt2ZWN0b3IgdGlsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvdmVjdG9yLXRpbGUtc3BlYykgaXQgbWF5IGJlIGhlbHBmdWwgdG8gdGhpbmtcbiAqIG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGFzIHRoZSBgMC8wLzBgIHRpbGUgd2l0aCBhbiBleHRlbnQgb2YgYDFgLlxuICpcbiAqIFRoZSBgemAgZGltZW5zaW9uIG9mIGBNZXJjYXRvckNvb3JkaW5hdGVgIGlzIGNvbmZvcm1hbC4gQSBjdWJlIGluIHRoZSBtZXJjYXRvciBjb29yZGluYXRlIHNwYWNlIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgeCBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIHkgY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSB6IFRoZSB6IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIG51bGxJc2xhbmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKTtcbiAqXG4gKiBAc2VlIFtBZGQgYSBjdXN0b20gc3R5bGUgbGF5ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY3VzdG9tLXN0eWxlLWxheWVyLylcbiAqL1xuY2xhc3MgTWVyY2F0b3JDb29yZGluYXRlIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHo6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHRoaXMueCA9ICt4O1xuICAgICAgICB0aGlzLnkgPSAreTtcbiAgICAgICAgdGhpcy56ID0gK3o7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgYE1lcmNhdG9yQ29vcmRpbmF0ZWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGxuZ0xhdExpa2UgVGhlIGxvY2F0aW9uIHRvIHByb2plY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFsdGl0dWRlIFRoZSBhbHRpdHVkZSBpbiBtZXRlcnMgb2YgdGhlIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNZXJjYXRvckNvb3JkaW5hdGV9IFRoZSBwcm9qZWN0ZWQgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHsgbG5nOiAwLCBsYXQ6IDB9LCAwKTtcbiAgICAgKiBjb29yZDsgLy8gTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTG5nTGF0KGxuZ0xhdExpa2U6IExuZ0xhdExpa2UsIGFsdGl0dWRlOiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ0xhdExpa2UpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWGZyb21MbmcobG5nTGF0LmxuZyksXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsbmdMYXQubGF0KSxcbiAgICAgICAgICAgICAgICBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoYWx0aXR1ZGUsIGxuZ0xhdC5sYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgTG5nTGF0YCBmb3IgdGhlIGNvb3JkaW5hdGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMCk7XG4gICAgICogdmFyIGxhdExuZyA9IGNvb3JkLnRvTG5nTGF0KCk7IC8vIExuZ0xhdCgwLCAwKVxuICAgICAqL1xuICAgIHRvTG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChcbiAgICAgICAgICAgICAgICBsbmdGcm9tTWVyY2F0b3JYKHRoaXMueCksXG4gICAgICAgICAgICAgICAgbGF0RnJvbU1lcmNhdG9yWSh0aGlzLnkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbHRpdHVkZSBpbiBtZXRlcnMgb2YgdGhlIGNvb3JkaW5hdGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWx0aXR1ZGUgaW4gbWV0ZXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLCAwLCAwLjAyKTtcbiAgICAgKiBjb29yZC50b0FsdGl0dWRlKCk7IC8vIDY5MTQuMjgxOTU2Mjk1MzM5XG4gICAgICovXG4gICAgdG9BbHRpdHVkZSgpIHtcbiAgICAgICAgcmV0dXJuIGFsdGl0dWRlRnJvbU1lcmNhdG9yWih0aGlzLnosIHRoaXMueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGlzdGFuY2Ugb2YgMSBtZXRlciBpbiBgTWVyY2F0b3JDb29yZGluYXRlYCB1bml0cyBhdCB0aGlzIGxhdGl0dWRlLlxuICAgICAqXG4gICAgICogRm9yIGNvb3JkaW5hdGVzIGluIHJlYWwgd29ybGQgdW5pdHMgdXNpbmcgbWV0ZXJzLCB0aGlzIG5hdHVyYWxseSBwcm92aWRlcyB0aGUgc2NhbGVcbiAgICAgKiB0byB0cmFuc2Zvcm0gaW50byBgTWVyY2F0b3JDb29yZGluYXRlYHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEaXN0YW5jZSBvZiAxIG1ldGVyIGluIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVuaXRzLlxuICAgICAqL1xuICAgIG1ldGVySW5NZXJjYXRvckNvb3JkaW5hdGVVbml0cygpIHtcbiAgICAgICAgLy8gMSBtZXRlciAvIGNpcmN1bWZlcmVuY2UgYXQgZXF1YXRvciBpbiBtZXRlcnMgKiBNZXJjYXRvciBwcm9qZWN0aW9uIHNjYWxlIGZhY3RvciBhdCB0aGlzIGxhdGl0dWRlXG4gICAgICAgIHJldHVybiAxIC8gZWFydGhDaXJjdW1mcmVuY2UgKiBtZXJjYXRvclNjYWxlKGxhdEZyb21NZXJjYXRvclkodGhpcy55KSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lcmNhdG9yQ29vcmRpbmF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VGlsZUJCb3h9IGZyb20gJ0BtYXBib3gvd2hvb3RzLWpzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBjbGFzcyBDYW5vbmljYWxUaWxlSUQge1xuICAgIHo6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGtleTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQoeiA+PSAwICYmIHogPD0gMjUpO1xuICAgICAgICBhc3NlcnQoeCA+PSAwICYmIHggPCBNYXRoLnBvdygyLCB6KSk7XG4gICAgICAgIGFzc2VydCh5ID49IDAgJiYgeSA8IE1hdGgucG93KDIsIHopKTtcbiAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkoMCwgeiwgeiwgeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKGlkOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueiA9PT0gaWQueiAmJiB0aGlzLnggPT09IGlkLnggJiYgdGhpcy55ID09PSBpZC55O1xuICAgIH1cblxuICAgIC8vIGdpdmVuIGEgbGlzdCBvZiB1cmxzLCBjaG9vc2UgYSB1cmwgdGVtcGxhdGUgYW5kIHJldHVybiBhIHRpbGUgVVJMXG4gICAgdXJsKHVybHM6IEFycmF5PHN0cmluZz4sIHNjaGVtZTogP3N0cmluZykge1xuICAgICAgICBjb25zdCBiYm94ID0gZ2V0VGlsZUJCb3godGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgICAgIGNvbnN0IHF1YWRrZXkgPSBnZXRRdWFka2V5KHRoaXMueiwgdGhpcy54LCB0aGlzLnkpO1xuXG4gICAgICAgIHJldHVybiB1cmxzWyh0aGlzLnggKyB0aGlzLnkpICUgdXJscy5sZW5ndGhdXG4gICAgICAgICAgICAucmVwbGFjZSgne3ByZWZpeH0nLCAodGhpcy54ICUgMTYpLnRvU3RyaW5nKDE2KSArICh0aGlzLnkgJSAxNikudG9TdHJpbmcoMTYpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t6fScsIFN0cmluZyh0aGlzLnopKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t4fScsIFN0cmluZyh0aGlzLngpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t5fScsIFN0cmluZyhzY2hlbWUgPT09ICd0bXMnID8gKE1hdGgucG93KDIsIHRoaXMueikgLSB0aGlzLnkgLSAxKSA6IHRoaXMueSkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3F1YWRrZXl9JywgcXVhZGtleSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7YmJveC1lcHNnLTM4NTd9JywgYmJveCk7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aGlzLnopO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAgICAgKGNvb3JkLnggKiB0aWxlc0F0Wm9vbSAtIHRoaXMueCkgKiBFWFRFTlQsXG4gICAgICAgICAgICAoY29vcmQueSAqIHRpbGVzQXRab29tIC0gdGhpcy55KSAqIEVYVEVOVCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnp9LyR7dGhpcy54fS8ke3RoaXMueX1gO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVud3JhcHBlZFRpbGVJRCB7XG4gICAgd3JhcDogbnVtYmVyO1xuICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEO1xuICAgIGtleTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iod3JhcDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkod3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE92ZXJzY2FsZWRUaWxlSUQge1xuICAgIG92ZXJzY2FsZWRaOiBudW1iZXI7XG4gICAgd3JhcDogbnVtYmVyO1xuICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEO1xuICAgIGtleTogc3RyaW5nO1xuICAgIHBvc01hdHJpeDogRmxvYXQzMkFycmF5O1xuXG4gICAgY29uc3RydWN0b3Iob3ZlcnNjYWxlZFo6IG51bWJlciwgd3JhcDogbnVtYmVyLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydChvdmVyc2NhbGVkWiA+PSB6KTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGVkWiA9IG92ZXJzY2FsZWRaO1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IG5ldyBDYW5vbmljYWxUaWxlSUQoeiwgK3gsICt5KTtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkod3JhcCwgb3ZlcnNjYWxlZFosIHosIHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhpZDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVyc2NhbGVkWiA9PT0gaWQub3ZlcnNjYWxlZFogJiYgdGhpcy53cmFwID09PSBpZC53cmFwICYmIHRoaXMuY2Fub25pY2FsLmVxdWFscyhpZC5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIHNjYWxlZFRvKHRhcmdldFo6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQodGFyZ2V0WiA8PSB0aGlzLm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSB0aGlzLmNhbm9uaWNhbC56IC0gdGFyZ2V0WjtcbiAgICAgICAgaWYgKHRhcmdldFogPiB0aGlzLmNhbm9uaWNhbC56KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGFyZ2V0WiwgdGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0YXJnZXRaLCB0aGlzLndyYXAsIHRhcmdldFosIHRoaXMuY2Fub25pY2FsLnggPj4gekRpZmZlcmVuY2UsIHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBjYWxjdWxhdGVTY2FsZWRLZXkgaXMgYW4gb3B0aW1pemF0aW9uOlxuICAgICAqIHdoZW4gd2l0aFdyYXAgPT0gdHJ1ZSwgaW1wbGVtZW50cyB0aGUgc2FtZSBhcyB0aGlzLnNjYWxlZFRvKHopLmtleSxcbiAgICAgKiB3aGVuIHdpdGhXcmFwID09IGZhbHNlLCBpbXBsZW1lbnRzIHRoZSBzYW1lIGFzIHRoaXMuc2NhbGVkVG8oeikud3JhcHBlZCgpLmtleS5cbiAgICAgKi9cbiAgICBjYWxjdWxhdGVTY2FsZWRLZXkodGFyZ2V0WjogbnVtYmVyLCB3aXRoV3JhcDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRaIDw9IHRoaXMub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSB0YXJnZXRaO1xuICAgICAgICBpZiAodGFyZ2V0WiA+IHRoaXMuY2Fub25pY2FsLnopIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVLZXkodGhpcy53cmFwICogK3dpdGhXcmFwLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVLZXkodGhpcy53cmFwICogK3dpdGhXcmFwLCB0YXJnZXRaLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlLCB0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ2hpbGRPZihwYXJlbnQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgaWYgKHBhcmVudC53cmFwICE9PSB0aGlzLndyYXApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlIGEgY2hpbGQgaWYgd2UncmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgY29weVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHBhcmVudC5jYW5vbmljYWwuejtcbiAgICAgICAgLy8gV2UncmUgZmlyc3QgdGVzdGluZyBmb3IgeiA9PSAwLCB0byBhdm9pZCBhIDMyIGJpdCBzaGlmdCwgd2hpY2ggaXMgdW5kZWZpbmVkLlxuICAgICAgICByZXR1cm4gcGFyZW50Lm92ZXJzY2FsZWRaID09PSAwIHx8IChcbiAgICAgICAgICAgIHBhcmVudC5vdmVyc2NhbGVkWiA8IHRoaXMub3ZlcnNjYWxlZFogJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2Fub25pY2FsLnggPT09ICh0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5jYW5vbmljYWwueSA9PT0gKHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpKTtcbiAgICB9XG5cbiAgICBjaGlsZHJlbihzb3VyY2VNYXhab29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPj0gc291cmNlTWF4Wm9vbSkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIHRpbGUgY29vcmQgcmVwcmVzZW50aW5nIGEgYW4gb3ZlcnNjYWxlZCB0aWxlXG4gICAgICAgICAgICByZXR1cm4gW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFogKyAxLCB0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLmNhbm9uaWNhbC56ICsgMTtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuY2Fub25pY2FsLnggKiAyO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5jYW5vbmljYWwueSAqIDI7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4ICsgMSwgeSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkgKyAxKSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCArIDEsIHkgKyAxKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGlzTGVzc1RoYW4ocmhzOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPCByaHMud3JhcCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPiByaHMud3JhcCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaIDwgcmhzLm92ZXJzY2FsZWRaKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPiByaHMub3ZlcnNjYWxlZFopIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueCA8IHJocy5jYW5vbmljYWwueCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC54ID4gcmhzLmNhbm9uaWNhbC54KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnkgPCByaHMuY2Fub25pY2FsLnkpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgd3JhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFosIDAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgIH1cblxuICAgIHVud3JhcFRvKHdyYXA6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGhpcy5vdmVyc2NhbGVkWiwgd3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgfVxuXG4gICAgb3ZlcnNjYWxlRmFjdG9yKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgdGhpcy5vdmVyc2NhbGVkWiAtIHRoaXMuY2Fub25pY2FsLnopO1xuICAgIH1cblxuICAgIHRvVW53cmFwcGVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVud3JhcHBlZFRpbGVJRCh0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3ZlcnNjYWxlZFp9LyR7dGhpcy5jYW5vbmljYWwueH0vJHt0aGlzLmNhbm9uaWNhbC55fWA7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fub25pY2FsLmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKGNvb3JkLnggLSB0aGlzLndyYXAsIGNvb3JkLnkpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUtleSh3cmFwOiBudW1iZXIsIG92ZXJzY2FsZWRaOiBudW1iZXIsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHdyYXAgKj0gMjtcbiAgICBpZiAod3JhcCA8IDApIHdyYXAgPSB3cmFwICogLTEgLSAxO1xuICAgIGNvbnN0IGRpbSA9IDEgPDwgejtcbiAgICByZXR1cm4gKGRpbSAqIGRpbSAqIHdyYXAgKyBkaW0gKiB5ICsgeCkudG9TdHJpbmcoMzYpICsgei50b1N0cmluZygzNikgKyBvdmVyc2NhbGVkWi50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIGdldFF1YWRrZXkoeiwgeCwgeSkge1xuICAgIGxldCBxdWFka2V5ID0gJycsIG1hc2s7XG4gICAgZm9yIChsZXQgaSA9IHo7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgbWFzayA9IDEgPDwgKGkgLSAxKTtcbiAgICAgICAgcXVhZGtleSArPSAoKHggJiBtYXNrID8gMSA6IDApICsgKHkgJiBtYXNrID8gMiA6IDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1YWRrZXk7XG59XG5cbnJlZ2lzdGVyKCdDYW5vbmljYWxUaWxlSUQnLCBDYW5vbmljYWxUaWxlSUQpO1xucmVnaXN0ZXIoJ092ZXJzY2FsZWRUaWxlSUQnLCBPdmVyc2NhbGVkVGlsZUlELCB7b21pdDogWydwb3NNYXRyaXgnXX0pO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbi8vIERFTURhdGEgaXMgYSBkYXRhIHN0cnVjdHVyZSBmb3IgZGVjb2RpbmcsIGJhY2tmaWxsaW5nLCBhbmQgc3RvcmluZyBlbGV2YXRpb24gZGF0YSBmb3IgcHJvY2Vzc2luZyBpbiB0aGUgaGlsbHNoYWRlIHNoYWRlcnNcbi8vIGRhdGEgY2FuIGJlIHBvcHVsYXRlZCBlaXRoZXIgZnJvbSBhIHBuZ3JhdyBpbWFnZSB0aWxlIG9yIGZyb20gc2VybGlhemVkIGRhdGEgc2VudCBiYWNrIGZyb20gYSB3b3JrZXIuIFdoZW4gZGF0YSBpcyBpbml0aWFsbHlcbi8vIGxvYWRlZCBmcm9tIGEgaW1hZ2UgdGlsZSwgd2UgZGVjb2RlIHRoZSBwaXhlbCB2YWx1ZXMgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGRlY29kaW5nIGZvcm11bGEsIGJ1dCB3ZSBzdG9yZSB0aGVcbi8vIGVsZXZhdGlvbiBkYXRhIGFzIGFuIEludDMyIHZhbHVlLiB3ZSBhZGQgNjU1MzYgKDJeMTYpIHRvIGVsaW1pbmF0ZSBuZWdhdGl2ZSB2YWx1ZXMgYW5kIGVuYWJsZSB0aGUgdXNlIG9mXG4vLyBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgdXNlZCBpbiB0aGUgaGlsbHNoYWRlUHJlcGFyZSBzdGVwLlxuXG4vLyBERU1EYXRhIGFsc28gaGFuZGxlcyB0aGUgYmFja2ZpbGxpbmcgb2YgZGF0YSBmcm9tIGEgdGlsZSdzIG5laWdoYm9yaW5nIHRpbGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIHVzZSBhIHBpeGVsJ3MgOFxuLy8gc3Vycm91bmRpbmcgcGl4ZWwgdmFsdWVzIHRvIGNvbXB1dGUgdGhlIHNsb3BlIGF0IHRoYXQgcGl4ZWwsIGFuZCB3ZSBjYW5ub3QgYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNsb3BlIGF0IHBpeGVscyBvbiBhXG4vLyB0aWxlJ3MgZWRnZSB3aXRob3V0IGJhY2tmaWxsaW5nIGZyb20gbmVpZ2hib3JpbmcgdGlsZXMuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTURhdGEge1xuICAgIHVpZDogc3RyaW5nO1xuICAgIGRhdGE6IFVpbnQzMkFycmF5O1xuICAgIHN0cmlkZTogbnVtYmVyO1xuICAgIGRpbTogbnVtYmVyO1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIC8vIFJHQkFJbWFnZSBkYXRhIGhhcyB1bmlmb3JtIDFweCBwYWRkaW5nIG9uIGFsbCBzaWRlczogc3F1YXJlIHRpbGUgZWRnZSBzaXplIGRlZmluZXMgc3RyaWRlXG4gICAgLy8gYW5kIGRpbSBpcyBjYWxjdWxhdGVkIGFzIHN0cmlkZSAtIDIuXG4gICAgY29uc3RydWN0b3IodWlkOiBzdHJpbmcsIGRhdGE6IFJHQkFJbWFnZSwgZW5jb2Rpbmc6IFwibWFwYm94XCIgfCBcInRlcnJhcml1bVwiKSB7XG4gICAgICAgIHRoaXMudWlkID0gdWlkO1xuICAgICAgICBpZiAoZGF0YS5oZWlnaHQgIT09IGRhdGEud2lkdGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUnKTtcbiAgICAgICAgaWYgKGVuY29kaW5nICYmIGVuY29kaW5nICE9PSBcIm1hcGJveFwiICYmIGVuY29kaW5nICE9PSBcInRlcnJhcml1bVwiKSByZXR1cm4gd2Fybk9uY2UoXG4gICAgICAgICAgICBgXCIke2VuY29kaW5nfVwiIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgXCJtYXBib3hcIiBhbmQgXCJ0ZXJyYXJpdW1cIi5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RyaWRlID0gZGF0YS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltID0gZGF0YS5oZWlnaHQgLSAyO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAnbWFwYm94JztcblxuICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBmbGFzaGluZyBzZWFtcyBiZXR3ZWVuIHRpbGVzLCBoZXJlIHdlIGFyZSBpbml0aWFsbHkgcG9wdWxhdGluZyBhIDFweCBib3JkZXIgb2YgcGl4ZWxzIGFyb3VuZCB0aGUgaW1hZ2VcbiAgICAgICAgLy8gd2l0aCB0aGUgZGF0YSBvZiB0aGUgbmVhcmVzdCBwaXhlbCBmcm9tIHRoZSBpbWFnZS4gdGhpcyBkYXRhIGlzIGV2ZW50dWFsbHkgcmVwbGFjZWQgd2hlbiB0aGUgdGlsZSdzIG5laWdoYm9yaW5nXG4gICAgICAgIC8vIHRpbGVzIGFyZSBsb2FkZWQgYW5kIHRoZSBhY2N1cmF0ZSBkYXRhIGNhbiBiZSBiYWNrZmlsbGVkIHVzaW5nIERFTURhdGEjYmFja2ZpbGxCb3JkZXJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaW07IHgrKykge1xuICAgICAgICAgICAgLy8gbGVmdCB2ZXJ0aWNhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIHgpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgeCldO1xuICAgICAgICAgICAgLy8gcmlnaHQgdmVydGljYWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgeCldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCB4KV07XG4gICAgICAgICAgICAvLyBsZWZ0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIC0xKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIDApXTtcbiAgICAgICAgICAgIC8vIHJpZ2h0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCBkaW0gLSAxKV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29ybmVyc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCBkaW0gLSAxKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgZGltIC0gMSldO1xuICAgIH1cblxuICAgIGdldCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pZHgoeCwgeSkgKiA0O1xuICAgICAgICBjb25zdCB1bnBhY2sgPSB0aGlzLmVuY29kaW5nID09PSBcInRlcnJhcml1bVwiID8gdGhpcy5fdW5wYWNrVGVycmFyaXVtIDogdGhpcy5fdW5wYWNrTWFwYm94O1xuICAgICAgICByZXR1cm4gdW5wYWNrKHBpeGVsc1tpbmRleF0sIHBpeGVsc1tpbmRleCArIDFdLCBwaXhlbHNbaW5kZXggKyAyXSk7XG4gICAgfVxuXG4gICAgZ2V0VW5wYWNrVmVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGluZyA9PT0gXCJ0ZXJyYXJpdW1cIiA/IFsyNTYuMCwgMS4wLCAxLjAgLyAyNTYuMCwgMzI3NjguMF0gOiBbNjU1My42LCAyNS42LCAwLjEsIDEwMDAwLjBdO1xuICAgIH1cblxuICAgIF9pZHgoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHggPCAtMSB8fCB4ID49IHRoaXMuZGltICsgMSB8fCAgeSA8IC0xIHx8IHkgPj0gdGhpcy5kaW0gKyAxKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuICh5ICsgMSkgKiB0aGlzLnN0cmlkZSArICh4ICsgMSk7XG4gICAgfVxuXG4gICAgX3VucGFja01hcGJveChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXBib3gudGVycmFpbi1yZ2I6XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hY2Nlc3MtZWxldmF0aW9uLWRhdGEvI21hcGJveC10ZXJyYWluLXJnYlxuICAgICAgICByZXR1cm4gKChyICogMjU2ICogMjU2ICsgZyAqIDI1Ni4wICsgYikgLyAxMC4wIC0gMTAwMDAuMCk7XG4gICAgfVxuXG4gICAgX3VucGFja1RlcnJhcml1bShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXB6ZW4gdGVycmFyaXVtOlxuICAgICAgICAvLyBodHRwczovL2F3cy5hbWF6b24uY29tL3B1YmxpYy1kYXRhc2V0cy90ZXJyYWluL1xuICAgICAgICByZXR1cm4gKChyICogMjU2ICsgZyArIGIgLyAyNTYpIC0gMzI3NjguMCk7XG4gICAgfVxuXG4gICAgZ2V0UGl4ZWxzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMuc3RyaWRlLCBoZWlnaHQ6IHRoaXMuc3RyaWRlfSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpO1xuICAgIH1cblxuICAgIGJhY2tmaWxsQm9yZGVyKGJvcmRlclRpbGU6IERFTURhdGEsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZGltICE9PSBib3JkZXJUaWxlLmRpbSkgdGhyb3cgbmV3IEVycm9yKCdkZW0gZGltZW5zaW9uIG1pc21hdGNoJyk7XG5cbiAgICAgICAgbGV0IHhNaW4gPSBkeCAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeE1heCA9IGR4ICogdGhpcy5kaW0gKyB0aGlzLmRpbSxcbiAgICAgICAgICAgIHlNaW4gPSBkeSAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeU1heCA9IGR5ICogdGhpcy5kaW0gKyB0aGlzLmRpbTtcblxuICAgICAgICBzd2l0Y2ggKGR4KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB4TWluID0geE1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeE1heCA9IHhNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGR5KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB5TWluID0geU1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeU1heCA9IHlNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBveCA9IC1keCAqIHRoaXMuZGltO1xuICAgICAgICBjb25zdCBveSA9IC1keSAqIHRoaXMuZGltO1xuICAgICAgICBmb3IgKGxldCB5ID0geU1pbjsgeSA8IHlNYXg7IHkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IHhNaW47IHggPCB4TWF4OyB4KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIHkpXSA9IGJvcmRlclRpbGUuZGF0YVt0aGlzLl9pZHgoeCArIG94LCB5ICsgb3kpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0RFTURhdGEnLCBERU1EYXRhKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSBTdHlsZSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGZWF0dXJlSW5kZXggZnJvbSAnLi9mZWF0dXJlX2luZGV4JztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuZXhwb3J0IHR5cGUgQnVja2V0UGFyYW1ldGVyczxMYXllcjogVHlwZWRTdHlsZUxheWVyPiA9IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGxheWVyczogQXJyYXk8TGF5ZXI+LFxuICAgIHpvb206IG51bWJlcixcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcixcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUlEOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUG9wdWxhdGVQYXJhbWV0ZXJzID0ge1xuICAgIGZlYXR1cmVJbmRleDogRmVhdHVyZUluZGV4LFxuICAgIGljb25EZXBlbmRlbmNpZXM6IHt9LFxuICAgIHBhdHRlcm5EZXBlbmRlbmNpZXM6IHt9LFxuICAgIGdseXBoRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz5cbn1cblxuZXhwb3J0IHR5cGUgSW5kZXhlZEZlYXR1cmUgPSB7XG4gICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgaWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0RmVhdHVyZSA9IHt8XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6IDEgfCAyIHwgMyxcbiAgICBpZD86IGFueSxcbiAgICArcGF0dGVybnM6IHtbc3RyaW5nXToge1wibWluXCI6IHN0cmluZywgXCJtaWRcIjogc3RyaW5nLCBcIm1heFwiOiBzdHJpbmd9fSxcbiAgICBzb3J0S2V5PzogbnVtYmVyXG58fTtcblxuLyoqXG4gKiBUaGUgYEJ1Y2tldGAgaW50ZXJmYWNlIGlzIHRoZSBzaW5nbGUgcG9pbnQgb2Yga25vd2xlZGdlIGFib3V0IHR1cm5pbmcgdmVjdG9yXG4gKiB0aWxlcyBpbnRvIFdlYkdMIGJ1ZmZlcnMuXG4gKlxuICogYEJ1Y2tldGAgaXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlLiBBbiBpbXBsZW1lbnRhdGlvbiBleGlzdHMgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdHlwZS5cbiAqIENyZWF0ZSBhIGJ1Y2tldCB2aWEgdGhlIGBTdHlsZUxheWVyI2NyZWF0ZUJ1Y2tldGAgbWV0aG9kLlxuICpcbiAqIFRoZSBjb25jcmV0ZSBidWNrZXQgdHlwZXMsIHVzaW5nIGxheW91dCBvcHRpb25zIGZyb20gdGhlIHN0eWxlIGxheWVyLFxuICogdHJhbnNmb3JtIGZlYXR1cmUgZ2VvbWV0cmllcyBpbnRvIHZlcnRleCBhbmQgaW5kZXggZGF0YSBmb3IgdXNlIGJ5IHRoZVxuICogdmVydGV4IHNoYWRlci4gIFRoZXkgYWxzbyAodmlhIGBQcm9ncmFtQ29uZmlndXJhdGlvbmApIHVzZSBmZWF0dXJlXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGUgem9vbSBsZXZlbCB0byBwb3B1bGF0ZSB0aGUgYXR0cmlidXRlcyBuZWVkZWQgZm9yXG4gKiBkYXRhLWRyaXZlbiBzdHlsaW5nLlxuICpcbiAqIEJ1Y2tldHMgYXJlIGRlc2lnbmVkIHRvIGJlIGJ1aWx0IG9uIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlbiBzZXJpYWxpemVkIGFuZFxuICogdHJhbnNmZXJyZWQgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgZm9yIHJlbmRlcmluZy4gIE9uIHRoZSB3b3JrZXIgc2lkZSwgYVxuICogYnVja2V0J3MgdmVydGV4LCBpbmRleCwgYW5kIGF0dHJpYnV0ZSBkYXRhIGlzIHN0b3JlZCBpbiBgYnVja2V0LmFycmF5czpcbiAqIEFycmF5R3JvdXBgLiAgV2hlbiBhIGJ1Y2tldCdzIGRhdGEgaXMgc2VyaWFsaXplZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBtYWluXG4gKiB0aHJlYWQsIGlzIGdldHMgZGVzZXJpYWxpemVkICh1c2luZyBgbmV3IEJ1Y2tldChzZXJpYWxpemVkQnVja2V0RGF0YSlgLCB3aXRoXG4gKiB0aGUgYXJyYXkgZGF0YSBub3cgc3RvcmVkIGluIGBidWNrZXQuYnVmZmVyczogQnVmZmVyR3JvdXBgLiAgQnVmZmVyR3JvdXBzXG4gKiBob2xkIHRoZSBzYW1lIGRhdGEgYXMgQXJyYXlHcm91cHMsIGJ1dCBhcmUgdHVuZWQgZm9yIGNvbnN1bXB0aW9uIGJ5IFdlYkdMLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0IHtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgICtsYXllcnM6IEFycmF5PGFueT47XG4gICAgK3N0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgICtzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycyk6IHZvaWQ7XG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IHZvaWQ7XG4gICAgaXNFbXB0eSgpOiBib29sZWFuO1xuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpOiB2b2lkO1xuICAgIHVwbG9hZFBlbmRpbmcoKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgdGhlIFdlYkdMIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcnMuIE5vdGUgdGhhdCBiZWNhdXNlXG4gICAgICogYnVja2V0cyBhcmUgc2hhcmVkIGJldHdlZW4gbGF5ZXJzIGhhdmluZyB0aGUgc2FtZSBsYXlvdXQgcHJvcGVydGllcywgdGhleVxuICAgICAqIG11c3QgYmUgZGVzdHJveWVkIGluIGdyb3VwcyAoYWxsIGJ1Y2tldHMgZm9yIGEgdGlsZSwgb3IgYWxsIHN5bWJvbCBidWNrZXRzKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoaW5wdXQ6IEFycmF5PEJ1Y2tldD4sIHN0eWxlOiBTdHlsZSk6IHtbc3RyaW5nXTogQnVja2V0fSB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG5cbiAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHRoZSBtYXAncyBzdHlsZSBoYXMgYmVlbiBzZXQgdG8gbnVsbCB3aGlsZVxuICAgIC8vIHRoaXMgYnVja2V0IGhhcyBiZWVuIHBhcnNpbmcuXG4gICAgaWYgKCFzdHlsZSkgcmV0dXJuIG91dHB1dDtcblxuICAgIGZvciAoY29uc3QgYnVja2V0IG9mIGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGxheWVycyA9IGJ1Y2tldC5sYXllcklkc1xuICAgICAgICAgICAgLm1hcCgoaWQpID0+IHN0eWxlLmdldExheWVyKGlkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbG9vayB1cCBTdHlsZUxheWVyIG9iamVjdHMgZnJvbSBsYXllciBpZHMgKHNpbmNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gd2FzdGUgdGltZSBzZXJpYWxpemluZy9jb3B5aW5nIHRoZW0gZnJvbSB0aGUgd29ya2VyKVxuICAgICAgICAoYnVja2V0OiBhbnkpLmxheWVycyA9IGxheWVycztcbiAgICAgICAgaWYgKChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcykge1xuICAgICAgICAgICAgKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVycyA9IChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcy5tYXAoKGxJZCkgPT4gbGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pZCA9PT0gbElkKVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIG91dHB1dFtsYXllci5pZF0gPSBidWNrZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY2xhc3MgRGljdGlvbmFyeUNvZGVyIHtcbiAgICBfc3RyaW5nVG9OdW1iZXI6IHsgW3N0cmluZ106IG51bWJlciB9O1xuICAgIF9udW1iZXJUb1N0cmluZzogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3M6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fbnVtYmVyVG9TdHJpbmcgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdzW2ldO1xuICAgICAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXJbc3RyaW5nXSA9IGk7XG4gICAgICAgICAgICB0aGlzLl9udW1iZXJUb1N0cmluZ1tpXSA9IHN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuY29kZShzdHJpbmc6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQoc3RyaW5nIGluIHRoaXMuX3N0cmluZ1RvTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3N0cmluZ107XG4gICAgfVxuXG4gICAgZGVjb2RlKG46IG51bWJlcikge1xuICAgICAgICBhc3NlcnQobiA8IHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1tuXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpY3Rpb25hcnlDb2RlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkdlb21ldHJ5fSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuXG5jbGFzcyBGZWF0dXJlIHtcbiAgICB0eXBlOiAnRmVhdHVyZSc7XG4gICAgX2dlb21ldHJ5OiA/R2VvSlNPTkdlb21ldHJ5O1xuICAgIHByb3BlcnRpZXM6IHt9O1xuICAgIGlkOiBudW1iZXIgfCBzdHJpbmcgfCB2b2lkO1xuXG4gICAgX3ZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZTtcblxuICAgIGNvbnN0cnVjdG9yKHZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgaWQ6IHN0cmluZyB8IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ0ZlYXR1cmUnO1xuXG4gICAgICAgIHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlID0gdmVjdG9yVGlsZUZlYXR1cmU7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feiA9IHo7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feCA9IHg7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feSA9IHk7XG5cbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdmVjdG9yVGlsZUZlYXR1cmUucHJvcGVydGllcztcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGdldCBnZW9tZXRyeSgpOiA/R2VvSlNPTkdlb21ldHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5ID0gdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feCxcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ksXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl96KS5nZW9tZXRyeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnk7XG4gICAgfVxuXG4gICAgc2V0IGdlb21ldHJ5KGc6ID9HZW9KU09OR2VvbWV0cnkpIHtcbiAgICAgICAgdGhpcy5fZ2VvbWV0cnkgPSBnO1xuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLmdlb21ldHJ5XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gJ19nZW9tZXRyeScgfHwgaSA9PT0gJ192ZWN0b3JUaWxlRmVhdHVyZScpIGNvbnRpbnVlO1xuICAgICAgICAgICAganNvbltpXSA9ICh0aGlzOiBhbnkpW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVhdHVyZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZXMgPSB7W2ZlYXR1cmVfaWQ6IHN0cmluZ106IEZlYXR1cmVTdGF0ZX07XG5leHBvcnQgdHlwZSBMYXllckZlYXR1cmVTdGF0ZXMgPSB7W2xheWVyOiBzdHJpbmddOiBGZWF0dXJlU3RhdGVzfTtcblxuLyoqXG4gKiBTb3VyY2VGZWF0dXJlU3RhdGUgbWFuYWdlcyB0aGUgc3RhdGUgYW5kIHBlbmRpbmcgY2hhbmdlc1xuICogdG8gZmVhdHVyZXMgaW4gYSBzb3VyY2UsIHNlcGFyYXRlZCBieSBzb3VyY2UgbGF5ZXIuXG4gKiBzdGF0ZUNoYW5nZXMgYW5kIGRlbGV0ZWRTdGF0ZXMgYmF0Y2ggYWxsIGNoYW5nZXMgdG8gdGhlIHRpbGUgKHVwZGF0ZXMgYW5kIHJlbW92ZXMsIHJlc3BlY3RpdmVseSlcbiAqIGJldHdlZW4gY29hbGVzY2UoKSBldmVudHMuIGFkZEZlYXR1cmVTdGF0ZSgpIGFuZCByZW1vdmVGZWF0dXJlU3RhdGUoKSBhbHNvIHVwZGF0ZSB0aGVpciBjb3VudGVycGFydCdzXG4gKiBsaXN0IG9mIGNoYW5nZXMsIHN1Y2ggdGhhdCBjb2FsZXNjZSgpIGNhbiBhcHBseSB0aGUgcHJvcGVyIHN0YXRlIGNoYW5nZXMgd2hpbGUgYWdub3N0aWMgdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuXG4gKiBJbiBkZWxldGVkU3RhdGVzLCBhbGwgbnVsbCdzIGRlbm90ZSBjb21wbGV0ZSByZW1vdmFsIG9mIHN0YXRlIGF0IHRoYXQgc2NvcGVcbiAqIEBwcml2YXRlXG4qL1xuY2xhc3MgU291cmNlRmVhdHVyZVN0YXRlIHtcbiAgICBzdGF0ZTogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIHN0YXRlQ2hhbmdlczogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIGRlbGV0ZWRTdGF0ZXM6IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzID0ge307XG4gICAgfVxuXG4gICAgdXBkYXRlU3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIgfCBzdHJpbmcsIG5ld1N0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgZXh0ZW5kKHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgbmV3U3RhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZ0ICE9PSBmZWF0dXJlKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2Z0XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlRGVsZXRpb25RdWV1ZWQgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPT09IG51bGw7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9uUXVldWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1N0YXRlW3Byb3BdKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW3Byb3BdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0aW9uSW5RdWV1ZSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGlvbkluUXVldWUpIGRlbGV0ZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZD86IG51bWJlciB8IHN0cmluZywga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyRGVsZXRlZCA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGw7XG4gICAgICAgIGlmIChzb3VyY2VMYXllckRlbGV0ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG5cbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gfHwge307XG5cbiAgICAgICAgaWYgKGtleSAmJiBmZWF0dXJlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVJblF1ZXVlID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVJblF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID0gbnVsbDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSB8fCB7fTtcblxuICAgICAgICBjb25zdCByZWNvbmNpbGVkU3RhdGUgPSBleHRlbmQoe30sIGJhc2VbZmVhdHVyZV0sIGNoYW5nZXNbZmVhdHVyZV0pO1xuXG4gICAgICAgIC8vcmV0dXJuIGVtcHR5IG9iamVjdCBpZiB0aGUgd2hvbGUgc291cmNlIGxheWVyIGlzIGF3YWl0aW5nIGRlbGV0aW9uXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSByZXR1cm4ge307XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVEZWxldGlvbnMgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVJZF07XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9ucyA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGZlYXR1cmVEZWxldGlvbnMpIGRlbGV0ZSByZWNvbmNpbGVkU3RhdGVbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZWRTdGF0ZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVGlsZVN0YXRlKHRpbGU6IFRpbGUsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLCBwYWludGVyKTtcbiAgICB9XG5cbiAgICBjb2FsZXNjZUNoYW5nZXModGlsZXM6IHtbYW55XTogVGlsZX0sIHBhaW50ZXI6IGFueSkge1xuICAgICAgICAvL3RyYWNrIGNoYW5nZXMgd2l0aCBmdWxsIHN0YXRlIG9iamVjdHMsIGJ1dCBvbmx5IGZvciBmZWF0dXJlcyB0aGF0IGdvdCBtb2RpZmllZFxuICAgICAgICBjb25zdCBmZWF0dXJlc0NoYW5nZWQ6IExheWVyRmVhdHVyZVN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXIgaW4gdGhpcy5zdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKTtcbiAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmZWF0dXJlXSA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSA9IGxheWVyU3RhdGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllciBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2Z0XSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmdF0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZmVhdHVyZV0gPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gPSBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgZXh0ZW5kKGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0sIGxheWVyU3RhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0ge307XG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmZWF0dXJlc0NoYW5nZWQpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpZF07XG4gICAgICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZShmZWF0dXJlc0NoYW5nZWQsIHBhaW50ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTb3VyY2VGZWF0dXJlU3RhdGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi9leHRlbnQnO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgR3JpZCBmcm9tICdncmlkLWluZGV4JztcbmltcG9ydCBEaWN0aW9uYXJ5Q29kZXIgZnJvbSAnLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyJztcbmltcG9ydCB2dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCB7YXJyYXlzSW50ZXJzZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgU291cmNlRmVhdHVyZVN0YXRlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0JveH0gZnJvbSAnLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuXG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlRmlsdGVyfSBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9uLCBQcm9tb3RlSWRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuaW1wb3J0IHtGZWF0dXJlSW5kZXhBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5cbnR5cGUgUXVlcnlQYXJhbWV0ZXJzID0ge1xuICAgIHNjYWxlOiBudW1iZXIsXG4gICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXIsXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICAgICAgbGF5ZXJzOiBBcnJheTxzdHJpbmc+LFxuICAgIH1cbn1cblxuY2xhc3MgRmVhdHVyZUluZGV4IHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB6OiBudW1iZXI7XG4gICAgZ3JpZDogR3JpZDtcbiAgICBncmlkM0Q6IEdyaWQ7XG4gICAgZmVhdHVyZUluZGV4QXJyYXk6IEZlYXR1cmVJbmRleEFycmF5O1xuICAgIHByb21vdGVJZDogP1Byb21vdGVJZFNwZWNpZmljYXRpb247XG5cbiAgICByYXdUaWxlRGF0YTogQXJyYXlCdWZmZXI7XG4gICAgYnVja2V0TGF5ZXJJRHM6IEFycmF5PEFycmF5PHN0cmluZz4+O1xuXG4gICAgdnRMYXllcnM6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBzb3VyY2VMYXllckNvZGVyOiBEaWN0aW9uYXJ5Q29kZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHByb21vdGVJZD86ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLnggPSB0aWxlSUQuY2Fub25pY2FsLng7XG4gICAgICAgIHRoaXMueSA9IHRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgdGhpcy56ID0gdGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICB0aGlzLmdyaWQgPSBuZXcgR3JpZChFWFRFTlQsIDE2LCAwKTtcbiAgICAgICAgdGhpcy5ncmlkM0QgPSBuZXcgR3JpZChFWFRFTlQsIDE2LCAwKTtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXhBcnJheSA9IG5ldyBGZWF0dXJlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IHByb21vdGVJZDtcbiAgICB9XG5cbiAgICBpbnNlcnQoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBmZWF0dXJlSW5kZXg6IG51bWJlciwgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLCBidWNrZXRJbmRleDogbnVtYmVyLCBpczNEPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4KTtcblxuICAgICAgICBjb25zdCBncmlkID0gaXMzRCA/IHRoaXMuZ3JpZDNEIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgZ2VvbWV0cnkubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJpbmcgPSBnZW9tZXRyeVtyXTtcblxuICAgICAgICAgICAgY29uc3QgYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByaW5nW2ldO1xuICAgICAgICAgICAgICAgIGJib3hbMF0gPSBNYXRoLm1pbihiYm94WzBdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbMV0gPSBNYXRoLm1pbihiYm94WzFdLCBwLnkpO1xuICAgICAgICAgICAgICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbM10gPSBNYXRoLm1heChiYm94WzNdLCBwLnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYmJveFswXSA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIGJib3hbMV0gPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICBiYm94WzJdID49IDAgJiZcbiAgICAgICAgICAgICAgICBiYm94WzNdID49IDApIHtcbiAgICAgICAgICAgICAgICBncmlkLmluc2VydChrZXksIGJib3hbMF0sIGJib3hbMV0sIGJib3hbMl0sIGJib3hbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFZUTGF5ZXJzKCk6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfSB7XG4gICAgICAgIGlmICghdGhpcy52dExheWVycykge1xuICAgICAgICAgICAgdGhpcy52dExheWVycyA9IG5ldyB2dC5WZWN0b3JUaWxlKG5ldyBQcm90b2J1Zih0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2Rlcih0aGlzLnZ0TGF5ZXJzID8gT2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpIDogWydfZ2VvanNvblRpbGVMYXllciddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52dExheWVycztcbiAgICB9XG5cbiAgICAvLyBGaW5kcyBub24tc3ltYm9sIGZlYXR1cmVzIGluIHRoaXMgdGlsZSBhdCBhIHBhcnRpY3VsYXIgcG9zaXRpb24uXG4gICAgcXVlcnkoYXJnczogUXVlcnlQYXJhbWV0ZXJzLCBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSwgc291cmNlRmVhdHVyZVN0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGUpOiB7W3N0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSB7XG4gICAgICAgIHRoaXMubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gYXJncy5wYXJhbXMgfHwge30sXG4gICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyA9IEVYVEVOVCAvIGFyZ3MudGlsZVNpemUgLyBhcmdzLnNjYWxlLFxuICAgICAgICAgICAgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihwYXJhbXMuZmlsdGVyKTtcblxuICAgICAgICBjb25zdCBxdWVyeUdlb21ldHJ5ID0gYXJncy5xdWVyeUdlb21ldHJ5O1xuICAgICAgICBjb25zdCBxdWVyeVBhZGRpbmcgPSBhcmdzLnF1ZXJ5UGFkZGluZyAqIHBpeGVsc1RvVGlsZVVuaXRzO1xuXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhxdWVyeUdlb21ldHJ5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0aGlzLmdyaWQucXVlcnkoYm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBib3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcpO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYUJvdW5kcyA9IGdldEJvdW5kcyhhcmdzLmNhbWVyYVF1ZXJ5R2VvbWV0cnkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZzNEID0gdGhpcy5ncmlkM0QucXVlcnkoXG4gICAgICAgICAgICAgICAgY2FtZXJhQm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcsXG4gICAgICAgICAgICAgICAgKGJ4MSwgYnkxLCBieDIsIGJ5MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdHNCb3goYXJncy5jYW1lcmFRdWVyeUdlb21ldHJ5LCBieDEgLSBxdWVyeVBhZGRpbmcsIGJ5MSAtIHF1ZXJ5UGFkZGluZywgYngyICsgcXVlcnlQYWRkaW5nLCBieTIgKyBxdWVyeVBhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1hdGNoaW5nM0QpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nLnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdGNoaW5nLnNvcnQodG9wRG93bkZlYXR1cmVDb21wYXJhdG9yKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IHByZXZpb3VzSW5kZXg7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0Y2hpbmcubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2hpbmdba107XG5cbiAgICAgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBzYW1lIGZlYXR1cmUgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcHJldmlvdXNJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgbGV0IGZlYXR1cmVHZW9tZXRyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIG1hdGNoLmJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIG1hdGNoLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgbWF0Y2guZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzLFxuICAgICAgICAgICAgICAgIChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgaWQ6IHN0cmluZyB8IG51bWJlciB8IHZvaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlR2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVHZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZmVhdHVyZVN0YXRlID0ge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBgZmVhdHVyZS1zdGF0ZWAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHJlcXVpcmVzIGZlYXR1cmUgc3RhdGUgdG8gYmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGUgPSBzb3VyY2VGZWF0dXJlU3RhdGUuZ2V0U3RhdGUoc3R5bGVMYXllci5zb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInLCBpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlTGF5ZXIucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGZlYXR1cmVHZW9tZXRyeSwgdGhpcy56LCBhcmdzLnRyYW5zZm9ybSwgcGl4ZWxzVG9UaWxlVW5pdHMsIGFyZ3MucGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgIHJlc3VsdDoge1tzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0sXG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGZpbHRlcjogRmVhdHVyZUZpbHRlcixcbiAgICAgICAgZmlsdGVyTGF5ZXJJRHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgIHN0eWxlTGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICBpbnRlcnNlY3Rpb25UZXN0PzogKGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBzdHlsZUxheWVyOiBTdHlsZUxheWVyLCBpZDogc3RyaW5nIHwgbnVtYmVyIHwgdm9pZCkgPT4gYm9vbGVhbiB8IG51bWJlcikge1xuXG4gICAgICAgIGNvbnN0IGxheWVySURzID0gdGhpcy5idWNrZXRMYXllcklEc1tidWNrZXRJbmRleF07XG4gICAgICAgIGlmIChmaWx0ZXJMYXllcklEcyAmJiAhYXJyYXlzSW50ZXJzZWN0KGZpbHRlckxheWVySURzLCBsYXllcklEcykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJOYW1lID0gdGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShzb3VyY2VMYXllckluZGV4KTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0aGlzLnZ0TGF5ZXJzW3NvdXJjZUxheWVyTmFtZV07XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBzb3VyY2VMYXllci5mZWF0dXJlKGZlYXR1cmVJbmRleCk7XG5cbiAgICAgICAgaWYgKCFmaWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldElkKGZlYXR1cmUsIHNvdXJjZUxheWVyTmFtZSk7XG5cbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsYXllcklEcy5sZW5ndGg7IGwrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJRCA9IGxheWVySURzW2xdO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyTGF5ZXJJRHMgJiYgZmlsdGVyTGF5ZXJJRHMuaW5kZXhPZihsYXllcklEKSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHN0eWxlTGF5ZXJzW2xheWVySURdO1xuICAgICAgICAgICAgaWYgKCFzdHlsZUxheWVyKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uWiA9ICFpbnRlcnNlY3Rpb25UZXN0IHx8IGludGVyc2VjdGlvblRlc3QoZmVhdHVyZSwgc3R5bGVMYXllciwgaWQpO1xuICAgICAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25aKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhcHBsaWVkIGZvciBub24tc3ltYm9sIGZlYXR1cmVzXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb2pzb25GZWF0dXJlID0gbmV3IEdlb0pTT05GZWF0dXJlKGZlYXR1cmUsIHRoaXMueiwgdGhpcy54LCB0aGlzLnksIGlkKTtcbiAgICAgICAgICAgIChnZW9qc29uRmVhdHVyZTogYW55KS5sYXllciA9IHN0eWxlTGF5ZXIuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICBsZXQgbGF5ZXJSZXN1bHQgPSByZXN1bHRbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXJSZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0ID0gcmVzdWx0W2xheWVySURdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXllclJlc3VsdC5wdXNoKHtmZWF0dXJlSW5kZXgsIGZlYXR1cmU6IGdlb2pzb25GZWF0dXJlLCBpbnRlcnNlY3Rpb25afSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHNldCBvZiBzeW1ib2wgaW5kZXhlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvb2tlZCB1cCxcbiAgICAvLyByZXR1cm4gYSBtYXRjaGluZyBzZXQgb2YgR2VvSlNPTkZlYXR1cmVzXG4gICAgbG9va3VwU3ltYm9sRmVhdHVyZXMoc3ltYm9sRmVhdHVyZUluZGV4ZXM6IEFycmF5PG51bWJlcj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU3BlYzogRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMYXllcklEczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGZpbHRlclNwZWMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3ltYm9sRmVhdHVyZUluZGV4IG9mIHN5bWJvbEZlYXR1cmVJbmRleGVzKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sRmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYXllcklEcyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVyc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFzTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySURzIG9mIHRoaXMuYnVja2V0TGF5ZXJJRHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcklEcykge1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gbGF5ZXJJRCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0SWQoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHNvdXJjZUxheWVySWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bWJlciB8IHZvaWQge1xuICAgICAgICBsZXQgaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICBpZiAodGhpcy5wcm9tb3RlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gdHlwZW9mIHRoaXMucHJvbW90ZUlkID09PSAnc3RyaW5nJyA/IHRoaXMucHJvbW90ZUlkIDogdGhpcy5wcm9tb3RlSWRbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZCA9IGZlYXR1cmUucHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnYm9vbGVhbicpIGlkID0gIE51bWJlcihpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoXG4gICAgJ0ZlYXR1cmVJbmRleCcsXG4gICAgRmVhdHVyZUluZGV4LFxuICAgIHtvbWl0OiBbJ3Jhd1RpbGVEYXRhJywgJ3NvdXJjZUxheWVyQ29kZXInXX1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVJbmRleDtcblxuZnVuY3Rpb24gZ2V0Qm91bmRzKGdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG4gICAgZm9yIChjb25zdCBwIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgIH1cbiAgICByZXR1cm4ge21pblgsIG1pblksIG1heFgsIG1heFl9O1xufVxuXG5mdW5jdGlvbiB0b3BEb3duRmVhdHVyZUNvbXBhcmF0b3IoYSwgYikge1xuICAgIHJldHVybiBiIC0gYTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dW5pcXVlSWQsIHBhcnNlQ2FjaGVDb250cm9sfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtkZXNlcmlhbGl6ZSBhcyBkZXNlcmlhbGl6ZUJ1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB7bGF6eUxvYWRSVExUZXh0UGx1Z2lufSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5cbmNvbnN0IENMT0NLX1NLRVdfUkVUUllfVElNRU9VVCA9IDMwMDAwO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtXb3JrZXJUaWxlUmVzdWx0fSBmcm9tICcuL3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBERU1EYXRhIGZyb20gJy4uL2RhdGEvZGVtX2RhdGEnO1xuaW1wb3J0IHR5cGUge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHR5cGUgSW1hZ2VBdGxhcyBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIEZyYW1lYnVmZmVyIGZyb20gJy4uL2dsL2ZyYW1lYnVmZmVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMYXllckZlYXR1cmVTdGF0ZXN9IGZyb20gJy4vc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgVGlsZVN0YXRlID1cbiAgICB8ICdsb2FkaW5nJyAgIC8vIFRpbGUgZGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLlxuICAgIHwgJ2xvYWRlZCcgICAgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGxvYWRlZC4gVGlsZSBjYW4gYmUgcmVuZGVyZWQuXG4gICAgfCAncmVsb2FkaW5nJyAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyBiZWluZyB1cGRhdGVkLiBUaWxlIGNhbiBiZSByZW5kZXJlZC5cbiAgICB8ICd1bmxvYWRlZCcgIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBkZWxldGVkLlxuICAgIHwgJ2Vycm9yZWQnICAgLy8gVGlsZSBkYXRhIHdhcyBub3QgbG9hZGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3IuXG4gICAgfCAnZXhwaXJlZCc7ICAvKiBUaWxlIGRhdGEgd2FzIHByZXZpb3VzbHkgbG9hZGVkLCBidXQgaGFzIGV4cGlyZWQgcGVyIGl0c1xuICAgICAgICAgICAgICAgICAgICogSFRUUCBoZWFkZXJzIGFuZCBpcyBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nLiAqL1xuXG4vKipcbiAqIEEgdGlsZSBvYmplY3QgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29vcmRpbmF0ZSwgd2hpY2ggZGVmaW5lc1xuICogaXRzIHBsYWNlLCBhcyB3ZWxsIGFzIGEgdW5pcXVlIElEIGFuZCBkYXRhIHRyYWNraW5nIGZvciBpdHMgY29udGVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRpbGUge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB1aWQ6IG51bWJlcjtcbiAgICB1c2VzOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBidWNrZXRzOiB7W3N0cmluZ106IEJ1Y2tldH07XG4gICAgbGF0ZXN0RmVhdHVyZUluZGV4OiA/RmVhdHVyZUluZGV4O1xuICAgIGxhdGVzdFJhd1RpbGVEYXRhOiA/QXJyYXlCdWZmZXI7XG4gICAgaW1hZ2VBdGxhczogP0ltYWdlQXRsYXM7XG4gICAgaW1hZ2VBdGxhc1RleHR1cmU6IFRleHR1cmU7XG4gICAgZ2x5cGhBdGxhc0ltYWdlOiA/QWxwaGFJbWFnZTtcbiAgICBnbHlwaEF0bGFzVGV4dHVyZTogVGV4dHVyZTtcbiAgICBleHBpcmF0aW9uVGltZTogYW55O1xuICAgIGV4cGlyZWRSZXF1ZXN0Q291bnQ6IG51bWJlcjtcbiAgICBzdGF0ZTogVGlsZVN0YXRlO1xuICAgIHRpbWVBZGRlZDogYW55O1xuICAgIGZhZGVFbmRUaW1lOiBhbnk7XG4gICAgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheTtcbiAgICByZWRvV2hlbkRvbmU6IGJvb2xlYW47XG4gICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIHBsYWNlbWVudFNvdXJjZTogYW55O1xuICAgIGFjdG9yOiA/QWN0b3I7XG4gICAgdnRMYXllcnM6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcblxuICAgIG5laWdoYm9yaW5nVGlsZXM6ID9PYmplY3Q7XG4gICAgZGVtOiA/REVNRGF0YTtcbiAgICBhYm9ydGVkOiA/Ym9vbGVhbjtcbiAgICBuZWVkc0hpbGxzaGFkZVByZXBhcmU6ID9ib29sZWFuO1xuICAgIHJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIHRleHR1cmU6IGFueTtcbiAgICBmYm86ID9GcmFtZWJ1ZmZlcjtcbiAgICBkZW1UZXh0dXJlOiA/VGV4dHVyZTtcbiAgICByZWZyZXNoZWRVcG9uRXhwaXJhdGlvbjogYm9vbGVhbjtcbiAgICByZWxvYWRDYWxsYmFjazogYW55O1xuICAgIHJlc291cmNlVGltaW5nOiA/QXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXI7XG5cbiAgICBzeW1ib2xGYWRlSG9sZFVudGlsOiA/bnVtYmVyO1xuICAgIGhhc1N5bWJvbEJ1Y2tldHM6IGJvb2xlYW47XG4gICAgaGFzUlRMVGV4dDogYm9vbGVhbjtcbiAgICBkZXBlbmRlbmNpZXM6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEXG4gICAgICogQHBhcmFtIHNpemVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgdGhpcy51aWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLnVzZXMgPSAwO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy5idWNrZXRzID0ge307XG4gICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IDA7XG4gICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSB7fTtcblxuICAgICAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHJlc3BvbnNlIHdhcyBhbHJlYWR5IGV4cGlyZWQgd2hlblxuICAgICAgICAvLyByZWNlaXZlZC4gV2UncmUgdXNpbmcgdGhpcyB0byBhZGQgYSBkZWxheSB3aGVuIG1ha2luZyBhIG5ldyByZXF1ZXN0XG4gICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8ga2VlcCByZXRyeWluZyBpbW1lZGlhdGVseSBpbiBjYXNlIG9mIGEgc2VydmVyXG4gICAgICAgIC8vIHNlcnZpbmcgZXhwaXJlZCB0aWxlcy5cbiAgICAgICAgdGhpcy5leHBpcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRpbmcnO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRmFkZUR1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmFkZUVuZFRpbWUgPSBkdXJhdGlvbiArIHRoaXMudGltZUFkZGVkO1xuICAgICAgICBpZiAoZmFkZUVuZFRpbWUgPCBicm93c2VyLm5vdygpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmZhZGVFbmRUaW1lICYmIGZhZGVFbmRUaW1lIDwgdGhpcy5mYWRlRW5kVGltZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZmFkZUVuZFRpbWUgPSBmYWRlRW5kVGltZTtcbiAgICB9XG5cbiAgICB3YXNSZXF1ZXN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnZXJyb3JlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ3JlbG9hZGluZyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBkYXRhIG9iamVjdCB3aXRoIGEgJ2J1ZmZlcnMnIHByb3BlcnR5LCBsb2FkIGl0IGludG9cbiAgICAgKiB0aGlzIHRpbGUncyBlbGVtZW50R3JvdXBzIGFuZCBidWZmZXJzIHByb3BlcnRpZXMgYW5kIHNldCBsb2FkZWRcbiAgICAgKiB0byB0cnVlLiBJZiB0aGUgZGF0YSBpcyBudWxsLCBsaWtlIGluIHRoZSBjYXNlIG9mIGFuIGVtcHR5XG4gICAgICogR2VvSlNPTiB0aWxlLCBuby1vcCBidXQgc3RpbGwgc2V0IGxvYWRlZCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICogQHBhcmFtIHBhaW50ZXJcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZFZlY3RvckRhdGEoZGF0YTogV29ya2VyVGlsZVJlc3VsdCwgcGFpbnRlcjogYW55LCBqdXN0UmVsb2FkZWQ6ID9ib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRlZCc7XG5cbiAgICAgICAgLy8gZW1wdHkgR2VvSlNPTiB0aWxlXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IGRhdGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgaWYgKGRhdGEucmF3VGlsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHZlY3RvciB0aWxlcyBoYXZlIHJhd1RpbGVEYXRhLCBhbmQgdGhleSB3b24ndCB1cGRhdGUgaXQgZm9yXG4gICAgICAgICAgICAgICAgLy8gJ3JlbG9hZFRpbGUnXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSYXdUaWxlRGF0YSA9IGRhdGEucmF3VGlsZURhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgPSBkYXRhLnJhd1RpbGVEYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcmF3VGlsZURhdGEgaGFzbid0IHVwZGF0ZWQsIGhvbGQgb250byBhIHBvaW50ZXIgdG8gdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAvLyBvbmUgd2UgcmVjZWl2ZWRcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSA9IHRoaXMubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IGRhdGEuY29sbGlzaW9uQm94QXJyYXk7XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IGRlc2VyaWFsaXplQnVja2V0KGRhdGEuYnVja2V0cywgcGFpbnRlci5zdHlsZSk7XG5cbiAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldCBpbnN0YW5jZW9mIFN5bWJvbEJ1Y2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGp1c3RSZWxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuanVzdFJlbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzU3ltYm9sQnVja2V0cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5oYXNSVExUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eUxvYWRSVExUZXh0UGx1Z2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IE1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLCBwYWludGVyLnN0eWxlLmdldExheWVyKGlkKS5xdWVyeVJhZGl1cyhidWNrZXQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IGRhdGEuaW1hZ2VBdGxhcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc0ltYWdlID0gZGF0YS5nbHlwaEF0bGFzSW1hZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIGFueSBkYXRhIG9yIFdlYkdMIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgdGlsZS5cbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdW5sb2FkVmVjdG9yRGF0YSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIHRoaXMuYnVja2V0c1tpZF0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgIH1cblxuICAgIGdldEJ1Y2tldChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXRzW2xheWVyLmlkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIGlmIChidWNrZXQudXBsb2FkUGVuZGluZygpKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcyAmJiAhdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5pbWFnZUF0bGFzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmdseXBoQXRsYXNJbWFnZSwgZ2wuQUxQSEEpO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzSW1hZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlcGFyZShpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcikge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMucGF0Y2hVcGRhdGVkSW1hZ2VzKGltYWdlTWFuYWdlciwgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBRdWVyaWVzIG5vbi1zeW1ib2wgZmVhdHVyZXMgcmVuZGVyZWQgZm9yIHRoaXMgdGlsZS5cbiAgICAvLyBTeW1ib2wgZmVhdHVyZXMgYXJlIHF1ZXJpZWQgZ2xvYmFsbHlcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMobGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KToge1tzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8ICF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSlcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXgsXG4gICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhZGRpbmc6IHRoaXMucXVlcnlQYWRkaW5nICogbWF4UGl0Y2hTY2FsZUZhY3RvclxuICAgICAgICB9LCBsYXllcnMsIHNvdXJjZUZlYXR1cmVTdGF0ZSk7XG4gICAgfVxuXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhyZXN1bHQ6IEFycmF5PEdlb0pTT05GZWF0dXJlPiwgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ID0gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmICghZmVhdHVyZUluZGV4IHx8ICFmZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2dExheWVycyA9IGZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHBhcmFtcyA/IHBhcmFtcy5zb3VyY2VMYXllciA6ICcnO1xuICAgICAgICBjb25zdCBsYXllciA9IHZ0TGF5ZXJzLl9nZW9qc29uVGlsZUxheWVyIHx8IHZ0TGF5ZXJzW3NvdXJjZUxheWVyXTtcblxuICAgICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihwYXJhbXMgJiYgcGFyYW1zLmZpbHRlcik7XG4gICAgICAgIGNvbnN0IHt6LCB4LCB5fSA9IHRoaXMudGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3QgY29vcmQgPSB7eiwgeCwgeX07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksIGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlSW5kZXguZ2V0SWQoZmVhdHVyZSwgc291cmNlTGF5ZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlb2pzb25GZWF0dXJlID0gbmV3IEdlb0pTT05GZWF0dXJlKGZlYXR1cmUsIHosIHgsIHksIGlkKTtcbiAgICAgICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkudGlsZSA9IGNvb3JkO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlb2pzb25GZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aGlzLnN0YXRlID09PSAncmVsb2FkaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnZXhwaXJlZCc7XG4gICAgfVxuXG4gICAgcGF0dGVybnNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlQXRsYXMgJiYgISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RoO1xuICAgIH1cblxuICAgIHNldEV4cGlyeURhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5leHBpcmF0aW9uVGltZTtcblxuICAgICAgICBpZiAoZGF0YS5jYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZENDID0gcGFyc2VDYWNoZUNvbnRyb2woZGF0YS5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZENDWydtYXgtYWdlJ10pIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBEYXRlLm5vdygpICsgcGFyc2VkQ0NbJ21heC1hZ2UnXSAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5leHBpcmVzKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZGF0YS5leHBpcmVzKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBpc0V4cGlyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUgPiBub3cpIHtcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByaW9yKSB7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5leHBpcmF0aW9uVGltZSA8IHByaW9yKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwaXJpbmcgZGF0ZSBpcyBnb2luZyBiYWNrd2FyZHM6XG4gICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5leHBpcmF0aW9uVGltZSAtIHByaW9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgaXMgc2VydmluZyB0aGUgc2FtZSBleHBpcmVkIHJlc291cmNlIG92ZXIgYW5kIG92ZXI6IGZhbGxcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFjayB0byBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICAgICAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWl0aGVyIHRoZSBjbGllbnQgb3IgdGhlIHNlcnZlciBjbG9jayBpcyB3cm9uZyBhbmRcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGludGVycG9sYXRlIGEgdmFsaWQgZXhwaXJhdGlvbiBkYXRlIChmcm9tIHRoZSBjbGllbnQgUE9WKVxuICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZpbmcgYSBtaW5pbXVtIHRpbWVvdXQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBub3cgKyBNYXRoLm1heChkZWx0YSwgQ0xPQ0tfU0tFV19SRVRSWV9USU1FT1VUKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRXhwaXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZXhwaXJlZCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRFeHBpcnlUaW1lb3V0KCkge1xuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxMDAwICogKDEgPDwgTWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50IC0gMSwgMzEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWF4IHZhbHVlIGZvciBgc2V0VGltZW91dGAgaW1wbGVtZW50YXRpb25zIGlzIGEgMzIgYml0IGludGVnZXI7IGNhcCB0aGlzIGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgTWF0aC5wb3coMiwgMzEpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGZWF0dXJlU3RhdGUoc3RhdGVzOiBMYXllckZlYXR1cmVTdGF0ZXMsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8XG4gICAgICAgICAgICAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgfHxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2dExheWVycyA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgLy8gQnVja2V0cyBhcmUgZ3JvdXBlZCBieSBjb21tb24gc291cmNlLWxheWVyXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gYnVja2V0LmxheWVyc1swXVsnc291cmNlTGF5ZXInXSB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB2dExheWVyc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyU3RhdGVzID0gc3RhdGVzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllciB8fCAhc291cmNlTGF5ZXJTdGF0ZXMgfHwgT2JqZWN0LmtleXMoc291cmNlTGF5ZXJTdGF0ZXMpLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGJ1Y2tldC51cGRhdGUoc291cmNlTGF5ZXJTdGF0ZXMsIHNvdXJjZUxheWVyLCB0aGlzLmltYWdlQXRsYXMgJiYgdGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMgfHwge30pO1xuICAgICAgICAgICAgaWYgKHBhaW50ZXIgJiYgcGFpbnRlci5zdHlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gTWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsIHBhaW50ZXIuc3R5bGUuZ2V0TGF5ZXIoaWQpLnF1ZXJ5UmFkaXVzKGJ1Y2tldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9sZGluZ0ZvckZhZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzeW1ib2xGYWRlRmluaXNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsIHx8IHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA8IGJyb3dzZXIubm93KCk7XG4gICAgfVxuXG4gICAgY2xlYXJGYWRlSG9sZCgpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNldEhvbGREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA9IGJyb3dzZXIubm93KCkgKyBkdXJhdGlvbjtcbiAgICB9XG5cbiAgICBzZXREZXBlbmRlbmNpZXMobmFtZXNwYWNlOiBzdHJpbmcsIGRlcGVuZGVuY2llczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIGluZGV4W2RlcF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzW25hbWVzcGFjZV0gPSBpbmRleDtcbiAgICB9XG5cbiAgICBoYXNEZXBlbmRlbmN5KG5hbWVzcGFjZXM6IEFycmF5PHN0cmluZz4sIGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgbmFtZXNwYWNlcykge1xuICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5kZXBlbmRlbmNpZXNbbmFtZXNwYWNlXTtcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZTtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgWyd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnbWluem9vbScsICdtYXh6b29tJywgJ2ZpbHRlcicsICdsYXlvdXQnXTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5jb25zdCBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcblxuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VNZXRyaWNzID0ge1xuICAgIGxvYWRUaW1lOiBudW1iZXIsXG4gICAgZnVsbExvYWRUaW1lOiBudW1iZXIsXG4gICAgZnBzOiBudW1iZXIsXG4gICAgcGVyY2VudERyb3BwZWRGcmFtZXM6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VNYXJrZXJzID0ge1xuICAgIGNyZWF0ZTogJ2NyZWF0ZScsXG4gICAgbG9hZDogJ2xvYWQnLFxuICAgIGZ1bGxMb2FkOiAnZnVsbExvYWQnXG59O1xuXG5sZXQgbGFzdEZyYW1lVGltZSA9IG51bGw7XG5sZXQgZnJhbWVUaW1lcyA9IFtdO1xuXG5jb25zdCBtaW5GcmFtZXJhdGVUYXJnZXQgPSAzMDtcbmNvbnN0IGZyYW1lVGltZVRhcmdldCA9IDEwMDAgLyBtaW5GcmFtZXJhdGVUYXJnZXQ7XG5cbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVV0aWxzID0ge1xuICAgIG1hcmsobWFya2VyOiAkS2V5czx0eXBlb2YgUGVyZm9ybWFuY2VNYXJrZXJzPikge1xuICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKG1hcmtlcik7XG4gICAgfSxcbiAgICBmcmFtZSh0aW1lc3RhbXA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjdXJyVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgICAgICBpZiAobGFzdEZyYW1lVGltZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZVRpbWUgPSBjdXJyVGltZXN0YW1wIC0gbGFzdEZyYW1lVGltZTtcbiAgICAgICAgICAgIGZyYW1lVGltZXMucHVzaChmcmFtZVRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RGcmFtZVRpbWUgPSBjdXJyVGltZXN0YW1wO1xuICAgIH0sXG4gICAgY2xlYXJNZXRyaWNzKCkge1xuICAgICAgICBsYXN0RnJhbWVUaW1lID0gbnVsbDtcbiAgICAgICAgZnJhbWVUaW1lcyA9IFtdO1xuICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKCdsb2FkVGltZScpO1xuICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKCdmdWxsTG9hZFRpbWUnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG1hcmtlciBpbiBQZXJmb3JtYW5jZU1hcmtlcnMpIHtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MoUGVyZm9ybWFuY2VNYXJrZXJzW21hcmtlcl0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRQZXJmb3JtYW5jZU1ldHJpY3MoKTogUGVyZm9ybWFuY2VNZXRyaWNzIHtcbiAgICAgICAgY29uc3QgbG9hZFRpbWUgPSBwZXJmb3JtYW5jZS5tZWFzdXJlKCdsb2FkVGltZScsIFBlcmZvcm1hbmNlTWFya2Vycy5jcmVhdGUsIFBlcmZvcm1hbmNlTWFya2Vycy5sb2FkKS5kdXJhdGlvbjtcbiAgICAgICAgY29uc3QgZnVsbExvYWRUaW1lID0gcGVyZm9ybWFuY2UubWVhc3VyZSgnZnVsbExvYWRUaW1lJywgUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSwgUGVyZm9ybWFuY2VNYXJrZXJzLmZ1bGxMb2FkKS5kdXJhdGlvbjtcbiAgICAgICAgY29uc3QgdG90YWxGcmFtZXMgPSBmcmFtZVRpbWVzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBhdmdGcmFtZVRpbWUgPSBmcmFtZVRpbWVzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApIC8gdG90YWxGcmFtZXMgLyAxMDAwO1xuICAgICAgICBjb25zdCBmcHMgPSAxIC8gYXZnRnJhbWVUaW1lO1xuXG4gICAgICAgIC8vIGNvdW50IGZyYW1lcyB0aGF0IG1pc3NlZCBvdXIgZnJhbWVyYXRlIHRhcmdldFxuICAgICAgICBjb25zdCBkcm9wcGVkRnJhbWVzID0gZnJhbWVUaW1lc1xuICAgICAgICAgICAgLmZpbHRlcigoZnJhbWVUaW1lKSA9PiBmcmFtZVRpbWUgPiBmcmFtZVRpbWVUYXJnZXQpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgKGN1cnIgLSAgZnJhbWVUaW1lVGFyZ2V0KSAvIGZyYW1lVGltZVRhcmdldDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICBjb25zdCBwZXJjZW50RHJvcHBlZEZyYW1lcyA9IChkcm9wcGVkRnJhbWVzIC8gKHRvdGFsRnJhbWVzICsgZHJvcHBlZEZyYW1lcykpICogMTAwO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2FkVGltZSxcbiAgICAgICAgICAgIGZ1bGxMb2FkVGltZSxcbiAgICAgICAgICAgIGZwcyxcbiAgICAgICAgICAgIHBlcmNlbnREcm9wcGVkRnJhbWVzXG4gICAgICAgIH07XG4gICAgfVxufTtcblxuLyoqXG4gKiBTYWZlIHdyYXBwZXIgZm9yIHRoZSBwZXJmb3JtYW5jZSByZXNvdXJjZSB0aW1pbmcgQVBJIGluIHdlYiB3b3JrZXJzIHdpdGggZ3JhY2VmdWwgZGVncmFkYXRpb25cbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3RQYXJhbWV0ZXJzfSByZXF1ZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUmVxdWVzdFBlcmZvcm1hbmNlIHtcbiAgICBfbWFya3M6IHtzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgbWVhc3VyZTogc3RyaW5nfTtcblxuICAgIGNvbnN0cnVjdG9yIChyZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl9tYXJrcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBbcmVxdWVzdC51cmwsICdzdGFydCddLmpvaW4oJyMnKSxcbiAgICAgICAgICAgIGVuZDogW3JlcXVlc3QudXJsLCAnZW5kJ10uam9pbignIycpLFxuICAgICAgICAgICAgbWVhc3VyZTogcmVxdWVzdC51cmwudG9TdHJpbmcoKVxuICAgICAgICB9O1xuXG4gICAgICAgIHBlcmZvcm1hbmNlLm1hcmsodGhpcy5fbWFya3Muc3RhcnQpO1xuICAgIH1cblxuICAgIGZpbmlzaCgpIHtcbiAgICAgICAgcGVyZm9ybWFuY2UubWFyayh0aGlzLl9tYXJrcy5lbmQpO1xuICAgICAgICBsZXQgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtcblxuICAgICAgICAvLyBmYWxsYmFjayBpZiB3ZWIgd29ya2VyIGltcGxlbWVudGF0aW9uIG9mIHBlcmYuZ2V0RW50cmllc0J5TmFtZSByZXR1cm5zIGVtcHR5XG4gICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5tZWFzdXJlKHRoaXMuX21hcmtzLm1lYXN1cmUsIHRoaXMuX21hcmtzLnN0YXJ0LCB0aGlzLl9tYXJrcy5lbmQpO1xuICAgICAgICAgICAgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtcblxuICAgICAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5zdGFydCk7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc291cmNlVGltaW5nRGF0YTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBlcmZvcm1hbmNlO1xuIiwiXG5pbXBvcnQgcmVmUHJvcGVydGllcyBmcm9tICcuL3V0aWwvcmVmX3Byb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwpXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBsZXQgc3RyID0gJ1snO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBvYmopIHtcbiAgICAgICAgICAgIHN0ciArPSBgJHtzdHJpbmdpZnkodmFsKX0sYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyfV1gO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLnNvcnQoKTtcblxuICAgIGxldCBzdHIgPSAneyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0ciArPSBgJHtKU09OLnN0cmluZ2lmeShrZXlzW2ldKX06JHtzdHJpbmdpZnkob2JqW2tleXNbaV1dKX0sYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cn19YDtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5KGxheWVyKSB7XG4gICAgbGV0IGtleSA9ICcnO1xuICAgIGZvciAoY29uc3QgayBvZiByZWZQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGtleSArPSBgLyR7c3RyaW5naWZ5KGxheWVyW2tdKX1gO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5TGF5b3V0O1xuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIGxheWVycywgcmV0dXJuIGFuIGFycmF5IG9mIGFycmF5cyBvZiBsYXllcnMgd2hlcmUgYWxsXG4gKiBsYXllcnMgaW4gZWFjaCBncm91cCBoYXZlIGlkZW50aWNhbCBsYXlvdXQtYWZmZWN0aW5nIHByb3BlcnRpZXMuIFRoZXNlXG4gKiBhcmUgdGhlIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGZvcm1lcmx5IHVzZWQgYnkgZXhwbGljaXQgYHJlZmAgbWVjaGFuaXNtXG4gKiBmb3IgbGF5ZXJzOiAndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ21pbnpvb20nLCAnbWF4em9vbScsXG4gKiAnZmlsdGVyJywgYW5kICdsYXlvdXQnLlxuICpcbiAqIFRoZSBpbnB1dCBpcyBub3QgbW9kaWZpZWQuIFRoZSBvdXRwdXQgbGF5ZXJzIGFyZSByZWZlcmVuY2VzIHRvIHRoZVxuICogaW5wdXQgbGF5ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PExheWVyPn0gbGF5ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW2NhY2hlZEtleXNdIC0gYW4gb2JqZWN0IHRvIGtlZXAgYWxyZWFkeSBjYWxjdWxhdGVkIGtleXMuXG4gKiBAcmV0dXJucyB7QXJyYXk8QXJyYXk8TGF5ZXI+Pn1cbiAqL1xuZnVuY3Rpb24gZ3JvdXBCeUxheW91dChsYXllcnMsIGNhY2hlZEtleXMpIHtcbiAgICBjb25zdCBncm91cHMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgayA9IChjYWNoZWRLZXlzICYmIGNhY2hlZEtleXNbbGF5ZXJzW2ldLmlkXSkgfHwgZ2V0S2V5KGxheWVyc1tpXSk7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgY2FjaGUgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgIGlmIChjYWNoZWRLZXlzKVxuICAgICAgICAgICAgY2FjaGVkS2V5c1tsYXllcnNbaV0uaWRdID0gaztcblxuICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHNba107XG4gICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW2tdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXAucHVzaChsYXllcnNbaV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrIGluIGdyb3Vwcykge1xuICAgICAgICByZXN1bHQucHVzaChncm91cHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCBjcmVhdGVTdHlsZUxheWVyIGZyb20gJy4vY3JlYXRlX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHt2YWx1ZXN9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgZmVhdHVyZUZpbHRlciBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCBncm91cEJ5TGF5b3V0IGZyb20gJy4uL3N0eWxlLXNwZWMvZ3JvdXBfYnlfbGF5b3V0JztcblxuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdzID0geyBbc3RyaW5nXTogTGF5ZXJTcGVjaWZpY2F0aW9uIH07XG5leHBvcnQgdHlwZSBGYW1pbHk8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4gPSBBcnJheTxMYXllcj47XG5cbmNsYXNzIFN0eWxlTGF5ZXJJbmRleCB7XG4gICAgZmFtaWxpZXNCeVNvdXJjZTogeyBbc291cmNlOiBzdHJpbmddOiB7IFtzb3VyY2VMYXllcjogc3RyaW5nXTogQXJyYXk8RmFtaWx5PCo+PiB9IH07XG4gICAga2V5Q2FjaGU6IHsgW3NvdXJjZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICBfbGF5ZXJDb25maWdzOiBMYXllckNvbmZpZ3M7XG4gICAgX2xheWVyczogeyBbc3RyaW5nXTogU3R5bGVMYXllciB9O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXJDb25maWdzOiA/QXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPikge1xuICAgICAgICB0aGlzLmtleUNhY2hlID0ge307XG4gICAgICAgIGlmIChsYXllckNvbmZpZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShsYXllckNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZShsYXllckNvbmZpZ3M6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4pIHtcbiAgICAgICAgdGhpcy5fbGF5ZXJDb25maWdzID0ge307XG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZShsYXllckNvbmZpZ3MsIFtdKTtcbiAgICB9XG5cbiAgICB1cGRhdGUobGF5ZXJDb25maWdzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWcgb2YgbGF5ZXJDb25maWdzKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXllckNvbmZpZ3NbbGF5ZXJDb25maWcuaWRdID0gbGF5ZXJDb25maWc7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyQ29uZmlnLmlkXSA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGxheWVyLmZpbHRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlDYWNoZVtsYXllckNvbmZpZy5pZF0pXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbbGF5ZXJDb25maWcuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmVtb3ZlZElkcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmFtaWxpZXNCeVNvdXJjZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlMYXlvdXQodmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksIHRoaXMua2V5Q2FjaGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWdzIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJzID0gbGF5ZXJDb25maWdzLm1hcCgobGF5ZXJDb25maWcpID0+IHRoaXMuX2xheWVyc1tsYXllckNvbmZpZy5pZF0pO1xuXG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1swXTtcbiAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlSWQgPSBsYXllci5zb3VyY2UgfHwgJyc7XG4gICAgICAgICAgICBsZXQgc291cmNlR3JvdXAgPSB0aGlzLmZhbWlsaWVzQnlTb3VyY2Vbc291cmNlSWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VHcm91cCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUdyb3VwID0gdGhpcy5mYW1pbGllc0J5U291cmNlW3NvdXJjZUlkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gbGF5ZXIuc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGxldCBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlTGF5ZXJGYW1pbGllcy5wdXNoKGxheWVycyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlTGF5ZXJJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtHbHlwaE1ldHJpY3MsIFN0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcblxuY29uc3QgcGFkZGluZyA9IDE7XG5cbmV4cG9ydCB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9uID0ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgbWV0cmljczogR2x5cGhNZXRyaWNzXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9ucyA9IHsgW3N0cmluZ106IHsgW251bWJlcl06IEdseXBoUG9zaXRpb24gfSB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdseXBoQXRsYXMge1xuICAgIGltYWdlOiBBbHBoYUltYWdlO1xuICAgIHBvc2l0aW9uczogR2x5cGhQb3NpdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFja3M6IHsgW3N0cmluZ106IHsgW251bWJlcl06ID9TdHlsZUdseXBoIH0gfSkge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gc3RhY2tzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBzdGFja3Nbc3RhY2tdO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tQb3NpdGlvbnMgPSBwb3NpdGlvbnNbc3RhY2tdID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjID0gZ2x5cGhzWytpZF07XG4gICAgICAgICAgICAgICAgaWYgKCFzcmMgfHwgc3JjLmJpdG1hcC53aWR0aCA9PT0gMCB8fCBzcmMuYml0bWFwLmhlaWdodCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBiaW4gPSB7XG4gICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHc6IHNyYy5iaXRtYXAud2lkdGggKyAyICogcGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgaDogc3JjLmJpdG1hcC5oZWlnaHQgKyAyICogcGFkZGluZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmlucy5wdXNoKGJpbik7XG4gICAgICAgICAgICAgICAgc3RhY2tQb3NpdGlvbnNbaWRdID0ge3JlY3Q6IGJpbiwgbWV0cmljczogc3JjLm1ldHJpY3N9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrIGluIHN0YWNrcykge1xuICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0gc3RhY2tzW3N0YWNrXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBnbHlwaHNbK2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNyYyB8fCBzcmMuYml0bWFwLndpZHRoID09PSAwIHx8IHNyYy5iaXRtYXAuaGVpZ2h0ID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW4gPSBwb3NpdGlvbnNbc3RhY2tdW2lkXS5yZWN0O1xuICAgICAgICAgICAgICAgIEFscGhhSW1hZ2UuY29weShzcmMuYml0bWFwLCBpbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogYmluLnggKyBwYWRkaW5nLCB5OiBiaW4ueSArIHBhZGRpbmd9LCBzcmMuYml0bWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBwb3NpdGlvbnM7XG4gICAgfVxufVxuXG5yZWdpc3RlcignR2x5cGhBdGxhcycsIEdseXBoQXRsYXMpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuXG5pbXBvcnQge3BlcmZvcm1TeW1ib2xMYXlvdXR9IGZyb20gJy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcbmltcG9ydCB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IERpY3Rpb25hcnlDb2RlciBmcm9tICcuLi91dGlsL2RpY3Rpb25hcnlfY29kZXInO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBMaW5lQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQge3dhcm5PbmNlLCBtYXBPYmplY3QsIHZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBJbWFnZUF0bGFzIGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgR2x5cGhBdGxhcyBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbmltcG9ydCB0eXBlIHtCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7UHJvbW90ZUlkU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFdvcmtlclRpbGUge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB1aWQ6IHN0cmluZztcbiAgICB6b29tOiBudW1iZXI7XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbjtcbiAgICBjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgcmV0dXJuRGVwZW5kZW5jaWVzOiBib29sZWFuO1xuXG4gICAgc3RhdHVzOiAncGFyc2luZycgfCAnZG9uZSc7XG4gICAgZGF0YTogVmVjdG9yVGlsZTtcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICBhYm9ydDogPygpID0+IHZvaWQ7XG4gICAgcmVsb2FkQ2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaztcbiAgICB2ZWN0b3JUaWxlOiBWZWN0b3JUaWxlO1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHBhcmFtcy50aWxlSUQub3ZlcnNjYWxlZFosIHBhcmFtcy50aWxlSUQud3JhcCwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueiwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueCwgcGFyYW1zLnRpbGVJRC5jYW5vbmljYWwueSk7XG4gICAgICAgIHRoaXMudWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgdGhpcy56b29tID0gcGFyYW1zLnpvb207XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBhcmFtcy5waXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gcGFyYW1zLnRpbGVTaXplO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHBhcmFtcy5zb3VyY2U7XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSB0aGlzLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtcbiAgICAgICAgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMgPSBwYXJhbXMuc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLmNvbGxlY3RSZXNvdXJjZVRpbWluZyA9ICEhcGFyYW1zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcbiAgICAgICAgdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPSAhIXBhcmFtcy5yZXR1cm5EZXBlbmRlbmNpZXM7XG4gICAgICAgIHRoaXMucHJvbW90ZUlkID0gcGFyYW1zLnByb21vdGVJZDtcbiAgICB9XG5cbiAgICBwYXJzZShkYXRhOiBWZWN0b3JUaWxlLCBsYXllckluZGV4OiBTdHlsZUxheWVySW5kZXgsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiwgYWN0b3I6IEFjdG9yLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gJ3BhcnNpbmcnO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuXG4gICAgICAgIHRoaXMuY29sbGlzaW9uQm94QXJyYXkgPSBuZXcgQ29sbGlzaW9uQm94QXJyYXkoKTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJDb2RlciA9IG5ldyBEaWN0aW9uYXJ5Q29kZXIoT2JqZWN0LmtleXMoZGF0YS5sYXllcnMpLnNvcnQoKSk7XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ID0gbmV3IEZlYXR1cmVJbmRleCh0aGlzLnRpbGVJRCwgdGhpcy5wcm9tb3RlSWQpO1xuICAgICAgICBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMgPSBbXTtcblxuICAgICAgICBjb25zdCBidWNrZXRzOiB7W3N0cmluZ106IEJ1Y2tldH0gPSB7fTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgaWNvbkRlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBwYXR0ZXJuRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIGdseXBoRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGxheWVyRmFtaWxpZXMgPSBsYXllckluZGV4LmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO1xuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUxheWVySWQgaW4gbGF5ZXJGYW1pbGllcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBkYXRhLmxheWVyc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNvdXJjZUxheWVyLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgVmVjdG9yIHRpbGUgc291cmNlIFwiJHt0aGlzLnNvdXJjZX1cIiBsYXllciBcIiR7c291cmNlTGF5ZXJJZH1cIiBgICtcbiAgICAgICAgICAgICAgICAgICAgYGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllckluZGV4ID0gc291cmNlTGF5ZXJDb2Rlci5lbmNvZGUoc291cmNlTGF5ZXJJZCk7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZUxheWVyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBzb3VyY2VMYXllci5mZWF0dXJlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGZlYXR1cmVJbmRleC5nZXRJZChmZWF0dXJlLCBzb3VyY2VMYXllcklkKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBmYW1pbHkgb2YgbGF5ZXJGYW1pbGllc1tzb3VyY2VMYXllcklkXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gZmFtaWx5WzBdO1xuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KGxheWVyLnNvdXJjZSA9PT0gdGhpcy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5taW56b29tICYmIHRoaXMuem9vbSA8IE1hdGguZmxvb3IobGF5ZXIubWluem9vbSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5tYXh6b29tICYmIHRoaXMuem9vbSA+PSBsYXllci5tYXh6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIudmlzaWJpbGl0eSA9PT0gJ25vbmUnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlTGF5ZXJzKGZhbWlseSwgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1tsYXllci5pZF0gPSBsYXllci5jcmVhdGVCdWNrZXQoe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBmYW1pbHksXG4gICAgICAgICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgcGl4ZWxSYXRpbzogdGhpcy5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogdGhpcy5vdmVyc2NhbGluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IHRoaXMuY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiB0aGlzLnNvdXJjZVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYnVja2V0LnBvcHVsYXRlKGZlYXR1cmVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMucHVzaChmYW1pbHkubWFwKChsKSA9PiBsLmlkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6ID9FcnJvcjtcbiAgICAgICAgbGV0IGdseXBoTWFwOiA/e1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX07XG4gICAgICAgIGxldCBpY29uTWFwOiA/e1tzdHJpbmddOiBTdHlsZUltYWdlfTtcbiAgICAgICAgbGV0IHBhdHRlcm5NYXA6ID97W3N0cmluZ106IFN0eWxlSW1hZ2V9O1xuXG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG1hcE9iamVjdChvcHRpb25zLmdseXBoRGVwZW5kZW5jaWVzLCAoZ2x5cGhzKSA9PiBPYmplY3Qua2V5cyhnbHlwaHMpLm1hcChOdW1iZXIpKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YWNrcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRHbHlwaHMnLCB7dWlkOiB0aGlzLnVpZCwgc3RhY2tzfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2x5cGhNYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGljb25zID0gT2JqZWN0LmtleXMob3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgaWYgKGljb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0SW1hZ2VzJywge2ljb25zLCBzb3VyY2U6IHRoaXMuc291cmNlLCB0aWxlSUQ6IHRoaXMudGlsZUlELCB0eXBlOiAnaWNvbnMnfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpY29uTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcyk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEltYWdlcycsIHtpY29uczogcGF0dGVybnMsIHNvdXJjZTogdGhpcy5zb3VyY2UsIHRpbGVJRDogdGhpcy50aWxlSUQsIHR5cGU6ICdwYXR0ZXJucyd9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm5NYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlUHJlcGFyZSgpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdseXBoTWFwICYmIGljb25NYXAgJiYgcGF0dGVybk1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoQXRsYXMgPSBuZXcgR2x5cGhBdGxhcyhnbHlwaE1hcCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VBdGxhcyA9IG5ldyBJbWFnZUF0bGFzKGljb25NYXAsIHBhdHRlcm5NYXApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYnVja2V0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlTGF5ZXJzKGJ1Y2tldC5sYXllcnMsIHRoaXMuem9vbSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0LCBnbHlwaE1hcCwgZ2x5cGhBdGxhcy5wb3NpdGlvbnMsIGljb25NYXAsIGltYWdlQXRsYXMuaWNvblBvc2l0aW9ucywgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5oYXNQYXR0ZXJuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVja2V0IGluc3RhbmNlb2YgTGluZUJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxCdWNrZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQgaW5zdGFuY2VvZiBGaWxsRXh0cnVzaW9uQnVja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoYnVja2V0LmxheWVycywgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmFkZEZlYXR1cmVzKG9wdGlvbnMsIGltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldHM6IHZhbHVlcyhidWNrZXRzKS5maWx0ZXIoYiA9PiAhYi5pc0VtcHR5KCkpLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiB0aGlzLmNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgICBnbHlwaEF0bGFzSW1hZ2U6IGdseXBoQXRsYXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlQXRsYXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlZCBmb3IgYmVuY2htYXJraW5nOlxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBnbHlwaE1hcCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGljb25NYXA6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gaWNvbk1hcCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGdseXBoQXRsYXMucG9zaXRpb25zIDogbnVsbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWNhbGN1bGF0ZUxheWVycyhsYXllcnM6ICRSZWFkT25seUFycmF5PFN0eWxlTGF5ZXI+LCB6b29tOiBudW1iZXIsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgIC8vIExheWVycyBhcmUgc2hhcmVkIGFuZCBtYXkgaGF2ZSBiZWVuIHVzZWQgYnkgYSBXb3JrZXJUaWxlIHdpdGggYSBkaWZmZXJlbnQgem9vbS5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHpvb20pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXb3JrZXJUaWxlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRBcnJheUJ1ZmZlcn0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IHZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuaW1wb3J0IFByb3RvYnVmIGZyb20gJ3BiZic7XG5pbXBvcnQgV29ya2VyVGlsZSBmcm9tICcuL3dvcmtlcl90aWxlJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtSZXF1ZXN0UGVyZm9ybWFuY2V9IGZyb20gJy4uL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyU291cmNlLFxuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG5leHBvcnQgdHlwZSBMb2FkVmVjdG9yVGlsZVJlc3VsdCA9IHtcbiAgICB2ZWN0b3JUaWxlOiBWZWN0b3JUaWxlO1xuICAgIHJhd0RhdGE6IEFycmF5QnVmZmVyO1xuICAgIGV4cGlyZXM/OiBhbnk7XG4gICAgY2FjaGVDb250cm9sPzogYW55O1xuICAgIHJlc291cmNlVGltaW5nPzogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrXG4gKiBAcGFyYW0gZXJyb3JcbiAqIEBwYXJhbSB2ZWN0b3JUaWxlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrID0gQ2FsbGJhY2s8P0xvYWRWZWN0b3JUaWxlUmVzdWx0PjtcblxuZXhwb3J0IHR5cGUgQWJvcnRWZWN0b3JEYXRhID0gKCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JEYXRhID0gKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrKSA9PiA/QWJvcnRWZWN0b3JEYXRhO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWRWZWN0b3JUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGdldEFycmF5QnVmZmVyKHBhcmFtcy5yZXF1ZXN0LCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlciwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgICAgICAgIHZlY3RvclRpbGU6IG5ldyB2dC5WZWN0b3JUaWxlKG5ldyBQcm90b2J1ZihkYXRhKSksXG4gICAgICAgICAgICAgICAgcmF3RGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBjYWNoZUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgZXhwaXJlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG59XG5cbi8qKlxuICogVGhlIHtAbGluayBXb3JrZXJTb3VyY2V9IGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMge0BsaW5rIFZlY3RvclRpbGVTb3VyY2V9LlxuICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSBlYXNpbHkgcmV1c2VkIHRvIHN1cHBvcnQgY3VzdG9tIHNvdXJjZSB0eXBlc1xuICogZm9yIGRhdGEgZm9ybWF0cyB0aGF0IGNhbiBiZSBwYXJzZWQvY29udmVydGVkIGludG8gYW4gaW4tbWVtb3J5IFZlY3RvclRpbGVcbiAqIHJlcHJlc2VudGF0aW9uLiAgVG8gZG8gc28sIGNyZWF0ZSBpdCB3aXRoXG4gKiBgbmV3IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UoYWN0b3IsIHN0eWxlTGF5ZXJzLCBjdXN0b21Mb2FkVmVjdG9yRGF0YUZ1bmN0aW9uKWAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSBpbXBsZW1lbnRzIFdvcmtlclNvdXJjZSB7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleDtcbiAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz47XG4gICAgbG9hZFZlY3RvckRhdGE6IExvYWRWZWN0b3JEYXRhO1xuICAgIGxvYWRpbmc6IHsgW3N0cmluZ106IFdvcmtlclRpbGUgfTtcbiAgICBsb2FkZWQ6IHsgW3N0cmluZ106IFdvcmtlclRpbGUgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBbbG9hZFZlY3RvckRhdGFdIE9wdGlvbmFsIG1ldGhvZCBmb3IgY3VzdG9tIGxvYWRpbmcgb2YgYSBWZWN0b3JUaWxlXG4gICAgICogb2JqZWN0IGJhc2VkIG9uIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gdGhlIG1haW4tdGhyZWFkIFNvdXJjZS4gU2VlXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHlcbiAgICAgKiBsb2FkcyB0aGUgcGJmIGF0IGBwYXJhbXMudXJsYC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkVmVjdG9yRGF0YTogP0xvYWRWZWN0b3JEYXRhKSB7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBhY3RvcjtcbiAgICAgICAgdGhpcy5sYXllckluZGV4ID0gbGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSBhdmFpbGFibGVJbWFnZXM7XG4gICAgICAgIHRoaXMubG9hZFZlY3RvckRhdGEgPSBsb2FkVmVjdG9yRGF0YSB8fCBsb2FkVmVjdG9yVGlsZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI2xvYWRUaWxlfS4gRGVsZWdhdGVzIHRvXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFZlY3RvckRhdGF9ICh3aGljaCBieSBkZWZhdWx0IGV4cGVjdHNcbiAgICAgKiBhIGBwYXJhbXMudXJsYCBwcm9wZXJ0eSkgZm9yIGZldGNoaW5nIGFuZCBwcm9kdWNpbmcgYSBWZWN0b3JUaWxlIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHVpZCA9IHBhcmFtcy51aWQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBSZXF1ZXN0UGVyZm9ybWFuY2UocGFyYW1zLnJlcXVlc3QpIDogZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgd29ya2VyVGlsZSA9IHRoaXMubG9hZGluZ1t1aWRdID0gbmV3IFdvcmtlclRpbGUocGFyYW1zKTtcbiAgICAgICAgd29ya2VyVGlsZS5hYm9ydCA9IHRoaXMubG9hZFZlY3RvckRhdGEocGFyYW1zLCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9hZGluZ1t1aWRdO1xuXG4gICAgICAgICAgICBpZiAoZXJyIHx8ICFyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHdvcmtlclRpbGUuc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSB3b3JrZXJUaWxlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYXdUaWxlRGF0YSA9IHJlc3BvbnNlLnJhd0RhdGE7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSB7fTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5leHBpcmVzKSBjYWNoZUNvbnRyb2wuZXhwaXJlcyA9IHJlc3BvbnNlLmV4cGlyZXM7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sKSBjYWNoZUNvbnRyb2wuY2FjaGVDb250cm9sID0gcmVzcG9uc2UuY2FjaGVDb250cm9sO1xuXG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZyA9IHt9O1xuICAgICAgICAgICAgaWYgKHBlcmYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGV2YWwgdGhlIHJlc3VsdCBvZiBnZXRFbnRyaWVzQnlOYW1lKCkgaGVyZSB2aWEgcGFyc2Uvc3RyaW5naWZ5XG4gICAgICAgICAgICAgICAgLy8gbGF0ZSBldmFsdWF0aW9uIGluIHRoZSBtYWluIHRocmVhZCBjYXVzZXMgVHlwZUVycm9yOiBpbGxlZ2FsIGludm9jYXRpb25cbiAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhKVxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVRpbWluZy5yZXNvdXJjZVRpbWluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VUaW1pbmdEYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtlclRpbGUudmVjdG9yVGlsZSA9IHJlc3BvbnNlLnZlY3RvclRpbGU7XG4gICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHJlc3BvbnNlLnZlY3RvclRpbGUsIHRoaXMubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHRoaXMuYWN0b3IsIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIXJlc3VsdCkgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2ZlcnJpbmcgYSBjb3B5IG9mIHJhd1RpbGVEYXRhIGJlY2F1c2UgdGhlIHdvcmtlciBuZWVkcyB0byByZXRhaW4gaXRzIGNvcHkuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZXh0ZW5kKHtyYXdUaWxlRGF0YTogcmF3VGlsZURhdGEuc2xpY2UoMCl9LCByZXN1bHQsIGNhY2hlQ29udHJvbCwgcmVzb3VyY2VUaW1pbmcpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRoaXMubG9hZGVkIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IHdvcmtlclRpbGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZWxvYWRUaWxlfS5cbiAgICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkLFxuICAgICAgICAgICAgdnRTb3VyY2UgPSB0aGlzO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXJUaWxlID0gbG9hZGVkW3VpZF07XG4gICAgICAgICAgICB3b3JrZXJUaWxlLnNob3dDb2xsaXNpb25Cb3hlcyA9IHBhcmFtcy5zaG93Q29sbGlzaW9uQm94ZXM7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsb2FkQ2FsbGJhY2sgPSB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGlmIChyZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd29ya2VyVGlsZS5yZWxvYWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHZ0U291cmNlLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB2dFNvdXJjZS5hY3RvciwgcmVsb2FkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHdvcmtlclRpbGUuc3RhdHVzID09PSAncGFyc2luZycpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrID0gZG9uZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29ya2VyVGlsZS5zdGF0dXMgPT09ICdkb25lJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBubyB2ZWN0b3IgdGlsZSBkYXRhIG9uIHRoZSBpbml0aWFsIGxvYWQsIGRvbid0IHRyeSBhbmQgcmUtcGFyc2UgdGlsZVxuICAgICAgICAgICAgICAgIGlmICh3b3JrZXJUaWxlLnZlY3RvclRpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHRoaXMubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHRoaXMuYWN0b3IsIGRvbmUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjYWJvcnRUaWxlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgICovXG4gICAgYWJvcnRUaWxlKHBhcmFtczogVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIGlmIChsb2FkaW5nICYmIGxvYWRpbmdbdWlkXSAmJiBsb2FkaW5nW3VpZF0uYWJvcnQpIHtcbiAgICAgICAgICAgIGxvYWRpbmdbdWlkXS5hYm9ydCgpO1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRpbmdbdWlkXTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZW1vdmVUaWxlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgICovXG4gICAgcmVtb3ZlVGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRlZFt1aWRdO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JUaWxlV29ya2VyU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERFTURhdGEgZnJvbSAnLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4vd29ya2VyX3NvdXJjZSc7XG5jb25zdCB7SW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5jbGFzcyBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIHtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbG9hZGVkOiB7W3N0cmluZ106IERFTURhdGF9O1xuICAgIG9mZnNjcmVlbkNhbnZhczogT2Zmc2NyZWVuQ2FudmFzO1xuICAgIG9mZnNjcmVlbkNhbnZhc0NvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxvYWRlZCA9IHt9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHBhcmFtczogV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJERU1UaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qge3VpZCwgZW5jb2RpbmcsIHJhd0ltYWdlRGF0YX0gPSBwYXJhbXM7XG4gICAgICAgIC8vIE1haW4gdGhyZWFkIHdpbGwgdHJhbnNmZXIgSW1hZ2VCaXRtYXAgaWYgb2Zmc2NyZWVuIGRlY29kZSB3aXRoIE9mZnNjcmVlbkNhbnZhcyBpcyBzdXBwb3J0ZWQsIGVsc2UgaXQgd2lsbCB0cmFuc2ZlciBhbiBhbHJlYWR5IGRlY29kZWQgaW1hZ2UuXG4gICAgICAgIGNvbnN0IGltYWdlUGl4ZWxzID0gKEltYWdlQml0bWFwICYmIHJhd0ltYWdlRGF0YSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSA/IHRoaXMuZ2V0SW1hZ2VEYXRhKHJhd0ltYWdlRGF0YSkgOiByYXdJbWFnZURhdGE7XG4gICAgICAgIGNvbnN0IGRlbSA9IG5ldyBERU1EYXRhKHVpZCwgaW1hZ2VQaXhlbHMsIGVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IGRlbTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVtKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZURhdGEoaW1nQml0bWFwOiBJbWFnZUJpdG1hcCk6IFJHQkFJbWFnZSB7XG4gICAgICAgIC8vIExhemlseSBpbml0aWFsaXplIE9mZnNjcmVlbkNhbnZhc1xuICAgICAgICBpZiAoIXRoaXMub2Zmc2NyZWVuQ2FudmFzIHx8ICF0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIERlbSB0aWxlcyBhcmUgdHlwaWNhbGx5IDI1NngyNTZcbiAgICAgICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhpbWdCaXRtYXAud2lkdGgsIGltZ0JpdG1hcC5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0ID0gdGhpcy5vZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzLndpZHRoID0gaW1nQml0bWFwLndpZHRoO1xuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQgPSBpbWdCaXRtYXAuaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoaW1nQml0bWFwLCAwLCAwLCBpbWdCaXRtYXAud2lkdGgsIGltZ0JpdG1hcC5oZWlnaHQpO1xuICAgICAgICAvLyBJbnNlcnQgYW4gYWRkaXRpb25hbCAxcHggcGFkZGluZyBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IGJhY2tmaWxsaW5nIGZvciBuZWlnaGJvcmluZyBkYXRhLlxuICAgICAgICBjb25zdCBpbWdEYXRhID0gdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgtMSwgLTEsIGltZ0JpdG1hcC53aWR0aCArIDIsIGltZ0JpdG1hcC5oZWlnaHQgKyAyKTtcbiAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCwgdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiBpbWdEYXRhLndpZHRoLCBoZWlnaHQ6IGltZ0RhdGEuaGVpZ2h0fSwgaW1nRGF0YS5kYXRhKTtcbiAgICB9XG5cbiAgICByZW1vdmVUaWxlKHBhcmFtczogVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkW3VpZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2U7XG4iLCJtb2R1bGUuZXhwb3J0cy5SQURJVVMgPSA2Mzc4MTM3O1xubW9kdWxlLmV4cG9ydHMuRkxBVFRFTklORyA9IDEvMjk4LjI1NzIyMzU2Mztcbm1vZHVsZS5leHBvcnRzLlBPTEFSX1JBRElVUyA9IDYzNTY3NTIuMzE0MjtcbiIsInZhciB3Z3M4NCA9IHJlcXVpcmUoJ3dnczg0Jyk7XG5cbm1vZHVsZS5leHBvcnRzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5tb2R1bGUuZXhwb3J0cy5yaW5nID0gcmluZ0FyZWE7XG5cbmZ1bmN0aW9uIGdlb21ldHJ5KF8pIHtcbiAgICB2YXIgYXJlYSA9IDAsIGk7XG4gICAgc3dpdGNoIChfLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICByZXR1cm4gcG9seWdvbkFyZWEoXy5jb29yZGluYXRlcyk7XG4gICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgXy5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFyZWEgKz0gcG9seWdvbkFyZWEoXy5jb29yZGluYXRlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJlYTtcbiAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfLmdlb21ldHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcmVhICs9IGdlb21ldHJ5KF8uZ2VvbWV0cmllc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJlYTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25BcmVhKGNvb3Jkcykge1xuICAgIHZhciBhcmVhID0gMDtcbiAgICBpZiAoY29vcmRzICYmIGNvb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZWEgKz0gTWF0aC5hYnMocmluZ0FyZWEoY29vcmRzWzBdKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmVhIC09IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1tpXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmVhO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgYXJlYSBvZiB0aGUgcG9seWdvbiB3ZXJlIGl0IHByb2plY3RlZCBvbnRvXG4gKiAgICAgdGhlIGVhcnRoLiAgTm90ZSB0aGF0IHRoaXMgYXJlYSB3aWxsIGJlIHBvc2l0aXZlIGlmIHJpbmcgaXMgb3JpZW50ZWRcbiAqICAgICBjbG9ja3dpc2UsIG90aGVyd2lzZSBpdCB3aWxsIGJlIG5lZ2F0aXZlLlxuICpcbiAqIFJlZmVyZW5jZTpcbiAqIFJvYmVydC4gRy4gQ2hhbWJlcmxhaW4gYW5kIFdpbGxpYW0gSC4gRHVxdWV0dGUsIFwiU29tZSBBbGdvcml0aG1zIGZvclxuICogICAgIFBvbHlnb25zIG9uIGEgU3BoZXJlXCIsIEpQTCBQdWJsaWNhdGlvbiAwNy0wMywgSmV0IFByb3B1bHNpb25cbiAqICAgICBMYWJvcmF0b3J5LCBQYXNhZGVuYSwgQ0EsIEp1bmUgMjAwNyBodHRwOi8vdHJzLW5ldy5qcGwubmFzYS5nb3YvZHNwYWNlL2hhbmRsZS8yMDE0LzQwNDA5XG4gKlxuICogUmV0dXJuczpcbiAqIHtmbG9hdH0gVGhlIGFwcHJveGltYXRlIHNpZ25lZCBnZW9kZXNpYyBhcmVhIG9mIHRoZSBwb2x5Z29uIGluIHNxdWFyZVxuICogICAgIG1ldGVycy5cbiAqL1xuXG5mdW5jdGlvbiByaW5nQXJlYShjb29yZHMpIHtcbiAgICB2YXIgcDEsIHAyLCBwMywgbG93ZXJJbmRleCwgbWlkZGxlSW5kZXgsIHVwcGVySW5kZXgsIGksXG4gICAgYXJlYSA9IDAsXG4gICAgY29vcmRzTGVuZ3RoID0gY29vcmRzLmxlbmd0aDtcblxuICAgIGlmIChjb29yZHNMZW5ndGggPiAyKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDIpIHsvLyBpID0gTi0yXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBjb29yZHNMZW5ndGggLTE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDEpIHsvLyBpID0gTi0xXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gaSA9IDAgdG8gTi0zXG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBpKzE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IGkrMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAxID0gY29vcmRzW2xvd2VySW5kZXhdO1xuICAgICAgICAgICAgcDIgPSBjb29yZHNbbWlkZGxlSW5kZXhdO1xuICAgICAgICAgICAgcDMgPSBjb29yZHNbdXBwZXJJbmRleF07XG4gICAgICAgICAgICBhcmVhICs9ICggcmFkKHAzWzBdKSAtIHJhZChwMVswXSkgKSAqIE1hdGguc2luKCByYWQocDJbMV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZWEgPSBhcmVhICogd2dzODQuUkFESVVTICogd2dzODQuUkFESVVTIC8gMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJlYTtcbn1cblxuZnVuY3Rpb24gcmFkKF8pIHtcbiAgICByZXR1cm4gXyAqIE1hdGguUEkgLyAxODA7XG59IiwidmFyIGdlb2pzb25BcmVhID0gcmVxdWlyZSgnQG1hcGJveC9nZW9qc29uLWFyZWEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXdpbmQ7XG5cbmZ1bmN0aW9uIHJld2luZChnaiwgb3V0ZXIpIHtcbiAgICBzd2l0Y2ggKChnaiAmJiBnai50eXBlKSB8fCBudWxsKSB7XG4gICAgICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGdqLmZlYXR1cmVzID0gZ2ouZmVhdHVyZXMubWFwKGN1cnJ5T3V0ZXIocmV3aW5kLCBvdXRlcikpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgZ2ouZ2VvbWV0cmllcyA9IGdqLmdlb21ldHJpZXMubWFwKGN1cnJ5T3V0ZXIocmV3aW5kLCBvdXRlcikpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgICAgIGdqLmdlb21ldHJ5ID0gcmV3aW5kKGdqLmdlb21ldHJ5LCBvdXRlcik7XG4gICAgICAgICAgICByZXR1cm4gZ2o7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3QoZ2osIG91dGVyKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGN1cnJ5T3V0ZXIoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbihfKSB7IHJldHVybiBhKF8sIGIpOyB9O1xufVxuXG5mdW5jdGlvbiBjb3JyZWN0KF8sIG91dGVyKSB7XG4gICAgaWYgKF8udHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIF8uY29vcmRpbmF0ZXMgPSBjb3JyZWN0UmluZ3MoXy5jb29yZGluYXRlcywgb3V0ZXIpO1xuICAgIH0gZWxzZSBpZiAoXy50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBfLmNvb3JkaW5hdGVzID0gXy5jb29yZGluYXRlcy5tYXAoY3VycnlPdXRlcihjb3JyZWN0UmluZ3MsIG91dGVyKSk7XG4gICAgfVxuICAgIHJldHVybiBfO1xufVxuXG5mdW5jdGlvbiBjb3JyZWN0UmluZ3MoXywgb3V0ZXIpIHtcbiAgICBvdXRlciA9ICEhb3V0ZXI7XG4gICAgX1swXSA9IHdpbmQoX1swXSwgb3V0ZXIpO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgXy5sZW5ndGg7IGkrKykge1xuICAgICAgICBfW2ldID0gd2luZChfW2ldLCAhb3V0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gXztcbn1cblxuZnVuY3Rpb24gd2luZChfLCBkaXIpIHtcbiAgICByZXR1cm4gY3coXykgPT09IGRpciA/IF8gOiBfLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gY3coXykge1xuICAgIHJldHVybiBnZW9qc29uQXJlYS5yaW5nKF8pID49IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB0b0dlb0pTT04gPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTjtcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuXG4vLyBUaGUgZmVhdHVyZSB0eXBlIHVzZWQgYnkgZ2VvanNvbi12dCBhbmQgc3VwZXJjbHVzdGVyLiBTaG91bGQgYmUgZXh0cmFjdGVkIHRvXG4vLyBnbG9iYWwgdHlwZSBhbmQgdXNlZCBpbiBtb2R1bGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlIHR3byBtb2R1bGVzLlxudHlwZSBGZWF0dXJlID0ge1xuICAgIHR5cGU6IDEsXG4gICAgaWQ6IG1peGVkLFxuICAgIHRhZ3M6IHtbc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0sXG4gICAgZ2VvbWV0cnk6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxufSB8IHtcbiAgICB0eXBlOiAyIHwgMyxcbiAgICBpZDogbWl4ZWQsXG4gICAgdGFnczoge1tzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufSxcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8W251bWJlciwgbnVtYmVyXT4+LFxufVxuXG5jbGFzcyBGZWF0dXJlV3JhcHBlciBpbXBsZW1lbnRzIFZlY3RvclRpbGVGZWF0dXJlIHtcbiAgICBfZmVhdHVyZTogRmVhdHVyZTtcblxuICAgIGV4dGVudDogbnVtYmVyO1xuICAgIHR5cGU6IDEgfCAyIHwgMztcbiAgICBpZDogbnVtYmVyO1xuICAgIHByb3BlcnRpZXM6IHtbc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07XG5cbiAgICBjb25zdHJ1Y3RvcihmZWF0dXJlOiBGZWF0dXJlKSB7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmUgPSBmZWF0dXJlO1xuXG4gICAgICAgIHRoaXMuZXh0ZW50ID0gRVhURU5UO1xuICAgICAgICB0aGlzLnR5cGUgPSBmZWF0dXJlLnR5cGU7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IGZlYXR1cmUudGFncztcblxuICAgICAgICAvLyBJZiB0aGUgZmVhdHVyZSBoYXMgYSB0b3AtbGV2ZWwgYGlkYCBwcm9wZXJ0eSwgY29weSBpdCBvdmVyLCBidXQgb25seVxuICAgICAgICAvLyBpZiBpdCBjYW4gYmUgY29lcmNlZCB0byBhbiBpbnRlZ2VyLCBiZWNhdXNlIHRoaXMgd3JhcHBlciBpcyB1c2VkIGZvclxuICAgICAgICAvLyBzZXJpYWxpemluZyBnZW9qc29uIGZlYXR1cmUgZGF0YSBpbnRvIHZlY3RvciB0aWxlIFBCRiBkYXRhLCBhbmQgdGhlXG4gICAgICAgIC8vIHZlY3RvciB0aWxlIHNwZWMgb25seSBzdXBwb3J0cyBpbnRlZ2VyIHZhbHVlcyBmb3IgZmVhdHVyZSBpZHMgLS1cbiAgICAgICAgLy8gYWxsb3dpbmcgbm9uLWludGVnZXIgdmFsdWVzIGhlcmUgcmVzdWx0cyBpbiBhIG5vbi1jb21wbGlhbnQgUEJGXG4gICAgICAgIC8vIHRoYXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGlzIHBhcnNlZCB3aXRoIHZlY3Rvci10aWxlLWpzXG4gICAgICAgIGlmICgnaWQnIGluIGZlYXR1cmUgJiYgIWlzTmFOKGZlYXR1cmUuaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gcGFyc2VJbnQoZmVhdHVyZS5pZCwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEdlb21ldHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fZmVhdHVyZS50eXBlID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB0aGlzLl9mZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChbbmV3IFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgdGhpcy5fZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChwb2ludFswXSwgcG9pbnRbMV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChuZXdSaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvR2VvSlNPTih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0b0dlb0pTT04uY2FsbCh0aGlzLCB4LCB5LCB6KTtcbiAgICB9XG59XG5cbmNsYXNzIEdlb0pTT05XcmFwcGVyIGltcGxlbWVudHMgVmVjdG9yVGlsZSwgVmVjdG9yVGlsZUxheWVyIHtcbiAgICBsYXllcnM6IHtbc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZXh0ZW50OiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgX2ZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPjtcblxuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPikge1xuICAgICAgICB0aGlzLmxheWVycyA9IHsnX2dlb2pzb25UaWxlTGF5ZXInOiB0aGlzfTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5leHRlbnQgPSBFWFRFTlQ7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZlYXR1cmUoaTogbnVtYmVyKTogVmVjdG9yVGlsZUZlYXR1cmUge1xuICAgICAgICByZXR1cm4gbmV3IEZlYXR1cmVXcmFwcGVyKHRoaXMuX2ZlYXR1cmVzW2ldKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05XcmFwcGVyO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknKVxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnQG1hcGJveC92ZWN0b3ItdGlsZScpLlZlY3RvclRpbGVGZWF0dXJlXG5cbm1vZHVsZS5leHBvcnRzID0gR2VvSlNPTldyYXBwZXJcblxuLy8gY29uZm9ybSB0byB2ZWN0b3J0aWxlIGFwaVxuZnVuY3Rpb24gR2VvSlNPTldyYXBwZXIgKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzXG4gIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoXG59XG5cbkdlb0pTT05XcmFwcGVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLmZlYXR1cmVzW2ldLCB0aGlzLm9wdGlvbnMuZXh0ZW50KVxufVxuXG5mdW5jdGlvbiBGZWF0dXJlV3JhcHBlciAoZmVhdHVyZSwgZXh0ZW50KSB7XG4gIHRoaXMuaWQgPSB0eXBlb2YgZmVhdHVyZS5pZCA9PT0gJ251bWJlcicgPyBmZWF0dXJlLmlkIDogdW5kZWZpbmVkXG4gIHRoaXMudHlwZSA9IGZlYXR1cmUudHlwZVxuICB0aGlzLnJhd0dlb21ldHJ5ID0gZmVhdHVyZS50eXBlID09PSAxID8gW2ZlYXR1cmUuZ2VvbWV0cnldIDogZmVhdHVyZS5nZW9tZXRyeVxuICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3NcbiAgdGhpcy5leHRlbnQgPSBleHRlbnQgfHwgNDA5NlxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmluZ3MgPSB0aGlzLnJhd0dlb21ldHJ5XG4gIHRoaXMuZ2VvbWV0cnkgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG4gICAgdmFyIG5ld1JpbmcgPSBbXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChyaW5nW2pdWzBdLCByaW5nW2pdWzFdKSlcbiAgICB9XG4gICAgdGhpcy5nZW9tZXRyeS5wdXNoKG5ld1JpbmcpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZ2VvbWV0cnlcbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5nZW9tZXRyeSkgdGhpcy5sb2FkR2VvbWV0cnkoKVxuXG4gIHZhciByaW5ncyA9IHRoaXMuZ2VvbWV0cnlcbiAgdmFyIHgxID0gSW5maW5pdHlcbiAgdmFyIHgyID0gLUluZmluaXR5XG4gIHZhciB5MSA9IEluZmluaXR5XG4gIHZhciB5MiA9IC1JbmZpbml0eVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjb29yZCA9IHJpbmdbal1cblxuICAgICAgeDEgPSBNYXRoLm1pbih4MSwgY29vcmQueClcbiAgICAgIHgyID0gTWF0aC5tYXgoeDIsIGNvb3JkLngpXG4gICAgICB5MSA9IE1hdGgubWluKHkxLCBjb29yZC55KVxuICAgICAgeTIgPSBNYXRoLm1heCh5MiwgY29vcmQueSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXVxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUudG9HZW9KU09OID0gVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTlxuIiwidmFyIFBiZiA9IHJlcXVpcmUoJ3BiZicpXG52YXIgR2VvSlNPTldyYXBwZXIgPSByZXF1aXJlKCcuL2xpYi9nZW9qc29uX3dyYXBwZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21WZWN0b3JUaWxlSnNcbm1vZHVsZS5leHBvcnRzLmZyb21WZWN0b3JUaWxlSnMgPSBmcm9tVmVjdG9yVGlsZUpzXG5tb2R1bGUuZXhwb3J0cy5mcm9tR2VvanNvblZ0ID0gZnJvbUdlb2pzb25WdFxubW9kdWxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXIgPSBHZW9KU09OV3JhcHBlclxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZlY3Rvci10aWxlLWpzLWNyZWF0ZWQgdGlsZSB0byBwYmZcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlsZVxuICogQHJldHVybiB7QnVmZmVyfSB1bmNvbXByZXNzZWQsIHBiZi1zZXJpYWxpemVkIHRpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBmcm9tVmVjdG9yVGlsZUpzICh0aWxlKSB7XG4gIHZhciBvdXQgPSBuZXcgUGJmKClcbiAgd3JpdGVUaWxlKHRpbGUsIG91dClcbiAgcmV0dXJuIG91dC5maW5pc2goKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZWQgYSBnZW9qc29uLXZ0LWNyZWF0ZWQgdGlsZSB0byBwYmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCBtYXBwaW5nIGxheWVyIG5hbWVzIHRvIGdlb2pzb24tdnQtY3JlYXRlZCB2ZWN0b3IgdGlsZSBvYmplY3RzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIHZlY3Rvci10aWxlIHNwZWNpZmljYXRpb24gdmVyc2lvbiBhbmQgZXh0ZW50IHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSBgbGF5ZXJzYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy52ZXJzaW9uPTFdIC0gVmVyc2lvbiBvZiB2ZWN0b3ItdGlsZSBzcGVjIHVzZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5leHRlbnQ9NDA5Nl0gLSBFeHRlbnQgb2YgdGhlIHZlY3RvciB0aWxlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHVuY29tcHJlc3NlZCwgcGJmLXNlcmlhbGl6ZWQgdGlsZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGZyb21HZW9qc29uVnQgKGxheWVycywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgbCA9IHt9XG4gIGZvciAodmFyIGsgaW4gbGF5ZXJzKSB7XG4gICAgbFtrXSA9IG5ldyBHZW9KU09OV3JhcHBlcihsYXllcnNba10uZmVhdHVyZXMsIG9wdGlvbnMpXG4gICAgbFtrXS5uYW1lID0ga1xuICAgIGxba10udmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvblxuICAgIGxba10uZXh0ZW50ID0gb3B0aW9ucy5leHRlbnRcbiAgfVxuICByZXR1cm4gZnJvbVZlY3RvclRpbGVKcyh7bGF5ZXJzOiBsfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVUaWxlICh0aWxlLCBwYmYpIHtcbiAgZm9yICh2YXIga2V5IGluIHRpbGUubGF5ZXJzKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSgzLCB3cml0ZUxheWVyLCB0aWxlLmxheWVyc1trZXldKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlTGF5ZXIgKGxheWVyLCBwYmYpIHtcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoMTUsIGxheWVyLnZlcnNpb24gfHwgMSlcbiAgcGJmLndyaXRlU3RyaW5nRmllbGQoMSwgbGF5ZXIubmFtZSB8fCAnJylcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoNSwgbGF5ZXIuZXh0ZW50IHx8IDQwOTYpXG5cbiAgdmFyIGlcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAga2V5czogW10sXG4gICAgdmFsdWVzOiBbXSxcbiAgICBrZXljYWNoZToge30sXG4gICAgdmFsdWVjYWNoZToge31cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnRleHQuZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSlcbiAgICBwYmYud3JpdGVNZXNzYWdlKDIsIHdyaXRlRmVhdHVyZSwgY29udGV4dClcbiAgfVxuXG4gIHZhciBrZXlzID0gY29udGV4dC5rZXlzXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlU3RyaW5nRmllbGQoMywga2V5c1tpXSlcbiAgfVxuXG4gIHZhciB2YWx1ZXMgPSBjb250ZXh0LnZhbHVlc1xuICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSg0LCB3cml0ZVZhbHVlLCB2YWx1ZXNbaV0pXG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGZWF0dXJlIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcblxuICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGJmLndyaXRlVmFyaW50RmllbGQoMSwgZmVhdHVyZS5pZClcbiAgfVxuXG4gIHBiZi53cml0ZU1lc3NhZ2UoMiwgd3JpdGVQcm9wZXJ0aWVzLCBjb250ZXh0KVxuICBwYmYud3JpdGVWYXJpbnRGaWVsZCgzLCBmZWF0dXJlLnR5cGUpXG4gIHBiZi53cml0ZU1lc3NhZ2UoNCwgd3JpdGVHZW9tZXRyeSwgZmVhdHVyZSlcbn1cblxuZnVuY3Rpb24gd3JpdGVQcm9wZXJ0aWVzIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcbiAgdmFyIGtleXMgPSBjb250ZXh0LmtleXNcbiAgdmFyIHZhbHVlcyA9IGNvbnRleHQudmFsdWVzXG4gIHZhciBrZXljYWNoZSA9IGNvbnRleHQua2V5Y2FjaGVcbiAgdmFyIHZhbHVlY2FjaGUgPSBjb250ZXh0LnZhbHVlY2FjaGVcblxuICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGtleUluZGV4ID0ga2V5Y2FjaGVba2V5XVxuICAgIGlmICh0eXBlb2Yga2V5SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KVxuICAgICAga2V5SW5kZXggPSBrZXlzLmxlbmd0aCAtIDFcbiAgICAgIGtleWNhY2hlW2tleV0gPSBrZXlJbmRleFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQoa2V5SW5kZXgpXG5cbiAgICB2YXIgdmFsdWUgPSBmZWF0dXJlLnByb3BlcnRpZXNba2V5XVxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9XG4gICAgdmFyIHZhbHVlS2V5ID0gdHlwZSArICc6JyArIHZhbHVlXG4gICAgdmFyIHZhbHVlSW5kZXggPSB2YWx1ZWNhY2hlW3ZhbHVlS2V5XVxuICAgIGlmICh0eXBlb2YgdmFsdWVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgdmFsdWVJbmRleCA9IHZhbHVlcy5sZW5ndGggLSAxXG4gICAgICB2YWx1ZWNhY2hlW3ZhbHVlS2V5XSA9IHZhbHVlSW5kZXhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KHZhbHVlSW5kZXgpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZCAoY21kLCBsZW5ndGgpIHtcbiAgcmV0dXJuIChsZW5ndGggPDwgMykgKyAoY21kICYgMHg3KVxufVxuXG5mdW5jdGlvbiB6aWd6YWcgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSBeIChudW0gPj4gMzEpXG59XG5cbmZ1bmN0aW9uIHdyaXRlR2VvbWV0cnkgKGZlYXR1cmUsIHBiZikge1xuICB2YXIgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpXG4gIHZhciB0eXBlID0gZmVhdHVyZS50eXBlXG4gIHZhciB4ID0gMFxuICB2YXIgeSA9IDBcbiAgdmFyIHJpbmdzID0gZ2VvbWV0cnkubGVuZ3RoXG4gIGZvciAodmFyIHIgPSAwOyByIDwgcmluZ3M7IHIrKykge1xuICAgIHZhciByaW5nID0gZ2VvbWV0cnlbcl1cbiAgICB2YXIgY291bnQgPSAxXG4gICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgIGNvdW50ID0gcmluZy5sZW5ndGhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMSwgY291bnQpKSAvLyBtb3ZldG9cbiAgICAvLyBkbyBub3Qgd3JpdGUgcG9seWdvbiBjbG9zaW5nIHBhdGggYXMgbGluZXRvXG4gICAgdmFyIGxpbmVDb3VudCA9IHR5cGUgPT09IDMgPyByaW5nLmxlbmd0aCAtIDEgOiByaW5nLmxlbmd0aFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpID09PSAxICYmIHR5cGUgIT09IDEpIHtcbiAgICAgICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMiwgbGluZUNvdW50IC0gMSkpIC8vIGxpbmV0b1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gcmluZ1tpXS54IC0geFxuICAgICAgdmFyIGR5ID0gcmluZ1tpXS55IC0geVxuICAgICAgcGJmLndyaXRlVmFyaW50KHppZ3phZyhkeCkpXG4gICAgICBwYmYud3JpdGVWYXJpbnQoemlnemFnKGR5KSlcbiAgICAgIHggKz0gZHhcbiAgICAgIHkgKz0gZHlcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDcsIDEpKSAvLyBjbG9zZXBhdGhcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVWYWx1ZSAodmFsdWUsIHBiZikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYmYud3JpdGVTdHJpbmdGaWVsZCgxLCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYmYud3JpdGVCb29sZWFuRmllbGQoNywgdmFsdWUpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodmFsdWUgJSAxICE9PSAwKSB7XG4gICAgICBwYmYud3JpdGVEb3VibGVGaWVsZCgzLCB2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgcGJmLndyaXRlU1ZhcmludEZpZWxkKDYsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYmYud3JpdGVWYXJpbnRGaWVsZCg1LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgcmlnaHQsIGRlcHRoKSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbSA9IChsZWZ0ICsgcmlnaHQpID4+IDE7XG5cbiAgICBzZWxlY3QoaWRzLCBjb29yZHMsIG0sIGxlZnQsIHJpZ2h0LCBkZXB0aCAlIDIpO1xuXG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgbSAtIDEsIGRlcHRoICsgMSk7XG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbSArIDEsIHJpZ2h0LCBkZXB0aCArIDEpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QoaWRzLCBjb29yZHMsIGssIGxlZnQsIHJpZ2h0LCBpbmMpIHtcblxuICAgIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHNlbGVjdChpZHMsIGNvb3JkcywgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGluYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ID0gY29vcmRzWzIgKiBrICsgaW5jXTtcbiAgICAgICAgbGV0IGkgPSBsZWZ0O1xuICAgICAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCBrKTtcbiAgICAgICAgaWYgKGNvb3Jkc1syICogcmlnaHQgKyBpbmNdID4gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb29yZHNbMiAqIGkgKyBpbmNdIDwgdCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvb3Jkc1syICogaiArIGluY10gPiB0KSBqLS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29vcmRzWzIgKiBsZWZ0ICsgaW5jXSA9PT0gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwSXRlbShpZHMsIGNvb3JkcywgaSwgaikge1xuICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGksIDIgKiBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGkgKyAxLCAyICogaiArIDEpO1xufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIGNvbnN0IHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShpZHMsIGNvb3JkcywgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgbm9kZVNpemUpIHtcbiAgICBjb25zdCBzdGFjayA9IFswLCBpZHMubGVuZ3RoIC0gMSwgMF07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IHgsIHk7XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB4ID0gY29vcmRzWzIgKiBpXTtcbiAgICAgICAgICAgICAgICB5ID0gY29vcmRzWzIgKiBpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHggPj0gbWluWCAmJiB4IDw9IG1heFggJiYgeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSkgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmICh4ID49IG1pblggJiYgeCA8PSBtYXhYICYmIHkgPj0gbWluWSAmJiB5IDw9IG1heFkpIHJlc3VsdC5wdXNoKGlkc1ttXSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEF4aXMgPSAoYXhpcyArIDEpICUgMjtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IG1pblggPD0geCA6IG1pblkgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBtYXhYID49IHggOiBtYXhZID49IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSArIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChyaWdodCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhpbihpZHMsIGNvb3JkcywgcXgsIHF5LCByLCBub2RlU2l6ZSkge1xuICAgIGNvbnN0IHN0YWNrID0gWzAsIGlkcy5sZW5ndGggLSAxLCAwXTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCByMiA9IHIgKiByO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBheGlzID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNxRGlzdChjb29yZHNbMiAqIGldLCBjb29yZHNbMiAqIGkgKyAxXSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICBjb25zdCB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgY29uc3QgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmIChzcURpc3QoeCwgeSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW21dKTtcblxuICAgICAgICBjb25zdCBuZXh0QXhpcyA9IChheGlzICsgMSkgJSAyO1xuXG4gICAgICAgIGlmIChheGlzID09PSAwID8gcXggLSByIDw9IHggOiBxeSAtIHIgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBxeCArIHIgPj0geCA6IHF5ICsgciA+PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gKyAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gocmlnaHQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzcURpc3QoYXgsIGF5LCBieCwgYnkpIHtcbiAgICBjb25zdCBkeCA9IGF4IC0gYng7XG4gICAgY29uc3QgZHkgPSBheSAtIGJ5O1xuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIlxuaW1wb3J0IHNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCByYW5nZSBmcm9tICcuL3JhbmdlJztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi93aXRoaW4nO1xuXG5jb25zdCBkZWZhdWx0R2V0WCA9IHAgPT4gcFswXTtcbmNvbnN0IGRlZmF1bHRHZXRZID0gcCA9PiBwWzFdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLREJ1c2gge1xuICAgIGNvbnN0cnVjdG9yKHBvaW50cywgZ2V0WCA9IGRlZmF1bHRHZXRYLCBnZXRZID0gZGVmYXVsdEdldFksIG5vZGVTaXplID0gNjQsIEFycmF5VHlwZSA9IEZsb2F0NjRBcnJheSkge1xuICAgICAgICB0aGlzLm5vZGVTaXplID0gbm9kZVNpemU7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIGNvbnN0IEluZGV4QXJyYXlUeXBlID0gcG9pbnRzLmxlbmd0aCA8IDY1NTM2ID8gVWludDE2QXJyYXkgOiBVaW50MzJBcnJheTtcblxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmlkcyA9IG5ldyBJbmRleEFycmF5VHlwZShwb2ludHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMgPSBuZXcgQXJyYXlUeXBlKHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWRzW2ldID0gaTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaV0gPSBnZXRYKHBvaW50c1tpXSk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGkgKyAxXSA9IGdldFkocG9pbnRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvcnQoaWRzLCBjb29yZHMsIG5vZGVTaXplLCAwLCBpZHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgfVxuXG4gICAgcmFuZ2UobWluWCwgbWluWSwgbWF4WCwgbWF4WSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UodGhpcy5pZHMsIHRoaXMuY29vcmRzLCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB0aGlzLm5vZGVTaXplKTtcbiAgICB9XG5cbiAgICB3aXRoaW4oeCwgeSwgcikge1xuICAgICAgICByZXR1cm4gd2l0aGluKHRoaXMuaWRzLCB0aGlzLmNvb3JkcywgeCwgeSwgciwgdGhpcy5ub2RlU2l6ZSk7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgS0RCdXNoIGZyb20gJ2tkYnVzaCc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG1pblpvb206IDAsICAgLy8gbWluIHpvb20gdG8gZ2VuZXJhdGUgY2x1c3RlcnMgb25cbiAgICBtYXhab29tOiAxNiwgIC8vIG1heCB6b29tIGxldmVsIHRvIGNsdXN0ZXIgdGhlIHBvaW50cyBvblxuICAgIHJhZGl1czogNDAsICAgLy8gY2x1c3RlciByYWRpdXMgaW4gcGl4ZWxzXG4gICAgZXh0ZW50OiA1MTIsICAvLyB0aWxlIGV4dGVudCAocmFkaXVzIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gaXQpXG4gICAgbm9kZVNpemU6IDY0LCAvLyBzaXplIG9mIHRoZSBLRC10cmVlIGxlYWYgbm9kZSwgYWZmZWN0cyBwZXJmb3JtYW5jZVxuICAgIGxvZzogZmFsc2UsICAgLy8gd2hldGhlciB0byBsb2cgdGltaW5nIGluZm9cblxuICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgbnVtZXJpYyBpZHMgZm9yIGlucHV0IGZlYXR1cmVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVtXG4gICAgZ2VuZXJhdGVJZDogZmFsc2UsXG5cbiAgICAvLyBhIHJlZHVjZSBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgY3VzdG9tIGNsdXN0ZXIgcHJvcGVydGllc1xuICAgIHJlZHVjZTogbnVsbCwgLy8gKGFjY3VtdWxhdGVkLCBwcm9wcykgPT4geyBhY2N1bXVsYXRlZC5zdW0gKz0gcHJvcHMuc3VtOyB9XG5cbiAgICAvLyBwcm9wZXJ0aWVzIHRvIHVzZSBmb3IgaW5kaXZpZHVhbCBwb2ludHMgd2hlbiBydW5uaW5nIHRoZSByZWR1Y2VyXG4gICAgbWFwOiBwcm9wcyA9PiBwcm9wcyAvLyBwcm9wcyA9PiAoe3N1bTogcHJvcHMubXlfdmFsdWV9KVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwZXJjbHVzdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZChPYmplY3QuY3JlYXRlKGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHJlZXMgPSBuZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20gKyAxKTtcbiAgICB9XG5cbiAgICBsb2FkKHBvaW50cykge1xuICAgICAgICBjb25zdCB7bG9nLCBtaW5ab29tLCBtYXhab29tLCBub2RlU2l6ZX0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lKCd0b3RhbCB0aW1lJyk7XG5cbiAgICAgICAgY29uc3QgdGltZXJJZCA9IGBwcmVwYXJlICR7ICBwb2ludHMubGVuZ3RoICB9IHBvaW50c2A7XG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZSh0aW1lcklkKTtcblxuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgICAgICAvLyBnZW5lcmF0ZSBhIGNsdXN0ZXIgb2JqZWN0IGZvciBlYWNoIHBvaW50IGFuZCBpbmRleCBpbnB1dCBwb2ludHMgaW50byBhIEtELXRyZWVcbiAgICAgICAgbGV0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXBvaW50c1tpXS5nZW9tZXRyeSkgY29udGludWU7XG4gICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZVBvaW50Q2x1c3Rlcihwb2ludHNbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyZWVzW21heFpvb20gKyAxXSA9IG5ldyBLREJ1c2goY2x1c3RlcnMsIGdldFgsIGdldFksIG5vZGVTaXplLCBGbG9hdDMyQXJyYXkpO1xuXG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZUVuZCh0aW1lcklkKTtcblxuICAgICAgICAvLyBjbHVzdGVyIHBvaW50cyBvbiBtYXggem9vbSwgdGhlbiBjbHVzdGVyIHRoZSByZXN1bHRzIG9uIHByZXZpb3VzIHpvb20sIGV0Yy47XG4gICAgICAgIC8vIHJlc3VsdHMgaW4gYSBjbHVzdGVyIGhpZXJhcmNoeSBhY3Jvc3Mgem9vbSBsZXZlbHNcbiAgICAgICAgZm9yIChsZXQgeiA9IG1heFpvb207IHogPj0gbWluWm9vbTsgei0tKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSArRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHNldCBvZiBjbHVzdGVycyBmb3IgdGhlIHpvb20gYW5kIGluZGV4IHRoZW0gd2l0aCBhIEtELXRyZWVcbiAgICAgICAgICAgIGNsdXN0ZXJzID0gdGhpcy5fY2x1c3RlcihjbHVzdGVycywgeik7XG4gICAgICAgICAgICB0aGlzLnRyZWVzW3pdID0gbmV3IEtEQnVzaChjbHVzdGVycywgZ2V0WCwgZ2V0WSwgbm9kZVNpemUsIEZsb2F0MzJBcnJheSk7XG5cbiAgICAgICAgICAgIGlmIChsb2cpIGNvbnNvbGUubG9nKCd6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMnLCB6LCBjbHVzdGVycy5sZW5ndGgsICtEYXRlLm5vdygpIC0gbm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZUVuZCgndG90YWwgdGltZScpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJzKGJib3gsIHpvb20pIHtcbiAgICAgICAgbGV0IG1pbkxuZyA9ICgoYmJveFswXSArIDE4MCkgJSAzNjAgKyAzNjApICUgMzYwIC0gMTgwO1xuICAgICAgICBjb25zdCBtaW5MYXQgPSBNYXRoLm1heCgtOTAsIE1hdGgubWluKDkwLCBiYm94WzFdKSk7XG4gICAgICAgIGxldCBtYXhMbmcgPSBiYm94WzJdID09PSAxODAgPyAxODAgOiAoKGJib3hbMl0gKyAxODApICUgMzYwICsgMzYwKSAlIDM2MCAtIDE4MDtcbiAgICAgICAgY29uc3QgbWF4TGF0ID0gTWF0aC5tYXgoLTkwLCBNYXRoLm1pbig5MCwgYmJveFszXSkpO1xuXG4gICAgICAgIGlmIChiYm94WzJdIC0gYmJveFswXSA+PSAzNjApIHtcbiAgICAgICAgICAgIG1pbkxuZyA9IC0xODA7XG4gICAgICAgICAgICBtYXhMbmcgPSAxODA7XG4gICAgICAgIH0gZWxzZSBpZiAobWluTG5nID4gbWF4TG5nKSB7XG4gICAgICAgICAgICBjb25zdCBlYXN0ZXJuSGVtID0gdGhpcy5nZXRDbHVzdGVycyhbbWluTG5nLCBtaW5MYXQsIDE4MCwgbWF4TGF0XSwgem9vbSk7XG4gICAgICAgICAgICBjb25zdCB3ZXN0ZXJuSGVtID0gdGhpcy5nZXRDbHVzdGVycyhbLTE4MCwgbWluTGF0LCBtYXhMbmcsIG1heExhdF0sIHpvb20pO1xuICAgICAgICAgICAgcmV0dXJuIGVhc3Rlcm5IZW0uY29uY2F0KHdlc3Rlcm5IZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHpvb20pXTtcbiAgICAgICAgY29uc3QgaWRzID0gdHJlZS5yYW5nZShsbmdYKG1pbkxuZyksIGxhdFkobWF4TGF0KSwgbG5nWChtYXhMbmcpLCBsYXRZKG1pbkxhdCkpO1xuICAgICAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRyZWUucG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goYy5udW1Qb2ludHMgPyBnZXRDbHVzdGVySlNPTihjKSA6IHRoaXMucG9pbnRzW2MuaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2x1c3RlcnM7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5fZ2V0T3JpZ2luSWQoY2x1c3RlcklkKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luWm9vbSA9IHRoaXMuX2dldE9yaWdpblpvb20oY2x1c3RlcklkKTtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnTm8gY2x1c3RlciB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuJztcblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZXNbb3JpZ2luWm9vbV07XG4gICAgICAgIGlmICghaW5kZXgpIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luID0gaW5kZXgucG9pbnRzW29yaWdpbklkXTtcbiAgICAgICAgaWYgKCFvcmlnaW4pIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG5cbiAgICAgICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5yYWRpdXMgLyAodGhpcy5vcHRpb25zLmV4dGVudCAqIE1hdGgucG93KDIsIG9yaWdpblpvb20gLSAxKSk7XG4gICAgICAgIGNvbnN0IGlkcyA9IGluZGV4LndpdGhpbihvcmlnaW4ueCwgb3JpZ2luLnksIHIpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGluZGV4LnBvaW50c1tpZF07XG4gICAgICAgICAgICBpZiAoYy5wYXJlbnRJZCA9PT0gY2x1c3RlcklkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjLm51bVBvaW50cyA/IGdldENsdXN0ZXJKU09OKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgZ2V0TGVhdmVzKGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCkge1xuICAgICAgICBsaW1pdCA9IGxpbWl0IHx8IDEwO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgICBjb25zdCBsZWF2ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fYXBwZW5kTGVhdmVzKGxlYXZlcywgY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0LCAwKTtcblxuICAgICAgICByZXR1cm4gbGVhdmVzO1xuICAgIH1cblxuICAgIGdldFRpbGUoeiwgeCwgeSkge1xuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oeildO1xuICAgICAgICBjb25zdCB6MiA9IE1hdGgucG93KDIsIHopO1xuICAgICAgICBjb25zdCB7ZXh0ZW50LCByYWRpdXN9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBwID0gcmFkaXVzIC8gZXh0ZW50O1xuICAgICAgICBjb25zdCB0b3AgPSAoeSAtIHApIC8gejI7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9ICh5ICsgMSArIHApIC8gejI7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgIHRyZWUucmFuZ2UoKHggLSBwKSAvIHoyLCB0b3AsICh4ICsgMSArIHApIC8gejIsIGJvdHRvbSksXG4gICAgICAgICAgICB0cmVlLnBvaW50cywgeCwgeSwgejIsIHRpbGUpO1xuXG4gICAgICAgIGlmICh4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgdHJlZS5yYW5nZSgxIC0gcCAvIHoyLCB0b3AsIDEsIGJvdHRvbSksXG4gICAgICAgICAgICAgICAgdHJlZS5wb2ludHMsIHoyLCB5LCB6MiwgdGlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggPT09IHoyIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHRyZWUucmFuZ2UoMCwgdG9wLCBwIC8gejIsIGJvdHRvbSksXG4gICAgICAgICAgICAgICAgdHJlZS5wb2ludHMsIC0xLCB5LCB6MiwgdGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZS5mZWF0dXJlcy5sZW5ndGggPyB0aWxlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShjbHVzdGVySWQpIHtcbiAgICAgICAgbGV0IGV4cGFuc2lvblpvb20gPSB0aGlzLl9nZXRPcmlnaW5ab29tKGNsdXN0ZXJJZCkgLSAxO1xuICAgICAgICB3aGlsZSAoZXhwYW5zaW9uWm9vbSA8PSB0aGlzLm9wdGlvbnMubWF4Wm9vbSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGNsdXN0ZXJJZCk7XG4gICAgICAgICAgICBleHBhbnNpb25ab29tKys7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9PSAxKSBicmVhaztcbiAgICAgICAgICAgIGNsdXN0ZXJJZCA9IGNoaWxkcmVuWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwYW5zaW9uWm9vbTtcbiAgICB9XG5cbiAgICBfYXBwZW5kTGVhdmVzKHJlc3VsdCwgY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0LCBza2lwcGVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihjbHVzdGVySWQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gY2hpbGQucHJvcGVydGllcztcblxuICAgICAgICAgICAgaWYgKHByb3BzICYmIHByb3BzLmNsdXN0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZCArIHByb3BzLnBvaW50X2NvdW50IDw9IG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSB3aG9sZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gcHJvcHMucG9pbnRfY291bnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW50ZXIgdGhlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCA9IHRoaXMuX2FwcGVuZExlYXZlcyhyZXN1bHQsIHByb3BzLmNsdXN0ZXJfaWQsIGxpbWl0LCBvZmZzZXQsIHNraXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBleGl0IHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwcGVkIDwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhIHNpbmdsZSBwb2ludFxuICAgICAgICAgICAgICAgIHNraXBwZWQrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGEgc2luZ2xlIHBvaW50XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IGxpbWl0KSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBza2lwcGVkO1xuICAgIH1cblxuICAgIF9hZGRUaWxlRmVhdHVyZXMoaWRzLCBwb2ludHMsIHgsIHksIHoyLCB0aWxlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBpc0NsdXN0ZXIgPSBjLm51bVBvaW50cztcbiAgICAgICAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogMSxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogW1tcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50ICogKGMueCAqIHoyIC0geCkpLFxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQgKiAoYy55ICogejIgLSB5KSlcbiAgICAgICAgICAgICAgICBdXSxcbiAgICAgICAgICAgICAgICB0YWdzOiBpc0NsdXN0ZXIgPyBnZXRDbHVzdGVyUHJvcGVydGllcyhjKSA6IHRoaXMucG9pbnRzW2MuaW5kZXhdLnByb3BlcnRpZXNcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGFzc2lnbiBpZFxuICAgICAgICAgICAgbGV0IGlkO1xuICAgICAgICAgICAgaWYgKGlzQ2x1c3Rlcikge1xuICAgICAgICAgICAgICAgIGlkID0gYy5pZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmdlbmVyYXRlSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbGx5IGdlbmVyYXRlIGlkXG4gICAgICAgICAgICAgICAgaWQgPSBjLmluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvaW50c1tjLmluZGV4XS5pZCkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXAgaWQgaWYgYWxyZWFkeSBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlkID0gdGhpcy5wb2ludHNbYy5pbmRleF0uaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSBmLmlkID0gaWQ7XG5cbiAgICAgICAgICAgIHRpbGUuZmVhdHVyZXMucHVzaChmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9saW1pdFpvb20oeikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sIE1hdGgubWluKHosIHRoaXMub3B0aW9ucy5tYXhab29tICsgMSkpO1xuICAgIH1cblxuICAgIF9jbHVzdGVyKHBvaW50cywgem9vbSkge1xuICAgICAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgICAgICBjb25zdCB7cmFkaXVzLCBleHRlbnQsIHJlZHVjZX0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHIgPSByYWRpdXMgLyAoZXh0ZW50ICogTWF0aC5wb3coMiwgem9vbSkpO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIHBvaW50XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgLy8gaWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoZSBwb2ludCBhdCB0aGlzIHpvb20gbGV2ZWwsIHNraXAgaXRcbiAgICAgICAgICAgIGlmIChwLnpvb20gPD0gem9vbSkgY29udGludWU7XG4gICAgICAgICAgICBwLnpvb20gPSB6b29tO1xuXG4gICAgICAgICAgICAvLyBmaW5kIGFsbCBuZWFyYnkgcG9pbnRzXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t6b29tICsgMV07XG4gICAgICAgICAgICBjb25zdCBuZWlnaGJvcklkcyA9IHRyZWUud2l0aGluKHAueCwgcC55LCByKTtcblxuICAgICAgICAgICAgbGV0IG51bVBvaW50cyA9IHAubnVtUG9pbnRzIHx8IDE7XG4gICAgICAgICAgICBsZXQgd3ggPSBwLnggKiBudW1Qb2ludHM7XG4gICAgICAgICAgICBsZXQgd3kgPSBwLnkgKiBudW1Qb2ludHM7XG5cbiAgICAgICAgICAgIGxldCBjbHVzdGVyUHJvcGVydGllcyA9IHJlZHVjZSAmJiBudW1Qb2ludHMgPiAxID8gdGhpcy5fbWFwKHAsIHRydWUpIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gZW5jb2RlIGJvdGggem9vbSBhbmQgcG9pbnQgaW5kZXggb24gd2hpY2ggdGhlIGNsdXN0ZXIgb3JpZ2luYXRlZCAtLSBvZmZzZXQgYnkgdG90YWwgbGVuZ3RoIG9mIGZlYXR1cmVzXG4gICAgICAgICAgICBjb25zdCBpZCA9IChpIDw8IDUpICsgKHpvb20gKyAxKSArIHRoaXMucG9pbnRzLmxlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZWlnaGJvcklkIG9mIG5laWdoYm9ySWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IHRyZWUucG9pbnRzW25laWdoYm9ySWRdO1xuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgbmVpZ2hib3JzIHRoYXQgYXJlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICAgICAgICAgICAgaWYgKGIuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBiLnpvb20gPSB6b29tOyAvLyBzYXZlIHRoZSB6b29tIChzbyBpdCBkb2Vzbid0IGdldCBwcm9jZXNzZWQgdHdpY2UpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBudW1Qb2ludHMyID0gYi5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgICAgICB3eCArPSBiLnggKiBudW1Qb2ludHMyOyAvLyBhY2N1bXVsYXRlIGNvb3JkaW5hdGVzIGZvciBjYWxjdWxhdGluZyB3ZWlnaHRlZCBjZW50ZXJcbiAgICAgICAgICAgICAgICB3eSArPSBiLnkgKiBudW1Qb2ludHMyO1xuXG4gICAgICAgICAgICAgICAgbnVtUG9pbnRzICs9IG51bVBvaW50czI7XG4gICAgICAgICAgICAgICAgYi5wYXJlbnRJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlZHVjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzKSBjbHVzdGVyUHJvcGVydGllcyA9IHRoaXMuX21hcChwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlKGNsdXN0ZXJQcm9wZXJ0aWVzLCB0aGlzLl9tYXAoYikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bVBvaW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2gocCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAucGFyZW50SWQgPSBpZDtcbiAgICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZUNsdXN0ZXIod3ggLyBudW1Qb2ludHMsIHd5IC8gbnVtUG9pbnRzLCBpZCwgbnVtUG9pbnRzLCBjbHVzdGVyUHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJzO1xuICAgIH1cblxuICAgIC8vIGdldCBpbmRleCBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgX2dldE9yaWdpbklkKGNsdXN0ZXJJZCkge1xuICAgICAgICByZXR1cm4gKGNsdXN0ZXJJZCAtIHRoaXMucG9pbnRzLmxlbmd0aCkgPj4gNTtcbiAgICB9XG5cbiAgICAvLyBnZXQgem9vbSBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgX2dldE9yaWdpblpvb20oY2x1c3RlcklkKSB7XG4gICAgICAgIHJldHVybiAoY2x1c3RlcklkIC0gdGhpcy5wb2ludHMubGVuZ3RoKSAlIDMyO1xuICAgIH1cblxuICAgIF9tYXAocG9pbnQsIGNsb25lKSB7XG4gICAgICAgIGlmIChwb2ludC5udW1Qb2ludHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZSA/IGV4dGVuZCh7fSwgcG9pbnQucHJvcGVydGllcykgOiBwb2ludC5wcm9wZXJ0aWVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5wb2ludHNbcG9pbnQuaW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5tYXAob3JpZ2luYWwpO1xuICAgICAgICByZXR1cm4gY2xvbmUgJiYgcmVzdWx0ID09PSBvcmlnaW5hbCA/IGV4dGVuZCh7fSwgcmVzdWx0KSA6IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsdXN0ZXIoeCwgeSwgaWQsIG51bVBvaW50cywgcHJvcGVydGllcykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsIC8vIHdlaWdodGVkIGNsdXN0ZXIgY2VudGVyXG4gICAgICAgIHksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBjbHVzdGVyIHdhcyBwcm9jZXNzZWQgYXRcbiAgICAgICAgaWQsIC8vIGVuY29kZXMgaW5kZXggb2YgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBjbHVzdGVyIGFuZCBpdHMgem9vbSBsZXZlbFxuICAgICAgICBwYXJlbnRJZDogLTEsIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgICAgIG51bVBvaW50cyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50Q2x1c3RlcihwLCBpZCkge1xuICAgIGNvbnN0IFt4LCB5XSA9IHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbG5nWCh4KSwgLy8gcHJvamVjdGVkIHBvaW50IGNvb3JkaW5hdGVzXG4gICAgICAgIHk6IGxhdFkoeSksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBwb2ludCB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICAgIGluZGV4OiBpZCwgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbiAgICAgICAgcGFyZW50SWQ6IC0xIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2x1c3RlckpTT04oY2x1c3Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHByb3BlcnRpZXM6IGdldENsdXN0ZXJQcm9wZXJ0aWVzKGNsdXN0ZXIpLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbeExuZyhjbHVzdGVyLngpLCB5TGF0KGNsdXN0ZXIueSldXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbHVzdGVyUHJvcGVydGllcyhjbHVzdGVyKSB7XG4gICAgY29uc3QgY291bnQgPSBjbHVzdGVyLm51bVBvaW50cztcbiAgICBjb25zdCBhYmJyZXYgPVxuICAgICAgICBjb3VudCA+PSAxMDAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDAwKSAgfWtgIDpcbiAgICAgICAgY291bnQgPj0gMTAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDApIC8gMTAgIH1rYCA6IGNvdW50O1xuICAgIHJldHVybiBleHRlbmQoZXh0ZW5kKHt9LCBjbHVzdGVyLnByb3BlcnRpZXMpLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRydWUsXG4gICAgICAgIGNsdXN0ZXJfaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHBvaW50X2NvdW50OiBjb3VudCxcbiAgICAgICAgcG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6IGFiYnJldlxuICAgIH0pO1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmcpIHtcbiAgICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuZnVuY3Rpb24gbGF0WShsYXQpIHtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICBjb25zdCB5ID0gKDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSSk7XG4gICAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbi8vIHNwaGVyaWNhbCBtZXJjYXRvciB0byBsb25naXR1ZGUvbGF0aXR1ZGVcbmZ1bmN0aW9uIHhMbmcoeCkge1xuICAgIHJldHVybiAoeCAtIDAuNSkgKiAzNjA7XG59XG5mdW5jdGlvbiB5TGF0KHkpIHtcbiAgICBjb25zdCB5MiA9ICgxODAgLSB5ICogMzYwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgcmV0dXJuIDM2MCAqIE1hdGguYXRhbihNYXRoLmV4cCh5MikpIC8gTWF0aC5QSSAtIDkwO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yIChjb25zdCBpZCBpbiBzcmMpIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICByZXR1cm4gZGVzdDtcbn1cblxuZnVuY3Rpb24gZ2V0WChwKSB7XG4gICAgcmV0dXJuIHAueDtcbn1cbmZ1bmN0aW9uIGdldFkocCkge1xuICAgIHJldHVybiBwLnk7XG59XG4iLCJcbi8vIGNhbGN1bGF0ZSBzaW1wbGlmaWNhdGlvbiBkYXRhIHVzaW5nIG9wdGltaXplZCBEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGxhc3QsIHNxVG9sZXJhbmNlKSB7XG4gICAgdmFyIG1heFNxRGlzdCA9IHNxVG9sZXJhbmNlO1xuICAgIHZhciBtaWQgPSAobGFzdCAtIGZpcnN0KSA+PiAxO1xuICAgIHZhciBtaW5Qb3NUb01pZCA9IGxhc3QgLSBmaXJzdDtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICB2YXIgYXggPSBjb29yZHNbZmlyc3RdO1xuICAgIHZhciBheSA9IGNvb3Jkc1tmaXJzdCArIDFdO1xuICAgIHZhciBieCA9IGNvb3Jkc1tsYXN0XTtcbiAgICB2YXIgYnkgPSBjb29yZHNbbGFzdCArIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IGZpcnN0ICsgMzsgaSA8IGxhc3Q7IGkgKz0gMykge1xuICAgICAgICB2YXIgZCA9IGdldFNxU2VnRGlzdChjb29yZHNbaV0sIGNvb3Jkc1tpICsgMV0sIGF4LCBheSwgYngsIGJ5KTtcblxuICAgICAgICBpZiAoZCA+IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgbWF4U3FEaXN0ID0gZDtcblxuICAgICAgICB9IGVsc2UgaWYgKGQgPT09IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgLy8gYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjaG9vc2UgYSBwaXZvdCBjbG9zZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBsaXN0LFxuICAgICAgICAgICAgLy8gcmVkdWNpbmcgcmVjdXJzaW9uIGRlcHRoLCBmb3IgY2VydGFpbiBkZWdlbmVyYXRlIGlucHV0c1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9nZW9qc29uLXZ0L2lzc3Vlcy8xMDRcbiAgICAgICAgICAgIHZhciBwb3NUb01pZCA9IE1hdGguYWJzKGkgLSBtaWQpO1xuICAgICAgICAgICAgaWYgKHBvc1RvTWlkIDwgbWluUG9zVG9NaWQpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWluUG9zVG9NaWQgPSBwb3NUb01pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXhTcURpc3QgPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICBpZiAoaW5kZXggLSBmaXJzdCA+IDMpIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGluZGV4LCBzcVRvbGVyYW5jZSk7XG4gICAgICAgIGNvb3Jkc1tpbmRleCArIDJdID0gbWF4U3FEaXN0O1xuICAgICAgICBpZiAobGFzdCAtIGluZGV4ID4gMykgc2ltcGxpZnkoY29vcmRzLCBpbmRleCwgbGFzdCwgc3FUb2xlcmFuY2UpO1xuICAgIH1cbn1cblxuLy8gc3F1YXJlIGRpc3RhbmNlIGZyb20gYSBwb2ludCB0byBhIHNlZ21lbnRcbmZ1bmN0aW9uIGdldFNxU2VnRGlzdChweCwgcHksIHgsIHksIGJ4LCBieSkge1xuXG4gICAgdmFyIGR4ID0gYnggLSB4O1xuICAgIHZhciBkeSA9IGJ5IC0geTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuXG4gICAgICAgIHZhciB0ID0gKChweCAtIHgpICogZHggKyAocHkgLSB5KSAqIGR5KSAvIChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKHQgPiAxKSB7XG4gICAgICAgICAgICB4ID0gYng7XG4gICAgICAgICAgICB5ID0gYnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgeCArPSBkeCAqIHQ7XG4gICAgICAgICAgICB5ICs9IGR5ICogdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR4ID0gcHggLSB4O1xuICAgIGR5ID0gcHkgLSB5O1xuXG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tLCB0YWdzKSB7XG4gICAgdmFyIGZlYXR1cmUgPSB7XG4gICAgICAgIGlkOiB0eXBlb2YgaWQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IGlkLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBnZW9tZXRyeTogZ2VvbSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgICAgbWluWDogSW5maW5pdHksXG4gICAgICAgIG1pblk6IEluZmluaXR5LFxuICAgICAgICBtYXhYOiAtSW5maW5pdHksXG4gICAgICAgIG1heFk6IC1JbmZpbml0eVxuICAgIH07XG4gICAgY2FsY0JCb3goZmVhdHVyZSk7XG4gICAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGNhbGNCQm94KGZlYXR1cmUpIHtcbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcgfHwgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb21baV0pO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdlb21baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGZlYXR1cmUubWluWCA9IE1hdGgubWluKGZlYXR1cmUubWluWCwgZ2VvbVtpXSk7XG4gICAgICAgIGZlYXR1cmUubWluWSA9IE1hdGgubWluKGZlYXR1cmUubWluWSwgZ2VvbVtpICsgMV0pO1xuICAgICAgICBmZWF0dXJlLm1heFggPSBNYXRoLm1heChmZWF0dXJlLm1heFgsIGdlb21baV0pO1xuICAgICAgICBmZWF0dXJlLm1heFkgPSBNYXRoLm1heChmZWF0dXJlLm1heFksIGdlb21baSArIDFdKTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBzaW1wbGlmeSBmcm9tICcuL3NpbXBsaWZ5JztcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbi8vIGNvbnZlcnRzIEdlb0pTT04gZmVhdHVyZSBpbnRvIGFuIGludGVybWVkaWF0ZSBwcm9qZWN0ZWQgSlNPTiB2ZWN0b3IgZm9ybWF0IHdpdGggc2ltcGxpZmljYXRpb24gZGF0YVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb252ZXJ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEuZmVhdHVyZXNbaV0sIG9wdGlvbnMsIGkpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbmdsZSBnZW9tZXRyeSBvciBhIGdlb21ldHJ5IGNvbGxlY3Rpb25cbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtnZW9tZXRyeTogZGF0YX0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGdlb2pzb24sIG9wdGlvbnMsIGluZGV4KSB7XG4gICAgaWYgKCFnZW9qc29uLmdlb21ldHJ5KSByZXR1cm47XG5cbiAgICB2YXIgY29vcmRzID0gZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICB2YXIgdHlwZSA9IGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcbiAgICB2YXIgdG9sZXJhbmNlID0gTWF0aC5wb3cob3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgb3B0aW9ucy5tYXhab29tKSAqIG9wdGlvbnMuZXh0ZW50KSwgMik7XG4gICAgdmFyIGdlb21ldHJ5ID0gW107XG4gICAgdmFyIGlkID0gZ2VvanNvbi5pZDtcbiAgICBpZiAob3B0aW9ucy5wcm9tb3RlSWQpIHtcbiAgICAgICAgaWQgPSBnZW9qc29uLnByb3BlcnRpZXNbb3B0aW9ucy5wcm9tb3RlSWRdO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZW5lcmF0ZUlkKSB7XG4gICAgICAgIGlkID0gaW5kZXggfHwgMDtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgY29udmVydFBvaW50KGNvb3JkcywgZ2VvbWV0cnkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRQb2ludChjb29yZHNbaV0sIGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgY29udmVydExpbmUoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmxpbmVNZXRyaWNzKSB7XG4gICAgICAgICAgICAvLyBleHBsb2RlIGludG8gbGluZXN0cmluZ3MgdG8gYmUgYWJsZSB0byB0cmFjayBtZXRyaWNzXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0TGluZShjb29yZHNbaV0sIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoaWQsICdMaW5lU3RyaW5nJywgZ2VvbWV0cnksIGdlb2pzb24ucHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydExpbmVzKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCB0cnVlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBbXTtcbiAgICAgICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHNbaV0sIHBvbHlnb24sIHRvbGVyYW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW9tZXRyeS5wdXNoKHBvbHlnb24pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzW2ldLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGdlb2pzb24ucHJvcGVydGllc1xuICAgICAgICAgICAgfSwgb3B0aW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tZXRyeSwgZ2VvanNvbi5wcm9wZXJ0aWVzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQb2ludChjb29yZHMsIG91dCkge1xuICAgIG91dC5wdXNoKHByb2plY3RYKGNvb3Jkc1swXSkpO1xuICAgIG91dC5wdXNoKHByb2plY3RZKGNvb3Jkc1sxXSkpO1xuICAgIG91dC5wdXNoKDApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0TGluZShyaW5nLCBvdXQsIHRvbGVyYW5jZSwgaXNQb2x5Z29uKSB7XG4gICAgdmFyIHgwLCB5MDtcbiAgICB2YXIgc2l6ZSA9IDA7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHggPSBwcm9qZWN0WChyaW5nW2pdWzBdKTtcbiAgICAgICAgdmFyIHkgPSBwcm9qZWN0WShyaW5nW2pdWzFdKTtcblxuICAgICAgICBvdXQucHVzaCh4KTtcbiAgICAgICAgb3V0LnB1c2goeSk7XG4gICAgICAgIG91dC5wdXNoKDApO1xuXG4gICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzUG9seWdvbikge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gKHgwICogeSAtIHggKiB5MCkgLyAyOyAvLyBhcmVhXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gTWF0aC5zcXJ0KE1hdGgucG93KHggLSB4MCwgMikgKyBNYXRoLnBvdyh5IC0geTAsIDIpKTsgLy8gbGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeDAgPSB4O1xuICAgICAgICB5MCA9IHk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3QgPSBvdXQubGVuZ3RoIC0gMztcbiAgICBvdXRbMl0gPSAxO1xuICAgIHNpbXBsaWZ5KG91dCwgMCwgbGFzdCwgdG9sZXJhbmNlKTtcbiAgICBvdXRbbGFzdCArIDJdID0gMTtcblxuICAgIG91dC5zaXplID0gTWF0aC5hYnMoc2l6ZSk7XG4gICAgb3V0LnN0YXJ0ID0gMDtcbiAgICBvdXQuZW5kID0gb3V0LnNpemU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lcyhyaW5ncywgb3V0LCB0b2xlcmFuY2UsIGlzUG9seWdvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdlb20gPSBbXTtcbiAgICAgICAgY29udmVydExpbmUocmluZ3NbaV0sIGdlb20sIHRvbGVyYW5jZSwgaXNQb2x5Z29uKTtcbiAgICAgICAgb3V0LnB1c2goZ2VvbSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0WCh4KSB7XG4gICAgcmV0dXJuIHggLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RZKHkpIHtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oeSAqIE1hdGguUEkgLyAxODApO1xuICAgIHZhciB5MiA9IDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSTtcbiAgICByZXR1cm4geTIgPCAwID8gMCA6IHkyID4gMSA/IDEgOiB5Mjtcbn1cbiIsIlxuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuLyogY2xpcCBmZWF0dXJlcyBiZXR3ZWVuIHR3byBheGlzLXBhcmFsbGVsIGxpbmVzOlxuICogICAgIHwgICAgICAgIHxcbiAqICBfX198X19fICAgICB8ICAgICAvXG4gKiAvICAgfCAgIFxcX19fX3xfX19fL1xuICogICAgIHwgICAgICAgIHxcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGlwKGZlYXR1cmVzLCBzY2FsZSwgazEsIGsyLCBheGlzLCBtaW5BbGwsIG1heEFsbCwgb3B0aW9ucykge1xuXG4gICAgazEgLz0gc2NhbGU7XG4gICAgazIgLz0gc2NhbGU7XG5cbiAgICBpZiAobWluQWxsID49IGsxICYmIG1heEFsbCA8IGsyKSByZXR1cm4gZmVhdHVyZXM7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgZWxzZSBpZiAobWF4QWxsIDwgazEgfHwgbWluQWxsID49IGsyKSByZXR1cm4gbnVsbDsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgIHZhciBjbGlwcGVkID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG1pbiA9IGF4aXMgPT09IDAgPyBmZWF0dXJlLm1pblggOiBmZWF0dXJlLm1pblk7XG4gICAgICAgIHZhciBtYXggPSBheGlzID09PSAwID8gZmVhdHVyZS5tYXhYIDogZmVhdHVyZS5tYXhZO1xuXG4gICAgICAgIGlmIChtaW4gPj0gazEgJiYgbWF4IDwgazIpIHsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG1heCA8IGsxIHx8IG1pbiA+PSBrMikgeyAvLyB0cml2aWFsIHJlamVjdFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnkgPSBbXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIGNsaXBQb2ludHMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBjbGlwTGluZShnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UsIG9wdGlvbnMubGluZU1ldHJpY3MpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeVtqXSwgcG9seWdvbiwgazEsIGsyLCBheGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3R2VvbWV0cnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW5lTWV0cmljcyAmJiB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3R2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnlbal0sIGZlYXR1cmUudGFncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChuZXdHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBuZXdHZW9tZXRyeVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ011bHRpTGluZVN0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IG5ld0dlb21ldHJ5Lmxlbmd0aCA9PT0gMyA/ICdQb2ludCcgOiAnTXVsdGlQb2ludCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5LCBmZWF0dXJlLnRhZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkLmxlbmd0aCA/IGNsaXBwZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjbGlwUG9pbnRzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgYSA9IGdlb21baSArIGF4aXNdO1xuXG4gICAgICAgIGlmIChhID49IGsxICYmIGEgPD0gazIpIHtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpICsgMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGlwTGluZShnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbiwgdHJhY2tNZXRyaWNzKSB7XG5cbiAgICB2YXIgc2xpY2UgPSBuZXdTbGljZShnZW9tKTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gYXhpcyA9PT0gMCA/IGludGVyc2VjdFggOiBpbnRlcnNlY3RZO1xuICAgIHZhciBsZW4gPSBnZW9tLnN0YXJ0O1xuICAgIHZhciBzZWdMZW4sIHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG4gICAgICAgIHZhciBheCA9IGdlb21baV07XG4gICAgICAgIHZhciBheSA9IGdlb21baSArIDFdO1xuICAgICAgICB2YXIgYXogPSBnZW9tW2kgKyAyXTtcbiAgICAgICAgdmFyIGJ4ID0gZ2VvbVtpICsgM107XG4gICAgICAgIHZhciBieSA9IGdlb21baSArIDRdO1xuICAgICAgICB2YXIgYSA9IGF4aXMgPT09IDAgPyBheCA6IGF5O1xuICAgICAgICB2YXIgYiA9IGF4aXMgPT09IDAgPyBieCA6IGJ5O1xuICAgICAgICB2YXIgZXhpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2VnTGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KGF4IC0gYngsIDIpICsgTWF0aC5wb3coYXkgLSBieSwgMikpO1xuXG4gICAgICAgIGlmIChhIDwgazEpIHtcbiAgICAgICAgICAgIC8vIC0tLXwtLT4gIHwgKGxpbmUgZW50ZXJzIHRoZSBjbGlwIHJlZ2lvbiBmcm9tIHRoZSBsZWZ0KVxuICAgICAgICAgICAgaWYgKGIgPiBrMSkge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEgPiBrMikge1xuICAgICAgICAgICAgLy8gfCAgPC0tfC0tLSAobGluZSBlbnRlcnMgdGhlIGNsaXAgcmVnaW9uIGZyb20gdGhlIHJpZ2h0KVxuICAgICAgICAgICAgaWYgKGIgPCBrMikge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkUG9pbnQoc2xpY2UsIGF4LCBheSwgYXopO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiIDwgazEgJiYgYSA+PSBrMSkge1xuICAgICAgICAgICAgLy8gPC0tfC0tLSAgfCBvciA8LS18LS0tLS18LS0tIChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgbGVmdClcbiAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiID4gazIgJiYgYSA8PSBrMikge1xuICAgICAgICAgICAgLy8gfCAgLS0tfC0tPiBvciAtLS18LS0tLS18LS0+IChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgcmlnaHQpXG4gICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazIpO1xuICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNQb2x5Z29uICYmIGV4aXRlZCkge1xuICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2UuZW5kID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChzbGljZSk7XG4gICAgICAgICAgICBzbGljZSA9IG5ld1NsaWNlKGdlb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgbGVuICs9IHNlZ0xlbjtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGxhc3QgcG9pbnRcbiAgICB2YXIgbGFzdCA9IGdlb20ubGVuZ3RoIC0gMztcbiAgICBheCA9IGdlb21bbGFzdF07XG4gICAgYXkgPSBnZW9tW2xhc3QgKyAxXTtcbiAgICBheiA9IGdlb21bbGFzdCArIDJdO1xuICAgIGEgPSBheGlzID09PSAwID8gYXggOiBheTtcbiAgICBpZiAoYSA+PSBrMSAmJiBhIDw9IGsyKSBhZGRQb2ludChzbGljZSwgYXgsIGF5LCBheik7XG5cbiAgICAvLyBjbG9zZSB0aGUgcG9seWdvbiBpZiBpdHMgZW5kcG9pbnRzIGFyZSBub3QgdGhlIHNhbWUgYWZ0ZXIgY2xpcHBpbmdcbiAgICBsYXN0ID0gc2xpY2UubGVuZ3RoIC0gMztcbiAgICBpZiAoaXNQb2x5Z29uICYmIGxhc3QgPj0gMyAmJiAoc2xpY2VbbGFzdF0gIT09IHNsaWNlWzBdIHx8IHNsaWNlW2xhc3QgKyAxXSAhPT0gc2xpY2VbMV0pKSB7XG4gICAgICAgIGFkZFBvaW50KHNsaWNlLCBzbGljZVswXSwgc2xpY2VbMV0sIHNsaWNlWzJdKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZpbmFsIHNsaWNlXG4gICAgaWYgKHNsaWNlLmxlbmd0aCkge1xuICAgICAgICBuZXdHZW9tLnB1c2goc2xpY2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbmV3U2xpY2UobGluZSkge1xuICAgIHZhciBzbGljZSA9IFtdO1xuICAgIHNsaWNlLnNpemUgPSBsaW5lLnNpemU7XG4gICAgc2xpY2Uuc3RhcnQgPSBsaW5lLnN0YXJ0O1xuICAgIHNsaWNlLmVuZCA9IGxpbmUuZW5kO1xuICAgIHJldHVybiBzbGljZTtcbn1cblxuZnVuY3Rpb24gY2xpcExpbmVzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNsaXBMaW5lKGdlb21baV0sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRQb2ludChvdXQsIHgsIHksIHopIHtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaCh5KTtcbiAgICBvdXQucHVzaCh6KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0WChvdXQsIGF4LCBheSwgYngsIGJ5LCB4KSB7XG4gICAgdmFyIHQgPSAoeCAtIGF4KSAvIChieCAtIGF4KTtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaChheSArIChieSAtIGF5KSAqIHQpO1xuICAgIG91dC5wdXNoKDEpO1xuICAgIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RZKG91dCwgYXgsIGF5LCBieCwgYnksIHkpIHtcbiAgICB2YXIgdCA9ICh5IC0gYXkpIC8gKGJ5IC0gYXkpO1xuICAgIG91dC5wdXNoKGF4ICsgKGJ4IC0gYXgpICogdCk7XG4gICAgb3V0LnB1c2goeSk7XG4gICAgb3V0LnB1c2goMSk7XG4gICAgcmV0dXJuIHQ7XG59XG4iLCJcbmltcG9ydCBjbGlwIGZyb20gJy4vY2xpcCc7XG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQ7XG4gICAgdmFyIG1lcmdlZCA9IGZlYXR1cmVzO1xuICAgIHZhciBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIDEsIC0xIC0gYnVmZmVyLCBidWZmZXIsICAgICAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIGxlZnQgd29ybGQgY29weVxuICAgIHZhciByaWdodCA9IGNsaXAoZmVhdHVyZXMsIDEsICAxIC0gYnVmZmVyLCAyICsgYnVmZmVyLCAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIHJpZ2h0IHdvcmxkIGNvcHlcblxuICAgIGlmIChsZWZ0IHx8IHJpZ2h0KSB7XG4gICAgICAgIG1lcmdlZCA9IGNsaXAoZmVhdHVyZXMsIDEsIC1idWZmZXIsIDEgKyBidWZmZXIsIDAsIC0xLCAyLCBvcHRpb25zKSB8fCBbXTsgLy8gY2VudGVyIHdvcmxkIGNvcHlcblxuICAgICAgICBpZiAobGVmdCkgbWVyZ2VkID0gc2hpZnRGZWF0dXJlQ29vcmRzKGxlZnQsIDEpLmNvbmNhdChtZXJnZWQpOyAvLyBtZXJnZSBsZWZ0IGludG8gY2VudGVyXG4gICAgICAgIGlmIChyaWdodCkgbWVyZ2VkID0gbWVyZ2VkLmNvbmNhdChzaGlmdEZlYXR1cmVDb29yZHMocmlnaHQsIC0xKSk7IC8vIG1lcmdlIHJpZ2h0IGludG8gY2VudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gc2hpZnRGZWF0dXJlQ29vcmRzKGZlYXR1cmVzLCBvZmZzZXQpIHtcbiAgICB2YXIgbmV3RmVhdHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG5ld0dlb21ldHJ5O1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JyB8fCB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeSwgb2Zmc2V0KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBuZXdQb2x5Z29uID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmZWF0dXJlLmdlb21ldHJ5W2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvbHlnb24ucHVzaChzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5W2pdW2tdLCBvZmZzZXQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChuZXdQb2x5Z29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0ZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeSwgZmVhdHVyZS50YWdzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBzaGlmdENvb3Jkcyhwb2ludHMsIG9mZnNldCkge1xuICAgIHZhciBuZXdQb2ludHMgPSBbXTtcbiAgICBuZXdQb2ludHMuc2l6ZSA9IHBvaW50cy5zaXplO1xuXG4gICAgaWYgKHBvaW50cy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1BvaW50cy5zdGFydCA9IHBvaW50cy5zdGFydDtcbiAgICAgICAgbmV3UG9pbnRzLmVuZCA9IHBvaW50cy5lbmQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgbmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldICsgb2Zmc2V0LCBwb2ludHNbaSArIDFdLCBwb2ludHNbaSArIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BvaW50cztcbn1cbiIsIlxuLy8gVHJhbnNmb3JtcyB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBmZWF0dXJlIGluIHRoZSBnaXZlbiB0aWxlIGZyb21cbi8vIG1lcmNhdG9yLXByb2plY3RlZCBzcGFjZSBpbnRvIChleHRlbnQgeCBleHRlbnQpIHRpbGUgc3BhY2UuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKHRpbGUsIGV4dGVudCkge1xuICAgIGlmICh0aWxlLnRyYW5zZm9ybWVkKSByZXR1cm4gdGlsZTtcblxuICAgIHZhciB6MiA9IDEgPDwgdGlsZS56LFxuICAgICAgICB0eCA9IHRpbGUueCxcbiAgICAgICAgdHkgPSB0aWxlLnksXG4gICAgICAgIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IHRpbGUuZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkucHVzaCh0cmFuc2Zvcm1Qb2ludChnZW9tW2pdLCBnZW9tW2ogKyAxXSwgZXh0ZW50LCB6MiwgdHgsIHR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciByaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGdlb21bal0ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmluZy5wdXNoKHRyYW5zZm9ybVBvaW50KGdlb21bal1ba10sIGdlb21bal1bayArIDFdLCBleHRlbnQsIHoyLCB0eCwgdHkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS5wdXNoKHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGlsZS50cmFuc2Zvcm1lZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoeCwgeSwgZXh0ZW50LCB6MiwgdHgsIHR5KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeCAqIHoyIC0gdHgpKSxcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeSAqIHoyIC0gdHkpKV07XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHosIHR4LCB0eSwgb3B0aW9ucykge1xuICAgIHZhciB0b2xlcmFuY2UgPSB6ID09PSBvcHRpb25zLm1heFpvb20gPyAwIDogb3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgeikgKiBvcHRpb25zLmV4dGVudCk7XG4gICAgdmFyIHRpbGUgPSB7XG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgbnVtUG9pbnRzOiAwLFxuICAgICAgICBudW1TaW1wbGlmaWVkOiAwLFxuICAgICAgICBudW1GZWF0dXJlczogMCxcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICB4OiB0eCxcbiAgICAgICAgeTogdHksXG4gICAgICAgIHo6IHosXG4gICAgICAgIHRyYW5zZm9ybWVkOiBmYWxzZSxcbiAgICAgICAgbWluWDogMixcbiAgICAgICAgbWluWTogMSxcbiAgICAgICAgbWF4WDogLTEsXG4gICAgICAgIG1heFk6IDBcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGlsZS5udW1GZWF0dXJlcysrO1xuICAgICAgICBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmVzW2ldLCB0b2xlcmFuY2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtaW5YID0gZmVhdHVyZXNbaV0ubWluWDtcbiAgICAgICAgdmFyIG1pblkgPSBmZWF0dXJlc1tpXS5taW5ZO1xuICAgICAgICB2YXIgbWF4WCA9IGZlYXR1cmVzW2ldLm1heFg7XG4gICAgICAgIHZhciBtYXhZID0gZmVhdHVyZXNbaV0ubWF4WTtcblxuICAgICAgICBpZiAobWluWCA8IHRpbGUubWluWCkgdGlsZS5taW5YID0gbWluWDtcbiAgICAgICAgaWYgKG1pblkgPCB0aWxlLm1pblkpIHRpbGUubWluWSA9IG1pblk7XG4gICAgICAgIGlmIChtYXhYID4gdGlsZS5tYXhYKSB0aWxlLm1heFggPSBtYXhYO1xuICAgICAgICBpZiAobWF4WSA+IHRpbGUubWF4WSkgdGlsZS5tYXhZID0gbWF4WTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZSwgdG9sZXJhbmNlLCBvcHRpb25zKSB7XG5cbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgIHNpbXBsaWZpZWQgPSBbXTtcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbSwgdGlsZSwgdG9sZXJhbmNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbVtpXSwgdGlsZSwgdG9sZXJhbmNlLCB0eXBlID09PSAnUG9seWdvbicsIGkgPT09IDApO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG5cbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBnZW9tLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgcG9seWdvbiA9IGdlb21ba107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgcG9seWdvbltpXSwgdGlsZSwgdG9sZXJhbmNlLCB0cnVlLCBpID09PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW1wbGlmaWVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgdGFncyA9IGZlYXR1cmUudGFncyB8fCBudWxsO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnICYmIG9wdGlvbnMubGluZU1ldHJpY3MpIHtcbiAgICAgICAgICAgIHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlLnRhZ3MpIHRhZ3Nba2V5XSA9IGZlYXR1cmUudGFnc1trZXldO1xuICAgICAgICAgICAgdGFnc1snbWFwYm94X2NsaXBfc3RhcnQnXSA9IGdlb20uc3RhcnQgLyBnZW9tLnNpemU7XG4gICAgICAgICAgICB0YWdzWydtYXBib3hfY2xpcF9lbmQnXSA9IGdlb20uZW5kIC8gZ2VvbS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aWxlRmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzaW1wbGlmaWVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nID8gMyA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnID8gMiA6IDEsXG4gICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmZWF0dXJlLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aWxlRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmUocmVzdWx0LCBnZW9tLCB0aWxlLCB0b2xlcmFuY2UsIGlzUG9seWdvbiwgaXNPdXRlcikge1xuICAgIHZhciBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZTtcblxuICAgIGlmICh0b2xlcmFuY2UgPiAwICYmIChnZW9tLnNpemUgPCAoaXNQb2x5Z29uID8gc3FUb2xlcmFuY2UgOiB0b2xlcmFuY2UpKSkge1xuICAgICAgICB0aWxlLm51bVBvaW50cyArPSBnZW9tLmxlbmd0aCAvIDM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmluZyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGlmICh0b2xlcmFuY2UgPT09IDAgfHwgZ2VvbVtpICsgMl0gPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgfVxuXG4gICAgaWYgKGlzUG9seWdvbikgcmV3aW5kKHJpbmcsIGlzT3V0ZXIpO1xuXG4gICAgcmVzdWx0LnB1c2gocmluZyk7XG59XG5cbmZ1bmN0aW9uIHJld2luZChyaW5nLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMjsgaSA8IGxlbjsgaiA9IGksIGkgKz0gMikge1xuICAgICAgICBhcmVhICs9IChyaW5nW2ldIC0gcmluZ1tqXSkgKiAocmluZ1tpICsgMV0gKyByaW5nW2ogKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmVhID4gMCA9PT0gY2xvY2t3aXNlKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoOyBpIDwgbGVuIC8gMjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHJpbmdbaV07XG4gICAgICAgICAgICB2YXIgeSA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgcmluZ1tpXSA9IHJpbmdbbGVuIC0gMiAtIGldO1xuICAgICAgICAgICAgcmluZ1tpICsgMV0gPSByaW5nW2xlbiAtIDEgLSBpXTtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMiAtIGldID0geDtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMSAtIGldID0geTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IGNvbnZlcnQgZnJvbSAnLi9jb252ZXJ0JzsgICAgIC8vIEdlb0pTT04gY29udmVyc2lvbiBhbmQgcHJlcHJvY2Vzc2luZ1xuaW1wb3J0IGNsaXAgZnJvbSAnLi9jbGlwJzsgICAgICAgICAgIC8vIHN0cmlwZSBjbGlwcGluZyBhbGdvcml0aG1cbmltcG9ydCB3cmFwIGZyb20gJy4vd3JhcCc7ICAgICAgICAgICAvLyBkYXRlIGxpbmUgcHJvY2Vzc2luZ1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybSc7IC8vIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25cbmltcG9ydCBjcmVhdGVUaWxlIGZyb20gJy4vdGlsZSc7ICAgICAvLyBmaW5hbCBzaW1wbGlmaWVkIHRpbGUgZ2VuZXJhdGlvblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW9qc29udnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLCBvcHRpb25zKTtcblxuICAgIHZhciBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoZGVidWcpIGNvbnNvbGUudGltZSgncHJlcHJvY2VzcyBkYXRhJyk7XG5cbiAgICBpZiAob3B0aW9ucy5tYXhab29tIDwgMCB8fCBvcHRpb25zLm1heFpvb20gPiAyNCkgdGhyb3cgbmV3IEVycm9yKCdtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZScpO1xuICAgIGlmIChvcHRpb25zLnByb21vdGVJZCAmJiBvcHRpb25zLmdlbmVyYXRlSWQpIHRocm93IG5ldyBFcnJvcigncHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuXG4gICAgdmFyIGZlYXR1cmVzID0gY29udmVydChkYXRhLCBvcHRpb25zKTtcblxuICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICB0aGlzLnRpbGVDb29yZHMgPSBbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3ByZXByb2Nlc3MgZGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZygnaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkJywgb3B0aW9ucy5pbmRleE1heFpvb20sIG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIHRoaXMuc3RhdHMgPSB7fTtcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMgPSB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKTtcblxuICAgIC8vIHN0YXJ0IHNsaWNpbmcgZnJvbSB0aGUgdG9wIHRpbGUgZG93blxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHRoaXMuc3BsaXRUaWxlKGZlYXR1cmVzLCAwLCAwLCAwKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSBjb25zb2xlLmxvZygnZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkJywgdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcywgdGhpcy50aWxlc1swXS5udW1Qb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aWxlcyBnZW5lcmF0ZWQ6JywgdGhpcy50b3RhbCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpO1xuICAgIH1cbn1cblxuR2VvSlNPTlZULnByb3RvdHlwZS5vcHRpb25zID0ge1xuICAgIG1heFpvb206IDE0LCAgICAgICAgICAgIC8vIG1heCB6b29tIHRvIHByZXNlcnZlIGRldGFpbCBvblxuICAgIGluZGV4TWF4Wm9vbTogNSwgICAgICAgIC8vIG1heCB6b29tIGluIHRoZSB0aWxlIGluZGV4XG4gICAgaW5kZXhNYXhQb2ludHM6IDEwMDAwMCwgLy8gbWF4IG51bWJlciBvZiBwb2ludHMgcGVyIHRpbGUgaW4gdGhlIHRpbGUgaW5kZXhcbiAgICB0b2xlcmFuY2U6IDMsICAgICAgICAgICAvLyBzaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2UgKGhpZ2hlciBtZWFucyBzaW1wbGVyKVxuICAgIGV4dGVudDogNDA5NiwgICAgICAgICAgIC8vIHRpbGUgZXh0ZW50XG4gICAgYnVmZmVyOiA2NCwgICAgICAgICAgICAgLy8gdGlsZSBidWZmZXIgb24gZWFjaCBzaWRlXG4gICAgbGluZU1ldHJpY3M6IGZhbHNlLCAgICAgLy8gd2hldGhlciB0byBjYWxjdWxhdGUgbGluZSBtZXRyaWNzXG4gICAgcHJvbW90ZUlkOiBudWxsLCAgICAgICAgLy8gbmFtZSBvZiBhIGZlYXR1cmUgcHJvcGVydHkgdG8gYmUgcHJvbW90ZWQgdG8gZmVhdHVyZS5pZFxuICAgIGdlbmVyYXRlSWQ6IGZhbHNlLCAgICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgZmVhdHVyZSBpZHMuIENhbm5vdCBiZSB1c2VkIHdpdGggcHJvbW90ZUlkXG4gICAgZGVidWc6IDAgICAgICAgICAgICAgICAgLy8gbG9nZ2luZyBsZXZlbCAoMCwgMSBvciAyKVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5zcGxpdFRpbGUgPSBmdW5jdGlvbiAoZmVhdHVyZXMsIHosIHgsIHksIGN6LCBjeCwgY3kpIHtcblxuICAgIHZhciBzdGFjayA9IFtmZWF0dXJlcywgeiwgeCwgeV0sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIC8vIGF2b2lkIHJlY3Vyc2lvbiBieSB1c2luZyBhIHByb2Nlc3NpbmcgcXVldWVcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB6ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGZlYXR1cmVzID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgdmFyIHoyID0gMSA8PCB6LFxuICAgICAgICAgICAgaWQgPSB0b0lEKHosIHgsIHkpLFxuICAgICAgICAgICAgdGlsZSA9IHRoaXMudGlsZXNbaWRdO1xuXG4gICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjcmVhdGlvbicpO1xuXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0gPSBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6LCB4LCB5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OiB6LCB4OiB4LCB5OiB5fSk7XG5cbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB6LCB4LCB5LCB0aWxlLm51bUZlYXR1cmVzLCB0aWxlLm51bVBvaW50cywgdGlsZS5udW1TaW1wbGlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gJ3onICsgejtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRzW2tleV0gPSAodGhpcy5zdGF0c1trZXldIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBnZW9tZXRyeSBpbiB0aWxlIHNvIHRoYXQgd2UgY2FuIGRyaWxsIGRvd24gbGF0ZXIgaWYgd2Ugc3RvcCBub3dcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBmZWF0dXJlcztcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdC1wYXNzIHRpbGluZ1xuICAgICAgICBpZiAoIWN6KSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIG1heCB6b29tLCBvciBpZiB0aGUgdGlsZSBpcyB0b28gc2ltcGxlXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5pbmRleE1heFpvb20gfHwgdGlsZS5udW1Qb2ludHMgPD0gb3B0aW9ucy5pbmRleE1heFBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgYSBkcmlsbGRvd24gdG8gYSBzcGVjaWZpYyB0aWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIGJhc2Ugem9vbSBvciBvdXIgdGFyZ2V0IHRpbGUgem9vbVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMubWF4Wm9vbSB8fCB6ID09PSBjeikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIGl0J3Mgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSB0YXJnZXQgdGlsZVxuICAgICAgICAgICAgdmFyIG0gPSAxIDw8IChjeiAtIHopO1xuICAgICAgICAgICAgaWYgKHggIT09IE1hdGguZmxvb3IoY3ggLyBtKSB8fCB5ICE9PSBNYXRoLmZsb29yKGN5IC8gbSkpIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2Ugc2xpY2UgZnVydGhlciBkb3duLCBubyBuZWVkIHRvIGtlZXAgc291cmNlIGdlb21ldHJ5XG4gICAgICAgIHRpbGUuc291cmNlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgLy8gdmFsdWVzIHdlJ2xsIHVzZSBmb3IgY2xpcHBpbmdcbiAgICAgICAgdmFyIGsxID0gMC41ICogb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgICAgIGsyID0gMC41IC0gazEsXG4gICAgICAgICAgICBrMyA9IDAuNSArIGsxLFxuICAgICAgICAgICAgazQgPSAxICsgazEsXG4gICAgICAgICAgICB0bCwgYmwsIHRyLCBiciwgbGVmdCwgcmlnaHQ7XG5cbiAgICAgICAgdGwgPSBibCA9IHRyID0gYnIgPSBudWxsO1xuXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgejIsIHggLSBrMSwgeCArIGszLCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgejIsIHggKyBrMiwgeCArIGs0LCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIGZlYXR1cmVzID0gbnVsbDtcblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgdGwgPSBjbGlwKGxlZnQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgYmwgPSBjbGlwKGxlZnQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgbGVmdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIHRyID0gY2xpcChyaWdodCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBiciA9IGNsaXAocmlnaHQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmlnaHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdjbGlwcGluZycpO1xuXG4gICAgICAgIHN0YWNrLnB1c2godGwgfHwgW10sIHogKyAxLCB4ICogMiwgICAgIHkgKiAyKTtcbiAgICAgICAgc3RhY2sucHVzaChibCB8fCBbXSwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIgKyAxKTtcbiAgICAgICAgc3RhY2sucHVzaCh0ciB8fCBbXSwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIpO1xuICAgICAgICBzdGFjay5wdXNoKGJyIHx8IFtdLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMiArIDEpO1xuICAgIH1cbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuZ2V0VGlsZSA9IGZ1bmN0aW9uICh6LCB4LCB5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGV4dGVudCA9IG9wdGlvbnMuZXh0ZW50LFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoeiA8IDAgfHwgeiA+IDI0KSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB6MiA9IDEgPDwgejtcbiAgICB4ID0gKCh4ICUgejIpICsgejIpICUgejI7IC8vIHdyYXAgdGlsZSB4IGNvb3JkaW5hdGVcblxuICAgIHZhciBpZCA9IHRvSUQoeiwgeCwgeSk7XG4gICAgaWYgKHRoaXMudGlsZXNbaWRdKSByZXR1cm4gdHJhbnNmb3JtKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2RyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkJywgeiwgeCwgeSk7XG5cbiAgICB2YXIgejAgPSB6LFxuICAgICAgICB4MCA9IHgsXG4gICAgICAgIHkwID0geSxcbiAgICAgICAgcGFyZW50O1xuXG4gICAgd2hpbGUgKCFwYXJlbnQgJiYgejAgPiAwKSB7XG4gICAgICAgIHowLS07XG4gICAgICAgIHgwID0gTWF0aC5mbG9vcih4MCAvIDIpO1xuICAgICAgICB5MCA9IE1hdGguZmxvb3IoeTAgLyAyKTtcbiAgICAgICAgcGFyZW50ID0gdGhpcy50aWxlc1t0b0lEKHowLCB4MCwgeTApXTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnNvdXJjZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCBhIHBhcmVudCB0aWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGdlb21ldHJ5LCB3ZSBjYW4gZHJpbGwgZG93biBmcm9tIGl0XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2ZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCcsIHowLCB4MCwgeTApO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdkcmlsbGluZyBkb3duJyk7XG4gICAgdGhpcy5zcGxpdFRpbGUocGFyZW50LnNvdXJjZSwgejAsIHgwLCB5MCwgeiwgeCwgeSk7XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdkcmlsbGluZyBkb3duJyk7XG5cbiAgICByZXR1cm4gdGhpcy50aWxlc1tpZF0gPyB0cmFuc2Zvcm0odGhpcy50aWxlc1tpZF0sIGV4dGVudCkgOiBudWxsO1xufTtcblxuZnVuY3Rpb24gdG9JRCh6LCB4LCB5KSB7XG4gICAgcmV0dXJuICgoKDEgPDwgeikgKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yICh2YXIgaSBpbiBzcmMpIGRlc3RbaV0gPSBzcmNbaV07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT059IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCB7UmVxdWVzdFBlcmZvcm1hbmNlfSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlJztcbmltcG9ydCByZXdpbmQgZnJvbSAnQG1hcGJveC9nZW9qc29uLXJld2luZCc7XG5pbXBvcnQgR2VvSlNPTldyYXBwZXIgZnJvbSAnLi9nZW9qc29uX3dyYXBwZXInO1xuaW1wb3J0IHZ0cGJmIGZyb20gJ3Z0LXBiZic7XG5pbXBvcnQgU3VwZXJjbHVzdGVyIGZyb20gJ3N1cGVyY2x1c3Rlcic7XG5pbXBvcnQgZ2VvanNvbnZ0IGZyb20gJ2dlb2pzb24tdnQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5cbmltcG9ydCB0eXBlIHtMb2FkVmVjdG9yRGF0YUNhbGxiYWNrfSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExvYWRHZW9KU09OUGFyYW1ldGVycyA9IHtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgZGF0YT86IHN0cmluZyxcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBjbHVzdGVyOiBib29sZWFuLFxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM/OiBPYmplY3QsXG4gICAgZ2VvanNvblZ0T3B0aW9ucz86IE9iamVjdCxcbiAgICBjbHVzdGVyUHJvcGVydGllcz86IE9iamVjdFxufTtcblxuZXhwb3J0IHR5cGUgTG9hZEdlb0pTT04gPSAocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvSlNPTkluZGV4IHtcbiAgICBnZXRUaWxlKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBPYmplY3Q7XG5cbiAgICAvLyBzdXBlcmNsdXN0ZXIgbWV0aG9kc1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyKTogbnVtYmVyO1xuICAgIGdldENoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyKTogQXJyYXk8R2VvSlNPTkZlYXR1cmU+O1xuICAgIGdldExlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIpOiBBcnJheTxHZW9KU09ORmVhdHVyZT47XG59XG5cbmZ1bmN0aW9uIGxvYWRHZW9KU09OVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IHBhcmFtcy50aWxlSUQuY2Fub25pY2FsO1xuXG4gICAgaWYgKCF0aGlzLl9nZW9KU09OSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpOyAgLy8gd2UgY291bGRuJ3QgbG9hZCB0aGUgZmlsZVxuICAgIH1cblxuICAgIGNvbnN0IGdlb0pTT05UaWxlID0gdGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgaWYgKCFnZW9KU09OVGlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7IC8vIG5vdGhpbmcgaW4gdGhlIGdpdmVuIHRpbGVcbiAgICB9XG5cbiAgICBjb25zdCBnZW9qc29uV3JhcHBlciA9IG5ldyBHZW9KU09OV3JhcHBlcihnZW9KU09OVGlsZS5mZWF0dXJlcyk7XG5cbiAgICAvLyBFbmNvZGUgdGhlIGdlb2pzb24tdnQgdGlsZSBpbnRvIGJpbmFyeSB2ZWN0b3IgdGlsZSBmb3JtLiAgVGhpc1xuICAgIC8vIGlzIGEgY29udmVuaWVuY2UgdGhhdCBhbGxvd3MgYEZlYXR1cmVJbmRleGAgdG8gb3BlcmF0ZSB0aGUgc2FtZSB3YXlcbiAgICAvLyBhY3Jvc3MgYFZlY3RvclRpbGVTb3VyY2VgIGFuZCBgR2VvSlNPTlNvdXJjZWAgZGF0YS5cbiAgICBsZXQgcGJmID0gdnRwYmYoZ2VvanNvbldyYXBwZXIpO1xuICAgIGlmIChwYmYuYnl0ZU9mZnNldCAhPT0gMCB8fCBwYmYuYnl0ZUxlbmd0aCAhPT0gcGJmLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCBub2RlIEJ1ZmZlciAoaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9wYmYvaXNzdWVzLzM1KVxuICAgICAgICBwYmYgPSBuZXcgVWludDhBcnJheShwYmYpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdmVjdG9yVGlsZTogZ2VvanNvbldyYXBwZXIsXG4gICAgICAgIHJhd0RhdGE6IHBiZi5idWZmZXJcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU3RhdGUgPVxuICAgIHwgJ0lkbGUnICAgICAgICAgICAgLy8gU291cmNlIGVtcHR5IG9yIGRhdGEgbG9hZGVkXG4gICAgfCAnQ29hbGVzY2luZycgICAgICAvLyBEYXRhIGZpbmlzaGVkIGxvYWRpbmcsIGJ1dCBkaXNjYXJkICdsb2FkRGF0YScgbWVzc2FnZXMgdW50aWwgcmVjZWl2aW5nICdjb2FsZXNjZWQnXG4gICAgfCAnTmVlZHNMb2FkRGF0YSc7ICAvLyAnbG9hZERhdGEnIHJlY2VpdmVkIHdoaWxlIGNvYWxlc2NpbmcsIHRyaWdnZXIgb25lIG1vcmUgJ2xvYWREYXRhJyBvbiByZWNlaXZpbmcgJ2NvYWxlc2NlZCdcblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgR2VvSlNPTlNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgR2VvSlNPTlxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgR2VvSlNPTldvcmtlclNvdXJjZShhY3RvciwgbGF5ZXJJbmRleCwgY3VzdG9tTG9hZEdlb0pTT05GdW5jdGlvbilgLlxuICogRm9yIGEgZnVsbCBleGFtcGxlLCBzZWUgW21hcGJveC1nbC10b3BvanNvbl0oaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BtZW50c2VlZC9tYXBib3gtZ2wtdG9wb2pzb24pLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdlb0pTT05Xb3JrZXJTb3VyY2UgZXh0ZW5kcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIHtcbiAgICBsb2FkR2VvSlNPTjogTG9hZEdlb0pTT047XG4gICAgX3N0YXRlOiBTb3VyY2VTdGF0ZTtcbiAgICBfcGVuZGluZ0NhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT47XG4gICAgX3BlbmRpbmdMb2FkRGF0YVBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzO1xuICAgIF9nZW9KU09OSW5kZXg6IEdlb0pTT05JbmRleFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkR2VvSlNPTl0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZy9wYXJzaW5nIG9mXG4gICAgICogR2VvSlNPTiBiYXNlZCBvbiBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHRoZSBtYWluLXRocmVhZCBTb3VyY2UuXG4gICAgICogU2VlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRHZW9KU09OfS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkR2VvSlNPTjogP0xvYWRHZW9KU09OKSB7XG4gICAgICAgIHN1cGVyKGFjdG9yLCBsYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXMsIGxvYWRHZW9KU09OVGlsZSk7XG4gICAgICAgIGlmIChsb2FkR2VvSlNPTikge1xuICAgICAgICAgICAgdGhpcy5sb2FkR2VvSlNPTiA9IGxvYWRHZW9KU09OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyAoaWYgYXBwcm9wcmlhdGUpLCBwYXJzZXMsIGFuZCBpbmRleCBnZW9qc29uIGRhdGEgaW50byB0aWxlcy4gVGhpc1xuICAgICAqIHByZXBhcmF0b3J5IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZFRpbGV9XG4gICAgICogY2FuIGNvcnJlY3RseSBzZXJ2ZSB1cCB0aWxlcy5cbiAgICAgKlxuICAgICAqIERlZmVycyB0byB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkR2VvSlNPTn0gZm9yIHRoZSBmZXRjaGluZy9wYXJzaW5nLFxuICAgICAqIGV4cGVjdGluZyBgY2FsbGJhY2soZXJyb3IsIGRhdGEpYCB0byBiZSBjYWxsZWQgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3IgYVxuICAgICAqIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFdoZW4gYGxvYWREYXRhYCByZXF1ZXN0cyBjb21lIGluIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHByb2Nlc3NlZCxcbiAgICAgKiB0aGV5IGFyZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSByZXF1ZXN0IHVzaW5nIHRoZSBsYXRlc3QgZGF0YS5cbiAgICAgKiBTZWUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjY29hbGVzY2V9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICovXG4gICAgbG9hZERhdGEocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgZm9yZWdyb3VuZCB0aGUgcHJldmlvdXMgY2FsbCBoYXMgYmVlbiBhYmFuZG9uZWRcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlICE9PSAnSWRsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ05lZWRzTG9hZERhdGEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb246IGNhbGxlZCBkaXJlY3RseSBieSBgbG9hZERhdGFgXG4gICAgICogb3IgYnkgYGNvYWxlc2NlYCB1c2luZyBzdG9yZWQgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBfbG9hZERhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0NhbGxiYWNrIHx8ICF0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2s7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjaztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBSZXF1ZXN0UGVyZm9ybWFuY2UocGFyYW1zLnJlcXVlc3QpIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sb2FkR2VvSlNPTihwYXJhbXMsIChlcnI6ID9FcnJvciwgZGF0YTogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciB8fCAhZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJld2luZChkYXRhLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlb0pTT05JbmRleCA9IHBhcmFtcy5jbHVzdGVyID9cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdXBlcmNsdXN0ZXIoZ2V0U3VwZXJjbHVzdGVyT3B0aW9ucyhwYXJhbXMpKS5sb2FkKGRhdGEuZmVhdHVyZXMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb2pzb252dChkYXRhLCBwYXJhbXMuZ2VvanNvblZ0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAocGVyZikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5lY2Vzc2FyeSB0byBldmFsIHRoZSByZXN1bHQgb2YgZ2V0RW50cmllc0J5TmFtZSgpIGhlcmUgdmlhIHBhcnNlL3N0cmluZ2lmeVxuICAgICAgICAgICAgICAgICAgICAvLyBsYXRlIGV2YWx1YXRpb24gaW4gdGhlIG1haW4gdGhyZWFkIGNhdXNlcyBUeXBlRXJyb3I6IGlsbGVnYWwgaW52b2NhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb3VyY2VUaW1pbmcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1twYXJhbXMuc291cmNlXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VUaW1pbmdEYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hpbGUgcHJvY2Vzc2luZyBgbG9hZERhdGFgLCB3ZSBjb2FsZXNjZSBhbGwgZnVydGhlclxuICAgICAqIGBsb2FkRGF0YWAgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBjYWxsIHRvIF9sb2FkRGF0YVxuICAgICAqIHRoYXQgd2lsbCBoYXBwZW4gb25jZSB3ZSd2ZSBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZVxuICAgICAqIGZpcnN0IG1lc3NhZ2UuIHtAbGluayBHZW9KU09OU291cmNlI191cGRhdGVXb3JrZXJEYXRhfVxuICAgICAqIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHVzIHRoZSBgY29hbGVzY2VgIG1lc3NhZ2VcbiAgICAgKiBhdCB0aGUgdGltZSBpdCByZWNlaXZlcyBhIHJlc3BvbnNlIGZyb20gYGxvYWREYXRhYFxuICAgICAqXG4gICAgICogICAgICAgICAgU3RhdGU6IElkbGVcbiAgICAgKiAgICAgICAgICDDosKGwpEgICAgICAgICAgfFxuICAgICAqICAgICAnY29hbGVzY2UnICAgJ2xvYWREYXRhJ1xuICAgICAqICAgICAgICAgIHwgICAgICh0cmlnZ2VycyBsb2FkKVxuICAgICAqICAgICAgICAgIHwgICAgICAgICAgw6LChsKTXG4gICAgICogICAgICAgIFN0YXRlOiBDb2FsZXNjaW5nXG4gICAgICogICAgICAgICAgw6LChsKRICAgICAgICAgIHxcbiAgICAgKiAgICh0cmlnZ2VycyBsb2FkKSAgIHxcbiAgICAgKiAgICAgJ2NvYWxlc2NlJyAgICdsb2FkRGF0YSdcbiAgICAgKiAgICAgICAgICB8ICAgICAgICAgIMOiwobCk1xuICAgICAqICAgICAgICBTdGF0ZTogTmVlZHNMb2FkRGF0YVxuICAgICAqL1xuICAgIGNvYWxlc2NlKCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdDb2FsZXNjaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnSWRsZSc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICdOZWVkc0xvYWREYXRhJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVsb2FkVGlsZX0uXG4gICAgKlxuICAgICogSWYgdGhlIHRpbGUgaXMgbG9hZGVkLCB1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBWZWN0b3JUaWxlV29ya2VyU291cmNlLlxuICAgICogT3RoZXJ3aXNlLCBzdWNoIGFzIGFmdGVyIGEgc2V0RGF0YSgpIGNhbGwsIHdlIGxvYWQgdGhlIHRpbGUgZnJlc2guXG4gICAgKlxuICAgICogQHBhcmFtIHBhcmFtc1xuICAgICogQHBhcmFtIHBhcmFtcy51aWQgVGhlIFVJRCBmb3IgdGhpcyB0aWxlLlxuICAgICovXG4gICAgcmVsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcblxuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIucmVsb2FkVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2ggYW5kIHBhcnNlIEdlb0pTT04gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBwYXJhbXMuICBDYWxscyBgY2FsbGJhY2tgXG4gICAgICogd2l0aCBgKGVyciwgZGF0YSlgLCB3aGVyZSBgZGF0YWAgaXMgYSBwYXJzZWQgR2VvSlNPTiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBHZW9KU09OIGlzIGxvYWRlZCBhbmQgcGFyc2VkIGZyb20gYHBhcmFtcy51cmxgIGlmIGl0IGV4aXN0cywgb3IgZWxzZVxuICAgICAqIGV4cGVjdGVkIGFzIGEgbGl0ZXJhbCAoc3RyaW5nIG9yIG9iamVjdCkgYHBhcmFtcy5kYXRhYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gW3BhcmFtcy51cmxdIEEgVVJMIHRvIHRoZSByZW1vdGUgR2VvSlNPTiBkYXRhLlxuICAgICAqIEBwYXJhbSBbcGFyYW1zLmRhdGFdIExpdGVyYWwgR2VvSlNPTiBkYXRhLiBNdXN0IGJlIHByb3ZpZGVkIGlmIGBwYXJhbXMudXJsYCBpcyBub3QuXG4gICAgICovXG4gICAgbG9hZEdlb0pTT04ocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pIHtcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBzYW1lIG9yaWdpbiBpc3N1ZXMsIHVybHMgbXVzdCBlaXRoZXIgaW5jbHVkZSBhbiBleHBsaWNpdFxuICAgICAgICAvLyBvcmlnaW4gb3IgYWJzb2x1dGUgcGF0aC5cbiAgICAgICAgLy8gaWU6IC9mb28vYmFyLmpzb24gb3IgaHR0cDovL2V4YW1wbGUuY29tL2Jhci5qc29uXG4gICAgICAgIC8vIGJ1dCBub3QgLi4vZm9vL2Jhci5qc29uXG4gICAgICAgIGlmIChwYXJhbXMucmVxdWVzdCkge1xuICAgICAgICAgICAgZ2V0SlNPTihwYXJhbXMucmVxdWVzdCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UocGFyYW1zLmRhdGEpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVTb3VyY2UocGFyYW1zOiB7c291cmNlOiBzdHJpbmd9LCBjYWxsYmFjazogQ2FsbGJhY2s8bWl4ZWQ+KSB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIERvbid0IGxlYWsgY2FsbGJhY2tzXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCwge2FiYW5kb25lZDogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20ocGFyYW1zOiB7Y2x1c3RlcklkOiBudW1iZXJ9LCBjYWxsYmFjazogQ2FsbGJhY2s8bnVtYmVyPikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENsdXN0ZXJFeHBhbnNpb25ab29tKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyQ2hpbGRyZW4ocGFyYW1zOiB7Y2x1c3RlcklkOiBudW1iZXJ9LCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyTGVhdmVzKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGlzLl9nZW9KU09OSW5kZXguZ2V0TGVhdmVzKHBhcmFtcy5jbHVzdGVySWQsIHBhcmFtcy5saW1pdCwgcGFyYW1zLm9mZnNldCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3VwZXJjbHVzdGVyT3B0aW9ucyh7c3VwZXJjbHVzdGVyT3B0aW9ucywgY2x1c3RlclByb3BlcnRpZXN9KSB7XG4gICAgaWYgKCFjbHVzdGVyUHJvcGVydGllcyB8fCAhc3VwZXJjbHVzdGVyT3B0aW9ucykgcmV0dXJuIHN1cGVyY2x1c3Rlck9wdGlvbnM7XG5cbiAgICBjb25zdCBtYXBFeHByZXNzaW9ucyA9IHt9O1xuICAgIGNvbnN0IHJlZHVjZUV4cHJlc3Npb25zID0ge307XG4gICAgY29uc3QgZ2xvYmFscyA9IHthY2N1bXVsYXRlZDogbnVsbCwgem9vbTogMH07XG4gICAgY29uc3QgZmVhdHVyZSA9IHtwcm9wZXJ0aWVzOiBudWxsfTtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMoY2x1c3RlclByb3BlcnRpZXMpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICBjb25zdCBbb3BlcmF0b3IsIG1hcEV4cHJlc3Npb25dID0gY2x1c3RlclByb3BlcnRpZXNba2V5XTtcblxuICAgICAgICBjb25zdCBtYXBFeHByZXNzaW9uUGFyc2VkID0gY3JlYXRlRXhwcmVzc2lvbihtYXBFeHByZXNzaW9uKTtcbiAgICAgICAgY29uc3QgcmVkdWNlRXhwcmVzc2lvblBhcnNlZCA9IGNyZWF0ZUV4cHJlc3Npb24oXG4gICAgICAgICAgICB0eXBlb2Ygb3BlcmF0b3IgPT09ICdzdHJpbmcnID8gW29wZXJhdG9yLCBbJ2FjY3VtdWxhdGVkJ10sIFsnZ2V0Jywga2V5XV0gOiBvcGVyYXRvcik7XG5cbiAgICAgICAgYXNzZXJ0KG1hcEV4cHJlc3Npb25QYXJzZWQucmVzdWx0ID09PSAnc3VjY2VzcycpO1xuICAgICAgICBhc3NlcnQocmVkdWNlRXhwcmVzc2lvblBhcnNlZC5yZXN1bHQgPT09ICdzdWNjZXNzJyk7XG5cbiAgICAgICAgbWFwRXhwcmVzc2lvbnNba2V5XSA9IG1hcEV4cHJlc3Npb25QYXJzZWQudmFsdWU7XG4gICAgICAgIHJlZHVjZUV4cHJlc3Npb25zW2tleV0gPSByZWR1Y2VFeHByZXNzaW9uUGFyc2VkLnZhbHVlO1xuICAgIH1cblxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnMubWFwID0gKHBvaW50UHJvcGVydGllcykgPT4ge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMgPSBwb2ludFByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcHJvcGVydGllc1trZXldID0gbWFwRXhwcmVzc2lvbnNba2V5XS5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9O1xuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnMucmVkdWNlID0gKGFjY3VtdWxhdGVkLCBjbHVzdGVyUHJvcGVydGllcykgPT4ge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMgPSBjbHVzdGVyUHJvcGVydGllcztcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgZ2xvYmFscy5hY2N1bXVsYXRlZCA9IGFjY3VtdWxhdGVkW2tleV07XG4gICAgICAgICAgICBhY2N1bXVsYXRlZFtrZXldID0gcmVkdWNlRXhwcmVzc2lvbnNba2V5XS5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gc3VwZXJjbHVzdGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTldvcmtlclNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcblxuaW1wb3J0IFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi9yYXN0ZXJfZGVtX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgR2VvSlNPTldvcmtlclNvdXJjZSBmcm9tICcuL2dlb2pzb25fd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3BsdWdpbiBhcyBnbG9iYWxSVExUZXh0UGx1Z2lufSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQge2VuZm9yY2VDYWNoZVNpemVMaW1pdH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyU291cmNlLFxuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbiAgICBXb3JrZXJERU1UaWxlQ2FsbGJhY2ssXG4gICAgVGlsZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSB7V29ya2VyR2xvYmFsU2NvcGVJbnRlcmZhY2V9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcic7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1BsdWdpblN0YXRlfSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyIHtcbiAgICBzZWxmOiBXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZTtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleGVzOiB7IFtzdHJpbmddOiBTdHlsZUxheWVySW5kZXggfTtcbiAgICBhdmFpbGFibGVJbWFnZXM6IHsgW3N0cmluZ106IEFycmF5PHN0cmluZz4gfTtcbiAgICB3b3JrZXJTb3VyY2VUeXBlczogeyBbc3RyaW5nXTogQ2xhc3M8V29ya2VyU291cmNlPiB9O1xuICAgIHdvcmtlclNvdXJjZXM6IHsgW3N0cmluZ106IHsgW3N0cmluZ106IHsgW3N0cmluZ106IFdvcmtlclNvdXJjZSB9IH0gfTtcbiAgICBkZW1Xb3JrZXJTb3VyY2VzOiB7IFtzdHJpbmddOiB7IFtzdHJpbmddOiBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIH0gfTtcbiAgICByZWZlcnJlcjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlKSB7XG4gICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBuZXcgQWN0b3Ioc2VsZiwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSB7fTtcblxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZVR5cGVzID0ge1xuICAgICAgICAgICAgdmVjdG9yOiBWZWN0b3JUaWxlV29ya2VyU291cmNlLFxuICAgICAgICAgICAgZ2VvanNvbjogR2VvSlNPTldvcmtlclNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFttYXBJZF1bc291cmNlVHlwZV1bc291cmNlTmFtZV0gPT4gd29ya2VyIHNvdXJjZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlID0gKG5hbWU6IHN0cmluZywgV29ya2VyU291cmNlOiBDbGFzczxXb3JrZXJTb3VyY2U+KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSA9IFdvcmtlclNvdXJjZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUaGlzIGlzIGludm9rZWQgYnkgdGhlIFJUTCB0ZXh0IHBsdWdpbiB3aGVuIHRoZSBkb3dubG9hZCB2aWEgdGhlIGBpbXBvcnRTY3JpcHRzYCBjYWxsIGhhcyBmaW5pc2hlZCwgYW5kIHRoZSBjb2RlIGhhcyBiZWVuIHBhcnNlZC5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyUlRMVGV4dFBsdWdpbiA9IChydGxUZXh0UGx1Z2luOiB7YXBwbHlBcmFiaWNTaGFwaW5nOiBGdW5jdGlvbiwgcHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0OiBGdW5jdGlvbiwgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0PzogRnVuY3Rpb259KSA9PiB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsnYXBwbHlBcmFiaWNTaGFwaW5nJ10gPSBydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZztcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ3Byb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCddID0gcnRsVGV4dFBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ7XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQnXSA9IHJ0bFRleHRQbHVnaW4ucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNldFJlZmVycmVyKG1hcElEOiBzdHJpbmcsIHJlZmVycmVyOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZWZlcnJlciA9IHJlZmVycmVyO1xuICAgIH1cblxuICAgIHNldEltYWdlcyhtYXBJZDogc3RyaW5nLCBpbWFnZXM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXNbbWFwSWRdID0gaW1hZ2VzO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHNldExheWVycyhtYXBJZDogc3RyaW5nLCBsYXllcnM6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKS5yZXBsYWNlKGxheWVycyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJzKG1hcElkOiBzdHJpbmcsIHBhcmFtczoge2xheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgcmVtb3ZlZElkczogQXJyYXk8c3RyaW5nPn0sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKS51cGRhdGUocGFyYW1zLmxheWVycywgcGFyYW1zLnJlbW92ZWRJZHMpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMgJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICB0aGlzLmdldFdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnR5cGUsIHBhcmFtcy5zb3VyY2UpLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGxvYWRERU1UaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJERU1UaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy5zb3VyY2UpLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkucmVsb2FkVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkuYWJvcnRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW1vdmVERU1UaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy5zb3VyY2UpLnJlbW92ZVRpbGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZW1vdmVTb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7c291cmNlOiBzdHJpbmd9ICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy5zb3VyY2UpO1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSB8fFxuICAgICAgICAgICAgIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bcGFyYW1zLnR5cGVdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bcGFyYW1zLnR5cGVdW3BhcmFtcy5zb3VyY2VdO1xuICAgICAgICBkZWxldGUgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG5cbiAgICAgICAgaWYgKHdvcmtlci5yZW1vdmVTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd29ya2VyLnJlbW92ZVNvdXJjZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGEge0BsaW5rIFdvcmtlclNvdXJjZX0gc2NyaXB0IGF0IHBhcmFtcy51cmwuICBUaGUgc2NyaXB0IGlzIHJ1blxuICAgICAqICh1c2luZyBpbXBvcnRTY3JpcHRzKSB3aXRoIGByZWdpc3RlcldvcmtlclNvdXJjZWAgaW4gc2NvcGUsIHdoaWNoIGlzIGFcbiAgICAgKiBmdW5jdGlvbiB0YWtpbmcgYChuYW1lLCB3b3JrZXJTb3VyY2VPYmplY3QpYC5cbiAgICAgKiAgQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkV29ya2VyU291cmNlKG1hcDogc3RyaW5nLCBwYXJhbXM6IHsgdXJsOiBzdHJpbmcgfSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhwYXJhbXMudXJsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jUlRMUGx1Z2luU3RhdGUobWFwOiBzdHJpbmcsIHN0YXRlOiBQbHVnaW5TdGF0ZSwgY2FsbGJhY2s6IENhbGxiYWNrPGJvb2xlYW4+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luLnNldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblVSTCA9IGdsb2JhbFJUTFRleHRQbHVnaW4uZ2V0UGx1Z2luVVJMKCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc0xvYWRlZCgpICYmXG4gICAgICAgICAgICAgICAgIWdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKSAmJlxuICAgICAgICAgICAgICAgIHBsdWdpblVSTCAhPSBudWxsIC8vIE5vdCBwb3NzaWJsZSB3aGVuIGBpc0xvYWRlZGAgaXMgdHJ1ZSwgYnV0IGtlZXBzIGZsb3cgaGFwcHlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBsdWdpblVSTCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGUgPSBnbG9iYWxSVExUZXh0UGx1Z2luLmlzUGFyc2VkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBjb21wbGV0ZSA/IHVuZGVmaW5lZCA6IG5ldyBFcnJvcihgUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICR7cGx1Z2luVVJMfWApO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVJbWFnZXMobWFwSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5hdmFpbGFibGVJbWFnZXNbbWFwSWRdO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlSW1hZ2VzKSB7XG4gICAgICAgICAgICBhdmFpbGFibGVJbWFnZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdmFpbGFibGVJbWFnZXM7XG4gICAgfVxuXG4gICAgZ2V0TGF5ZXJJbmRleChtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBsYXllckluZGV4ZXMgPSB0aGlzLmxheWVySW5kZXhlc1ttYXBJZF07XG4gICAgICAgIGlmICghbGF5ZXJJbmRleGVzKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ZXMgPSB0aGlzLmxheWVySW5kZXhlc1ttYXBJZF0gPSBuZXcgU3R5bGVMYXllckluZGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVySW5kZXhlcztcbiAgICB9XG5cbiAgICBnZXRXb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF0pXG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdID0ge307XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV0gPSB7fTtcblxuICAgICAgICBpZiAoIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXSkge1xuICAgICAgICAgICAgLy8gdXNlIGEgd3JhcHBlZCBhY3RvciBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggYSB0YXJnZXQgbWFwSWQgcGFyYW1cbiAgICAgICAgICAgIC8vIHRvIGFueSBtZXNzYWdlcyBpbnZva2VkIGJ5IHRoZSBXb3JrZXJTb3VyY2VcbiAgICAgICAgICAgIGNvbnN0IGFjdG9yID0ge1xuICAgICAgICAgICAgICAgIHNlbmQ6ICh0eXBlLCBkYXRhLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdG9yLnNlbmQodHlwZSwgZGF0YSwgY2FsbGJhY2ssIG1hcElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdID0gbmV3ICh0aGlzLndvcmtlclNvdXJjZVR5cGVzW3R5cGVdOiBhbnkpKChhY3RvcjogYW55KSwgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKSwgdGhpcy5nZXRBdmFpbGFibGVJbWFnZXMobWFwSWQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV07XG4gICAgfVxuXG4gICAgZ2V0REVNV29ya2VyU291cmNlKG1hcElkOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcblxuICAgICAgICBpZiAoIXRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXSkge1xuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdID0gbmV3IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV07XG4gICAgfVxuXG4gICAgZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KG1hcElkOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIpIHtcbiAgICAgICAgZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KGxpbWl0KTtcbiAgICB9XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpIHtcbiAgICBzZWxmLndvcmtlciA9IG5ldyBXb3JrZXIoc2VsZik7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gaXNTdXBwb3J0ZWQ7XG59IGVsc2UgaWYgKHdpbmRvdykge1xuICAgIHdpbmRvdy5tYXBib3hnbCA9IHdpbmRvdy5tYXBib3hnbCB8fCB7fTtcbiAgICB3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkID0gaXNTdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgTWFwYm94IEdMIEpTXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWZhbHNlXSBSZXR1cm4gYGZhbHNlYFxuICogICBpZiB0aGUgcGVyZm9ybWFuY2Ugb2YgTWFwYm94IEdMIEpTIHdvdWxkIGJlIGRyYW1hdGljYWxseSB3b3JzZSB0aGFuXG4gKiAgIGV4cGVjdGVkIChpLmUuIGEgc29mdHdhcmUgcmVuZGVyZXIgaXMgd291bGQgYmUgdXNlZClcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAgIGlzQnJvd3NlcigpICYmXG4gICAgICAgIGlzQXJyYXlTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0Z1bmN0aW9uU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNPYmplY3RTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0pTT05TdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc1dvcmtlclN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNXZWJHTFN1cHBvcnRlZENhY2hlZChvcHRpb25zICYmIG9wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdClcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgQXJyYXkucHJvdG90eXBlICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUubWFwICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIE9iamVjdC5rZXlzICYmXG4gICAgICAgIE9iamVjdC5jcmVhdGUgJiZcbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzICYmXG4gICAgICAgIE9iamVjdC5pc1NlYWxlZCAmJlxuICAgICAgICBPYmplY3QuaXNGcm96ZW4gJiZcbiAgICAgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAmJlxuICAgICAgICBPYmplY3Quc2VhbCAmJlxuICAgICAgICBPYmplY3QuZnJlZXplICYmXG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uc1xuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzSlNPTlN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ0pTT04nIGluIHdpbmRvdyAmJiAncGFyc2UnIGluIEpTT04gJiYgJ3N0cmluZ2lmeScgaW4gSlNPTjtcbn1cblxuZnVuY3Rpb24gaXNXb3JrZXJTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKCEoJ1dvcmtlcicgaW4gd2luZG93ICYmICdCbG9iJyBpbiB3aW5kb3cgJiYgJ1VSTCcgaW4gd2luZG93KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbJyddLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pO1xuICAgIHZhciB3b3JrZXJVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIHZhciBzdXBwb3J0ZWQ7XG4gICAgdmFyIHdvcmtlcjtcblxuICAgIHRyeSB7XG4gICAgICAgIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVVJMKTtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHdvcmtlclVSTCk7XG5cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuXG4vLyBJRTExIG9ubHkgc3VwcG9ydHMgYFVpbnQ4Q2xhbXBlZEFycmF5YCBhcyBvZiB2ZXJzaW9uXG4vLyBbS0IyOTI5NDM3XShodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9lbi11cy9rYi8yOTI5NDM3KVxuZnVuY3Rpb24gaXNVaW50OENsYW1wZWRBcnJheVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ1VpbnQ4Q2xhbXBlZEFycmF5JyBpbiB3aW5kb3c7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZC9pc3N1ZXMvMTlcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldztcbn1cblxudmFyIGlzV2ViR0xTdXBwb3J0ZWRDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZENhY2hlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG5cbiAgICBpZiAoaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdID0gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdO1xufVxuXG5pc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzID0ge1xuICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgYWxwaGE6IHRydWUsXG4gICAgc3RlbmNpbDogdHJ1ZSxcbiAgICBkZXB0aDogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG5cbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IE9iamVjdC5jcmVhdGUoaXNTdXBwb3J0ZWQud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7XG4gICAgYXR0cmlidXRlcy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDtcblxuICAgIGlmIChjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgnd2ViZ2wnLCBhdHRyaWJ1dGVzKSB8fFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuXG4gICAgfSBlbHNlIGlmIChjYW52YXMuc3VwcG9ydHNDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjYW52YXMuc3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMuc3VwcG9ydHNDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgYXR0cmlidXRlcylcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY29uc3QgRE9NID0ge307XG5leHBvcnQgZGVmYXVsdCBET007XG5cbkRPTS5jcmVhdGUgPSBmdW5jdGlvbiAodGFnTmFtZTogc3RyaW5nLCBjbGFzc05hbWU6ID9zdHJpbmcsIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIGVsLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICBpZiAoY29udGFpbmVyKSBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIHJldHVybiBlbDtcbn07XG5cbkRPTS5jcmVhdGVOUyA9IGZ1bmN0aW9uIChuYW1lc3BhY2VVUkk6IHN0cmluZywgdGFnTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdGFnTmFtZSk7XG4gICAgcmV0dXJuIGVsO1xufTtcblxuY29uc3QgZG9jU3R5bGUgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xuXG5mdW5jdGlvbiB0ZXN0UHJvcChwcm9wcykge1xuICAgIGlmICghZG9jU3R5bGUpIHJldHVybiBwcm9wc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9wc1tpXSBpbiBkb2NTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wc1swXTtcbn1cblxuY29uc3Qgc2VsZWN0UHJvcCA9IHRlc3RQcm9wKFsndXNlclNlbGVjdCcsICdNb3pVc2VyU2VsZWN0JywgJ1dlYmtpdFVzZXJTZWxlY3QnLCAnbXNVc2VyU2VsZWN0J10pO1xubGV0IHVzZXJTZWxlY3Q7XG5cbkRPTS5kaXNhYmxlRHJhZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZG9jU3R5bGUgJiYgc2VsZWN0UHJvcCkge1xuICAgICAgICB1c2VyU2VsZWN0ID0gZG9jU3R5bGVbc2VsZWN0UHJvcF07XG4gICAgICAgIGRvY1N0eWxlW3NlbGVjdFByb3BdID0gJ25vbmUnO1xuICAgIH1cbn07XG5cbkRPTS5lbmFibGVEcmFnID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChkb2NTdHlsZSAmJiBzZWxlY3RQcm9wKSB7XG4gICAgICAgIGRvY1N0eWxlW3NlbGVjdFByb3BdID0gdXNlclNlbGVjdDtcbiAgICB9XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1Qcm9wID0gdGVzdFByb3AoWyd0cmFuc2Zvcm0nLCAnV2Via2l0VHJhbnNmb3JtJ10pO1xuXG5ET00uc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oZWw6IEhUTUxFbGVtZW50LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzc3NTRcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgZWwuc3R5bGVbdHJhbnNmb3JtUHJvcF0gPSB2YWx1ZTtcbn07XG5cbi8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciB7cGFzc2l2ZTogZmFsc2V9IHN1cHBvcnQgaW4gYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXIuXG5sZXQgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuXG50cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgXCJwYXNzaXZlXCIsIHtcbiAgICAgICAgZ2V0KCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucywgb3B0aW9ucyk7XG59IGNhdGNoIChlcnIpIHtcbiAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG59XG5cbkRPTS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odGFyZ2V0OiAqLCB0eXBlOiAqLCBjYWxsYmFjazogKiwgb3B0aW9uczoge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn0gPSB7fSkge1xuICAgIGlmICgncGFzc2l2ZScgaW4gb3B0aW9ucyAmJiBwYXNzaXZlU3VwcG9ydGVkKSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucy5jYXB0dXJlKTtcbiAgICB9XG59O1xuXG5ET00ucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHRhcmdldDogKiwgdHlwZTogKiwgY2FsbGJhY2s6ICosIG9wdGlvbnM6IHtwYXNzaXZlPzogYm9vbGVhbiwgY2FwdHVyZT86IGJvb2xlYW59ID0ge30pIHtcbiAgICBpZiAoJ3Bhc3NpdmUnIGluIG9wdGlvbnMgJiYgcGFzc2l2ZVN1cHBvcnRlZCkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMuY2FwdHVyZSk7XG4gICAgfVxufTtcblxuLy8gU3VwcHJlc3MgdGhlIG5leHQgY2xpY2ssIGJ1dCBvbmx5IGlmIGl0J3MgaW1tZWRpYXRlLlxuY29uc3Qgc3VwcHJlc3NDbGljazogTW91c2VFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbn07XG5cbkRPTS5zdXBwcmVzc0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbiAgICB9LCAwKTtcbn07XG5cbkRPTS5tb3VzZVBvcyA9IGZ1bmN0aW9uIChlbDogSFRNTEVsZW1lbnQsIGU6IE1vdXNlRXZlbnQgfCB3aW5kb3cuVG91Y2hFdmVudCB8IFRvdWNoKSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHQgPSB3aW5kb3cuVG91Y2hFdmVudCAmJiAoZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSA/IGUudG91Y2hlc1swXSA6IGU7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgdC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gZWwuY2xpZW50TGVmdCxcbiAgICAgICAgdC5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICApO1xufTtcblxuRE9NLnRvdWNoUG9zID0gZnVuY3Rpb24gKGVsOiBIVE1MRWxlbWVudCwgZTogVG91Y2hFdmVudCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgcG9pbnRzID0gW107XG4gICAgY29uc3QgdG91Y2hlcyA9IChlLnR5cGUgPT09ICd0b3VjaGVuZCcpID8gZS5jaGFuZ2VkVG91Y2hlcyA6IGUudG91Y2hlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcG9pbnRzLnB1c2gobmV3IFBvaW50KFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gZWwuY2xpZW50TGVmdCxcbiAgICAgICAgICAgIHRvdWNoZXNbaV0uY2xpZW50WSAtIHJlY3QudG9wIC0gZWwuY2xpZW50VG9wXG4gICAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuRE9NLm1vdXNlQnV0dG9uID0gZnVuY3Rpb24gKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBhc3NlcnQoZS50eXBlID09PSAnbW91c2Vkb3duJyB8fCBlLnR5cGUgPT09ICdtb3VzZXVwJyk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuSW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnICYmIGUuYnV0dG9uID09PSAyICYmIGUuY3RybEtleSAmJlxuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZignTUFDJykgPj0gMCkge1xuICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zMTMxOlxuICAgICAgICAvLyBGaXJlZm94IChkZXRlY3RlZCBieSBJbnN0YWxsVHJpZ2dlcikgb24gTWFjIGRldGVybWluZXMgZS5idXR0b24gPSAyIHdoZW5cbiAgICAgICAgLy8gdXNpbmcgQ29udHJvbCArIGxlZnQgY2xpY2tcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBlLmJ1dHRvbjtcbn07XG5cbkRPTS5yZW1vdmUgPSBmdW5jdGlvbihub2RlOiBIVE1MRWxlbWVudCkge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT04sIGdldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGJhc2VVUkw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdHJpbmddOiBTdHlsZUltYWdlfT4pOiBDYW5jZWxhYmxlIHtcbiAgICBsZXQganNvbjogYW55LCBpbWFnZSwgZXJyb3I7XG4gICAgY29uc3QgZm9ybWF0ID0gYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvID4gMSA/ICdAMngnIDogJyc7XG5cbiAgICBsZXQganNvblJlcXVlc3QgPSBnZXRKU09OKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3ByaXRlVVJMKGJhc2VVUkwsIGZvcm1hdCwgJy5qc29uJyksIFJlc291cmNlVHlwZS5TcHJpdGVKU09OKSwgKGVycjogP0Vycm9yLCBkYXRhOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgIGpzb25SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBqc29uID0gZGF0YTtcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGltYWdlUmVxdWVzdCA9IGdldEltYWdlKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3ByaXRlVVJMKGJhc2VVUkwsIGZvcm1hdCwgJy5wbmcnKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSwgKGVyciwgaW1nKSA9PiB7XG4gICAgICAgIGltYWdlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgaW1hZ2UgPSBpbWc7XG4gICAgICAgICAgICBtYXliZUNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1heWJlQ29tcGxldGUoKSB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGpzb24gJiYgaW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgeCwgeSwgc2RmLCBwaXhlbFJhdGlvLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9ID0ganNvbltpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICAgICAgICBSR0JBSW1hZ2UuY29weShpbWFnZURhdGEsIGRhdGEsIHt4LCB5fSwge3g6IDAsIHk6IDB9LCB7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB7ZGF0YSwgcGl4ZWxSYXRpbywgc2RmLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsKCkge1xuICAgICAgICAgICAgaWYgKGpzb25SZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAganNvblJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltYWdlUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGltYWdlUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICBpbWFnZVJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2VEYXRhID0ge1xuICAgIGRhdGE6IFJHQkFJbWFnZSxcbiAgICB2ZXJzaW9uOiBudW1iZXIsXG4gICAgaGFzUmVuZGVyQ2FsbGJhY2s/OiBib29sZWFuLFxuICAgIHVzZXJJbWFnZT86IFN0eWxlSW1hZ2VJbnRlcmZhY2Vcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2VNZXRhZGF0YSA9IHtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgc2RmOiBib29sZWFuLFxuICAgIHN0cmV0Y2hYPzogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgc3RyZXRjaFk/OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBjb250ZW50PzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2UgPSBTdHlsZUltYWdlRGF0YSAmIFN0eWxlSW1hZ2VNZXRhZGF0YTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZUludGVyZmFjZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSxcbiAgICByZW5kZXI/OiAoKSA9PiB2b2lkLFxuICAgIG9uQWRkPzogKG1hcDogTWFwLCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9uUmVtb3ZlPzogKCkgPT4gdm9pZFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICBjb25zdCB7dXNlckltYWdlfSA9IGltYWdlO1xuICAgIGlmICh1c2VySW1hZ2UgJiYgdXNlckltYWdlLnJlbmRlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gdXNlckltYWdlLnJlbmRlcigpO1xuICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgaW1hZ2UuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KHVzZXJJbWFnZS5kYXRhLmJ1ZmZlcikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIGltYWdlcy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogSW1hZ2VzIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBjYW4gYmUgcmVkcmF3biBmb3IgZXZlcnkgZnJhbWUuIFRoZXkgY2FuIGJlIHVzZWQgdG8gYW5pbWF0ZVxuICogaWNvbnMgYW5kIHBhdHRlcm5zIG9yIG1ha2UgdGhlbSByZXNwb25kIHRvIHVzZXIgaW5wdXQuIFN0eWxlIGltYWdlcyBjYW4gaW1wbGVtZW50IGFcbiAqIHtAbGluayBTdHlsZUltYWdlSW50ZXJmYWNlI3JlbmRlcn0gbWV0aG9kLiBUaGUgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSBmcmFtZSBhbmRcbiAqIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgaW1hZ2UuXG4gKlxuICogQGludGVyZmFjZSBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7VWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSBkYXRhXG4gKlxuICogQHNlZSBbQWRkIGFuIGFuaW1hdGVkIGljb24gdG8gdGhlIG1hcC5dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1hbmltYXRlZC8pXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmbGFzaGluZ1NxdWFyZSA9IHtcbiAqICAgICB3aWR0aDogNjQsXG4gKiAgICAgaGVpZ2h0OiA2NCxcbiAqICAgICBkYXRhOiBuZXcgVWludDhBcnJheSg2NCAqIDY0ICogNCksXG4gKlxuICogICAgIG9uQWRkOiBmdW5jdGlvbihtYXApIHtcbiAqICAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgLy8ga2VlcCByZXBhaW50aW5nIHdoaWxlIHRoZSBpY29uIGlzIG9uIHRoZSBtYXBcbiAqICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAqXG4gKiAgICAgICAgIC8vIGFsdGVybmF0ZSBiZXR3ZWVuIGJsYWNrIGFuZCB3aGl0ZSBiYXNlZCBvbiB0aGUgdGltZVxuICogICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSAlIDIgPT09IDAgID8gMjU1IDogMDtcbiAqXG4gKiAgICAgICAgIC8vIGNoZWNrIGlmIGltYWdlIG5lZWRzIHRvIGJlIGNoYW5nZWRcbiAqICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnByZXZpb3VzVmFsdWUpIHtcbiAqICAgICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICpcbiAqICAgICAgICAgICAgIHZhciBieXRlc1BlclBpeGVsID0gNDtcbiAqICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gKiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSsrKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoeSAqIHRoaXMud2lkdGggKyB4KSAqIGJ5dGVzUGVyUGl4ZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAwXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDJdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAzXSA9IDI1NTtcbiAqICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICB9XG4gKlxuICogICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaW1hZ2UgY2hhbmdlZFxuICogICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKiAgfVxuICpcbiAqICBtYXAuYWRkSW1hZ2UoJ2ZsYXNoaW5nX3NxdWFyZScsIGZsYXNoaW5nU3F1YXJlKTtcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSBldmVyeSBmcmFtZSB3aGVyZSB0aGUgaWNvbiB3aWxsIGJlIHVzZWQuXG4gKiBUaGUgbWV0aG9kIGNhbiBvcHRpb25hbGx5IHVwZGF0ZSB0aGUgaW1hZ2UncyBgZGF0YWAgbWVtYmVyIHdpdGggYSBuZXcgaW1hZ2UuXG4gKlxuICogSWYgdGhlIG1ldGhvZCB1cGRhdGVzIHRoZSBpbWFnZSBpdCBtdXN0IHJldHVybiBgdHJ1ZWAgdG8gY29tbWl0IHRoZSBjaGFuZ2UuXG4gKiBJZiB0aGUgbWV0aG9kIHJldHVybnMgYGZhbHNlYCBvciBub3RoaW5nIHRoZSBpbWFnZSBpcyBhc3N1bWVkIHRvIG5vdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogSWYgdXBkYXRlcyBhcmUgaW5mcmVxdWVudCBpdCBtYXliZSBlYXNpZXIgdG8gdXNlIHtAbGluayBNYXAjdXBkYXRlSW1hZ2V9IHRvIHVwZGF0ZVxuICogdGhlIGltYWdlIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcmVuZGVyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBtZXRob2QgdXBkYXRlZCB0aGUgaW1hZ2UuIGBmYWxzZWAgaWYgdGhlIGltYWdlIHdhcyBub3QgY2hhbmdlZC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZW1vdmVkIGZyb20gdGhlIG1hcCB3aXRoIHtAbGluayBNYXAjcmVtb3ZlSW1hZ2V9LlxuICogVGhpcyBnaXZlcyB0aGUgaW1hZ2UgYSBjaGFuY2UgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtyZW5kZXJTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtCaW59IGZyb20gJ3BvdHBhY2snO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgUGF0dGVybiA9IHtcbiAgICBiaW46IEJpbixcbiAgICBwb3NpdGlvbjogSW1hZ2VQb3NpdGlvblxufTtcblxuLy8gV2hlbiBjb3BpZWQgaW50byB0aGUgYXRsYXMgdGV4dHVyZSwgaW1hZ2UgZGF0YSBpcyBwYWRkZWQgYnkgb25lIHBpeGVsIG9uIGVhY2ggc2lkZS4gSWNvblxuLy8gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBmdWxseSB0cmFuc3BhcmVudCBwaXhlbHMsIHdoaWxlIHBhdHRlcm4gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBhXG4vLyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhIHdyYXBwZWQgZnJvbSB0aGUgb3Bwb3NpdGUgc2lkZS4gSW4gYm90aCBjYXNlcywgdGhpcyBlbnN1cmVzIHRoZVxuLy8gY29ycmVjdCBiZWhhdmlvciBvZiBHTF9MSU5FQVIgdGV4dHVyZSBzYW1wbGluZyBtb2RlLlxuY29uc3QgcGFkZGluZyA9IDE7XG5cbi8qXG4gICAgSW1hZ2VNYW5hZ2VyIGRvZXMgdGhyZWUgdGhpbmdzOlxuXG4gICAgICAgIDEuIFRyYWNrcyByZXF1ZXN0cyBmb3IgaWNvbiBpbWFnZXMgZnJvbSB0aWxlIHdvcmtlcnMgYW5kIHNlbmRzIHJlc3BvbnNlcyB3aGVuIHRoZSByZXF1ZXN0cyBhcmUgZnVsZmlsbGVkLlxuICAgICAgICAyLiBCdWlsZHMgYSB0ZXh0dXJlIGF0bGFzIGZvciBwYXR0ZXJuIGltYWdlcy5cbiAgICAgICAgMy4gUmVyZW5kZXJzIHJlbmRlcmFibGUgaW1hZ2VzIG9uY2UgcGVyIGZyYW1lXG5cbiAgICBUaGVzZSBhcmUgZGlzcGFyYXRlIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHNob3VsZCBldmVudHVhbGx5IGJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGNsYXNzZXMuIFdoZW4gd2UgaW1wbGVtZW50XG4gICAgZGF0YS1kcml2ZW4gc3VwcG9ydCBmb3IgYCotcGF0dGVybmAsIHdlJ2xsIGxpa2VseSB1c2UgcGVyLWJ1Y2tldCBwYXR0ZXJuIGF0bGFzZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGEgZ29vZCB0aW1lXG4gICAgdG8gcmVmYWN0b3IgdGhpcy5cbiovXG5jbGFzcyBJbWFnZU1hbmFnZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpbWFnZXM6IHtbc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgdXBkYXRlZEltYWdlczoge1tzdHJpbmddOiBib29sZWFufTtcbiAgICBjYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU6IHtbc3RyaW5nXTogYm9vbGVhbn07XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHJlcXVlc3RvcnM6IEFycmF5PHtpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pn0+O1xuXG4gICAgcGF0dGVybnM6IHtbc3RyaW5nXTogUGF0dGVybn07XG4gICAgYXRsYXNJbWFnZTogUkdCQUltYWdlO1xuICAgIGF0bGFzVGV4dHVyZTogP1RleHR1cmU7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzID0ge307XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGF0dGVybnMgPSB7fTtcbiAgICAgICAgdGhpcy5hdGxhc0ltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IDEsIGhlaWdodDogMX0pO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkO1xuICAgIH1cblxuICAgIHNldExvYWRlZChsb2FkZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xuXG4gICAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge2lkcywgY2FsbGJhY2t9IG9mIHRoaXMucmVxdWVzdG9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShpZHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoaWQ6IHN0cmluZyk6ID9TdHlsZUltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICB9XG5cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaW1hZ2VzW2lkXSk7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZShpZCwgaW1hZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlc1tpZF0gPSBpbWFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF92YWxpZGF0ZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlU3RyZXRjaChpbWFnZS5zdHJldGNoWCwgaW1hZ2UuZGF0YSAmJiBpbWFnZS5kYXRhLndpZHRoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwic3RyZXRjaFhcIiB2YWx1ZWApKSk7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVTdHJldGNoKGltYWdlLnN0cmV0Y2hZLCBpbWFnZS5kYXRhICYmIGltYWdlLmRhdGEuaGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwic3RyZXRjaFlcIiB2YWx1ZWApKSk7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVDb250ZW50KGltYWdlLmNvbnRlbnQsIGltYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwiY29udGVudFwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVN0cmV0Y2goc3RyZXRjaDogP0FycmF5PFtudW1iZXIsIG51bWJlcl0+IHwgdm9pZCwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghc3RyZXRjaCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCBsYXN0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHN0cmV0Y2gpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0WzBdIDwgbGFzdCB8fCBwYXJ0WzFdIDwgcGFydFswXSB8fCBzaXplIDwgcGFydFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgbGFzdCA9IHBhcnRbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlQ29udGVudChjb250ZW50OiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCB2b2lkLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoY29udGVudC5sZW5ndGggIT09IDQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMF0gPCAwIHx8IGltYWdlLmRhdGEud2lkdGggPCBjb250ZW50WzBdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzFdIDwgMCB8fCBpbWFnZS5kYXRhLmhlaWdodCA8IGNvbnRlbnRbMV0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMl0gPCAwIHx8IGltYWdlLmRhdGEud2lkdGggPCBjb250ZW50WzJdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzNdIDwgMCB8fCBpbWFnZS5kYXRhLmhlaWdodCA8IGNvbnRlbnRbM10pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMl0gPCBjb250ZW50WzBdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzNdIDwgY29udGVudFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBjb25zdCBvbGRJbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgYXNzZXJ0KG9sZEltYWdlKTtcbiAgICAgICAgYXNzZXJ0KG9sZEltYWdlLmRhdGEud2lkdGggPT09IGltYWdlLmRhdGEud2lkdGgpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS5oZWlnaHQgPT09IGltYWdlLmRhdGEuaGVpZ2h0KTtcbiAgICAgICAgaW1hZ2UudmVyc2lvbiA9IG9sZEltYWdlLnZlcnNpb24gKyAxO1xuICAgICAgICB0aGlzLmltYWdlc1tpZF0gPSBpbWFnZTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQodGhpcy5pbWFnZXNbaWRdKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBhdHRlcm5zW2lkXTtcblxuICAgICAgICBpZiAoaW1hZ2UudXNlckltYWdlICYmIGltYWdlLnVzZXJJbWFnZS5vblJlbW92ZSkge1xuICAgICAgICAgICAgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaXN0SW1hZ2VzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpO1xuICAgIH1cblxuICAgIGdldEltYWdlcyhpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICAvLyBJZiB0aGUgc3ByaXRlIGhhcyBiZWVuIGxvYWRlZCwgb3IgaWYgYWxsIHRoZSBpY29uIGRlcGVuZGVuY2llcyBhcmUgYWxyZWFkeSBwcmVzZW50XG4gICAgICAgIC8vIChpLmUuIGlmIHRoZXkndmUgYmVlbiBhZGRlZCB2aWEgcnVudGltZSBzdHlsaW5nKSwgdGhlbiBub3RpZnkgdGhlIHJlcXVlc3RvciBpbW1lZGlhdGVseS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkZWxheSBub3RpZmljYXRpb24gdW50aWwgdGhlIHNwcml0ZSBpcyBsb2FkZWQuIEF0IHRoYXQgcG9pbnQsIGlmIGFueSBvZiB0aGVcbiAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGFyZSBzdGlsbCB1bmF2YWlsYWJsZSwgd2UnbGwganVzdCBhc3N1bWUgdGhleSBhcmUgcGVybWFuZW50bHkgbWlzc2luZy5cbiAgICAgICAgbGV0IGhhc0FsbERlcGVuZGVuY2llcyA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRlZCgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZXNbaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbERlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0xvYWRlZCgpIHx8IGhhc0FsbERlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGlkcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkcywgY2FsbGJhY2t9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9ub3RpZnkoaWRzOiBBcnJheTxzdHJpbmc+LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdHJpbmddOiBTdHlsZUltYWdlfT4pIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdzdHlsZWltYWdlbWlzc2luZycsIHtpZH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGltYWdlIHNvIHRoYXQgb3VyIG93biBjb3B5IG9mIGl0cyBBcnJheUJ1ZmZlciBkb2Vzbid0IGdldCB0cmFuc2ZlcnJlZC5cbiAgICAgICAgICAgICAgICByZXNwb25zZVtpZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGltYWdlLmRhdGEuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICAgICAgcGl4ZWxSYXRpbzogaW1hZ2UucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgc2RmOiBpbWFnZS5zZGYsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGltYWdlLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hYOiBpbWFnZS5zdHJldGNoWCxcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaFk6IGltYWdlLnN0cmV0Y2hZLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBpbWFnZS5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBoYXNSZW5kZXJDYWxsYmFjazogQm9vbGVhbihpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLnJlbmRlcilcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgSW1hZ2UgXCIke2lkfVwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgdGhlIGltYWdlIHdpdGggbWFwLmFkZEltYWdlKCkgb3IgYSBcInNwcml0ZVwiIHByb3BlcnR5IGluIHlvdXIgc3R5bGUuIFlvdSBjYW4gcHJvdmlkZSBtaXNzaW5nIGltYWdlcyBieSBsaXN0ZW5pbmcgZm9yIHRoZSBcInN0eWxlaW1hZ2VtaXNzaW5nXCIgbWFwIGV2ZW50LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3R1ZmZcblxuICAgIGdldFBpeGVsU2l6ZSgpIHtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5hdGxhc0ltYWdlO1xuICAgICAgICByZXR1cm4ge3dpZHRoLCBoZWlnaHR9O1xuICAgIH1cblxuICAgIGdldFBhdHRlcm4oaWQ6IHN0cmluZyk6ID9JbWFnZVBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5nZXRJbWFnZShpZCk7XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdHRlcm4gJiYgcGF0dGVybi5wb3NpdGlvbi52ZXJzaW9uID09PSBpbWFnZS52ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybi5wb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgY29uc3QgdyA9IGltYWdlLmRhdGEud2lkdGggKyBwYWRkaW5nICogMjtcbiAgICAgICAgICAgIGNvbnN0IGggPSBpbWFnZS5kYXRhLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgY29uc3QgYmluID0ge3csIGgsIHg6IDAsIHk6IDB9O1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgSW1hZ2VQb3NpdGlvbihiaW4sIGltYWdlKTtcbiAgICAgICAgICAgIHRoaXMucGF0dGVybnNbaWRdID0ge2JpbiwgcG9zaXRpb259O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybi5wb3NpdGlvbi52ZXJzaW9uID0gaW1hZ2UudmVyc2lvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhdHRlcm5BdGxhcygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5zW2lkXS5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBpZiAoIXRoaXMuYXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuYXRsYXNJbWFnZSwgZ2wuUkdCQSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSk7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVBhdHRlcm5BdGxhcygpIHtcbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGJpbnMucHVzaCh0aGlzLnBhdHRlcm5zW2lkXS5iaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcblxuICAgICAgICBjb25zdCBkc3QgPSB0aGlzLmF0bGFzSW1hZ2U7XG4gICAgICAgIGRzdC5yZXNpemUoe3dpZHRoOiB3IHx8IDEsIGhlaWdodDogaCB8fCAxfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCB7YmlufSA9IHRoaXMucGF0dGVybnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGJpbi54ICsgcGFkZGluZztcbiAgICAgICAgICAgIGNvbnN0IHkgPSBiaW4ueSArIHBhZGRpbmc7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlc1tpZF0uZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBzcmMud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoID0gc3JjLmhlaWdodDtcblxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiAwfSwge3gsIHl9LCB7d2lkdGg6IHcsIGhlaWdodDogaH0pO1xuXG4gICAgICAgICAgICAvLyBBZGQgMSBwaXhlbCB3cmFwcGVkIHBhZGRpbmcgb24gZWFjaCBzaWRlIG9mIHRoZSBpbWFnZS5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogaCAtIDF9LCB7eCwgeTogeSAtIDF9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBUXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6ICAgICAwfSwge3gsIHk6IHkgKyBofSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gQlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiB3IC0gMSwgeTogMH0sIHt4OiB4IC0gMSwgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIExcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgICAgIHk6IDB9LCB7eDogeCArIHcsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBSXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBiZWdpbkZyYW1lKCkge1xuICAgICAgICB0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZSA9IHt9O1xuICAgIH1cblxuICAgIGRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzKGlkczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuXG4gICAgICAgICAgICAvLyB0aGUgY2FsbGJhY2sgZm9yIHRoZSBpbWFnZSB3YXMgYWxyZWFkeSBkaXNwYXRjaGVkIGZvciBhIGRpZmZlcmVudCBmcmFtZVxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW2lkXSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtpZF0gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgICAgIGFzc2VydChpbWFnZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSByZW5kZXJTdHlsZUltYWdlKGltYWdlKTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZU1hbmFnZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEFycmF5QnVmZmVyLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBwYXJzZUdseXBoUEJGIGZyb20gJy4vcGFyc2VfZ2x5cGhfcGJmJztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4vc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGZvbnRzdGFjazogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFRlbXBsYXRlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2s8e1tudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0+KSB7XG4gICAgY29uc3QgYmVnaW4gPSByYW5nZSAqIDI1NjtcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIDI1NTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KFxuICAgICAgICByZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVHbHlwaHNVUkwodXJsVGVtcGxhdGUpXG4gICAgICAgICAgICAucmVwbGFjZSgne2ZvbnRzdGFja30nLCBmb250c3RhY2spXG4gICAgICAgICAgICAucmVwbGFjZSgne3JhbmdlfScsIGAke2JlZ2lufS0ke2VuZH1gKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlLkdseXBocyk7XG5cbiAgICBnZXRBcnJheUJ1ZmZlcihyZXF1ZXN0LCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdseXBoIG9mIHBhcnNlR2x5cGhQQkYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBnbHlwaHNbZ2x5cGguaWRdID0gZ2x5cGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGdseXBocyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUaW55U0RGO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFRpbnlTREY7XG5cbnZhciBJTkYgPSAxZTIwO1xuXG5mdW5jdGlvbiBUaW55U0RGKGZvbnRTaXplLCBidWZmZXIsIHJhZGl1cywgY3V0b2ZmLCBmb250RmFtaWx5LCBmb250V2VpZ2h0KSB7XG4gICAgdGhpcy5mb250U2l6ZSA9IGZvbnRTaXplIHx8IDI0O1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyID09PSB1bmRlZmluZWQgPyAzIDogYnVmZmVyO1xuICAgIHRoaXMuY3V0b2ZmID0gY3V0b2ZmIHx8IDAuMjU7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gZm9udEZhbWlseSB8fCAnc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250V2VpZ2h0ID0gZm9udFdlaWdodCB8fCAnbm9ybWFsJztcbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCA4O1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplID0gdGhpcy5mb250U2l6ZSArIHRoaXMuYnVmZmVyICogMjtcblxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmNhbnZhcy5oZWlnaHQgPSBzaXplO1xuXG4gICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHRoaXMuY3R4LmZvbnQgPSB0aGlzLmZvbnRXZWlnaHQgKyAnICcgKyB0aGlzLmZvbnRTaXplICsgJ3B4ICcgKyB0aGlzLmZvbnRGYW1pbHk7XG4gICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gJ2JsYWNrJztcblxuICAgIC8vIHRlbXBvcmFyeSBhcnJheXMgZm9yIHRoZSBkaXN0YW5jZSB0cmFuc2Zvcm1cbiAgICB0aGlzLmdyaWRPdXRlciA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSAqIHNpemUpO1xuICAgIHRoaXMuZ3JpZElubmVyID0gbmV3IEZsb2F0NjRBcnJheShzaXplICogc2l6ZSk7XG4gICAgdGhpcy5mID0gbmV3IEZsb2F0NjRBcnJheShzaXplKTtcbiAgICB0aGlzLmQgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUpO1xuICAgIHRoaXMueiA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSArIDEpO1xuICAgIHRoaXMudiA9IG5ldyBJbnQxNkFycmF5KHNpemUpO1xuXG4gICAgLy8gaGFjayBhcm91bmQgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODUyXG4gICAgdGhpcy5taWRkbGUgPSBNYXRoLnJvdW5kKChzaXplIC8gMikgKiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdHZWNrby8nKSA+PSAwID8gMS4yIDogMSkpO1xufVxuXG5UaW55U0RGLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGNoYXIpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5zaXplLCB0aGlzLnNpemUpO1xuICAgIHRoaXMuY3R4LmZpbGxUZXh0KGNoYXIsIHRoaXMuYnVmZmVyLCB0aGlzLm1pZGRsZSk7XG5cbiAgICB2YXIgaW1nRGF0YSA9IHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLCAwLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSk7XG4gICAgdmFyIGFscGhhQ2hhbm5lbCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0aGlzLnNpemUgKiB0aGlzLnNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemUgKiB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB2YXIgYSA9IGltZ0RhdGEuZGF0YVtpICogNCArIDNdIC8gMjU1OyAvLyBhbHBoYSB2YWx1ZVxuICAgICAgICB0aGlzLmdyaWRPdXRlcltpXSA9IGEgPT09IDEgPyAwIDogYSA9PT0gMCA/IElORiA6IE1hdGgucG93KE1hdGgubWF4KDAsIDAuNSAtIGEpLCAyKTtcbiAgICAgICAgdGhpcy5ncmlkSW5uZXJbaV0gPSBhID09PSAxID8gSU5GIDogYSA9PT0gMCA/IDAgOiBNYXRoLnBvdyhNYXRoLm1heCgwLCBhIC0gMC41KSwgMik7XG4gICAgfVxuXG4gICAgZWR0KHRoaXMuZ3JpZE91dGVyLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSwgdGhpcy5mLCB0aGlzLmQsIHRoaXMudiwgdGhpcy56KTtcbiAgICBlZHQodGhpcy5ncmlkSW5uZXIsIHRoaXMuc2l6ZSwgdGhpcy5zaXplLCB0aGlzLmYsIHRoaXMuZCwgdGhpcy52LCB0aGlzLnopO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICAgIHZhciBkID0gdGhpcy5ncmlkT3V0ZXJbaV0gLSB0aGlzLmdyaWRJbm5lcltpXTtcbiAgICAgICAgYWxwaGFDaGFubmVsW2ldID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDI1NSAtIDI1NSAqIChkIC8gdGhpcy5yYWRpdXMgKyB0aGlzLmN1dG9mZikpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFscGhhQ2hhbm5lbDtcbn07XG5cbi8vIDJEIEV1Y2xpZGVhbiBkaXN0YW5jZSB0cmFuc2Zvcm0gYnkgRmVsemVuc3p3YWxiICYgSHV0dGVubG9jaGVyIGh0dHBzOi8vY3MuYnJvd24uZWR1L35wZmYvcGFwZXJzL2R0LWZpbmFsLnBkZlxuZnVuY3Rpb24gZWR0KGRhdGEsIHdpZHRoLCBoZWlnaHQsIGYsIGQsIHYsIHopIHtcbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgZlt5XSA9IGRhdGFbeSAqIHdpZHRoICsgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWR0MWQoZiwgZCwgdiwgeiwgaGVpZ2h0KTtcbiAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBkYXRhW3kgKiB3aWR0aCArIHhdID0gZFt5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGZbeF0gPSBkYXRhW3kgKiB3aWR0aCArIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVkdDFkKGYsIGQsIHYsIHosIHdpZHRoKTtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGRhdGFbeSAqIHdpZHRoICsgeF0gPSBNYXRoLnNxcnQoZFt4XSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIDFEIHNxdWFyZWQgZGlzdGFuY2UgdHJhbnNmb3JtXG5mdW5jdGlvbiBlZHQxZChmLCBkLCB2LCB6LCBuKSB7XG4gICAgdlswXSA9IDA7XG4gICAgelswXSA9IC1JTkY7XG4gICAgelsxXSA9ICtJTkY7XG5cbiAgICBmb3IgKHZhciBxID0gMSwgayA9IDA7IHEgPCBuOyBxKyspIHtcbiAgICAgICAgdmFyIHMgPSAoKGZbcV0gKyBxICogcSkgLSAoZlt2W2tdXSArIHZba10gKiB2W2tdKSkgLyAoMiAqIHEgLSAyICogdltrXSk7XG4gICAgICAgIHdoaWxlIChzIDw9IHpba10pIHtcbiAgICAgICAgICAgIGstLTtcbiAgICAgICAgICAgIHMgPSAoKGZbcV0gKyBxICogcSkgLSAoZlt2W2tdXSArIHZba10gKiB2W2tdKSkgLyAoMiAqIHEgLSAyICogdltrXSk7XG4gICAgICAgIH1cbiAgICAgICAgaysrO1xuICAgICAgICB2W2tdID0gcTtcbiAgICAgICAgeltrXSA9IHM7XG4gICAgICAgIHpbayArIDFdID0gK0lORjtcbiAgICB9XG5cbiAgICBmb3IgKHEgPSAwLCBrID0gMDsgcSA8IG47IHErKykge1xuICAgICAgICB3aGlsZSAoeltrICsgMV0gPCBxKSBrKys7XG4gICAgICAgIGRbcV0gPSAocSAtIHZba10pICogKHEgLSB2W2tdKSArIGZbdltrXV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGxvYWRHbHlwaFJhbmdlIGZyb20gJy4uL3N0eWxlL2xvYWRfZ2x5cGhfcmFuZ2UnO1xuXG5pbXBvcnQgVGlueVNERiBmcm9tICdAbWFwYm94L3Rpbnktc2RmJztcbmltcG9ydCBpc0NoYXIgZnJvbSAnLi4vdXRpbC9pc19jaGFyX2luX3VuaWNvZGVfYmxvY2snO1xuaW1wb3J0IHthc3luY0FsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG50eXBlIEVudHJ5ID0ge1xuICAgIC8vIG51bGwgbWVhbnMgd2UndmUgcmVxdWVzdGVkIHRoZSByYW5nZSwgYnV0IHRoZSBnbHlwaCB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICBnbHlwaHM6IHtbaWQ6IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSxcbiAgICByZXF1ZXN0czoge1tyYW5nZTogbnVtYmVyXTogQXJyYXk8Q2FsbGJhY2s8e1tudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0+Pn0sXG4gICAgdGlueVNERj86IFRpbnlTREZcbn07XG5cbmNsYXNzIEdseXBoTWFuYWdlciB7XG4gICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogP3N0cmluZztcbiAgICBlbnRyaWVzOiB7W3N0cmluZ106IEVudHJ5fTtcbiAgICB1cmw6ID9zdHJpbmc7XG5cbiAgICAvLyBleHBvc2VkIGFzIHN0YXRpY3MgdG8gZW5hYmxlIHN0dWJiaW5nIGluIHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgbG9hZEdseXBoUmFuZ2U6IHR5cGVvZiBsb2FkR2x5cGhSYW5nZTtcbiAgICBzdGF0aWMgVGlueVNERjogQ2xhc3M8VGlueVNERj47XG5cbiAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogP3N0cmluZykge1xuICAgICAgICB0aGlzLnJlcXVlc3RNYW5hZ2VyID0gcmVxdWVzdE1hbmFnZXI7XG4gICAgICAgIHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID0gbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICB0aGlzLmVudHJpZXMgPSB7fTtcbiAgICB9XG5cbiAgICBzZXRVUkwodXJsOiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgIH1cblxuICAgIGdldEdseXBocyhnbHlwaHM6IHtbc3RhY2s6IHN0cmluZ106IEFycmF5PG51bWJlcj59LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdGFjazogc3RyaW5nXToge1tpZDogbnVtYmVyXTogP1N0eWxlR2x5cGh9fT4pIHtcbiAgICAgICAgY29uc3QgYWxsID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ2x5cGhzW3N0YWNrXSkge1xuICAgICAgICAgICAgICAgIGFsbC5wdXNoKHtzdGFjaywgaWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jQWxsKGFsbCwgKHtzdGFjaywgaWR9LCBjYWxsYmFjazogQ2FsbGJhY2s8e3N0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIsIGdseXBoOiA/U3R5bGVHbHlwaH0+KSA9PiB7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmVudHJpZXNbc3RhY2tdO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5lbnRyaWVzW3N0YWNrXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGdseXBoID0gZW50cnkuZ2x5cGhzW2lkXTtcbiAgICAgICAgICAgIGlmIChnbHlwaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGh9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdseXBoID0gdGhpcy5fdGlueVNERihlbnRyeSwgc3RhY2ssIGlkKTtcbiAgICAgICAgICAgIGlmIChnbHlwaCkge1xuICAgICAgICAgICAgICAgIGVudHJ5LmdseXBoc1tpZF0gPSBnbHlwaDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBNYXRoLmZsb29yKGlkIC8gMjU2KTtcbiAgICAgICAgICAgIGlmIChyYW5nZSAqIDI1NiA+IDY1NTM1KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gZW50cnkucmVxdWVzdHNbcmFuZ2VdO1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gZW50cnkucmVxdWVzdHNbcmFuZ2VdID0gW107XG4gICAgICAgICAgICAgICAgR2x5cGhNYW5hZ2VyLmxvYWRHbHlwaFJhbmdlKHN0YWNrLCByYW5nZSwgKHRoaXMudXJsOiBhbnkpLCB0aGlzLnJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAoZXJyLCByZXNwb25zZTogP3tbbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaCgraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5nbHlwaHNbK2lkXSA9IHJlc3BvbnNlWytpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNiIG9mIHJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZW50cnkucmVxdWVzdHNbcmFuZ2VdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVxdWVzdHMucHVzaCgoZXJyLCByZXN1bHQ6ID97W251bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaDogcmVzdWx0W2lkXSB8fCBudWxsfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIGdseXBoczogP0FycmF5PHtzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyLCBnbHlwaDogP1N0eWxlR2x5cGh9PikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7c3RhY2ssIGlkLCBnbHlwaH0gb2YgZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb25lIHRoZSBnbHlwaCBzbyB0aGF0IG91ciBvd24gY29weSBvZiBpdHMgQXJyYXlCdWZmZXIgZG9lc24ndCBnZXQgdHJhbnNmZXJyZWQuXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHRbc3RhY2tdIHx8IChyZXN1bHRbc3RhY2tdID0ge30pKVtpZF0gPSBnbHlwaCAmJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2x5cGguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXA6IGdseXBoLmJpdG1hcC5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljczogZ2x5cGgubWV0cmljc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSAmJlxuICAgICAgICAgICAgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnSGFuZ3VsIFN5bGxhYmxlcyddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnSGlyYWdhbmEnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0thdGFrYW5hJ10oaWQpKTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuZXctY2FwICovXG4gICAgfVxuXG4gICAgX3RpbnlTREYoZW50cnk6IEVudHJ5LCBzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyKTogP1N0eWxlR2x5cGgge1xuICAgICAgICBjb25zdCBmYW1pbHkgPSB0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW55U0RGID0gZW50cnkudGlueVNERjtcbiAgICAgICAgaWYgKCF0aW55U0RGKSB7XG4gICAgICAgICAgICBsZXQgZm9udFdlaWdodCA9ICc0MDAnO1xuICAgICAgICAgICAgaWYgKC9ib2xkL2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzkwMCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9tZWRpdW0vaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnNTAwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL2xpZ2h0L2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzIwMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aW55U0RGID0gZW50cnkudGlueVNERiA9IG5ldyBHbHlwaE1hbmFnZXIuVGlueVNERigyNCwgMywgOCwgLjI1LCBmYW1pbHksIGZvbnRXZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYml0bWFwOiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IDMwLCBoZWlnaHQ6IDMwfSwgdGlueVNERi5kcmF3KFN0cmluZy5mcm9tQ2hhckNvZGUoaWQpKSksXG4gICAgICAgICAgICBtZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI0LFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjQsXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB0b3A6IC04LFxuICAgICAgICAgICAgICAgIGFkdmFuY2U6IDI0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5HbHlwaE1hbmFnZXIubG9hZEdseXBoUmFuZ2UgPSBsb2FkR2x5cGhSYW5nZTtcbkdseXBoTWFuYWdlci5UaW55U0RGID0gVGlueVNERjtcblxuZXhwb3J0IGRlZmF1bHQgR2x5cGhNYW5hZ2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge2VuZHNXaXRoLCBleHRlbmQsIHNwaGVyaWNhbFRvQ2FydGVzaWFufSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0eWxlLFxuICAgIHZhbGlkYXRlTGlnaHQsXG4gICAgZW1pdFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7U3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQge1Byb3BlcnRpZXMsIFRyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZCwgRGF0YUNvbnN0YW50UHJvcGVydHl9IGZyb20gJy4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVZhbHVlLFxuICAgIFRyYW5zaXRpb25QYXJhbWV0ZXJzXG59IGZyb20gJy4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtMaWdodFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIExpZ2h0UG9zaXRpb24gPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB6OiBudW1iZXJcbn07XG5cbmNsYXNzIExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSBpbXBsZW1lbnRzIFByb3BlcnR5PFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgTGlnaHRQb3NpdGlvbj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHN0eWxlU3BlYy5saWdodC5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgTGlnaHRQb3NpdGlvbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogTGlnaHRQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiBzcGhlcmljYWxUb0NhcnRlc2lhbih2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMpKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBMaWdodFBvc2l0aW9uLCBiOiBMaWdodFBvc2l0aW9uLCB0OiBudW1iZXIpOiBMaWdodFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgIHk6IGludGVycG9sYXRlKGEueSwgYi55LCB0KSxcbiAgICAgICAgICAgIHo6IGludGVycG9sYXRlKGEueiwgYi56LCB0KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbnR5cGUgUHJvcHMgPSB7fFxuICAgIFwiYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwicG9zaXRpb25cIjogTGlnaHRQb3NpdGlvblByb3BlcnR5LFxuICAgIFwiY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaW50ZW5zaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJhbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5hbmNob3IpLFxuICAgIFwicG9zaXRpb25cIjogbmV3IExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSgpLFxuICAgIFwiY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5jb2xvciksXG4gICAgXCJpbnRlbnNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpLFxufSk7XG5cbmNvbnN0IFRSQU5TSVRJT05fU1VGRklYID0gJy10cmFuc2l0aW9uJztcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGxpZ2h0IHVzZWQgdG8gbGlnaHQgZXh0cnVkZWQgZmVhdHVyZXMuXG4gKi9cbmNsYXNzIExpZ2h0IGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX3RyYW5zaXRpb25hYmxlOiBUcmFuc2l0aW9uYWJsZTxQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmc6IFRyYW5zaXRpb25pbmc8UHJvcHM+O1xuICAgIHByb3BlcnRpZXM6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxpZ2h0T3B0aW9ucz86IExpZ2h0U3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZSA9IG5ldyBUcmFuc2l0aW9uYWJsZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5zZXRMaWdodChsaWdodE9wdGlvbnMpO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nID0gdGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHNldExpZ2h0KGxpZ2h0PzogTGlnaHRTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVMaWdodCwgbGlnaHQsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbGlnaHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGlnaHRbbmFtZV07XG4gICAgICAgICAgICBpZiAoZW5kc1dpdGgobmFtZSwgVFJBTlNJVElPTl9TVUZGSVgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmcgPSB0aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZyk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGUodmFsaWRhdGU6IEZ1bmN0aW9uLCB2YWx1ZTogbWl4ZWQsIG9wdGlvbnM/OiB7dmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlLmNhbGwodmFsaWRhdGVTdHlsZSwgZXh0ZW5kKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI0MDdcbiAgICAgICAgICAgIHN0eWxlOiB7Z2x5cGhzOiB0cnVlLCBzcHJpdGU6IHRydWV9LFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQSBMaW5lQXRsYXMgbGV0cyB1cyByZXVzZSByZW5kZXJlZCBkYXNoZWQgbGluZXNcbiAqIGJ5IHdyaXRpbmcgbWFueSBvZiB0aGVtIHRvIGEgdGV4dHVyZSBhbmQgdGhlbiBmZXRjaGluZyB0aGVpciBwb3NpdGlvbnNcbiAqIHVzaW5nIC5nZXREYXNoLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGluZUF0bGFzIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIG5leHRSb3c6IG51bWJlcjtcbiAgICBieXRlczogbnVtYmVyO1xuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgZGFzaEVudHJ5OiB7W3N0cmluZ106IGFueX07XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlO1xuXG4gICAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5uZXh0Um93ID0gMDtcblxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheSh0aGlzLndpZHRoICogdGhpcy5oZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuZGFzaEVudHJ5ID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG9yIGNyZWF0ZSBhIGRhc2ggbGluZSBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBkYXNoYXJyYXlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJvdW5kIHdoZXRoZXIgdG8gYWRkIGNpcmNsZSBjYXBzIGluIGJldHdlZW4gZGFzaCBzZWdtZW50c1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBvc2l0aW9uIG9mIGRhc2ggdGV4dHVyZSBpbiB7IHksIGhlaWdodCwgd2lkdGggfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0RGFzaChkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIHJvdW5kOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGRhc2hhcnJheS5qb2luKFwiLFwiKSArIFN0cmluZyhyb3VuZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhc2hFbnRyeVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hFbnRyeVtrZXldID0gdGhpcy5hZGREYXNoKGRhc2hhcnJheSwgcm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhc2hFbnRyeVtrZXldO1xuICAgIH1cblxuICAgIGdldERhc2hSYW5nZXMoZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCBsaW5lQXRsYXNXaWR0aDogbnVtYmVyLCBzdHJldGNoOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSWYgZGFzaGFycmF5IGhhcyBhbiBvZGQgbGVuZ3RoLCBib3RoIHRoZSBmaXJzdCBhbmQgbGFzdCBwYXJ0c1xuICAgICAgICAvLyBhcmUgZGFzaGVzIGFuZCBzaG91bGQgYmUgam9pbmVkIHNlYW1sZXNzbHkuXG4gICAgICAgIGNvbnN0IG9kZERhc2hBcnJheSA9IGRhc2hhcnJheS5sZW5ndGggJSAyID09PSAxO1xuXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuXG4gICAgICAgIGxldCBsZWZ0ID0gb2RkRGFzaEFycmF5ID8gLWRhc2hhcnJheVtkYXNoYXJyYXkubGVuZ3RoIC0gMV0gKiBzdHJldGNoIDogMDtcbiAgICAgICAgbGV0IHJpZ2h0ID0gZGFzaGFycmF5WzBdICogc3RyZXRjaDtcbiAgICAgICAgbGV0IGlzRGFzaCA9IHRydWU7XG5cbiAgICAgICAgcmFuZ2VzLnB1c2goe2xlZnQsIHJpZ2h0LCBpc0Rhc2gsIHplcm9MZW5ndGg6IGRhc2hhcnJheVswXSA9PT0gMH0pO1xuXG4gICAgICAgIGxldCBjdXJyZW50RGFzaExlbmd0aCA9IGRhc2hhcnJheVswXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXNoYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlzRGFzaCA9ICFpc0Rhc2g7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhc2hMZW5ndGggPSBkYXNoYXJyYXlbaV07XG4gICAgICAgICAgICBsZWZ0ID0gY3VycmVudERhc2hMZW5ndGggKiBzdHJldGNoO1xuICAgICAgICAgICAgY3VycmVudERhc2hMZW5ndGggKz0gZGFzaExlbmd0aDtcbiAgICAgICAgICAgIHJpZ2h0ID0gY3VycmVudERhc2hMZW5ndGggKiBzdHJldGNoO1xuXG4gICAgICAgICAgICByYW5nZXMucHVzaCh7bGVmdCwgcmlnaHQsIGlzRGFzaCwgemVyb0xlbmd0aDogZGFzaExlbmd0aCA9PT0gMH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICBhZGRSb3VuZERhc2gocmFuZ2VzOiBPYmplY3QsIHN0cmV0Y2g6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGhhbGZTdHJldGNoID0gc3RyZXRjaCAvIDI7XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IC1uOyB5IDw9IG47IHkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5uZXh0Um93ICsgbiArIHk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud2lkdGggKiByb3c7XG4gICAgICAgICAgICBsZXQgY3VyckluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCByYW5nZSA9IHJhbmdlc1tjdXJySW5kZXhdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMud2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh4IC8gcmFuZ2UucmlnaHQgPiAxKSB7IHJhbmdlID0gcmFuZ2VzWysrY3VyckluZGV4XTsgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdExlZnQgPSBNYXRoLmFicyh4IC0gcmFuZ2UubGVmdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdFJpZ2h0ID0gTWF0aC5hYnMoeCAtIHJhbmdlLnJpZ2h0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5EaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICAgICAgbGV0IHNpZ25lZERpc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdE1pZGRsZSA9ICB5IC8gbiAqIChoYWxmU3RyZXRjaCArIDEpO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Rhc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdEVkZ2UgPSBoYWxmU3RyZXRjaCAtIE1hdGguYWJzKGRpc3RNaWRkbGUpO1xuICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IE1hdGguc3FydChtaW5EaXN0ICogbWluRGlzdCArIGRpc3RFZGdlICogZGlzdEVkZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZERpc3RhbmNlID0gaGFsZlN0cmV0Y2ggLSBNYXRoLnNxcnQobWluRGlzdCAqIG1pbkRpc3QgKyBkaXN0TWlkZGxlICogZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4ICsgeF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgMTI4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRSZWd1bGFyRGFzaChyYW5nZXM6IE9iamVjdCkge1xuXG4gICAgICAgIC8vIENvbGxhcHNlIGFueSB6ZXJvLWxlbmd0aCByYW5nZVxuICAgICAgICAvLyBDb2xsYXBzZSBuZWlnaGJvdXJpbmcgc2FtZS10eXBlIHBhcnRzIGludG8gYSBzaW5nbGUgcGFydFxuICAgICAgICBmb3IgKGxldCBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcmFuZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJhbmdlc1tpICsgMV07XG4gICAgICAgICAgICBpZiAocGFydC56ZXJvTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCAmJiBuZXh0LmlzRGFzaCA9PT0gcGFydC5pc0Rhc2gpIHtcbiAgICAgICAgICAgICAgICBuZXh0LmxlZnQgPSBwYXJ0LmxlZnQ7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbWJpbmUgdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzIGlmIHBvc3NpYmxlXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gcmFuZ2VzWzBdO1xuICAgICAgICBjb25zdCBsYXN0ID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGZpcnN0LmlzRGFzaCA9PT0gbGFzdC5pc0Rhc2gpIHtcbiAgICAgICAgICAgIGZpcnN0LmxlZnQgPSBsYXN0LmxlZnQgLSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgbGFzdC5yaWdodCA9IGZpcnN0LnJpZ2h0ICsgdGhpcy53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53aWR0aCAqIHRoaXMubmV4dFJvdztcbiAgICAgICAgbGV0IGN1cnJJbmRleCA9IDA7XG4gICAgICAgIGxldCByYW5nZSA9IHJhbmdlc1tjdXJySW5kZXhdO1xuXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBpZiAoeCAvIHJhbmdlLnJpZ2h0ID4gMSkge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzWysrY3VyckluZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzdExlZnQgPSBNYXRoLmFicyh4IC0gcmFuZ2UubGVmdCk7XG4gICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmFuZ2UucmlnaHQpO1xuXG4gICAgICAgICAgICBjb25zdCBtaW5EaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICBjb25zdCBzaWduZWREaXN0YW5jZSA9IHJhbmdlLmlzRGFzaCA/IG1pbkRpc3QgOiAtbWluRGlzdDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4ICsgeF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgMTI4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREYXNoKGRhc2hhcnJheTogQXJyYXk8bnVtYmVyPiwgcm91bmQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbiA9IHJvdW5kID8gNyA6IDA7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IDIgKiBuICsgMTtcblxuICAgICAgICBpZiAodGhpcy5uZXh0Um93ICsgaGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdMaW5lQXRsYXMgb3V0IG9mIHNwYWNlJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykgeyBsZW5ndGggKz0gZGFzaGFycmF5W2ldOyB9XG5cbiAgICAgICAgY29uc3Qgc3RyZXRjaCA9IHRoaXMud2lkdGggLyBsZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IHRoaXMuZ2V0RGFzaFJhbmdlcyhkYXNoYXJyYXksIHRoaXMud2lkdGgsIHN0cmV0Y2gpO1xuXG4gICAgICAgIGlmIChyb3VuZCkge1xuICAgICAgICAgICAgdGhpcy5hZGRSb3VuZERhc2gocmFuZ2VzLCBzdHJldGNoLCBuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUmVndWxhckRhc2gocmFuZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhc2hFbnRyeSA9IHtcbiAgICAgICAgICAgIHk6ICh0aGlzLm5leHRSb3cgKyBuICsgMC41KSAvIHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiAyICogbiAvIHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IGxlbmd0aFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubmV4dFJvdyArPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBkYXNoRW50cnk7XG4gICAgfVxuXG4gICAgYmluZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLkFMUEhBLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgZ2wuQUxQSEEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMuZGF0YSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsLkFMUEhBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lQXRsYXM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3VuaXF1ZUlkLCBhc3luY0FsbH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBBY3RvciBmcm9tICcuL2FjdG9yJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUgV29ya2VyUG9vbCBmcm9tICcuL3dvcmtlcl9wb29sJztcblxuLyoqXG4gKiBSZXNwb25zaWJsZSBmb3Igc2VuZGluZyBtZXNzYWdlcyBmcm9tIGEge0BsaW5rIFNvdXJjZX0gdG8gYW4gYXNzb2NpYXRlZFxuICoge0BsaW5rIFdvcmtlclNvdXJjZX0uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgRGlzcGF0Y2hlciB7XG4gICAgd29ya2VyUG9vbDogV29ya2VyUG9vbDtcbiAgICBhY3RvcnM6IEFycmF5PEFjdG9yPjtcbiAgICBjdXJyZW50QWN0b3I6IG51bWJlcjtcbiAgICBpZDogbnVtYmVyO1xuXG4gICAgLy8gZXhwb3NlZCB0byBhbGxvdyBzdHViYmluZyBpbiB1bml0IHRlc3RzXG4gICAgc3RhdGljIEFjdG9yOiBDbGFzczxBY3Rvcj47XG5cbiAgICBjb25zdHJ1Y3Rvcih3b3JrZXJQb29sOiBXb3JrZXJQb29sLCBwYXJlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLndvcmtlclBvb2wgPSB3b3JrZXJQb29sO1xuICAgICAgICB0aGlzLmFjdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RvciA9IDA7XG4gICAgICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICBjb25zdCB3b3JrZXJzID0gdGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29ya2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gd29ya2Vyc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdG9yID0gbmV3IERpc3BhdGNoZXIuQWN0b3Iod29ya2VyLCBwYXJlbnQsIHRoaXMuaWQpO1xuICAgICAgICAgICAgYWN0b3IubmFtZSA9IGBXb3JrZXIgJHtpfWA7XG4gICAgICAgICAgICB0aGlzLmFjdG9ycy5wdXNoKGFjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBXb3JrZXJzLlxuICAgICAqL1xuICAgIGJyb2FkY2FzdCh0eXBlOiBzdHJpbmcsIGRhdGE6IG1peGVkLCBjYj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmFjdG9ycy5sZW5ndGgpO1xuICAgICAgICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBhc3luY0FsbCh0aGlzLmFjdG9ycywgKGFjdG9yLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKHR5cGUsIGRhdGEsIGRvbmUpO1xuICAgICAgICB9LCBjYik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWNxdWlyZXMgYW4gYWN0b3IgdG8gZGlzcGF0Y2ggbWVzc2FnZXMgdG8uIFRoZSBhY3RvcnMgYXJlIGRpc3RyaWJ1dGVkIGluIHJvdW5kLXJvYmluIGZhc2hpb24uXG4gICAgICogQHJldHVybnMgQW4gYWN0b3Igb2JqZWN0IGJhY2tlZCBieSBhIHdlYiB3b3JrZXIgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAgICovXG4gICAgZ2V0QWN0b3IoKTogQWN0b3Ige1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAodGhpcy5jdXJyZW50QWN0b3IgKyAxKSAlIHRoaXMuYWN0b3JzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuY3VycmVudEFjdG9yXTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuYWN0b3JzLmZvckVhY2goKGFjdG9yKSA9PiB7IGFjdG9yLnJlbW92ZSgpOyB9KTtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCk7XG4gICAgfVxufVxuXG5EaXNwYXRjaGVyLkFjdG9yID0gQWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BhdGNoZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BpY2ssIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1RpbGVKU09OfSBmcm9tICcuLi90eXBlcy90aWxlanNvbic7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnM6IGFueSwgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLCBjYWxsYmFjazogQ2FsbGJhY2s8VGlsZUpTT04+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgbG9hZGVkID0gZnVuY3Rpb24oZXJyOiA/RXJyb3IsIHRpbGVKU09OOiA/T2JqZWN0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHBpY2soXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgc291cmNlIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgVGlsZUpTT05cbiAgICAgICAgICAgICAgICBleHRlbmQodGlsZUpTT04sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIFsndGlsZXMnLCAnbWluem9vbScsICdtYXh6b29tJywgJ2F0dHJpYnV0aW9uJywgJ21hcGJveF9sb2dvJywgJ2JvdW5kcycsICdzY2hlbWUnLCAndGlsZVNpemUnLCAnZW5jb2RpbmcnXVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRpbGVKU09OLnZlY3Rvcl9sYXllcnMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJzID0gdGlsZUpTT04udmVjdG9yX2xheWVycztcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJJZHMgPSByZXN1bHQudmVjdG9yTGF5ZXJzLm1hcCgobGF5ZXIpID0+IHsgcmV0dXJuIGxheWVyLmlkOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnRpbGVzID0gcmVxdWVzdE1hbmFnZXIuY2Fub25pY2FsaXplVGlsZXNldChyZXN1bHQsIG9wdGlvbnMudXJsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICAgIHJldHVybiBnZXRKU09OKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU291cmNlVVJMKG9wdGlvbnMudXJsKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSksIGxvYWRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuZnJhbWUoKCkgPT4gbG9hZGVkKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXR9IGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuY2xhc3MgVGlsZUJvdW5kcyB7XG4gICAgYm91bmRzOiBMbmdMYXRCb3VuZHM7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBMbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGJvdW5kcykpO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSBtaW56b29tIHx8IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IG1heHpvb20gfHwgMjQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCb3VuZHMoYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGJvdW5kcyBwcm9wZXJ0eSBjb250YWlucyB2YWxpZCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlc1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYm91bmRzKSB8fCBib3VuZHMubGVuZ3RoICE9PSA0KSByZXR1cm4gWy0xODAsIC05MCwgMTgwLCA5MF07XG4gICAgICAgIHJldHVybiBbTWF0aC5tYXgoLTE4MCwgYm91bmRzWzBdKSwgTWF0aC5tYXgoLTkwLCBib3VuZHNbMV0pLCBNYXRoLm1pbigxODAsIGJvdW5kc1syXSksIE1hdGgubWluKDkwLCBib3VuZHNbM10pXTtcbiAgICB9XG5cbiAgICBjb250YWlucyh0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCB3b3JsZFNpemUgPSBNYXRoLnBvdygyLCB0aWxlSUQueik7XG4gICAgICAgIGNvbnN0IGxldmVsID0ge1xuICAgICAgICAgICAgbWluWDogTWF0aC5mbG9vcihtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWluWTogTWF0aC5mbG9vcihtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldE5vcnRoKCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFg6IE1hdGguY2VpbChtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldEVhc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWF4WTogTWF0aC5jZWlsKG1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkgKiB3b3JsZFNpemUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhpdCA9IHRpbGVJRC54ID49IGxldmVsLm1pblggJiYgdGlsZUlELnggPCBsZXZlbC5tYXhYICYmIHRpbGVJRC55ID49IGxldmVsLm1pblkgJiYgdGlsZUlELnkgPCBsZXZlbC5tYXhZO1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtjYWNoZUVudHJ5UG9zc2libHlBZGRlZH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiwgUHJvbW90ZUlkU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFZlY3RvclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAndmVjdG9yJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuXG4gICAgX29wdGlvbnM6IFZlY3RvclNvdXJjZVNwZWNpZmljYXRpb247XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWxlQ2xpcHBlZDogYm9vbGVhbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogVmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiAmIHtjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcblxuICAgICAgICB0aGlzLnR5cGUgPSAndmVjdG9yJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMuc2NoZW1lID0gJ3h5eic7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVGlsZUNsaXBwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnLCAncHJvbW90ZUlkJ10pKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7dHlwZTogJ3ZlY3Rvcid9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSBvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcblxuICAgICAgICBpZiAodGhpcy50aWxlU2l6ZSAhPT0gNTEyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbG9hZFRpbGVKU09OKHRoaXMuX29wdGlvbnMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgdGlsZUpTT04pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGlsZUpTT04pIHtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgdGlsZUpTT04pO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlSlNPTi5ib3VuZHMpIHRoaXMudGlsZUJvdW5kcyA9IG5ldyBUaWxlQm91bmRzKHRpbGVKU09OLmJvdW5kcywgdGhpcy5taW56b29tLCB0aGlzLm1heHpvb20pO1xuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4sIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGhhc1RpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50aWxlQm91bmRzIHx8IHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0aWxlSUQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aWxlSlNPTlJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplICogdGlsZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBwaXhlbFJhdGlvOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IHRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgIHByb21vdGVJZDogdGhpcy5wcm9tb3RlSWRcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuXG4gICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3IgPSB0aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKTtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgnbG9hZFRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGlsZS5zdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAvLyBzY2hlZHVsZSB0aWxlIHJlbG9hZGluZyBhZnRlciBpdCBoYXMgYmVlbiBsb2FkZWRcbiAgICAgICAgICAgIHRpbGUucmVsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgncmVsb2FkVGlsZScsIHBhcmFtcywgZG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNvdXJjZVRpbWluZylcbiAgICAgICAgICAgICAgICB0aWxlLnJlc291cmNlVGltaW5nID0gZGF0YS5yZXNvdXJjZVRpbWluZztcblxuICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzICYmIGRhdGEpIHRpbGUuc2V0RXhwaXJ5RGF0YShkYXRhKTtcbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlcik7XG5cbiAgICAgICAgICAgIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcik7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5yZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRpbGUodGlsZSwgdGlsZS5yZWxvYWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGlsZS5yZWxvYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2Fib3J0VGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuXG5pbXBvcnQge2NhY2hlRW50cnlQb3NzaWJseUFkZGVkfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtcbiAgICBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uLFxuICAgIFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAncmFzdGVyJyB8ICdyYXN0ZXItZGVtJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcblxuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgdGlsZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBfbG9hZGVkOiBib29sZWFuO1xuICAgIF9vcHRpb25zOiBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uIHwgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24gfCBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICdyYXN0ZXInO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5yb3VuZFpvb20gPSB0cnVlO1xuICAgICAgICB0aGlzLnNjaGVtZSA9ICd4eXonO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyJ30sIG9wdGlvbnMpO1xuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnXSkpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcblxuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcyk7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbGVKU09OUmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgdGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaGFzVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRpbGVCb3VuZHMgfHwgdGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHRpbGVJRC5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMpIHRpbGUuc2V0RXhwaXJ5RGF0YShpbWcpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5leHBpcmVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpbWcud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLnVwZGF0ZShpbWcsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBpbWcsIGdsLlJHQkEsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyZihnbC5URVhUVVJFXzJELCBjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLnRleHR1cmUpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC9vZmZzY3JlZW5fY2FudmFzX3N1cHBvcnRlZCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgUmFzdGVyVGlsZVNvdXJjZSBmcm9tICcuL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG4vLyBlbnN1cmUgREVNRGF0YSBpcyByZWdpc3RlcmVkIGZvciB3b3JrZXIgdHJhbnNmZXIgb24gbWFpbiB0aHJlYWQ6XG5pbXBvcnQgJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVNvdXJjZSBleHRlbmRzIFJhc3RlclRpbGVTb3VyY2UgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyLWRlbSc7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyLWRlbSd9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcgfHwgXCJtYXBib3hcIjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmFzdGVyLWRlbScsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICB0aWxlczogdGhpcy50aWxlcyxcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCBpbWFnZUxvYWRlZC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXMgPSB0aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKHRpbGUudGlsZUlEKTtcbiAgICAgICAgZnVuY3Rpb24gaW1hZ2VMb2FkZWQoZXJyLCBpbWcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICd1bmxvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzKSB0aWxlLnNldEV4cGlyeURhdGEoaW1nKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuZXhwaXJlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHdpbmRvdy5JbWFnZUJpdG1hcCAmJiBpbWcgaW5zdGFuY2VvZiB3aW5kb3cuSW1hZ2VCaXRtYXAgJiYgb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3SW1hZ2VEYXRhID0gdHJhbnNmZXIgPyBpbWcgOiBicm93c2VyLmdldEltYWdlRGF0YShpbWcsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgICAgICAgICAgY29vcmQ6IHRpbGUudGlsZUlELFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHJhd0ltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlLmFjdG9yIHx8IHRpbGUuc3RhdGUgPT09ICdleHBpcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgnbG9hZERFTVRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIsIGRlbSkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRlbSkge1xuICAgICAgICAgICAgICAgIHRpbGUuZGVtID0gZGVtO1xuICAgICAgICAgICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gdGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3QgZGltID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGNvbnN0IHB4ID0gKGNhbm9uaWNhbC54IC0gMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IHB4dyA9IGNhbm9uaWNhbC54ID09PSAwID8gdGlsZUlELndyYXAgLSAxIDogdGlsZUlELndyYXA7XG4gICAgICAgIGNvbnN0IG54ID0gKGNhbm9uaWNhbC54ICsgMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IG54dyA9IGNhbm9uaWNhbC54ICsgMSA9PT0gZGltID8gdGlsZUlELndyYXAgKyAxIDogdGlsZUlELndyYXA7XG5cbiAgICAgICAgY29uc3QgbmVpZ2hib3JpbmdUaWxlcyA9IHt9O1xuICAgICAgICAvLyBhZGQgYWRqYWNlbnQgdGlsZXNcbiAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIHB4dywgY2Fub25pY2FsLnosIHB4LCBjYW5vbmljYWwueSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuXG4gICAgICAgIC8vIEFkZCB1cHBlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSA+IDApIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCBsb3dlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSArIDEgPCBkaW0pIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5laWdoYm9yaW5nVGlsZXM7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLmRlbVRleHR1cmUpIHRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHRpbGUuZGVtVGV4dHVyZSk7XG4gICAgICAgIGlmICh0aWxlLmZibykge1xuICAgICAgICAgICAgdGlsZS5mYm8uZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUuZmJvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmRlbSkgZGVsZXRlIHRpbGUuZGVtO1xuICAgICAgICBkZWxldGUgdGlsZS5uZWlnaGJvcmluZ1RpbGVzO1xuXG4gICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICBpZiAodGlsZS5hY3Rvcikge1xuICAgICAgICAgICAgdGlsZS5hY3Rvci5zZW5kKCdyZW1vdmVERU1UaWxlJywge3VpZDogdGlsZS51aWQsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTiwgR2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTlNvdXJjZVNwZWNpZmljYXRpb24sIFByb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIEEgc291cmNlIGNvbnRhaW5pbmcgR2VvSlNPTi5cbiAqIChTZWUgdGhlIFtTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzLWdlb2pzb24pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgICBkYXRhOiAnaHR0cHM6Ly9kMmFkNmI0dXI3eXZwcS5jbG91ZGZyb250Lm5ldC9uYXR1cmFsZWFydGgtMy4zLjAvbmVfMTBtX3BvcnRzLmdlb2pzb24nXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgIGRhdGE6IHtcbiAqICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICAgICAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxuICogICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge30sXG4gKiAgICAgICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICAgICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogW1xuICogICAgICAgICAgICAgICAgICAgIC03Ni41MzA2MzI5NzI3MTcyOSxcbiAqICAgICAgICAgICAgICAgICAgICAzOS4xODE3NDA3Nzk5NDEwOFxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgfV1cbiAqICAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuZ2V0U291cmNlKCdzb21lIGlkJykuc2V0RGF0YSh7XG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXG4gKiAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgIFwicHJvcGVydGllc1wiOiB7IFwibmFtZVwiOiBcIk51bGwgSXNsYW5kXCIgfSxcbiAqICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBbIDAsIDAgXVxuICogICAgICAgfVxuICogICB9XVxuICogfSk7XG4gKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gKiBAc2VlIFtBZGQgYSBHZW9KU09OIGxpbmVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2VvanNvbi1saW5lLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGhlYXRtYXAgZnJvbSBwb2ludHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaGVhdG1hcC8pXG4gKiBAc2VlIFtDcmVhdGUgYW5kIHN0eWxlIGNsdXN0ZXJzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NsdXN0ZXIvKVxuICovXG5jbGFzcyBHZW9KU09OU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ2dlb2pzb24nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0aW9uOiBzdHJpbmc7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcblxuICAgIGlzVGlsZUNsaXBwZWQ6IGJvb2xlYW47XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgX2RhdGE6IEdlb0pTT04gfCBzdHJpbmc7XG4gICAgX29wdGlvbnM6IGFueTtcbiAgICB3b3JrZXJPcHRpb25zOiBhbnk7XG4gICAgbWFwOiBNYXA7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBfcmVzb3VyY2VUaW1pbmc6IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+O1xuICAgIF9yZW1vdmVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBHZW9KU09OU291cmNlU3BlY2lmaWNhdGlvbiAmIHt3b3JrZXJPcHRpb25zPzogYW55LCBjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgICAgIC8vIGB0eXBlYCBpcyBhIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgY29uc3RhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciAzcmRcbiAgICAgICAgLy8gcGFydGllcyB0byB1c2UgR2VvSlNPTlNvdXJjZSB0byBidWlsZCB0aGVpciBvd24gc291cmNlIHR5cGVzLlxuICAgICAgICB0aGlzLnR5cGUgPSAnZ2VvanNvbic7XG5cbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMTg7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMuaXNUaWxlQ2xpcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWN0b3IgPSBkaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRlZFBhcmVudChldmVudGVkUGFyZW50KTtcblxuICAgICAgICB0aGlzLl9kYXRhID0gKG9wdGlvbnMuZGF0YTogYW55KTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4em9vbSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1heHpvb20gPSBvcHRpb25zLm1heHpvb207XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUpIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXR0cmlidXRpb24pIHRoaXMuYXR0cmlidXRpb24gPSBvcHRpb25zLmF0dHJpYnV0aW9uO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IG9wdGlvbnMucHJvbW90ZUlkO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gRVhURU5UIC8gdGhpcy50aWxlU2l6ZTtcblxuICAgICAgICAvLyBzZW50IHRvIHRoZSB3b3JrZXIsIGFsb25nIHdpdGggYHVybDogLi4uYCBvciBgZGF0YTogbGl0ZXJhbCBnZW9qc29uYCxcbiAgICAgICAgLy8gc28gdGhhdCBpdCBjYW4gbG9hZC9wYXJzZS9pbmRleCB0aGUgZ2VvanNvbiBkYXRhXG4gICAgICAgIC8vIGV4dGVuZGluZyB3aXRoIGBvcHRpb25zLndvcmtlck9wdGlvbnNgIGhlbHBzIHRvIG1ha2UgaXQgZWFzeSBmb3JcbiAgICAgICAgLy8gdGhpcmQtcGFydHkgc291cmNlcyB0byBoYWNrL3JldXNlIEdlb0pTT05Tb3VyY2UuXG4gICAgICAgIHRoaXMud29ya2VyT3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBjbHVzdGVyOiBvcHRpb25zLmNsdXN0ZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICBnZW9qc29uVnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYnVmZmVyOiAob3B0aW9ucy5idWZmZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYnVmZmVyIDogMTI4KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIHRvbGVyYW5jZTogKG9wdGlvbnMudG9sZXJhbmNlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRvbGVyYW5jZSA6IDAuMzc1KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGV4dGVudDogRVhURU5ULFxuICAgICAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgICAgICBsaW5lTWV0cmljczogb3B0aW9ucy5saW5lTWV0cmljcyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUlkOiBvcHRpb25zLmdlbmVyYXRlSWQgfHwgZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdXBlcmNsdXN0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4ob3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSwgdGhpcy5tYXh6b29tIC0gMSkgOlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXh6b29tIC0gMSksXG4gICAgICAgICAgICAgICAgZXh0ZW50OiBFWFRFTlQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiAob3B0aW9ucy5jbHVzdGVyUmFkaXVzIHx8IDUwKSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGxvZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVJZDogb3B0aW9ucy5nZW5lcmF0ZUlkIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2x1c3RlclByb3BlcnRpZXM6IG9wdGlvbnMuY2x1c3RlclByb3BlcnRpZXNcbiAgICAgICAgfSwgb3B0aW9ucy53b3JrZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9iamVjdCA9IHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFsdGhvdWdoIEdlb0pTT04gc291cmNlcyBjb250YWluIG5vIG1ldGFkYXRhLCB3ZSBmaXJlIHRoaXMgZXZlbnQgdG8gbGV0IHRoZSBTb3VyY2VDYWNoZVxuICAgICAgICAgICAgLy8ga25vdyBpdHMgb2sgdG8gc3RhcnQgcmVxdWVzdGluZyB0aWxlcy5cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCBkYXRhKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBHZW9KU09OIGRhdGEgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gZGF0YSBBIEdlb0pTT04gZGF0YSBvYmplY3Qgb3IgYSBVUkwgdG8gb25lLiBUaGUgbGF0dGVyIGlzIHByZWZlcmFibGUgaW4gdGhlIGNhc2Ugb2YgbGFyZ2UgR2VvSlNPTiBmaWxlcy5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHNldERhdGEoZGF0YTogR2VvSlNPTiB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIHpvb20gYXQgd2hpY2ggdGhlIGdpdmVuIGNsdXN0ZXIgZXhwYW5kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB6b29tIHZhbHVlIGlzIHJldHJpZXZlZCAoYChlcnJvciwgem9vbSkgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20oY2x1c3RlcklkOiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbScsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gY2x1c3RlciBvbiB0aGUgbmV4dCB6b29tIGxldmVsIChhcyBhbiBhcnJheSBvZiBHZW9KU09OIGZlYXR1cmVzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckNoaWxkcmVuJywge2NsdXN0ZXJJZCwgc291cmNlOiB0aGlzLmlkfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIG9yaWdpbmFsIHBvaW50cyB0aGF0IGJlbG9uZyB0byB0aGUgY2x1c3RlciAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHJldHVybi5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgZmVhdHVyZXMgdG8gc2tpcCAoZS5nLiBmb3IgcGFnaW5hdGlvbikuXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZlYXR1cmVzIGFyZSByZXRyaWV2ZWQgKGAoZXJyb3IsIGZlYXR1cmVzKSA9PiB7IC4uLiB9YCkuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBnZXRDbHVzdGVyTGVhdmVzKGNsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdnZW9qc29uLmdldENsdXN0ZXJMZWF2ZXMnLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBjbHVzdGVySWQsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIG9mZnNldFxuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVzcG9uc2libGUgZm9yIGludm9raW5nIFdvcmtlclNvdXJjZSdzIGdlb2pzb24ubG9hZERhdGEgdGFyZ2V0LCB3aGljaFxuICAgICAqIGhhbmRsZXMgbG9hZGluZyB0aGUgZ2VvanNvbiBkYXRhIGFuZCBwcmVwYXJpbmcgdG8gc2VydmUgaXQgdXAgYXMgdGlsZXMsXG4gICAgICogdXNpbmcgZ2VvanNvbi12dCBvciBzdXBlcmNsdXN0ZXIgYXMgYXBwcm9wcmlhdGUuXG4gICAgICovXG4gICAgX3VwZGF0ZVdvcmtlckRhdGEoY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZXh0ZW5kKHt9LCB0aGlzLndvcmtlck9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoYnJvd3Nlci5yZXNvbHZlVVJMKGRhdGEpLCBSZXNvdXJjZVR5cGUuU291cmNlKTtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLmRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRhcmdldCB7dGhpcy50eXBlfS5sb2FkRGF0YSByYXRoZXIgdGhhbiBsaXRlcmFsbHkgZ2VvanNvbi5sb2FkRGF0YSxcbiAgICAgICAgLy8gc28gdGhhdCBvdGhlciBnZW9qc29uLWxpa2Ugc291cmNlIHR5cGVzIGNhbiBlYXNpbHkgcmV1c2UgdGhpc1xuICAgICAgICAvLyBpbXBsZW1lbnRhdGlvblxuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoYCR7dGhpcy50eXBlfS5sb2FkRGF0YWAsIG9wdGlvbnMsIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlbW92ZWQgfHwgKHJlc3VsdCAmJiByZXN1bHQuYWJhbmRvbmVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQucmVzb3VyY2VUaW1pbmcgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nW3RoaXMuaWRdKVxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gcmVzdWx0LnJlc291cmNlVGltaW5nW3RoaXMuaWRdLnNsaWNlKDApO1xuICAgICAgICAgICAgLy8gQW55IGBsb2FkRGF0YWAgY2FsbHMgdGhhdCBwaWxlZCB1cCB3aGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIC8vIHRoaXMgb25lIHdpbGwgZ2V0IGNvYWxlc2NlZCBpbnRvIGEgc2luZ2xlIGNhbGwgd2hlbiB0aGlzXG4gICAgICAgICAgICAvLyAnY29hbGVzY2UnIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkLlxuICAgICAgICAgICAgLy8gV2Ugd291bGQgc2VsZi1zZW5kIGZyb20gdGhlIHdvcmtlciBpZiB3ZSBoYWQgYWNjZXNzIHRvIGl0c1xuICAgICAgICAgICAgLy8gbWVzc2FnZSBxdWV1ZS4gV2FpdGluZyBpbnN0ZWFkIGZvciB0aGUgJ2NvYWxlc2NlJyB0byByb3VuZC10cmlwXG4gICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBmb3JlZ3JvdW5kIGp1c3QgbWVhbnMgd2UncmUgdGhyb3R0bGluZyB0aGUgd29ya2VyXG4gICAgICAgICAgICAvLyB0byBydW4gYXQgYSBsaXR0bGUgbGVzcyB0aGFuIGZ1bGwtdGhyb3R0bGUuXG4gICAgICAgICAgICB0aGlzLmFjdG9yLnNlbmQoYCR7dGhpcy50eXBlfS5jb2FsZXNjZWAsIHtzb3VyY2U6IG9wdGlvbnMuc291cmNlfSwgbnVsbCk7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAhdGlsZS5hY3RvciA/ICdsb2FkVGlsZScgOiAncmVsb2FkVGlsZSc7XG4gICAgICAgIHRpbGUuYWN0b3IgPSB0aGlzLmFjdG9yO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB1aWQ6IHRpbGUudWlkLFxuICAgICAgICAgICAgdGlsZUlEOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgIHpvb206IHRpbGUudGlsZUlELm92ZXJzY2FsZWRaLFxuICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBwaXhlbFJhdGlvOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IHRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgIHByb21vdGVJZDogdGhpcy5wcm9tb3RlSWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlLnJlcXVlc3QgPSB0aGlzLmFjdG9yLnNlbmQobWVzc2FnZSwgcGFyYW1zLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGlsZS5sb2FkVmVjdG9yRGF0YShkYXRhLCB0aGlzLm1hcC5wYWludGVyLCBtZXNzYWdlID09PSAncmVsb2FkVGlsZScpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5hYm9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlVGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdyZW1vdmVTb3VyY2UnLCB7dHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMsIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2RhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTlNvdXJjZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCB0eXBlOiAnSW50MTYnLCBjb21wb25lbnRzOiAyfSxcbiAgICB7bmFtZTogJ2FfdGV4dHVyZV9wb3MnLCB0eXBlOiAnSW50MTYnLCBjb21wb25lbnRzOiAyfVxuXSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7UmFzdGVyQm91bmRzQXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7Q2FudmFzU291cmNlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi9jYW52YXNfc291cmNlJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7XG4gICAgSW1hZ2VTb3VyY2VTcGVjaWZpY2F0aW9uLFxuICAgIFZpZGVvU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBDb29yZGluYXRlcyA9IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXTtcblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy1pbWFnZSkgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnaW1hZ2UnLFxuICogICAgdXJsOiAnaHR0cHM6Ly93d3cubWFwYm94LmNvbS9pbWFnZXMvZm9vLnBuZycsXG4gKiAgICBjb29yZGluYXRlczogW1xuICogICAgICAgIFstNzYuNTQsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMTddLFxuICogICAgICAgIFstNzYuNTQsIDM5LjE3XVxuICogICAgXVxuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGNvb3JkaW5hdGVzXG4gKiB2YXIgbXlTb3VyY2UgPSBtYXAuZ2V0U291cmNlKCdzb21lIGlkJyk7XG4gKiBteVNvdXJjZS5zZXRDb29yZGluYXRlcyhbXG4gKiAgICAgWy03Ni41NDMzNTczNzIyODM5NCwgMzkuMTg1Nzk5MDcyMjk3NDhdLFxuICogICAgIFstNzYuNTI4MDM2NTk0MzkwODcsIDM5LjE4MzgzNjQ4NDc1ODddLFxuICogICAgIFstNzYuNTI5NTM4NjMxNDM5MiwgMzkuMTc2ODMzOTI1MDc2MDZdLFxuICogICAgIFstNzYuNTQ1MjAyNzMyMDg2MTgsIDM5LjE3ODc2MzQ0MTA2NjQyXVxuICogXSk7XG4gKlxuICogLy8gdXBkYXRlIHVybCBhbmQgY29vcmRpbmF0ZXMgc2ltdWx0YW5lb3VzbHlcbiAqIG15U291cmNlLnVwZGF0ZUltYWdlKHtcbiAqICAgIHVybDogJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vaW1hZ2VzL2Jhci5wbmcnLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiAgICBdXG4gKiB9KVxuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICogQHNlZSBbQWRkIGFuIGltYWdlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ltYWdlLW9uLWEtbWFwLylcbiAqL1xuY2xhc3MgSW1hZ2VTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXI7XG4gICAgbWF4em9vbTogbnVtYmVyO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG5cbiAgICBjb29yZGluYXRlczogQ29vcmRpbmF0ZXM7XG4gICAgdGlsZXM6IHtbc3RyaW5nXTogVGlsZX07XG4gICAgb3B0aW9uczogYW55O1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgdGV4dHVyZTogVGV4dHVyZSB8IG51bGw7XG4gICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcDtcbiAgICB0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBfYm91bmRzQXJyYXk6IFJhc3RlckJvdW5kc0FycmF5O1xuICAgIGJvdW5kc0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGJvdW5kc1NlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IEltYWdlU291cmNlU3BlY2lmaWNhdGlvbiB8IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiB8IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gb3B0aW9ucy5jb29yZGluYXRlcztcblxuICAgICAgICB0aGlzLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy50aWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKG5ld0Nvb3JkaW5hdGVzPzogQ29vcmRpbmF0ZXMsIHN1Y2Nlc3NDYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICB0aGlzLnVybCA9IHRoaXMub3B0aW9ucy51cmw7XG5cbiAgICAgICAgZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsIFJlc291cmNlVHlwZS5JbWFnZSksIChlcnIsIGltYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0Nvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBuZXdDb29yZGluYXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgaW1hZ2UgVVJMIGFuZCwgb3B0aW9uYWxseSwgdGhlIGNvb3JkaW5hdGVzLiBUbyBhdm9pZCBoYXZpbmcgdGhlIGltYWdlIGZsYXNoIGFmdGVyIGNoYW5naW5nLFxuICAgICAqIHNldCB0aGUgYHJhc3Rlci1mYWRlLWR1cmF0aW9uYCBwYWludCBwcm9wZXJ0eSBvbiB0aGUgcmFzdGVyIGxheWVyIHRvIDAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51cmxdIFJlcXVpcmVkIGltYWdlIFVSTC5cbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBbb3B0aW9ucy5jb29yZGluYXRlc10gRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGltYWdlLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlIGFuZCBwcm9jZWVkIGluIGNsb2Nrd2lzZSBvcmRlci5cbiAgICAgKiAgIFRoZXkgZG8gbm90IGhhdmUgdG8gcmVwcmVzZW50IGEgcmVjdGFuZ2xlLlxuICAgICAqIEByZXR1cm5zIHtJbWFnZVNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHVwZGF0ZUltYWdlKG9wdGlvbnM6IHt1cmw6IHN0cmluZywgY29vcmRpbmF0ZXM/OiBDb29yZGluYXRlc30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlIHx8ICFvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnVybCA9IG9wdGlvbnMudXJsO1xuICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy5jb29yZGluYXRlcywgKCkgPT4geyB0aGlzLnRleHR1cmUgPSBudWxsOyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2ZpbmlzaExvYWRpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbWFnZSdzIGNvb3JkaW5hdGVzIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSBjb29yZGluYXRlcztcblxuICAgICAgICAvLyBDYWxjdWxhdGUgd2hpY2ggbWVyY2F0b3IgdGlsZSBpcyBzdWl0YWJsZSBmb3IgcmVuZGVyaW5nIHRoZSB2aWRlbyBpblxuICAgICAgICAvLyBhbmQgY3JlYXRlIGEgYnVmZmVyIHdpdGggdGhlIGNvcm5lciBjb29yZGluYXRlcy4gVGhlc2UgY29vcmRpbmF0ZXNcbiAgICAgICAgLy8gbWF5IGJlIG91dHNpZGUgdGhlIHRpbGUsIGJlY2F1c2UgcmFzdGVyIHRpbGVzIGFyZW4ndCBjbGlwcGVkIHdoZW4gcmVuZGVyaW5nLlxuXG4gICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgZ2VvIGNvb3JkaW5hdGVzIGludG8gKHpvb20gMCkgdGlsZSBzcGFjZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb3JuZXJDb29yZHMgPSBjb29yZGluYXRlcy5tYXAoTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQpO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0aWxlIHdlJ2xsIHVzZSB0byBob2xkIHRoaXMgaW1hZ2Unc1xuICAgICAgICAvLyByZW5kZXIgZGF0YVxuICAgICAgICB0aGlzLnRpbGVJRCA9IGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvcm5lckNvb3Jkcyk7XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIG1pbi9tYXggem9vbSB0byBvdXIgdGlsZSdzIHpvb20gbGV2ZWwgaW4gb3JkZXIgdG8gZm9yY2VcbiAgICAgICAgLy8gU291cmNlQ2FjaGUgdG8gcmVxdWVzdCB0aGlzIHRpbGUgKG5vIG1hdHRlciB3aGF0IHRoZSBtYXAncyB6b29tXG4gICAgICAgIC8vIGxldmVsKVxuICAgICAgICB0aGlzLm1pbnpvb20gPSB0aGlzLm1heHpvb20gPSB0aGlzLnRpbGVJRC56O1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgY29ybmVyIGNvb3JkaW5hdGVzIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Ygb3VyXG4gICAgICAgIC8vIHRpbGUuXG4gICAgICAgIGNvbnN0IHRpbGVDb29yZHMgPSBjb3JuZXJDb29yZHMubWFwKChjb29yZCkgPT4gdGhpcy50aWxlSUQuZ2V0VGlsZVBvaW50KGNvb3JkKS5fcm91bmQoKSk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1swXS54LCB0aWxlQ29vcmRzWzBdLnksIDAsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzFdLngsIHRpbGVDb29yZHNbMV0ueSwgRVhURU5ULCAwKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1szXS54LCB0aWxlQ29vcmRzWzNdLnksIDAsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMl0ueCwgdGlsZUNvb3Jkc1syXS55LCBFWFRFTlQsIEVYVEVOVCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8ICF0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIC8vIFdlIGhhdmUgYSBzaW5nbGUgdGlsZSAtLSB3aG9vc2UgY29vcmRpbmF0ZXMgYXJlIHRoaXMudGlsZUlEIC0tIHRoYXRcbiAgICAgICAgLy8gY292ZXJzIHRoZSBpbWFnZSB3ZSB3YW50IHRvIHJlbmRlci4gIElmIHRoYXQncyB0aGUgb25lIGJlaW5nXG4gICAgICAgIC8vIHJlcXVlc3RlZCwgc2V0IGl0IHVwIHdpdGggdGhlIGltYWdlOyBvdGhlcndpc2UsIG1hcmsgdGhlIHRpbGUgYXNcbiAgICAgICAgLy8gYGVycm9yZWRgIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBubyBkYXRhIGZvciBpdC5cbiAgICAgICAgLy8gSWYgdGhlIHdvcmxkIHdyYXBzLCB3ZSBtYXkgaGF2ZSBtdWx0aXBsZSBcIndyYXBwZWRcIiBjb3BpZXMgb2YgdGhlXG4gICAgICAgIC8vIHNpbmdsZSB0aWxlLlxuICAgICAgICBpZiAodGhpcy50aWxlSUQgJiYgdGhpcy50aWxlSUQuZXF1YWxzKHRpbGUudGlsZUlELmNhbm9uaWNhbCkpIHtcbiAgICAgICAgICAgIHRoaXMudGlsZXNbU3RyaW5nKHRpbGUudGlsZUlELndyYXApXSA9IHRpbGU7XG4gICAgICAgICAgICB0aWxlLmJ1Y2tldHMgPSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBjb29yZGluYXRlcywgZ2V0IHRoZWlyIGNlbnRlciBhcyBhIGNvb3JkaW5hdGUuXG4gKlxuICogQHJldHVybnMgY2VudGVycG9pbnRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb29yZGluYXRlc0NlbnRlclRpbGVJRChjb29yZHM6IEFycmF5PE1lcmNhdG9yQ29vcmRpbmF0ZT4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgY29vcmQueCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBjb29yZC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGNvb3JkLngpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgY29vcmQueSk7XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSBtYXhYIC0gbWluWDtcbiAgICBjb25zdCBkeSA9IG1heFkgLSBtaW5ZO1xuICAgIGNvbnN0IGRNYXggPSBNYXRoLm1heChkeCwgZHkpO1xuICAgIGNvbnN0IHpvb20gPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKC1NYXRoLmxvZyhkTWF4KSAvIE1hdGguTE4yKSk7XG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB6b29tKTtcblxuICAgIHJldHVybiBuZXcgQ2Fub25pY2FsVGlsZUlEKFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblggKyBtYXhYKSAvIDIgKiB0aWxlc0F0Wm9vbSksXG4gICAgICAgICAgICBNYXRoLmZsb29yKChtaW5ZICsgbWF4WSkgLyAyICogdGlsZXNBdFpvb20pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldFZpZGVvLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyQm91bmRzQXR0cmlidXRlcyBmcm9tICcuLi9kYXRhL3Jhc3Rlcl9ib3VuZHNfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUge1ZpZGVvU291cmNlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIHZpZGVvLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtdmlkZW8pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ3ZpZGVvJyxcbiAqICAgIHVybDogW1xuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS5tcDQnLFxuICogICAgICAgICdodHRwczovL3d3dy5tYXBib3guY29tL2Jsb2cvYXNzZXRzL2JhbHRpbW9yZS1zbW9rZS53ZWJtJ1xuICogICAgXSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhIHZpZGVvXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZpZGVvLW9uLWEtbWFwLylcbiAqL1xuY2xhc3MgVmlkZW9Tb3VyY2UgZXh0ZW5kcyBJbWFnZVNvdXJjZSB7XG4gICAgb3B0aW9uczogVmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIHVybHM6IEFycmF5PHN0cmluZz47XG4gICAgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnJvdW5kWm9vbSA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZSA9ICd2aWRlbyc7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy51cmxzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIG9wdGlvbnMudXJscykge1xuICAgICAgICAgICAgdGhpcy51cmxzLnB1c2godGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU291cmNlKS51cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0VmlkZW8odGhpcy51cmxzLCAoZXJyLCB2aWRlbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpZGVvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlbyA9IHZpZGVvO1xuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8ubG9vcCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBTdGFydCByZXBhaW50aW5nIHdoZW4gdmlkZW8gc3RhcnRzIHBsYXlpbmcuIGhhc1RyYW5zaXRpb24oKSB3aWxsIHRoZW4gcmV0dXJuXG4gICAgICAgICAgICAgICAgLy8gdHJ1ZSB0byB0cmlnZ2VyIGFkZGl0aW9uYWwgZnJhbWVzIGFzIGxvbmcgYXMgdGhlIHZpZGVvcyBjb250aW51ZXMgcGxheWluZy5cbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXVzZXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxheXMgdGhlIHZpZGVvLlxuICAgICAqL1xuICAgIHBsYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgcGxheWJhY2sgdG8gYSB0aW1lc3RhbXAsIGluIHNlY29uZHMuXG4gICAgICovXG4gICAgc2VlayhzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZWthYmxlUmFuZ2UgPSB0aGlzLnZpZGVvLnNlZWthYmxlO1xuICAgICAgICAgICAgaWYgKHNlY29uZHMgPCBzZWVrYWJsZVJhbmdlLnN0YXJ0KDApIHx8IHNlY29uZHMgPiBzZWVrYWJsZVJhbmdlLmVuZCgwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7dGhpcy5pZH1gLCBudWxsLCBgUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICR7c2Vla2FibGVSYW5nZS5zdGFydCgwKX0gYW5kICR7c2Vla2FibGVSYW5nZS5lbmQoMCl9LXNlY29uZCBtYXJrLmApKSk7XG4gICAgICAgICAgICB9IGVsc2UgdGhpcy52aWRlby5jdXJyZW50VGltZSA9IHNlY29uZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBIVE1MIGB2aWRlb2AgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MVmlkZW9FbGVtZW50fSBUaGUgSFRNTCBgdmlkZW9gIGVsZW1lbnQuXG4gICAgICovXG4gICAgZ2V0VmlkZW8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcCkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2aWRlbydzIGNvb3JkaW5hdGVzIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIHNldENvb3JkaW5hdGVzXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIFZpZGVvU291cmNlXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIHZpZGVvLlxuICAgICAqICAgVGhlIGNvb3JkaW5hdGVzIHN0YXJ0IGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHZpZGVvIGFuZCBwcm9jZWVkIGluIGNsb2Nrd2lzZSBvcmRlci5cbiAgICAgKiAgIFRoZXkgZG8gbm90IGhhdmUgdG8gcmVwcmVzZW50IGEgcmVjdGFuZ2xlLlxuICAgICAqIEByZXR1cm5zIHtWaWRlb1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8IHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLnZpZGVvLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmlkZW8ucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLnZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgICAgdXJsczogdGhpcy51cmxzLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbyAmJiAhdGhpcy52aWRlby5wYXVzZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuZXhwb3J0IHR5cGUgQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiA9IHt8XG4gICAgXCJ0eXBlXCI6IFwiY2FudmFzXCIsXG4gICAgXCJjb29yZGluYXRlc1wiOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0sXG4gICAgXCJhbmltYXRlXCI/OiBib29sZWFuLFxuICAgIFwiY2FudmFzXCI6IHN0cmluZyB8IEhUTUxDYW52YXNFbGVtZW50XG58fTtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGNhbnZhcyBzb3VyY2UgdHlwZSB0byB0aGUgbWFwLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbnZhc1NvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFNvdXJjZSB0eXBlLiBNdXN0IGJlIGBcImNhbnZhc1wiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgQ2FudmFzIHNvdXJjZSBmcm9tIHdoaWNoIHRvIHJlYWQgcGl4ZWxzLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQsIG9yIHRoZSBgSFRNTENhbnZhc0VsZW1lbnRgIGl0c2VsZi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGRlbm90aW5nIHdoZXJlIHRvIHBsYWNlIHRoZSBjb3JuZXJzIG9mIHRoZSBjYW52YXMsIHNwZWNpZmllZCBpbiBgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdYCBwYWlycy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FuaW1hdGU9dHJ1ZV0gV2hldGhlciB0aGUgY2FudmFzIHNvdXJjZSBpcyBhbmltYXRlZC4gSWYgdGhlIGNhbnZhcyBpcyBzdGF0aWMgKGkuZS4gcGl4ZWxzIGRvIG5vdCBuZWVkIHRvIGJlIHJlLXJlYWQgb24gZXZlcnkgZnJhbWUpLCBgYW5pbWF0ZWAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKi9cblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwgY2FudmFzLiBTZWUge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnY2FudmFzJyxcbiAqICAgIGNhbnZhczogJ2lkT2ZNeUhUTUxDYW52YXMnLFxuICogICAgYW5pbWF0ZTogdHJ1ZSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqL1xuY2xhc3MgQ2FudmFzU291cmNlIGV4dGVuZHMgSW1hZ2VTb3VyY2Uge1xuICAgIG9wdGlvbnM6IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgYW5pbWF0ZTogYm9vbGVhbjtcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgcGxheTogKCkgPT4gdm9pZDtcbiAgICBwYXVzZTogKCkgPT4gdm9pZDtcbiAgICBfcGxheWluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgLy8gV2UgYnVpbGQgaW4gc29tZSB2YWxpZGF0aW9uIGhlcmUsIHNpbmNlIGNhbnZhcyBzb3VyY2VzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgc3R5bGUgc3BlYzpcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY29vcmRpbmF0ZXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5jb29yZGluYXRlcykgfHwgb3B0aW9ucy5jb29yZGluYXRlcy5sZW5ndGggIT09IDQgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLnNvbWUoYyA9PiAhQXJyYXkuaXNBcnJheShjKSB8fCBjLmxlbmd0aCAhPT0gMiB8fCBjLnNvbWUobCA9PiB0eXBlb2YgbCAhPT0gJ251bWJlcicpKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjb29yZGluYXRlc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hbmltYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ29wdGlvbmFsIFwiYW5pbWF0ZVwiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuY2FudmFzICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjYW52YXNcIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hbmltYXRlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGFuaW1hdGlvbi4gVGhlIGltYWdlIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIGNhbnZhcyB0byB0aGUgbWFwIG9uIGVhY2ggZnJhbWUuXG4gICAgICogQG1ldGhvZCBwbGF5XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgYW5pbWF0aW9uLiBUaGUgbWFwIHdpbGwgZGlzcGxheSBhIHN0YXRpYyBjb3B5IG9mIHRoZSBjYW52YXMgaW1hZ2UuXG4gICAgICogQG1ldGhvZCBwYXVzZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKi9cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gKHRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpID9cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzIDpcbiAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLicpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRlKSB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2FudmFzJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcy5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXMgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0NhbnZhc1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBsZXQgcmVzaXplID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgcmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkpIHJldHVybjtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIG5vdCBlbm91Z2ggZGF0YSBmb3IgY3VycmVudCBwb3NpdGlvblxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuY2FudmFzLCBnbC5SR0JBLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNpemUgfHwgdGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcywge3ByZW11bHRpcGx5OiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNvb3JkaW5hdGVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XG4gICAgfVxuXG4gICAgX2hhc0ludmFsaWREaW1lbnNpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgW3RoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHRdKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeCkgfHwgeCA8PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXNTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG4vKipcbiAqIFRoZSBgU291cmNlYCBpbnRlcmZhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNvdXJjZSB0eXBlLCBpbmNsdWRpbmcgXCJjb3JlXCIgdHlwZXMgKGB2ZWN0b3JgLCBgcmFzdGVyYCxcbiAqIGB2aWRlb2AsIGV0Yy4pIGFuZCBhbGwgY3VzdG9tLCB0aGlyZC1wYXJ0eSB0eXBlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuIE11c3Qgbm90IGJlIHVzZWQgYnkgYW55IGV4aXN0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFNvdXJjZSBvcHRpb25zLCBzcGVjaWZpYyB0byB0aGUgc291cmNlIHR5cGUgKGV4Y2VwdCBmb3IgYG9wdGlvbnMudHlwZWAsIHdoaWNoIGlzIGFsd2F5c1xuICogcmVxdWlyZWQpLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBUaGUgc291cmNlIHR5cGUsIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBgbmFtZWAgdXNlZCBpbiB7QGxpbmsgU3R5bGUjYWRkU291cmNlVHlwZX0uXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXIgQSB7QGxpbmsgRGlzcGF0Y2hlcn0gaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHdvcmtlcnMuXG4gKlxuICogQGZpcmVzIGRhdGEgd2l0aCBge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9YCB0byBpbmRpY2F0ZSB0aGF0IGFueSBuZWNlc3NhcnkgbWV0YWRhdGFcbiAqIGhhcyBiZWVuIGxvYWRlZCBzbyB0aGF0IGl0J3Mgb2theSB0byBjYWxsIGBsb2FkVGlsZWA7IGFuZCB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfWBcbiAqIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBkYXRhIGhhcyBjaGFuZ2VkLCBzbyB0aGF0IGFueSBjdXJyZW50IGNhY2hlcyBzaG91bGQgYmUgZmx1c2hlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuICBNdXN0IG1hdGNoIHRoZSBpZCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbnpvb21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXh6b29tXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVGlsZUNsaXBwZWQgYGZhbHNlYCBpZiB0aWxlcyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLCBgdHJ1ZWAgaWYgdGhleSBjYW5ub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGFyc2VPdmVyc2NhbGVkIGB0cnVlYCBpZiB0aWxlcyBzaG91bGQgYmUgc2VudCBiYWNrIHRvIHRoZSB3b3JrZXIgZm9yIGVhY2ggb3Zlcnpvb21lZCB6b29tXG4gKiBsZXZlbCwgYGZhbHNlYCBpZiBub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kWm9vbSBgdHJ1ZWAgaWYgem9vbSBsZXZlbHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBpbiB0aGUgc291cmNlIGRhdGEsIGBmYWxzZWBcbiAqIGlmIHRoZXkgYXJlIGZsb29yLWVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgICArdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyLFxuICAgIG1heHpvb206IG51bWJlcixcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uPzogc3RyaW5nLFxuXG4gICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICBpc1RpbGVDbGlwcGVkPzogYm9vbGVhbixcbiAgICBtYXBib3hfbG9nbz86IGJvb2xlYW4sXG4gICAgdGlsZUlEPzogQ2Fub25pY2FsVGlsZUlEO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICB2ZWN0b3JMYXllcklkcz86IEFycmF5PHN0cmluZz4sXG5cbiAgICBoYXNUcmFuc2l0aW9uKCk6IGJvb2xlYW47XG4gICAgbG9hZGVkKCk6IGJvb2xlYW47XG5cbiAgICBmaXJlKGV2ZW50OiBFdmVudCk6IG1peGVkO1xuXG4gICAgK29uQWRkPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZT86IChtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPik6IHZvaWQ7XG4gICAgK2hhc1RpbGU/OiAodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSA9PiBib29sZWFuO1xuICAgICthYm9ydFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuICAgICt1bmxvYWRUaWxlPzogKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gKHN0cmluZ2lmaWFibGUpIEpTIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvdXJjZS5cbiAgICAgKiBDcmVhdGluZyBhIHNvdXJjZSB1c2luZyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFzIHRoZSBgb3B0aW9uc2Agc2hvdWxkIHJlc3VsdCBpbiBhIFNvdXJjZSB0aGF0IGlzXG4gICAgICogZXF1aXZhbGVudCB0byB0aGlzIG9uZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpOiBPYmplY3Q7XG5cbiAgICArcHJlcGFyZT86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgU291cmNlU3RhdGljcyA9IHtcbiAgICAvKlxuICAgICAqIEFuIG9wdGlvbmFsIFVSTCB0byBhIHNjcmlwdCB3aGljaCwgd2hlbiBydW4gYnkgYSBXb3JrZXIsIHJlZ2lzdGVycyBhIHtAbGluayBXb3JrZXJTb3VyY2V9XG4gICAgICogaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgU291cmNlIHR5cGUgYnkgY2FsbGluZyBgc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZSh3b3JrZXJTb3VyY2U6IFdvcmtlclNvdXJjZSlgLlxuICAgICAqL1xuICAgIHdvcmtlclNvdXJjZVVSTD86IFVSTDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNsYXNzID0gQ2xhc3M8U291cmNlPiAmIFNvdXJjZVN0YXRpY3M7XG5cbmltcG9ydCB2ZWN0b3IgZnJvbSAnLi4vc291cmNlL3ZlY3Rvcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UnO1xuaW1wb3J0IHJhc3RlckRlbSBmcm9tICcuLi9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZSc7XG5pbXBvcnQgZ2VvanNvbiBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHZpZGVvIGZyb20gJy4uL3NvdXJjZS92aWRlb19zb3VyY2UnO1xuaW1wb3J0IGltYWdlIGZyb20gJy4uL3NvdXJjZS9pbWFnZV9zb3VyY2UnO1xuaW1wb3J0IGNhbnZhcyBmcm9tICcuLi9zb3VyY2UvY2FudmFzX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY29uc3Qgc291cmNlVHlwZXMgPSB7XG4gICAgdmVjdG9yLFxuICAgIHJhc3RlcixcbiAgICAncmFzdGVyLWRlbSc6IHJhc3RlckRlbSxcbiAgICBnZW9qc29uLFxuICAgIHZpZGVvLFxuICAgIGltYWdlLFxuICAgIGNhbnZhc1xufTtcblxuLypcbiAqIENyZWF0ZXMgYSB0aWxlZCBkYXRhIHNvdXJjZSBpbnN0YW5jZSBnaXZlbiBhbiBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgQSBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3QgY29tcGxpYW50IHdpdGhcbiAqIFtgbWFwYm94LWdsLXN0eWxlLXNwZWNgXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBvciwgZm9yIGEgdGhpcmQtcGFydHkgc291cmNlIHR5cGUsXG4gICogd2l0aCB0aGF0IHR5cGUncyByZXF1aXJlbWVudHMuXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXJcbiAqIEByZXR1cm5zIHtTb3VyY2V9XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBmdW5jdGlvbihpZDogc3RyaW5nLCBzcGVjaWZpY2F0aW9uOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IHNvdXJjZVR5cGVzW3NwZWNpZmljYXRpb24udHlwZV0oaWQsIChzcGVjaWZpY2F0aW9uOiBhbnkpLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgIGlmIChzb3VyY2UuaWQgIT09IGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICR7aWR9IGluc3RlYWQgb2YgJHtzb3VyY2UuaWR9YCk7XG4gICAgfVxuXG4gICAgYmluZEFsbChbJ2xvYWQnLCAnYWJvcnQnLCAndW5sb2FkJywgJ3NlcmlhbGl6ZScsICdwcmVwYXJlJ10sIHNvdXJjZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBzb3VyY2VUeXBlc1tuYW1lXTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgdHlwZTogQ2xhc3M8U291cmNlPikge1xuICAgIHNvdXJjZVR5cGVzW25hbWVdID0gdHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0b3Ige1xuICAgIHNlbmQodHlwZTogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGNhbGxiYWNrOiBDYWxsYmFjazxhbnk+KTogdm9pZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4vc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29sbGlzaW9uSW5kZXggZnJvbSAnLi4vc3ltYm9sL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7UmV0YWluZWRRdWVyeURhdGF9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG4vKlxuICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSB0aWxlIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGVzLlxuICovXG5mdW5jdGlvbiBnZXRQaXhlbFBvc01hdHJpeCh0cmFuc2Zvcm0sIHRpbGVJRCkge1xuICAgIGNvbnN0IHQgPSBtYXQ0LmlkZW50aXR5KFtdKTtcbiAgICBtYXQ0LnRyYW5zbGF0ZSh0LCB0LCBbMSwgMSwgMF0pO1xuICAgIG1hdDQuc2NhbGUodCwgdCwgW3RyYW5zZm9ybS53aWR0aCAqIDAuNSwgdHJhbnNmb3JtLmhlaWdodCAqIDAuNSwgMV0pO1xuICAgIHJldHVybiBtYXQ0Lm11bHRpcGx5KHQsIHQsIHRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlczNETGF5ZXIobGF5ZXJzPzogQXJyYXk8c3RyaW5nPiwgc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sIHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICBpZiAobGF5ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gc3R5bGVMYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZUxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1trZXldO1xuICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSA9PT0gc291cmNlSUQgJiYgbGF5ZXIudHlwZSA9PT0gJ2ZpbGwtZXh0cnVzaW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG5cbiAgICBjb25zdCBoYXMzRExheWVyID0gcXVlcnlJbmNsdWRlczNETGF5ZXIocGFyYW1zICYmIHBhcmFtcy5sYXllcnMsIHN0eWxlTGF5ZXJzLCBzb3VyY2VDYWNoZS5pZCk7XG5cbiAgICBjb25zdCBtYXhQaXRjaFNjYWxlRmFjdG9yID0gdHJhbnNmb3JtLm1heFBpdGNoU2NhbGVGYWN0b3IoKTtcbiAgICBjb25zdCB0aWxlc0luID0gc291cmNlQ2FjaGUudGlsZXNJbihxdWVyeUdlb21ldHJ5LCBtYXhQaXRjaFNjYWxlRmFjdG9yLCBoYXMzRExheWVyKTtcblxuICAgIHRpbGVzSW4uc29ydChzb3J0VGlsZXNJbik7XG5cbiAgICBjb25zdCByZW5kZXJlZEZlYXR1cmVMYXllcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRpbGVJbiBvZiB0aWxlc0luKSB7XG4gICAgICAgIHJlbmRlcmVkRmVhdHVyZUxheWVycy5wdXNoKHtcbiAgICAgICAgICAgIHdyYXBwZWRUaWxlSUQ6IHRpbGVJbi50aWxlSUQud3JhcHBlZCgpLmtleSxcbiAgICAgICAgICAgIHF1ZXJ5UmVzdWx0czogdGlsZUluLnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzLFxuICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlLl9zdGF0ZSxcbiAgICAgICAgICAgICAgICB0aWxlSW4ucXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICB0aWxlSW4uY2FtZXJhUXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICB0aWxlSW4uc2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBtYXhQaXRjaFNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIGdldFBpeGVsUG9zTWF0cml4KHNvdXJjZUNhY2hlLnRyYW5zZm9ybSwgdGlsZUluLnRpbGVJRCkpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IG1lcmdlUmVuZGVyZWRGZWF0dXJlTGF5ZXJzKHJlbmRlcmVkRmVhdHVyZUxheWVycyk7XG5cbiAgICAvLyBNZXJnZSBzdGF0ZSBmcm9tIFNvdXJjZUNhY2hlIGludG8gdGhlIHJlc3VsdHNcbiAgICBmb3IgKGNvbnN0IGxheWVySUQgaW4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdFtsYXllcklEXS5mb3JFYWNoKChmZWF0dXJlV3JhcHBlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVXcmFwcGVyLmZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNvdXJjZUNhY2hlLmdldEZlYXR1cmVTdGF0ZShmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSwgZmVhdHVyZS5pZCk7XG4gICAgICAgICAgICBmZWF0dXJlLnNvdXJjZSA9IGZlYXR1cmUubGF5ZXIuc291cmNlO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2VMYXllciA9IGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHN0eWxlTGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlczoge1tzdHJpbmddOiBTb3VyY2VDYWNoZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkluZGV4OiBDb2xsaXNpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lZFF1ZXJ5RGF0YToge1tudW1iZXJdOiBSZXRhaW5lZFF1ZXJ5RGF0YX0pIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCByZW5kZXJlZFN5bWJvbHMgPSBjb2xsaXNpb25JbmRleC5xdWVyeVJlbmRlcmVkU3ltYm9scyhxdWVyeUdlb21ldHJ5KTtcbiAgICBjb25zdCBidWNrZXRRdWVyeURhdGEgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGJ1Y2tldEluc3RhbmNlSWQgb2YgT2JqZWN0LmtleXMocmVuZGVyZWRTeW1ib2xzKS5tYXAoTnVtYmVyKSkge1xuICAgICAgICBidWNrZXRRdWVyeURhdGEucHVzaChyZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXRJbnN0YW5jZUlkXSk7XG4gICAgfVxuICAgIGJ1Y2tldFF1ZXJ5RGF0YS5zb3J0KHNvcnRUaWxlc0luKTtcblxuICAgIGZvciAoY29uc3QgcXVlcnlEYXRhIG9mIGJ1Y2tldFF1ZXJ5RGF0YSkge1xuICAgICAgICBjb25zdCBidWNrZXRTeW1ib2xzID0gcXVlcnlEYXRhLmZlYXR1cmVJbmRleC5sb29rdXBTeW1ib2xGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICByZW5kZXJlZFN5bWJvbHNbcXVlcnlEYXRhLmJ1Y2tldEluc3RhbmNlSWRdLFxuICAgICAgICAgICAgICAgIHF1ZXJ5RGF0YS5idWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBxdWVyeURhdGEuc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5sYXllcnMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBidWNrZXRTeW1ib2xzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3ltYm9scyA9IGJ1Y2tldFN5bWJvbHNbbGF5ZXJJRF07XG4gICAgICAgICAgICBsYXllclN5bWJvbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRvcERvd25GZWF0dXJlQ29tcGFyYXRvciBmcm9tIEZlYXR1cmVJbmRleCwgYnV0IHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gbW9zdCByZWNlbnQgc29ydGluZyBvZiBmZWF0dXJlcyBmcm9tIGJ1Y2tldC5zb3J0RmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU29ydE9yZGVyID0gcXVlcnlEYXRhLmZlYXR1cmVTb3J0T3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVTb3J0T3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcXVlcnlSZW5kZXJlZFN5bWJvbHMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlJ2xsIHJldHVybiBmZWF0dXJlcyBpblxuICAgICAgICAgICAgICAgICAgICAvLyBcInRvcC10by1ib3R0b21cIiByZW5kZXJpbmcgb3JkZXIgKGFrYSBsYXN0LXRvLWZpcnN0KS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsbHkgdGhlcmUgY2FuIGJlIG11bHRpcGxlIHN5bWJvbCBpbnN0YW5jZXMgcGVyIGZlYXR1cmUsIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHNvcnQgZWFjaCBmZWF0dXJlIGJhc2VkIG9uIHRoZSBmaXJzdCBtYXRjaGluZyBzeW1ib2wgaW5zdGFuY2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEEgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRCID0gZmVhdHVyZVNvcnRPcmRlci5pbmRleE9mKGIuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEEgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChzb3J0ZWRCID49IDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ydGVkQiAtIHNvcnRlZEE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVja2V0IGhhc24ndCBiZWVuIHJlLXNvcnRlZCBiYXNlZCBvbiBhbmdsZSwgc28gdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXZlcnNlIG9mIHRoZSBvcmRlciB0aGUgZmVhdHVyZXMgYXBwZWFyZWQgaW4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmZlYXR1cmVJbmRleCAtIGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlIG9mIGxheWVyU3ltYm9scykge1xuICAgICAgICAgICAgICAgIHJlc3VsdEZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBzdGF0ZSBmcm9tIFNvdXJjZUNhY2hlIGludG8gdGhlIHJlc3VsdHNcbiAgICBmb3IgKGNvbnN0IGxheWVyTmFtZSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVyTmFtZV0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllck5hbWVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgdGlsZXMgPSBzb3VyY2VDYWNoZS5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBjb25zdCBkYXRhVGlsZXMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpXTtcbiAgICAgICAgY29uc3QgZGF0YUlEID0gdGlsZS50aWxlSUQuY2Fub25pY2FsLmtleTtcbiAgICAgICAgaWYgKCFkYXRhVGlsZXNbZGF0YUlEXSkge1xuICAgICAgICAgICAgZGF0YVRpbGVzW2RhdGFJRF0gPSB0cnVlO1xuICAgICAgICAgICAgdGlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUaWxlc0luKGEsIGIpIHtcbiAgICBjb25zdCBpZEEgPSBhLnRpbGVJRDtcbiAgICBjb25zdCBpZEIgPSBiLnRpbGVJRDtcbiAgICByZXR1cm4gKGlkQS5vdmVyc2NhbGVkWiAtIGlkQi5vdmVyc2NhbGVkWikgfHwgKGlkQS5jYW5vbmljYWwueSAtIGlkQi5jYW5vbmljYWwueSkgfHwgKGlkQS53cmFwIC0gaWRCLndyYXApIHx8IChpZEEuY2Fub25pY2FsLnggLSBpZEIuY2Fub25pY2FsLngpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyh0aWxlcykge1xuICAgIC8vIE1lcmdlIHJlc3VsdHMgZnJvbSBhbGwgdGlsZXMsIGJ1dCBpZiB0d28gdGlsZXMgc2hhcmUgdGhlIHNhbWVcbiAgICAvLyB3cmFwcGVkIElELCBkb24ndCBkdXBsaWNhdGUgZmVhdHVyZXMgYmV0d2VlbiB0aGUgdHdvIHRpbGVzXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3Qgd3JhcHBlZElETGF5ZXJNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHRpbGUgb2YgdGlsZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGlsZS5xdWVyeVJlc3VsdHM7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRJRCA9IHRpbGUud3JhcHBlZFRpbGVJRDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZElETGF5ZXJzID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSA9IHdyYXBwZWRJRExheWVyTWFwW3dyYXBwZWRJRF0gfHwge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBxdWVyeVJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVGZWF0dXJlcyA9IHF1ZXJ5UmVzdWx0c1tsYXllcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRJREZlYXR1cmVzID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RmVhdHVyZXMgPSByZXN1bHRbbGF5ZXJJRF0gPSByZXN1bHRbbGF5ZXJJRF0gfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbGVGZWF0dXJlIG9mIHRpbGVGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZElERmVhdHVyZXNbdGlsZUZlYXR1cmUuZmVhdHVyZUluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaCh0aWxlRmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQSBbbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zKVxuICogd2l0aCBoYXNoIGxvb2t1cCBtYWRlIHBvc3NpYmxlIGJ5IGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgaW4gcGFyYWxsZWwgdG9cbiAqIGFuIGFycmF5IG9mIGRpY3Rpb25hcnkgb2YgdmFsdWVzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZUNhY2hlIHtcbiAgICBtYXg6IG51bWJlcjtcbiAgICBkYXRhOiB7W2tleTogc3RyaW5nXTogQXJyYXk8eyB2YWx1ZTogVGlsZSwgdGltZW91dDogP1RpbWVvdXRJRH0+fTtcbiAgICBvcmRlcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBudW1iZXIgb2YgcGVybWl0dGVkIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVtb3ZlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGl0ZW1zIHdoZW4gdGhleSBleHBpcmVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgb25SZW1vdmU6IChlbGVtZW50OiBUaWxlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLm9uUmVtb3ZlID0gb25SZW1vdmU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZERhdGEgb2YgdGhpcy5kYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KHJlbW92ZWREYXRhLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIHRoaXMub3JkZXIgPSBbXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBrZXksIHZhbHVlIGNvbWJpbmF0aW9uIHRvIHRoZSBjYWNoZSwgdHJpbW1pbmcgaXRzIHNpemUgaWYgdGhpcyBwdXNoZXNcbiAgICAgKiBpdCBvdmVyIG1heCBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCBsb29rdXAga2V5IGZvciB0aGUgaXRlbVxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBhbnkgdmFsdWVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRhdGE6IFRpbGUsIGV4cGlyeVRpbWVvdXQ6IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGlsZUlELndyYXBwZWQoKS5rZXk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVdyYXBwZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogZGF0YSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFXcmFwcGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aWxlSUQsIGRhdGFXcmFwcGVyKTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhW2tleV0ucHVzaChkYXRhV3JhcHBlcik7XG4gICAgICAgIHRoaXMub3JkZXIucHVzaChrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBga2V5YCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGJlIGxvb2tlZC11cFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBjYWNoZSBoYXMgdGhpcyB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFzKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGlsZUlELndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgYW5kIHJlbW92ZSBkYXRhIGZyb20gY2FjaGUuXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIHJldHVybnMgYG51bGxgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGxvb2sgdXBcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIGRhdGEsIG9yIG51bGwgaWYgaXQgaXNuJ3QgZm91bmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEFuZFJlbW92ZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiA/VGlsZSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGlsZUlELndyYXBwZWQoKS5rZXkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0IGFuZCByZW1vdmUgdGhlIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gICAgICovXG4gICAgX2dldEFuZFJlbW92ZUJ5S2V5KGtleTogc3RyaW5nKTogP1RpbGUge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV0uc2hpZnQoKTtcbiAgICAgICAgaWYgKGRhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KGRhdGEudGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihrZXkpLCAxKTtcblxuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldCB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkICh3cmFwcGVkIHRpbGUpIGtleS5cbiAgICAgKi9cbiAgICBnZXRCeUtleShrZXk6IHN0cmluZyk6ID9UaWxlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbMF0udmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbnRyaWVzIHRoYXQgZG8gbm90IHBhc3MgYSBmaWx0ZXIgZnVuY3Rpb24uIFVzZWQgZm9yIHJlbW92aW5nXG4gICAgICogc3RhbGUgdGlsZXMgZnJvbSB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgZmlsdGVyKGZpbHRlckZuOiAodGlsZTogVGlsZSkgPT4gYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmRhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyRm4oZW50cnkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByZW1vdmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShyLnZhbHVlLnRpbGVJRCwgcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVDYWNoZTtcbiIsIi8vIEBmbG93XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheX0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IHR5cGUge1RyaWFuZ2xlSW5kZXhBcnJheSwgTGluZUluZGV4QXJyYXksIExpbmVTdHJpcEluZGV4QXJyYXl9IGZyb20gJy4uL2RhdGEvaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5jbGFzcyBJbmRleEJ1ZmZlciB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBidWZmZXI6IFdlYkdMQnVmZmVyO1xuICAgIGR5bmFtaWNEcmF3OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgYXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5IHwgTGluZVN0cmlwSW5kZXhBcnJheSwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5keW5hbWljRHJhdyA9IEJvb2xlYW4oZHluYW1pY0RyYXcpO1xuXG4gICAgICAgIC8vIFRoZSBib3VuZCBpbmRleCBidWZmZXIgaXMgcGFydCBvZiB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHN0YXRlLiBXZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIG1vZGlmeSB3aGF0ZXZlciBWQU8gaGFwcGVucyB0byBiZSBjdXJyZW50bHkgYm91bmQsIHNvIG1ha2Ugc3VyZSB0aGUgZGVmYXVsdFxuICAgICAgICAvLyB2ZXJ0ZXggYXJyYXkgcHJvdmlkZWQgYnkgdGhlIGNvbnRleHQgaXMgYm91bmQgaW5zdGVhZC5cbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuXG4gICAgICAgIGNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYXJyYXkuYXJyYXlCdWZmZXIsIHRoaXMuZHluYW1pY0RyYXcgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNEcmF3KSB7XG4gICAgICAgICAgICBkZWxldGUgYXJyYXkuYXJyYXlCdWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVEYXRhKGFycmF5OiBTdHJ1Y3RBcnJheSkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgYXNzZXJ0KHRoaXMuZHluYW1pY0RyYXcpO1xuICAgICAgICAvLyBUaGUgcmlnaHQgVkFPIHdpbGwgZ2V0IHRoaXMgYnVmZmVyIHJlLWJvdW5kIGxhdGVyIGluIFZlcnRleEFycmF5T2JqZWN0I2JpbmRcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NjIwXG4gICAgICAgIHRoaXMuY29udGV4dC51bmJpbmRWQU8oKTtcbiAgICAgICAgdGhpcy5iaW5kKCk7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIGFycmF5LmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbmRleEJ1ZmZlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1xuICAgIFN0cnVjdEFycmF5LFxuICAgIFN0cnVjdEFycmF5TWVtYmVyXG59IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuaW1wb3J0IHR5cGUgUHJvZ3JhbSBmcm9tICcuLi9yZW5kZXIvcHJvZ3JhbSc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9IEF0dHJpYnV0ZVR5cGVcbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuY29uc3QgQXR0cmlidXRlVHlwZSA9IHtcbiAgICBJbnQ4OiAgICdCWVRFJyxcbiAgICBVaW50ODogICdVTlNJR05FRF9CWVRFJyxcbiAgICBJbnQxNjogICdTSE9SVCcsXG4gICAgVWludDE2OiAnVU5TSUdORURfU0hPUlQnLFxuICAgIEludDMyOiAgJ0lOVCcsXG4gICAgVWludDMyOiAnVU5TSUdORURfSU5UJyxcbiAgICBGbG9hdDMyOiAnRkxPQVQnXG59O1xuXG4vKipcbiAqIFRoZSBgVmVydGV4QnVmZmVyYCBjbGFzcyB0dXJucyBhIGBTdHJ1Y3RBcnJheWAgaW50byBhIFdlYkdMIGJ1ZmZlci4gRWFjaCBtZW1iZXIgb2YgdGhlIFN0cnVjdEFycmF5J3NcbiAqIFN0cnVjdCB0eXBlIGlzIGNvbnZlcnRlZCB0byBhIFdlYkdMIGF0cmlidXRlLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVmVydGV4QnVmZmVyIHtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGVzOiAkUmVhZE9ubHlBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgaXRlbVNpemU6IG51bWJlcjtcbiAgICBkeW5hbWljRHJhdzogP2Jvb2xlYW47XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBidWZmZXI6IFdlYkdMQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGR5bmFtaWNEcmF3IFdoZXRoZXIgdGhpcyBidWZmZXIgd2lsbCBiZSByZXBlYXRlZGx5IHVwZGF0ZWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgYXJyYXk6IFN0cnVjdEFycmF5LCBhdHRyaWJ1dGVzOiAkUmVhZE9ubHlBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sIGR5bmFtaWNEcmF3PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IGFycmF5LmJ5dGVzUGVyRWxlbWVudDtcbiAgICAgICAgdGhpcy5keW5hbWljRHJhdyA9IGR5bmFtaWNEcmF3O1xuXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgY29udGV4dC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0YShhcnJheTogU3RydWN0QXJyYXkpIHtcbiAgICAgICAgYXNzZXJ0KGFycmF5Lmxlbmd0aCA9PT0gdGhpcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5iaW5kKCk7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBhcnJheS5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW5hYmxlQXR0cmlidXRlcyhnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBQcm9ncmFtPCo+KSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSB0aGlzLmF0dHJpYnV0ZXNbal07XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJJbmRleDogbnVtYmVyIHwgdm9pZCA9IHByb2dyYW0uYXR0cmlidXRlc1ttZW1iZXIubmFtZV07XG4gICAgICAgICAgICBpZiAoYXR0cmliSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYkluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgYXR0cmlidXRlIHBvaW50ZXJzIGluIGEgV2ViR0wgY29udGV4dFxuICAgICAqIEBwYXJhbSBnbCBUaGUgV2ViR0wgY29udGV4dFxuICAgICAqIEBwYXJhbSBwcm9ncmFtIFRoZSBhY3RpdmUgV2ViR0wgcHJvZ3JhbVxuICAgICAqIEBwYXJhbSB2ZXJ0ZXhPZmZzZXQgSW5kZXggb2YgdGhlIHN0YXJ0aW5nIHZlcnRleCBvZiB0aGUgc2VnbWVudFxuICAgICAqL1xuICAgIHNldFZlcnRleEF0dHJpYlBvaW50ZXJzKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHByb2dyYW06IFByb2dyYW08Kj4sIHZlcnRleE9mZnNldDogP251bWJlcikge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gdGhpcy5hdHRyaWJ1dGVzW2pdO1xuICAgICAgICAgICAgY29uc3QgYXR0cmliSW5kZXg6IG51bWJlciB8IHZvaWQgPSBwcm9ncmFtLmF0dHJpYnV0ZXNbbWVtYmVyLm5hbWVdO1xuXG4gICAgICAgICAgICBpZiAoYXR0cmliSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYkluZGV4LFxuICAgICAgICAgICAgICAgICAgICBtZW1iZXIuY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgKGdsOiBhbnkpW0F0dHJpYnV0ZVR5cGVbbWVtYmVyLnR5cGVdXSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVNpemUsXG4gICAgICAgICAgICAgICAgICAgIG1lbWJlci5vZmZzZXQgKyAodGhpcy5pdGVtU2l6ZSAqICh2ZXJ0ZXhPZmZzZXQgfHwgMCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIEdMIGJ1ZmZlciBib3VuZCB0byB0aGUgZ2l2ZW4gV2ViR0wgY29udGV4dFxuICAgICAqL1xuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlcnRleEJ1ZmZlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQmxlbmRGdW5jVHlwZSxcbiAgICBCbGVuZEVxdWF0aW9uVHlwZSxcbiAgICBDb2xvck1hc2tUeXBlLFxuICAgIERlcHRoUmFuZ2VUeXBlLFxuICAgIERlcHRoTWFza1R5cGUsXG4gICAgU3RlbmNpbEZ1bmNUeXBlLFxuICAgIFN0ZW5jaWxPcFR5cGUsXG4gICAgRGVwdGhGdW5jVHlwZSxcbiAgICBUZXh0dXJlVW5pdFR5cGUsXG4gICAgVmlld3BvcnRUeXBlLFxuICAgIEN1bGxGYWNlTW9kZVR5cGUsXG4gICAgRnJvbnRGYWNlVHlwZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWU8VD4ge1xuICAgIGN1cnJlbnQ6IFQ7XG4gICAgZGVmYXVsdDogVDtcbiAgICBkaXJ0eTogYm9vbGVhbjtcbiAgICBnZXQoKTogVDtcbiAgICBzZXREZWZhdWx0KCk6IHZvaWQ7XG4gICAgc2V0KHZhbHVlOiBUKTogdm9pZDtcbn1cblxuY2xhc3MgQmFzZVZhbHVlPFQ+IGltcGxlbWVudHMgVmFsdWU8VD4ge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgY3VycmVudDogVDtcbiAgICBkZWZhdWx0OiBUO1xuICAgIGRpcnR5OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICB0aGlzLmdsID0gY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZGVmYXVsdDtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudDtcbiAgICB9XG4gICAgc2V0KHZhbHVlOiBUKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBpbiBjaGlsZCBjbGFzc2VzO1xuICAgIH1cblxuICAgIGdldERlZmF1bHQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQ7IC8vIG92ZXJyaWRlbiBpbiBjaGlsZCBjbGFzc2VzXG4gICAgfVxuICAgIHNldERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuc2V0KHRoaXMuZGVmYXVsdCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJDb2xvciBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvcj4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3Ige1xuICAgICAgICByZXR1cm4gQ29sb3IudHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIHNldCh2OiBDb2xvcikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5yID09PSBjLnIgJiYgdi5nID09PSBjLmcgJiYgdi5iID09PSBjLmIgJiYgdi5hID09PSBjLmEgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhckNvbG9yKHYuciwgdi5nLCB2LmIsIHYuYSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckRlcHRoIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyRGVwdGgodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhclN0ZW5jaWwgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJTdGVuY2lsKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sb3JNYXNrIGV4dGVuZHMgQmFzZVZhbHVlPENvbG9yTWFza1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yTWFza1R5cGUge1xuICAgICAgICByZXR1cm4gW3RydWUsIHRydWUsIHRydWUsIHRydWVdO1xuICAgIH1cbiAgICBzZXQodjogQ29sb3JNYXNrVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgdlszXSA9PT0gY1szXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNvbG9yTWFzayh2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoTWFzayBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aE1hc2tUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aE1hc2tUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aE1hc2tUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5kZXB0aE1hc2sodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsTWFzayBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAweEZGO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5zdGVuY2lsTWFzayh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxGdW5jIGV4dGVuZHMgQmFzZVZhbHVlPFN0ZW5jaWxGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogU3RlbmNpbEZ1bmNUeXBlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZ1bmM6IHRoaXMuZ2wuQUxXQVlTLFxuICAgICAgICAgICAgcmVmOiAwLFxuICAgICAgICAgICAgbWFzazogMHhGRlxuICAgICAgICB9O1xuICAgIH1cbiAgICBzZXQodjogU3RlbmNpbEZ1bmNUeXBlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2LmZ1bmMgPT09IGMuZnVuYyAmJiB2LnJlZiA9PT0gYy5yZWYgJiYgdi5tYXNrID09PSBjLm1hc2sgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5zdGVuY2lsRnVuYyh2LmZ1bmMsIHYucmVmLCB2Lm1hc2spO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbE9wIGV4dGVuZHMgQmFzZVZhbHVlPFN0ZW5jaWxPcFR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFN0ZW5jaWxPcFR5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuS0VFUF07XG4gICAgfVxuICAgIHNldCh2OiBTdGVuY2lsT3BUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgdlsyXSA9PT0gY1syXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnN0ZW5jaWxPcCh2WzBdLCB2WzFdLCB2WzJdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxUZXN0IGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoUmFuZ2UgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhSYW5nZVR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IERlcHRoUmFuZ2VUeXBlIHtcbiAgICAgICAgcmV0dXJuIFswLCAxXTtcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoUmFuZ2VUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5kZXB0aFJhbmdlKHZbMF0sIHZbMV0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhUZXN0IGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkRFUFRIX1RFU1QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVwdGhGdW5jIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IERlcHRoRnVuY1R5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5MRVNTO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhGdW5jVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhGdW5jKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmQgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxCbGVuZEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBCbGVuZEZ1bmNUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gW2dsLk9ORSwgZ2wuWkVST107XG4gICAgfVxuICAgIHNldCh2OiBCbGVuZEZ1bmNUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZEZ1bmModlswXSwgdlsxXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZENvbG9yIGV4dGVuZHMgQmFzZVZhbHVlPENvbG9yPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvciB7XG4gICAgICAgIHJldHVybiBDb2xvci50cmFuc3BhcmVudDtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2LnIgPT09IGMuciAmJiB2LmcgPT09IGMuZyAmJiB2LmIgPT09IGMuYiAmJiB2LmEgPT09IGMuYSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kQ29sb3Iodi5yLCB2LmcsIHYuYiwgdi5hKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kRXF1YXRpb24gZXh0ZW5kcyBCYXNlVmFsdWU8QmxlbmRFcXVhdGlvblR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEJsZW5kRXF1YXRpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuRlVOQ19BREQ7XG4gICAgfVxuICAgIHNldCh2OiBCbGVuZEVxdWF0aW9uVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRFcXVhdGlvbih2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1bGxGYWNlIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1bGxGYWNlU2lkZSBleHRlbmRzIEJhc2VWYWx1ZTxDdWxsRmFjZU1vZGVUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDdWxsRmFjZU1vZGVUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuQkFDSztcbiAgICB9XG4gICAgc2V0KHY6IEN1bGxGYWNlTW9kZVR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmN1bGxGYWNlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRnJvbnRGYWNlIGV4dGVuZHMgQmFzZVZhbHVlPEZyb250RmFjZVR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IEZyb250RmFjZVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nbC5DQ1c7XG4gICAgfVxuICAgIHNldCh2OiBGcm9udEZhY2VUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5mcm9udEZhY2Uodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTFByb2dyYW0+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMUHJvZ3JhbSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMUHJvZ3JhbSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVRleHR1cmVVbml0IGV4dGVuZHMgQmFzZVZhbHVlPFRleHR1cmVVbml0VHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogVGV4dHVyZVVuaXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuVEVYVFVSRTA7XG4gICAgfVxuICAgIHNldCh2OiBUZXh0dXJlVW5pdFR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmFjdGl2ZVRleHR1cmUodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWV3cG9ydCBleHRlbmRzIEJhc2VWYWx1ZTxWaWV3cG9ydFR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFZpZXdwb3J0VHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFswLCAwLCBnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdO1xuICAgIH1cbiAgICBzZXQodjogVmlld3BvcnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2WzBdID09PSBjWzBdICYmIHZbMV0gPT09IGNbMV0gJiYgdlsyXSA9PT0gY1syXSAmJiB2WzNdID09PSBjWzNdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wudmlld3BvcnQodlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kRnJhbWVidWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMRnJhbWVidWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMRnJhbWVidWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTEZyYW1lYnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFJlbmRlcmJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xSZW5kZXJidWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMUmVuZGVyYnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xSZW5kZXJidWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRUZXh0dXJlIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTFRleHR1cmU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMVGV4dHVyZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMVGV4dHVyZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVmVydGV4QnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xCdWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTEJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZEVsZW1lbnRCdWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMQnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMQnVmZmVyKSB7XG4gICAgICAgIC8vIEFsd2F5cyByZWJpbmRcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRWZXJ0ZXhBcnJheU9FUyBleHRlbmRzIEJhc2VWYWx1ZTxhbnk+IHtcbiAgICB2YW86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgICAgIHRoaXMudmFvID0gY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdDtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMudmFvIHx8IHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnZhby5iaW5kVmVydGV4QXJyYXlPRVModik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaXhlbFN0b3JlVW5wYWNrIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19BTElHTk1FTlQsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEgZXh0ZW5kcyBCYXNlVmFsdWU8Ym9vbGVhbj4ge1xuICAgIGdldERlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0KHY6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgKHY6IGFueSkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGl4ZWxTdG9yZVVucGFja0ZsaXBZIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCAodjogYW55KSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmNsYXNzIEZyYW1lYnVmZmVyQXR0YWNobWVudDxUPiBleHRlbmRzIEJhc2VWYWx1ZTw/VD4ge1xuICAgIHBhcmVudDogV2ViR0xGcmFtZWJ1ZmZlcjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgcGFyZW50OiBXZWJHTEZyYW1lYnVmZmVyKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sb3JBdHRhY2htZW50IGV4dGVuZHMgRnJhbWVidWZmZXJBdHRhY2htZW50PFdlYkdMVGV4dHVyZT4ge1xuICAgIHNldERpcnR5KCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFRleHR1cmUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7XG4gICAgICAgIC8vIG5vdGU6IGl0J3MgcG9zc2libGUgdG8gYXR0YWNoIGEgcmVuZGVyYnVmZmVyIHRvIHRoZSBjb2xvclxuICAgICAgICAvLyBhdHRhY2htZW50IHBvaW50LCBidXQgdGh1cyBmYXIgTUJHTCBvbmx5IHVzZXMgdGV4dHVyZXMgZm9yIGNvbG9yXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB2LCAwKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoQXR0YWNobWVudCBleHRlbmRzIEZyYW1lYnVmZmVyQXR0YWNobWVudDxXZWJHTFJlbmRlcmJ1ZmZlcj4ge1xuICAgIHNldCh2OiA/V2ViR0xSZW5kZXJidWZmZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7XG4gICAgICAgIC8vIG5vdGU6IGl0J3MgcG9zc2libGUgdG8gYXR0YWNoIGEgdGV4dHVyZSB0byB0aGUgZGVwdGggYXR0YWNobWVudFxuICAgICAgICAvLyBwb2ludCwgYnV0IHRodXMgZmFyIE1CR0wgb25seSB1c2VzIHJlbmRlcmJ1ZmZlcnMgZm9yIGRlcHRoXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtDb2xvckF0dGFjaG1lbnQsIERlcHRoQXR0YWNobWVudH0gZnJvbSAnLi92YWx1ZSc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi9jb250ZXh0JztcblxuY2xhc3MgRnJhbWVidWZmZXIge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBmcmFtZWJ1ZmZlcjogV2ViR0xGcmFtZWJ1ZmZlcjtcbiAgICBjb2xvckF0dGFjaG1lbnQ6IENvbG9yQXR0YWNobWVudDtcbiAgICBkZXB0aEF0dGFjaG1lbnQ6IERlcHRoQXR0YWNobWVudDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgY29uc3QgZmJvID0gdGhpcy5mcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cbiAgICAgICAgdGhpcy5jb2xvckF0dGFjaG1lbnQgPSBuZXcgQ29sb3JBdHRhY2htZW50KGNvbnRleHQsIGZibyk7XG4gICAgICAgIHRoaXMuZGVwdGhBdHRhY2htZW50ID0gbmV3IERlcHRoQXR0YWNobWVudChjb250ZXh0LCBmYm8pO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuXG4gICAgICAgIGNvbnN0IHRleHR1cmUgPSB0aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtcbiAgICAgICAgaWYgKHRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICAgICAgY29uc3QgcmVuZGVyYnVmZmVyID0gdGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgIGlmIChyZW5kZXJidWZmZXIpIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpO1xuXG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhbWVidWZmZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge0RlcHRoRnVuY1R5cGUsIERlcHRoTWFza1R5cGUsIERlcHRoUmFuZ2VUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQUxXQVlTID0gMHgwMjA3O1xuXG5jbGFzcyBEZXB0aE1vZGUge1xuICAgIGZ1bmM6IERlcHRoRnVuY1R5cGU7XG4gICAgbWFzazogRGVwdGhNYXNrVHlwZTtcbiAgICByYW5nZTogRGVwdGhSYW5nZVR5cGU7XG5cbiAgICAvLyBEZXB0aE1hc2sgZW51bXNcbiAgICBzdGF0aWMgUmVhZE9ubHk6IGJvb2xlYW47XG4gICAgc3RhdGljIFJlYWRXcml0ZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlcHRoRnVuYzogRGVwdGhGdW5jVHlwZSwgZGVwdGhNYXNrOiBEZXB0aE1hc2tUeXBlLCBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICB0aGlzLmZ1bmMgPSBkZXB0aEZ1bmM7XG4gICAgICAgIHRoaXMubWFzayA9IGRlcHRoTWFzaztcbiAgICAgICAgdGhpcy5yYW5nZSA9IGRlcHRoUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8RGVwdGhNb2RlPjtcbn1cblxuRGVwdGhNb2RlLlJlYWRPbmx5ID0gZmFsc2U7XG5EZXB0aE1vZGUuUmVhZFdyaXRlID0gdHJ1ZTtcblxuRGVwdGhNb2RlLmRpc2FibGVkID0gbmV3IERlcHRoTW9kZShBTFdBWVMsIERlcHRoTW9kZS5SZWFkT25seSwgWzAsIDFdKTtcblxuZXhwb3J0IGRlZmF1bHQgRGVwdGhNb2RlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtTdGVuY2lsT3BDb25zdGFudCwgU3RlbmNpbFRlc3R9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5jb25zdCBLRUVQID0gMHgxRTAwO1xuXG5jbGFzcyBTdGVuY2lsTW9kZSB7XG4gICAgdGVzdDogU3RlbmNpbFRlc3Q7XG4gICAgcmVmOiBudW1iZXI7XG4gICAgbWFzazogbnVtYmVyO1xuICAgIGZhaWw6IFN0ZW5jaWxPcENvbnN0YW50O1xuICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0ZXN0OiBTdGVuY2lsVGVzdCwgcmVmOiBudW1iZXIsIG1hc2s6IG51bWJlciwgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsXG4gICAgICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsIHBhc3M6IFN0ZW5jaWxPcENvbnN0YW50KSB7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLmZhaWwgPSBmYWlsO1xuICAgICAgICB0aGlzLmRlcHRoRmFpbCA9IGRlcHRoRmFpbDtcbiAgICAgICAgdGhpcy5wYXNzID0gcGFzcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxTdGVuY2lsTW9kZT47XG59XG5cblN0ZW5jaWxNb2RlLmRpc2FibGVkID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBBTFdBWVMsIG1hc2s6IDB9LCAwLCAwLCBLRUVQLCBLRUVQLCBLRUVQKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlbmNpbE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIHtCbGVuZEZ1bmNUeXBlLCBDb2xvck1hc2tUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgWkVSTyA9IDB4MDAwMDtcbmNvbnN0IE9ORSA9IDB4MDAwMTtcbmNvbnN0IE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDM7XG5cbmNsYXNzIENvbG9yTW9kZSB7XG4gICAgYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZTtcbiAgICBibGVuZENvbG9yOiBDb2xvcjtcbiAgICBtYXNrOiBDb2xvck1hc2tUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZSwgYmxlbmRDb2xvcjogQ29sb3IsIG1hc2s6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gYmxlbmRDb2xvcjtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB9XG5cbiAgICBzdGF0aWMgUmVwbGFjZTogQmxlbmRGdW5jVHlwZTtcblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIHVuYmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIGFscGhhQmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG59XG5cbkNvbG9yTW9kZS5SZXBsYWNlID0gW09ORSwgWkVST107XG5cbkNvbG9yTW9kZS5kaXNhYmxlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbkNvbG9yTW9kZS51bmJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKENvbG9yTW9kZS5SZXBsYWNlLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbkNvbG9yTW9kZS5hbHBoYUJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKFtPTkUsIE9ORV9NSU5VU19TUkNfQUxQSEFdLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JNb2RlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0N1bGxGYWNlTW9kZVR5cGUsIEZyb250RmFjZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBCQUNLID0gMHgwNDA1O1xuY29uc3QgQ0NXID0gMHgwOTAxO1xuXG5jbGFzcyBDdWxsRmFjZU1vZGUge1xuICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlVHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKGVuYWJsZTogYm9vbGVhbiwgbW9kZTogQ3VsbEZhY2VNb2RlVHlwZSwgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gZW5hYmxlO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLmZyb250RmFjZSA9IGZyb250RmFjZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xuICAgIHN0YXRpYyBiYWNrQ0NXOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPjtcbn1cblxuQ3VsbEZhY2VNb2RlLmRpc2FibGVkID0gbmV3IEN1bGxGYWNlTW9kZShmYWxzZSwgQkFDSywgQ0NXKTtcbkN1bGxGYWNlTW9kZS5iYWNrQ0NXID0gbmV3IEN1bGxGYWNlTW9kZSh0cnVlLCBCQUNLLCBDQ1cpO1xuXG5leHBvcnQgZGVmYXVsdCBDdWxsRmFjZU1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gJy4vaW5kZXhfYnVmZmVyJztcblxuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tICcuL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IEZyYW1lYnVmZmVyIGZyb20gJy4vZnJhbWVidWZmZXInO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4vc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlZXBFcXVhbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7Q2xlYXJDb2xvciwgQ2xlYXJEZXB0aCwgQ2xlYXJTdGVuY2lsLCBDb2xvck1hc2ssIERlcHRoTWFzaywgU3RlbmNpbE1hc2ssIFN0ZW5jaWxGdW5jLCBTdGVuY2lsT3AsIFN0ZW5jaWxUZXN0LCBEZXB0aFJhbmdlLCBEZXB0aFRlc3QsIERlcHRoRnVuYywgQmxlbmQsIEJsZW5kRnVuYywgQmxlbmRDb2xvciwgQmxlbmRFcXVhdGlvbiwgQ3VsbEZhY2UsIEN1bGxGYWNlU2lkZSwgRnJvbnRGYWNlLCBQcm9ncmFtLCBBY3RpdmVUZXh0dXJlVW5pdCwgVmlld3BvcnQsIEJpbmRGcmFtZWJ1ZmZlciwgQmluZFJlbmRlcmJ1ZmZlciwgQmluZFRleHR1cmUsIEJpbmRWZXJ0ZXhCdWZmZXIsIEJpbmRFbGVtZW50QnVmZmVyLCBCaW5kVmVydGV4QXJyYXlPRVMsIFBpeGVsU3RvcmVVbnBhY2ssIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLCBQaXhlbFN0b3JlVW5wYWNrRmxpcFl9IGZyb20gJy4vdmFsdWUnO1xuXG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgICBTdHJ1Y3RBcnJheSxcbiAgICBTdHJ1Y3RBcnJheU1lbWJlclxufSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG50eXBlIENsZWFyQXJncyA9IHtcbiAgICBjb2xvcj86IENvbG9yLFxuICAgIGRlcHRoPzogbnVtYmVyLFxuICAgIHN0ZW5jaWw/OiBudW1iZXJcbn07XG5cbmNsYXNzIENvbnRleHQge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgZXh0VmVydGV4QXJyYXlPYmplY3Q6IGFueTtcbiAgICBjdXJyZW50TnVtQXR0cmlidXRlczogP251bWJlcjtcblxuICAgIGNsZWFyQ29sb3I6IENsZWFyQ29sb3I7XG4gICAgY2xlYXJEZXB0aDogQ2xlYXJEZXB0aDtcbiAgICBjbGVhclN0ZW5jaWw6IENsZWFyU3RlbmNpbDtcbiAgICBjb2xvck1hc2s6IENvbG9yTWFzaztcbiAgICBkZXB0aE1hc2s6IERlcHRoTWFzaztcbiAgICBzdGVuY2lsTWFzazogU3RlbmNpbE1hc2s7XG4gICAgc3RlbmNpbEZ1bmM6IFN0ZW5jaWxGdW5jO1xuICAgIHN0ZW5jaWxPcDogU3RlbmNpbE9wO1xuICAgIHN0ZW5jaWxUZXN0OiBTdGVuY2lsVGVzdDtcbiAgICBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlO1xuICAgIGRlcHRoVGVzdDogRGVwdGhUZXN0O1xuICAgIGRlcHRoRnVuYzogRGVwdGhGdW5jO1xuICAgIGJsZW5kOiBCbGVuZDtcbiAgICBibGVuZEZ1bmM6IEJsZW5kRnVuYztcbiAgICBibGVuZENvbG9yOiBCbGVuZENvbG9yO1xuICAgIGJsZW5kRXF1YXRpb246IEJsZW5kRXF1YXRpb247XG4gICAgY3VsbEZhY2U6IEN1bGxGYWNlO1xuICAgIGN1bGxGYWNlU2lkZTogQ3VsbEZhY2VTaWRlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlO1xuICAgIHByb2dyYW06IFByb2dyYW07XG4gICAgYWN0aXZlVGV4dHVyZTogQWN0aXZlVGV4dHVyZVVuaXQ7XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICAgIGJpbmRGcmFtZWJ1ZmZlcjogQmluZEZyYW1lYnVmZmVyO1xuICAgIGJpbmRSZW5kZXJidWZmZXI6IEJpbmRSZW5kZXJidWZmZXI7XG4gICAgYmluZFRleHR1cmU6IEJpbmRUZXh0dXJlO1xuICAgIGJpbmRWZXJ0ZXhCdWZmZXI6IEJpbmRWZXJ0ZXhCdWZmZXI7XG4gICAgYmluZEVsZW1lbnRCdWZmZXI6IEJpbmRFbGVtZW50QnVmZmVyO1xuICAgIGJpbmRWZXJ0ZXhBcnJheU9FUzogQmluZFZlcnRleEFycmF5T0VTO1xuICAgIHBpeGVsU3RvcmVVbnBhY2s6IFBpeGVsU3RvcmVVbnBhY2s7XG4gICAgcGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE6IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhO1xuICAgIHBpeGVsU3RvcmVVbnBhY2tGbGlwWTogUGl4ZWxTdG9yZVVucGFja0ZsaXBZO1xuXG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOiBhbnk7XG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4OiBhbnk7XG4gICAgZXh0VGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFRpbWVyUXVlcnk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ID0gdGhpcy5nbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XG5cbiAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gbmV3IENsZWFyQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aCA9IG5ldyBDbGVhckRlcHRoKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCA9IG5ldyBDbGVhclN0ZW5jaWwodGhpcyk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrID0gbmV3IENvbG9yTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2sgPSBuZXcgRGVwdGhNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrID0gbmV3IFN0ZW5jaWxNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jID0gbmV3IFN0ZW5jaWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcCA9IG5ldyBTdGVuY2lsT3AodGhpcyk7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QgPSBuZXcgU3RlbmNpbFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZSA9IG5ldyBEZXB0aFJhbmdlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdCA9IG5ldyBEZXB0aFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jID0gbmV3IERlcHRoRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZCA9IG5ldyBCbGVuZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMgPSBuZXcgQmxlbmRGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBuZXcgQmxlbmRDb2xvcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gbmV3IEJsZW5kRXF1YXRpb24odGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2UgPSBuZXcgQ3VsbEZhY2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlID0gbmV3IEN1bGxGYWNlU2lkZSh0aGlzKTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UgPSBuZXcgRnJvbnRGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBuZXcgUHJvZ3JhbSh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlID0gbmV3IEFjdGl2ZVRleHR1cmVVbml0KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdwb3J0KHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlciA9IG5ldyBCaW5kRnJhbWVidWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlciA9IG5ldyBCaW5kUmVuZGVyYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlID0gbmV3IEJpbmRUZXh0dXJlKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIgPSBuZXcgQmluZFZlcnRleEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlciA9IG5ldyBCaW5kRWxlbWVudEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMgPSB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ICYmIG5ldyBCaW5kVmVydGV4QXJyYXlPRVModGhpcyk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFjayA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhID0gbmV3IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkodGhpcyk7XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMgPSAoXG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpIHx8XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7XG4gICAgICAgICAgICB0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCA9IGdsLmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQpIHtcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGltZXJRdWVyeSA9IGdsLmdldEV4dGVuc2lvbignRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Jyk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy51bmJpbmRWQU8oKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhckRlcHRoLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbG9yTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyYW0uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdwb3J0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVJbmRleEJ1ZmZlcihhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcih0aGlzLCBhcnJheSwgZHluYW1pY0RyYXcpO1xuICAgIH1cblxuICAgIGNyZWF0ZVZlcnRleEJ1ZmZlcihhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyKHRoaXMsIGFycmF5LCBhdHRyaWJ1dGVzLCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyYnVmZmVyKHN0b3JhZ2VGb3JtYXQ6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuXG4gICAgICAgIGNvbnN0IHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KHJibyk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBzdG9yYWdlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICByZXR1cm4gcmJvO1xuICAgIH1cblxuICAgIGNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXIodGhpcywgd2lkdGgsIGhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xlYXIoe2NvbG9yLCBkZXB0aH06IENsZWFyQXJncykge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGxldCBtYXNrID0gMDtcblxuICAgICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgICAgIG1hc2sgfD0gZ2wuQ09MT1JfQlVGRkVSX0JJVDtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvci5zZXQoY29sb3IpO1xuICAgICAgICAgICAgdGhpcy5jb2xvck1hc2suc2V0KFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlcHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5ERVBUSF9CVUZGRVJfQklUO1xuXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBwbGF0Zm9ybXMgd2hlcmUgY2xlYXJEZXB0aCBkb2Vzbid0IHNlZW0gdG8gd29ya1xuICAgICAgICAgICAgLy8gd2l0aG91dCByZXNldGluZyB0aGUgZGVwdGhSYW5nZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zNDM3XG4gICAgICAgICAgICB0aGlzLmRlcHRoUmFuZ2Uuc2V0KFswLCAxXSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2xlYXJEZXB0aC5zZXQoZGVwdGgpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VlIG5vdGUgaW4gUGFpbnRlciNjbGVhclN0ZW5jaWw6IGltcGxlbWVudCB0aGlzIHRoZSBlYXN5IHdheSBvbmNlIEdQVSBidWcvd29ya2Fyb3VuZCBpcyBmaXhlZCB1cHN0cmVhbVxuICAgICAgICAvLyBpZiAodHlwZW9mIHN0ZW5jaWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vICAgICBtYXNrIHw9IGdsLlNURU5DSUxfQlVGRkVSX0JJVDtcbiAgICAgICAgLy8gICAgIHRoaXMuY2xlYXJTdGVuY2lsLnNldChzdGVuY2lsKTtcbiAgICAgICAgLy8gICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KDB4RkYpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgZ2wuY2xlYXIobWFzayk7XG4gICAgfVxuXG4gICAgc2V0Q3VsbEZhY2UoY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPikge1xuICAgICAgICBpZiAoY3VsbEZhY2VNb2RlLmVuYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VsbEZhY2Uuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VsbEZhY2Uuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuc2V0KGN1bGxGYWNlTW9kZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuZnJvbnRGYWNlLnNldChjdWxsRmFjZU1vZGUuZnJvbnRGYWNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlcHRoTW9kZShkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+KSB7XG4gICAgICAgIGlmIChkZXB0aE1vZGUuZnVuYyA9PT0gdGhpcy5nbC5BTFdBWVMgJiYgIWRlcHRoTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXB0aFRlc3Quc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aEZ1bmMuc2V0KGRlcHRoTW9kZS5mdW5jKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhNYXNrLnNldChkZXB0aE1vZGUubWFzayk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoUmFuZ2Uuc2V0KGRlcHRoTW9kZS5yYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdGVuY2lsTW9kZShzdGVuY2lsTW9kZTogJFJlYWRPbmx5PFN0ZW5jaWxNb2RlPikge1xuICAgICAgICBpZiAoc3RlbmNpbE1vZGUudGVzdC5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhc3RlbmNpbE1vZGUubWFzaykge1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLnNldChzdGVuY2lsTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE9wLnNldChbc3RlbmNpbE1vZGUuZmFpbCwgc3RlbmNpbE1vZGUuZGVwdGhGYWlsLCBzdGVuY2lsTW9kZS5wYXNzXSk7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jLnNldCh7XG4gICAgICAgICAgICAgICAgZnVuYzogc3RlbmNpbE1vZGUudGVzdC5mdW5jLFxuICAgICAgICAgICAgICAgIHJlZjogc3RlbmNpbE1vZGUucmVmLFxuICAgICAgICAgICAgICAgIG1hc2s6IHN0ZW5jaWxNb2RlLnRlc3QubWFza1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb2xvck1vZGUoY29sb3JNb2RlOiAkUmVhZE9ubHk8Q29sb3JNb2RlPikge1xuICAgICAgICBpZiAoZGVlcEVxdWFsKGNvbG9yTW9kZS5ibGVuZEZ1bmN0aW9uLCBDb2xvck1vZGUuUmVwbGFjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYmxlbmQuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYmxlbmQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ibGVuZEZ1bmMuc2V0KGNvbG9yTW9kZS5ibGVuZEZ1bmN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuYmxlbmRDb2xvci5zZXQoY29sb3JNb2RlLmJsZW5kQ29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2xvck1hc2suc2V0KGNvbG9yTW9kZS5tYXNrKTtcbiAgICB9XG5cbiAgICB1bmJpbmRWQU8oKSB7XG4gICAgICAgIC8vIFVuYmluZGluZyB0aGUgVkFPIHByZXZlbnRzIG90aGVyIHRoaW5ncyAoY3VzdG9tIGxheWVycywgbmV3IGJ1ZmZlciBjcmVhdGlvbikgZnJvbVxuICAgICAgICAvLyB1bmludGVudGlvbmFsbHkgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZSBsYXN0IFZBTyB1c2VkLlxuICAgICAgICBpZiAodGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb250ZXh0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGUgYXMgY3JlYXRlU291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5cbmltcG9ydCBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IFRpbGVDYWNoZSBmcm9tICcuL3RpbGVfY2FjaGUnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQge2tleXNEaWZmZXJlbmNlLCB2YWx1ZXN9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTb3VyY2VGZWF0dXJlU3RhdGUgZnJvbSAnLi9zb3VyY2Vfc3RhdGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtUaWxlU3RhdGV9IGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBgU291cmNlQ2FjaGVgIGlzIHJlc3BvbnNpYmxlIGZvclxuICpcbiAqICAtIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBmb3J3YXJkaW5nIGV2ZW50cyBmcm9tIGBTb3VyY2VgXG4gKiAgLSBjYWNoaW5nIHRpbGVzIGxvYWRlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGBTb3VyY2VgXG4gKiAgLSBsb2FkaW5nIHRoZSB0aWxlcyBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqICAtIHVubG9hZGluZyB0aGUgY2FjaGVkIHRpbGVzIG5vdCBuZWVkZWQgdG8gcmVuZGVyIGEgZ2l2ZW4gdmlld3BvcnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTb3VyY2VDYWNoZSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICBzdHlsZTogU3R5bGU7XG5cbiAgICBfc291cmNlOiBTb3VyY2U7XG4gICAgX3NvdXJjZUxvYWRlZDogYm9vbGVhbjtcbiAgICBfc291cmNlRXJyb3JlZDogYm9vbGVhbjtcbiAgICBfdGlsZXM6IHtbc3RyaW5nXTogVGlsZX07XG4gICAgX3ByZXZMbmc6IG51bWJlciB8IHZvaWQ7XG4gICAgX2NhY2hlOiBUaWxlQ2FjaGU7XG4gICAgX3RpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9jYWNoZVRpbWVyczoge1thbnldOiBUaW1lb3V0SUR9O1xuICAgIF9tYXhUaWxlQ2FjaGVTaXplOiA/bnVtYmVyO1xuICAgIF9wYXVzZWQ6IGJvb2xlYW47XG4gICAgX3Nob3VsZFJlbG9hZE9uUmVzdW1lOiBib29sZWFuO1xuICAgIF9jb3ZlcmVkVGlsZXM6IHtbc3RyaW5nXTogYm9vbGVhbn07XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX2lzSWRSZW5kZXJhYmxlOiAoaWQ6IHN0cmluZywgc3ltYm9sTGF5ZXI/OiBib29sZWFuKSA9PiBib29sZWFuO1xuICAgIHVzZWQ6IGJvb2xlYW47XG4gICAgX3N0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGU7XG4gICAgX2xvYWRlZFBhcmVudFRpbGVzOiB7W3N0cmluZ106ID9UaWxlfTtcblxuICAgIHN0YXRpYyBtYXhVbmRlcnpvb21pbmc6IG51bWJlcjtcbiAgICBzdGF0aWMgbWF4T3Zlcnpvb21pbmc6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyO1xuXG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCAoZSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5fc291cmNlTG9hZGVkIHNpZ25pZmllcyB0aGF0IHRoZSBUaWxlSlNPTiBpcyBsb2FkZWQgaWYgYXBwbGljYWJsZS5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBzb3VyY2UgdHlwZSBkb2VzIG5vdCBjb21lIHdpdGggYSBUaWxlSlNPTiwgdGhlIGZsYWcgc2lnbmlmaWVzIHRoZVxuICAgICAgICAgICAgLy8gc291cmNlIGRhdGEgaGFzIGxvYWRlZCAoaS5lIGdlb2pzb24gaGFzIGJlZW4gdGlsZWQgb24gdGhlIHdvcmtlciBhbmQgaXMgcmVhZHkpXG4gICAgICAgICAgICBpZiAoZS5kYXRhVHlwZSA9PT0gJ3NvdXJjZScgJiYgZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJykgdGhpcy5fc291cmNlTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gZm9yIHNvdXJjZXMgd2l0aCBtdXRhYmxlIGRhdGEsIHRoaXMgZXZlbnQgZmlyZXMgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhXG4gICAgICAgICAgICAvLyB0byBhIHNvdXJjZSBpcyBjaGFuZ2VkLiAoaS5lLiBHZW9KU09OU291cmNlI3NldERhdGEgYW5kIEltYWdlU291cmNlI3NlckNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUxvYWRlZCAmJiAhdGhpcy5fcGF1c2VkICYmIGUuZGF0YVR5cGUgPT09IFwic291cmNlXCIgJiYgZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc291cmNlID0gY3JlYXRlU291cmNlKGlkLCBvcHRpb25zLCBkaXNwYXRjaGVyLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl90aWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBUaWxlQ2FjaGUoMCwgdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fdGltZXJzID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlVGltZXJzID0ge307XG4gICAgICAgIHRoaXMuX21heFRpbGVDYWNoZVNpemUgPSBudWxsO1xuICAgICAgICB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2NvdmVyZWRUaWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBTb3VyY2VGZWF0dXJlU3RhdGUoKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG1hcCA/IG1hcC5fbWF4VGlsZUNhY2hlU2l6ZSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgJiYgdGhpcy5fc291cmNlLm9uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLl9zb3VyY2Uub25BZGQobWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgJiYgdGhpcy5fc291cmNlLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zb3VyY2Uub25SZW1vdmUobWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIG5vIHRpbGUgZGF0YSBpcyBwZW5kaW5nLCB0aWxlcyB3aWxsIG5vdCBjaGFuZ2UgdW5sZXNzXG4gICAgICogYW4gYWRkaXRpb25hbCBBUEkgY2FsbCBpcyByZWNlaXZlZC5cbiAgICAgKi9cbiAgICBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2VFcnJvcmVkKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlTG9hZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZS5sb2FkZWQoKSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgZm9yIChjb25zdCB0IGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbdF07XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcgJiYgdGlsZS5zdGF0ZSAhPT0gJ2Vycm9yZWQnKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTb3VyY2UoKTogU291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG5cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbG9hZCA9IHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lO1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNob3VsZFJlbG9hZCkgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMudHJhbnNmb3JtKSB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgX2xvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvYWRUaWxlKHRpbGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBfdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0aWxlLCAoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgX2Fib3J0VGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKTtcbiAgICB9XG5cbiAgICBwcmVwYXJlKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgICh0aGlzLl9zb3VyY2UucHJlcGFyZSkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlLnByZXBhcmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXRlLmNvYWxlc2NlQ2hhbmdlcyh0aGlzLl90aWxlcywgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2ldO1xuICAgICAgICAgICAgdGlsZS51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB0aWxlLnByZXBhcmUodGhpcy5tYXAuc3R5bGUuaW1hZ2VNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgdGlsZSBpZHMgb3JkZXJlZCB3aXRoIHotb3JkZXIsIGFuZCBjYXN0IHRvIG51bWJlcnNcbiAgICAgKi9cbiAgICBnZXRJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAodmFsdWVzKHRoaXMuX3RpbGVzKTogYW55KS5tYXAoKHRpbGU6IFRpbGUpID0+IHRpbGUudGlsZUlEKS5zb3J0KGNvbXBhcmVUaWxlSWQpLm1hcChpZCA9PiBpZC5rZXkpO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmFibGVzOiBBcnJheTxUaWxlPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoaWQsIHN5bWJvbExheWVyKSkgcmVuZGVyYWJsZXMucHVzaCh0aGlzLl90aWxlc1tpZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW1ib2xMYXllcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGVzLnNvcnQoKGFfOiBUaWxlLCBiXzogVGlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBhXy50aWxlSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGJfLnRpbGVJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVkQSA9IChuZXcgUG9pbnQoYS5jYW5vbmljYWwueCwgYS5jYW5vbmljYWwueSkpLl9yb3RhdGUodGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRCID0gKG5ldyBQb2ludChiLmNhbm9uaWNhbC54LCBiLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IHJvdGF0ZWRCLnkgLSByb3RhdGVkQS55IHx8IHJvdGF0ZWRCLnggLSByb3RhdGVkQS54O1xuICAgICAgICAgICAgfSkubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZXMubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQpLnNvcnQoY29tcGFyZVRpbGVJZCkubWFwKGlkID0+IGlkLmtleSk7XG4gICAgfVxuXG4gICAgaGFzUmVuZGVyYWJsZVBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50VGlsZSA9IHRoaXMuZmluZExvYWRlZFBhcmVudCh0aWxlSUQsIDApO1xuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRSZW5kZXJhYmxlKHBhcmVudFRpbGUudGlsZUlELmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9pc0lkUmVuZGVyYWJsZShpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbGVzW2lkXSAmJiB0aGlzLl90aWxlc1tpZF0uaGFzRGF0YSgpICYmXG4gICAgICAgICAgICAhdGhpcy5fY292ZXJlZFRpbGVzW2lkXSAmJiAoc3ltYm9sTGF5ZXIgfHwgIXRoaXMuX3RpbGVzW2lkXS5ob2xkaW5nRm9yRmFkZSgpKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlLnJlc2V0KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGlsZXNbaV0uc3RhdGUgIT09IFwiZXJyb3JlZFwiKSB0aGlzLl9yZWxvYWRUaWxlKGksICdyZWxvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9yZWxvYWRUaWxlKGlkOiBzdHJpbmcsIHN0YXRlOiBUaWxlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAvLyB0aGlzIHBvdGVudGlhbGx5IGRvZXMgbm90IGFkZHJlc3MgYWxsIHVuZGVybHlpbmdcbiAgICAgICAgLy8gaXNzdWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy80MjUyXG4gICAgICAgIC8vIC0gaGFyZCB0byB0ZWxsIHdpdGhvdXQgcmVwcm8gc3RlcHNcbiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcImxvYWRpbmdcIiB0aWxlcyBhbmQgXCJyZWxvYWRpbmdcIiBvciBcImV4cGlyZWRcIlxuICAgICAgICAvLyB0aWxlcyBpcyB0aGF0IFwicmVsb2FkaW5nXCIvXCJleHBpcmVkXCIgdGlsZXMgYXJlIFwicmVuZGVyYWJsZVwiLlxuICAgICAgICAvLyBUaGVyZWZvcmUsIGEgXCJsb2FkaW5nXCIgdGlsZSBjYW5ub3QgYmVjb21lIGEgXCJyZWxvYWRpbmdcIiB0aWxlIHdpdGhvdXRcbiAgICAgICAgLy8gZmlyc3QgYmVjb21pbmcgYSBcImxvYWRlZFwiIHRpbGUuXG4gICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCBpZCwgc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfdGlsZUxvYWRlZCh0aWxlOiBUaWxlLCBpZDogc3RyaW5nLCBwcmV2aW91c1N0YXRlOiBUaWxlU3RhdGUsIGVycjogP0Vycm9yKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICBpZiAoKGVycjogYW55KS5zdGF0dXMgIT09IDQwNCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyLCB7dGlsZX0pKTtcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIHBhcmVudC9jaGlsZHJlbiB0aWxlcyBpZiBhIHRpbGUgZG9lc24ndCBleGlzdCAoNDA0KVxuICAgICAgICAgICAgZWxzZSB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aWxlLnRpbWVBZGRlZCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSAnZXhwaXJlZCcpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoaWQsIHRpbGUpO1xuICAgICAgICBpZiAodGhpcy5nZXRTb3VyY2UoKS50eXBlID09PSAncmFzdGVyLWRlbScgJiYgdGlsZS5kZW0pIHRoaXMuX2JhY2tmaWxsREVNKHRpbGUpO1xuICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHRpbGUsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHRpbGUsIGNvb3JkOiB0aWxlLnRpbGVJRH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEZvciByYXN0ZXIgdGVycmFpbiBzb3VyY2UsIGJhY2tmaWxsIERFTSB0byBlbGltaW5hdGUgdmlzaWJsZSB0aWxlIGJvdW5kYXJpZXNcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBfYmFja2ZpbGxERU0odGlsZTogVGlsZSkge1xuICAgICAgICBjb25zdCByZW5kZXJhYmxlcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IHJlbmRlcmFibGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRpbGUubmVpZ2hib3JpbmdUaWxlcyAmJiB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9yZGVyVGlsZSA9IHRoaXMuZ2V0VGlsZUJ5SUQoYm9yZGVySWQpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSk7XG4gICAgICAgICAgICAgICAgZmlsbEJvcmRlcihib3JkZXJUaWxlLCB0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSkge1xuICAgICAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGR4ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnggLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnkgLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELmNhbm9uaWNhbC56KTtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcklkID0gYm9yZGVyVGlsZS50aWxlSUQua2V5O1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4KSA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGRlbHRhIGNvb3JkaW5hdGUgZm9yIHdvcmxkIHdyYXBhcm91bmQuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4ICsgZGltKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBkaW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkeCAtIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggLT0gZGltO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYm9yZGVyVGlsZS5kZW0gfHwgIXRpbGUuZGVtKSByZXR1cm47XG4gICAgICAgICAgICB0aWxlLmRlbS5iYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlLmRlbSwgZHgsIGR5KTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSlcbiAgICAgICAgICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdLmJhY2tmaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgVGlsZUlEXG4gICAgICovXG4gICAgZ2V0VGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGlsZUJ5SUQodGlsZUlELmtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc3BlY2lmaWMgdGlsZSBieSBpZFxuICAgICAqL1xuICAgIGdldFRpbGVCeUlEKGlkOiBzdHJpbmcpOiBUaWxlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbGVzW2lkXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgYSBnaXZlbiBzZXQgb2YgdGlsZXMsIHJldGFpbiBjaGlsZHJlbiB0aGF0IGFyZSBsb2FkZWQgYW5kIGhhdmUgYSB6b29tXG4gICAgICogYmV0d2VlbiBgem9vbWAgKGV4Y2x1c2l2ZSkgYW5kIGBtYXhDb3ZlcmluZ1pvb21gIChpbmNsdXNpdmUpXG4gICAgICovXG4gICAgX3JldGFpbkxvYWRlZENoaWxkcmVuKFxuICAgICAgICBpZGVhbFRpbGVzOiB7W2FueV06IE92ZXJzY2FsZWRUaWxlSUR9LFxuICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgIG1heENvdmVyaW5nWm9vbTogbnVtYmVyLFxuICAgICAgICByZXRhaW46IHtbYW55XTogT3ZlcnNjYWxlZFRpbGVJRH1cbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY29uc2lkZXIgcmVuZGVyYWJsZSB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgIGlmIChyZXRhaW5baWRdIHx8XG4gICAgICAgICAgICAgICAgIXRpbGUuaGFzRGF0YSgpIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPD0gem9vbSB8fFxuICAgICAgICAgICAgICAgIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gbWF4Q292ZXJpbmdab29tXG4gICAgICAgICAgICApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggcGFyZW50cyBhbmQgcmV0YWluIHRoZSB0b3Btb3N0IGxvYWRlZCBvbmUgaWYgZm91bmRcbiAgICAgICAgICAgIGxldCB0b3Btb3N0TG9hZGVkSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIHdoaWxlICh0aWxlICYmIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSArIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJRCA9IHRpbGUudGlsZUlELnNjYWxlZFRvKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fdGlsZXNbcGFyZW50SUQua2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcG1vc3RMb2FkZWRJRCA9IHBhcmVudElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuY2VzdG9ycyBvZiB0aGUgdG9wbW9zdCBsb2FkZWQgY2hpbGQgdG8gc2VlIGlmIHRoZXJlJ3Mgb25lIHRoYXQgbmVlZGVkIGl0XG4gICAgICAgICAgICBsZXQgdGlsZUlEID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGVJRC5vdmVyc2NhbGVkWiA+IHpvb20pIHtcbiAgICAgICAgICAgICAgICB0aWxlSUQgPSB0aWxlSUQuc2NhbGVkVG8odGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWRlYWxUaWxlc1t0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHBhcmVudCB0aGF0IG5lZWRlZCBhIGxvYWRlZCBjaGlsZDsgcmV0YWluIHRoYXQgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW3RvcG1vc3RMb2FkZWRJRC5rZXldID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgbG9hZGVkIHBhcmVudCBvZiB0aGUgZ2l2ZW4gdGlsZSAodXAgdG8gbWluQ292ZXJpbmdab29tKVxuICAgICAqL1xuICAgIGZpbmRMb2FkZWRQYXJlbnQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBtaW5Db3ZlcmluZ1pvb206IG51bWJlcik6ID9UaWxlIHtcbiAgICAgICAgaWYgKHRpbGVJRC5rZXkgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzW3RpbGVJRC5rZXldO1xuICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGlsZUlELm92ZXJzY2FsZWRaID49IG1pbkNvdmVyaW5nWm9vbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHogPSB0aWxlSUQub3ZlcnNjYWxlZFogLSAxOyB6ID49IG1pbkNvdmVyaW5nWm9vbTsgei0tKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlSUQgPSB0aWxlSUQuc2NhbGVkVG8oeik7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fZ2V0TG9hZGVkVGlsZShwYXJlbnRUaWxlSUQpO1xuICAgICAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRMb2FkZWRUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6ID9UaWxlIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RpbGVJRC5rZXldO1xuICAgICAgICBpZiAodGlsZSAmJiB0aWxlLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGlsZUNhY2hlIGlnbm9yZXMgd3JhcCBpbiBsb29rdXAuXG4gICAgICAgIGNvbnN0IGNhY2hlZFRpbGUgPSB0aGlzLl9jYWNoZS5nZXRCeUtleSh0aWxlSUQud3JhcHBlZCgpLmtleSk7XG4gICAgICAgIHJldHVybiBjYWNoZWRUaWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIHRpbGUgY2FjaGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld3BvcnQncyBzaXplXG4gICAgICogb3IgdGhlIG1heFRpbGVDYWNoZVNpemUgb3B0aW9uIHBhc3NlZCBkdXJpbmcgbWFwIGNyZWF0aW9uXG4gICAgICpcbiAgICAgKiBMYXJnZXIgdmlld3BvcnRzIHVzZSBtb3JlIHRpbGVzIGFuZCBuZWVkIGxhcmdlciBjYWNoZXMuIExhcmdlciB2aWV3cG9ydHNcbiAgICAgKiBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgZm91bmQgb24gZGV2aWNlcyB3aXRoIG1vcmUgbWVtb3J5IGFuZCBvbiBwYWdlcyB3aGVyZVxuICAgICAqIHRoZSBtYXAgaXMgbW9yZSBpbXBvcnRhbnQuXG4gICAgICovXG4gICAgdXBkYXRlQ2FjaGVTaXplKHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoSW5UaWxlcyA9IE1hdGguY2VpbCh0cmFuc2Zvcm0ud2lkdGggLyB0aGlzLl9zb3VyY2UudGlsZVNpemUpICsgMTtcbiAgICAgICAgY29uc3QgaGVpZ2h0SW5UaWxlcyA9IE1hdGguY2VpbCh0cmFuc2Zvcm0uaGVpZ2h0IC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGFwcHJveFRpbGVzSW5WaWV3ID0gd2lkdGhJblRpbGVzICogaGVpZ2h0SW5UaWxlcztcbiAgICAgICAgY29uc3QgY29tbW9uWm9vbVJhbmdlID0gNTtcblxuICAgICAgICBjb25zdCB2aWV3RGVwZW5kZW50TWF4U2l6ZSA9IE1hdGguZmxvb3IoYXBwcm94VGlsZXNJblZpZXcgKiBjb21tb25ab29tUmFuZ2UpO1xuICAgICAgICBjb25zdCBtYXhTaXplID0gdHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemUgPT09ICdudW1iZXInID8gTWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSwgdmlld0RlcGVuZGVudE1heFNpemUpIDogdmlld0RlcGVuZGVudE1heFNpemU7XG5cbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShtYXhTaXplKTtcbiAgICB9XG5cbiAgICBoYW5kbGVXcmFwSnVtcChsbmc6IG51bWJlcikge1xuICAgICAgICAvLyBPbiB0b3Agb2YgdGhlIHJlZ3VsYXIgei94L3kgdmFsdWVzLCBUaWxlSURzIGhhdmUgYSBgd3JhcGAgdmFsdWUgdGhhdCBzcGVjaWZ5XG4gICAgICAgIC8vIHdoaWNoIGNwcHkgb2YgdGhlIHdvcmxkIHRoZSB0aWxlIGJlbG9uZ3MgdG8uIEZvciBleGFtcGxlLCBhdCBgbG5nOiAxMGAgeW91XG4gICAgICAgIC8vIG1pZ2h0IHJlbmRlciB6L3gveS8wIHdoaWxlIGF0IGBsbmc6IDM3MGAgeW91IHdvdWxkIHJlbmRlciB6L3gveS8xLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXaGVuIGxuZyB2YWx1ZXMgZ2V0IHdyYXBwZWQgKGdvaW5nIGZyb20gYGxuZzogMzcwYCB0byBgbG9uZzogMTBgKSB5b3UgZXhwZWN0XG4gICAgICAgIC8vIHRvIHNlZSB0aGUgc2FtZSB0aGluZyBvbiB0aGUgc2NyZWVuICgzNzAgZGVncmVlcyBhbmQgMTAgZGVncmVlcyBpcyB0aGUgc2FtZVxuICAgICAgICAvLyBwbGFjZSBpbiB0aGUgd29ybGQpIGJ1dCBhbGwgdGhlIFRpbGVJRHMgd2lsbCBoYXZlIGRpZmZlcmVudCB3cmFwIHZhbHVlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gbWFrZSB0aGlzIHRyYW5zaXRpb24gc2VhbWxlc3MsIHdlIGNhbGN1bGF0ZSB0aGUgcm91bmRlZCBkaWZmZXJlbmNlIG9mXG4gICAgICAgIC8vIFwid29ybGRzXCIgYmV0d2VlbiB0aGUgbGFzdCBmcmFtZSBhbmQgdGhlIGN1cnJlbnQgZnJhbWUuIElmIHRoZSBtYXAgcGFubmVkIGJ5XG4gICAgICAgIC8vIGEgd29ybGQsIHRoZW4gd2UgY2FuIGFzc2lnbiBhbGwgdGhlIHRpbGVzIG5ldyBUaWxlSURzIHdpdGggdXBkYXRlZCB3cmFwIHZhbHVlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGFzc2lnbiB6L3gveS8xIGEgbmV3IGlkOiB6L3gveS8wLiBJdCBpcyB0aGUgc2FtZSB0aWxlLCBqdXN0IHJlbmRlcmVkXG4gICAgICAgIC8vIGluIGEgZGlmZmVyZW50IHBvc2l0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcmV1c2UgdGhlIHRpbGVzIGF0IG1vcmUgaWRlYWwgbG9jYXRpb25zIGFuZCBwcmV2ZW50IGZsaWNrZXJpbmcuXG4gICAgICAgIGNvbnN0IHByZXZMbmcgPSB0aGlzLl9wcmV2TG5nID09PSB1bmRlZmluZWQgPyBsbmcgOiB0aGlzLl9wcmV2TG5nO1xuICAgICAgICBjb25zdCBsbmdEaWZmZXJlbmNlID0gbG5nIC0gcHJldkxuZztcbiAgICAgICAgY29uc3Qgd29ybGREaWZmZXJlbmNlID0gbG5nRGlmZmVyZW5jZSAvIDM2MDtcbiAgICAgICAgY29uc3Qgd3JhcERlbHRhID0gTWF0aC5yb3VuZCh3b3JsZERpZmZlcmVuY2UpO1xuICAgICAgICB0aGlzLl9wcmV2TG5nID0gbG5nO1xuXG4gICAgICAgIGlmICh3cmFwRGVsdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVzOiB7W3N0cmluZ106IFRpbGV9ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICAgICAgICAgICAgICAgIHRpbGUudGlsZUlEID0gdGlsZS50aWxlSUQudW53cmFwVG8odGlsZS50aWxlSUQud3JhcCArIHdyYXBEZWx0YSk7XG4gICAgICAgICAgICAgICAgdGlsZXNbdGlsZS50aWxlSUQua2V5XSA9IHRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90aWxlcyA9IHRpbGVzO1xuXG4gICAgICAgICAgICAvLyBSZXNldCB0aWxlIHJlbG9hZCB0aW1lcnNcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGltZXJzKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGlkLCB0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGlsZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgdmlld3BvcnQgYW5kIGFkZHMgbmV3IHRpbGVzIHRoYXRcbiAgICAgKiBhcmUgaW5zaWRlIHRoZSB2aWV3cG9ydC5cbiAgICAgKi9cbiAgICB1cGRhdGUodHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlTG9hZGVkIHx8IHRoaXMuX3BhdXNlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuXG4gICAgICAgIC8vIENvdmVyZWQgaXMgYSBsaXN0IG9mIHJldGFpbmVkIHRpbGVzIHdobydzIGFyZWFzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IG90aGVyLFxuICAgICAgICAvLyBiZXR0ZXIsIHJldGFpbmVkIHRpbGVzLiBUaGV5IGFyZSBub3QgZHJhd24gc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG5cbiAgICAgICAgbGV0IGlkZWFsVGlsZUlEcztcbiAgICAgICAgaWYgKCF0aGlzLnVzZWQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZS50aWxlSUQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRClcbiAgICAgICAgICAgICAgICAubWFwKCh1bndyYXBwZWQpID0+IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLndyYXAsIHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLmNhbm9uaWNhbC54LCB1bndyYXBwZWQuY2Fub25pY2FsLnkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHtcbiAgICAgICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy5fc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgICAgIG1pbnpvb206IHRoaXMuX3NvdXJjZS5taW56b29tLFxuICAgICAgICAgICAgICAgIG1heHpvb206IHRoaXMuX3NvdXJjZS5tYXh6b29tLFxuICAgICAgICAgICAgICAgIHJvdW5kWm9vbTogdGhpcy5fc291cmNlLnJvdW5kWm9vbSxcbiAgICAgICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZDogdGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5oYXNUaWxlKSB7XG4gICAgICAgICAgICAgICAgaWRlYWxUaWxlSURzID0gaWRlYWxUaWxlSURzLmZpbHRlcigoY29vcmQpID0+ICh0aGlzLl9zb3VyY2UuaGFzVGlsZTogYW55KShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBvdmVyem9vbWluZy91bmRlcnpvb21pbmcgYW1vdW50cy5cbiAgICAgICAgY29uc3Qgem9vbSA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh0aGlzLl9zb3VyY2UpO1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICAvLyBSZXRhaW4gaXMgYSBsaXN0IG9mIHRpbGVzIHRoYXQgd2Ugc2hvdWxkbid0IGRlbGV0ZSwgZXZlbiBpZiB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gdGhlIG1vc3QgaWRlYWwgdGlsZSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQuIFRoaXMgbWF5IGluY2x1ZGUgdGlsZXMgbGlrZVxuICAgICAgICAvLyBwYXJlbnQgb3IgY2hpbGQgdGlsZXMgdGhhdCBhcmUgKmFscmVhZHkqIGxvYWRlZC5cbiAgICAgICAgY29uc3QgcmV0YWluID0gdGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpZGVhbFRpbGVJRHMsIHpvb20pO1xuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRzRm9yRmFkaW5nOiB7W3N0cmluZ106IE92ZXJzY2FsZWRUaWxlSUR9ID0ge307XG4gICAgICAgICAgICBjb25zdCBmYWRpbmdUaWxlcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMocmV0YWluKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZUlEID0gcmV0YWluW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodGlsZUlELmtleSA9PT0gaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN0cnVjdCBhIGNhY2hlIG9mIGxvYWRlZCBwYXJlbnRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKTogeyBbc3RyaW5nXTogT3ZlcnNjYWxlZFRpbGVJRH0ge1xuICAgICAgICBjb25zdCByZXRhaW46IHtbc3RyaW5nXTogT3ZlcnNjYWxlZFRpbGVJRH0gPSB7fTtcbiAgICAgICAgY29uc3QgY2hlY2tlZDoge1tzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgICAgICAgY29uc3QgbWluQ292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSAtIFNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nLCB0aGlzLl9zb3VyY2UubWluem9vbSk7XG4gICAgICAgIGNvbnN0IG1heENvdmVyaW5nWm9vbSA9IE1hdGgubWF4KHpvb20gKyBTb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcsICB0aGlzLl9zb3VyY2UubWluem9vbSk7XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ1RpbGVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIGlkZWFsVGlsZUlEcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX2FkZFRpbGUodGlsZUlEKTtcblxuICAgICAgICAgICAgLy8gcmV0YWluIHRoZSB0aWxlIGV2ZW4gaWYgaXQncyBub3QgbG9hZGVkIGJlY2F1c2UgaXQncyBhbiBpZGVhbCB0aWxlLlxuICAgICAgICAgICAgcmV0YWluW3RpbGVJRC5rZXldID0gdGlsZUlEO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoem9vbSA8IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gc2F2ZSBtaXNzaW5nIHRpbGVzIHRoYXQgcG90ZW50aWFsbHkgaGF2ZSBsb2FkZWQgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBtaXNzaW5nVGlsZXNbdGlsZUlELmtleV0gPSB0aWxlSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRhaW4gYW55IGxvYWRlZCBjaGlsZHJlbiBvZiBpZGVhbCB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgdGhpcy5fcmV0YWluTG9hZGVkQ2hpbGRyZW4obWlzc2luZ1RpbGVzLCB6b29tLCBtYXhDb3ZlcmluZ1pvb20sIHJldGFpbik7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBsZXQgdGlsZSA9IHRoaXMuX3RpbGVzW3RpbGVJRC5rZXldO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5oYXNEYXRhKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgdGlsZSB3ZSByZXF1aXJlIGlzIG5vdCB5ZXQgbG9hZGVkIG9yIGRvZXMgbm90IGV4aXN0O1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGNoaWxkcmVuIHRoYXQgZnVsbHkgY292ZXIgaXQuXG5cbiAgICAgICAgICAgIGlmICh6b29tICsgMSA+IHRoaXMuX3NvdXJjZS5tYXh6b29tKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgbG9va2luZyBmb3IgYW4gb3Zlcnpvb21lZCBjaGlsZCB0aWxlLlxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29vcmQgPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVGlsZSA9IHRoaXMuZ2V0VGlsZShjaGlsZENvb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAoISFjaGlsZFRpbGUgJiYgY2hpbGRUaWxlLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bY2hpbGRDb29yZC5rZXldID0gY2hpbGRDb29yZDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHRpbGUgaXMgY292ZXJlZCBieSBvdmVyem9vbWVkIGNoaWxkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhbGwgNCBpbW1lZGlhdGUgY2hpbGRyZW4gYXJlIGxvYWRlZCAoaS5lLiB0aGUgbWlzc2luZyBpZGVhbCB0aWxlIGlzIGNvdmVyZWQpXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aWxlSUQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJldGFpbltjaGlsZHJlblswXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsxXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblsyXS5rZXldICYmXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZHJlblszXS5rZXldKSBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IGNoaWxkcmVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgY2hpbGQgdGlsZXMgdGhhdCBlbnRpcmVseSBjb3ZlciB0aGUgaWRlYWwgdGlsZTsgbG9vayBmb3IgcGFyZW50cyBub3cuXG5cbiAgICAgICAgICAgIC8vIEFzIHdlIGFzY2VuZCB1cCB0aGUgdGlsZSBweXJhbWlkIG9mIHRoZSBpZGVhbCB0aWxlLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBwYXJlbnRcbiAgICAgICAgICAgIC8vIHRpbGUgaGFzIGJlZW4gcHJldmlvdXNseSByZXF1ZXN0ZWQgKGFuZCBlcnJvcmVkIGJlY2F1c2Ugd2Ugb25seSBsb29wIG92ZXIgdGlsZXMgd2l0aCBubyBkYXRhKVxuICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdHMgcGFyZW50LlxuICAgICAgICAgICAgbGV0IHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG92ZXJzY2FsZWRaID0gdGlsZUlELm92ZXJzY2FsZWRaIC0gMTsgb3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tOyAtLW92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aWxlSUQuc2NhbGVkVG8ob3ZlcnNjYWxlZFopO1xuXG4gICAgICAgICAgICAgICAgLy8gQnJlYWsgcGFyZW50IHRpbGUgYXNjZW50IGlmIHRoaXMgcm91dGUgaGFzIGJlZW4gcHJldmlvdXNseSBjaGVja2VkIGJ5IGFub3RoZXIgY2hpbGQuXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRbcGFyZW50SWQua2V5XSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2hlY2tlZFtwYXJlbnRJZC5rZXldID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRpbGUgPSB0aGlzLmdldFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmICghdGlsZSAmJiBwYXJlbnRXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuX2FkZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRhaW5bcGFyZW50SWQua2V5XSA9IHBhcmVudElkO1xuICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHZhbHVlcywgc2luY2UgdGhleSdyZSB0aGUgcGFyZW50IG9mIHRoZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgcGFyZW50IHRpbGUgYXNjZW50IGxvb3AuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFdhc1JlcXVlc3RlZCA9IHRpbGUud2FzUmVxdWVzdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldGFpbjtcbiAgICB9XG5cbiAgICBfdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlKCkge1xuICAgICAgICB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgdGlsZUtleSBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFtdO1xuICAgICAgICAgICAgbGV0IHBhcmVudFRpbGU6ID9UaWxlO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRJZCA9IHRoaXMuX3RpbGVzW3RpbGVLZXldLnRpbGVJRDtcblxuICAgICAgICAgICAgLy8gRmluZCB0aGUgY2xvc2VzdCBsb2FkZWQgYW5jZXN0b3IgYnkgdHJhdmVyc2luZyB0aGUgdGlsZSB0cmVlIHRvd2FyZHMgdGhlIHJvb3QgYW5kXG4gICAgICAgICAgICAvLyBjYWNoaW5nIHJlc3VsdHMgYWxvbmcgdGhlIHdheVxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRJZC5vdmVyc2NhbGVkWiA+IDApIHtcblxuICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSBjYWNoZWQgcmVzdWx0IGZyb20gcHJldmlvdXMgdHJhdmVyc2Fscz9cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudElkLmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRUaWxlID0gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbY3VycmVudElkLmtleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChjdXJyZW50SWQua2V5KTtcblxuICAgICAgICAgICAgICAgIC8vIElzIHRoZSBwYXJlbnQgbG9hZGVkP1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gY3VycmVudElkLnNjYWxlZFRvKGN1cnJlbnRJZC5vdmVyc2NhbGVkWiAtIDEpO1xuICAgICAgICAgICAgICAgIHBhcmVudFRpbGUgPSB0aGlzLl9nZXRMb2FkZWRUaWxlKHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdCBvZiB0aGlzIHRyYXZlcnNhbCB0byBhbGwgbmV3bHkgdmlzaXRlZCB0aWxlc1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzW2tleV0gPSBwYXJlbnRUaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgdGlsZSwgZ2l2ZW4gaXRzIGNvb3JkaW5hdGUsIHRvIHRoZSBweXJhbWlkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2FkZFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogVGlsZSB7XG4gICAgICAgIGxldCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgIGlmICh0aWxlKVxuICAgICAgICAgICAgcmV0dXJuIHRpbGU7XG5cbiAgICAgICAgdGlsZSA9IHRoaXMuX2NhY2hlLmdldEFuZFJlbW92ZSh0aWxlSUQpO1xuICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHRpbGVJRC5rZXksIHRpbGUpO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSB0aWxlSUQgYmVjYXVzZSB0aGUgY2FjaGVkIHRpbGUgY291bGQgaGF2ZSBoYWQgYSBkaWZmZXJlbnQgd3JhcCB2YWx1ZVxuICAgICAgICAgICAgdGlsZS50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHRpbGUsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlVGltZXJzW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NhY2hlVGltZXJzW3RpbGVJRC5rZXldKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHRpbGVJRC5rZXksIHRpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FjaGVkID0gQm9vbGVhbih0aWxlKTtcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgICAgICAgIHRpbGUgPSBuZXcgVGlsZSh0aWxlSUQsIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSAqIHRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSk7XG4gICAgICAgICAgICB0aGlzLl9sb2FkVGlsZSh0aWxlLCB0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcywgdGlsZSwgdGlsZUlELmtleSwgdGlsZS5zdGF0ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW1wb3NzaWJsZSwgYnV0IHNpbGVuY2UgZmxvdy5cbiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm4gKG51bGw6IGFueSk7XG5cbiAgICAgICAgdGlsZS51c2VzKys7XG4gICAgICAgIHRoaXMuX3RpbGVzW3RpbGVJRC5rZXldID0gdGlsZTtcbiAgICAgICAgaWYgKCFjYWNoZWQpIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7dGlsZSwgY29vcmQ6IHRpbGUudGlsZUlELCBkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG5cbiAgICAgICAgcmV0dXJuIHRpbGU7XG4gICAgfVxuXG4gICAgX3NldFRpbGVSZWxvYWRUaW1lcihpZDogc3RyaW5nLCB0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmIChpZCBpbiB0aGlzLl90aW1lcnMpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwaXJ5VGltZW91dCA9IHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpO1xuICAgICAgICBpZiAoZXhwaXJ5VGltZW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdGltZXJzW2lkXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFRpbGUoaWQsICdleHBpcmVkJyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgICAgICB9LCBleHBpcnlUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIHRpbGUsIGdpdmVuIGl0cyBpZCwgZnJvbSB0aGUgcHlyYW1pZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbW92ZVRpbGUoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICBpZiAoIXRpbGUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGlsZS51c2VzLS07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICh0aGlzLl90aW1lcnNbaWRdKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW2lkXSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aWxlLnVzZXMgPiAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSAmJiB0aWxlLnN0YXRlICE9PSAncmVsb2FkaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUuYWRkKHRpbGUudGlsZUlELCB0aWxlLCB0aWxlLmdldEV4cGlyeVRpbWVvdXQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYWJvcnRUaWxlKHRpbGUpO1xuICAgICAgICAgICAgdGhpcy5fdW5sb2FkVGlsZSh0aWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgdGlsZXMgZnJvbSB0aGlzIHB5cmFtaWRcbiAgICAgKi9cbiAgICBjbGVhclRpbGVzKCkge1xuICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKVxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVGlsZShpZCk7XG5cbiAgICAgICAgdGhpcy5fY2FjaGUucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggdGhyb3VnaCBvdXIgY3VycmVudCB0aWxlcyBhbmQgYXR0ZW1wdCB0byBmaW5kIHRoZSB0aWxlcyB0aGF0XG4gICAgICogY292ZXIgdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0gcG9pbnRRdWVyeUdlb21ldHJ5IGNvb3JkaW5hdGVzIG9mIHRoZSBjb3JuZXJzIG9mIGJvdW5kaW5nIHJlY3RhbmdsZVxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSByZXN1bHQgaXRlbXMgaGF2ZSB7dGlsZSwgbWluWCwgbWF4WCwgbWluWSwgbWF4WX0sIHdoZXJlIG1pbi9tYXggYm91bmRpbmcgdmFsdWVzIGFyZSB0aGUgZ2l2ZW4gYm91bmRzIHRyYW5zZm9ybWVkIGluIGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhpcyB0aWxlLlxuICAgICAqL1xuICAgIHRpbGVzSW4ocG9pbnRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIG1heFBpdGNoU2NhbGVGYWN0b3I6IG51bWJlciwgaGFzM0RMYXllcjogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IHRpbGVSZXN1bHRzID0gW107XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGlmICghdHJhbnNmb3JtKSByZXR1cm4gdGlsZVJlc3VsdHM7XG5cbiAgICAgICAgY29uc3QgY2FtZXJhUG9pbnRRdWVyeUdlb21ldHJ5ID0gaGFzM0RMYXllciA/XG4gICAgICAgICAgICB0cmFuc2Zvcm0uZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeShwb2ludFF1ZXJ5R2VvbWV0cnkpIDpcbiAgICAgICAgICAgIHBvaW50UXVlcnlHZW9tZXRyeTtcblxuICAgICAgICBjb25zdCBxdWVyeUdlb21ldHJ5ID0gcG9pbnRRdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4gdHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZShwKSk7XG4gICAgICAgIGNvbnN0IGNhbWVyYVF1ZXJ5R2VvbWV0cnkgPSBjYW1lcmFQb2ludFF1ZXJ5R2VvbWV0cnkubWFwKChwKSA9PiB0cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHApKTtcblxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmdldElkcygpO1xuXG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2FtZXJhUXVlcnlHZW9tZXRyeSkge1xuICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHAueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwLngpO1xuICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHAueSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkc1tpXV07XG4gICAgICAgICAgICBpZiAodGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGlsZXMgaGVsZCBmb3IgZmFkaW5nIGFyZSBjb3ZlcmVkIGJ5IHRpbGVzIHRoYXQgYXJlIGNsb3NlciB0byBpZGVhbFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGlsZUlEID0gdGlsZS50aWxlSUQ7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYWRkaW5nID0gbWF4UGl0Y2hTY2FsZUZhY3RvciAqIHRpbGUucXVlcnlQYWRkaW5nICogRVhURU5UIC8gdGlsZS50aWxlU2l6ZSAvIHNjYWxlO1xuXG4gICAgICAgICAgICBjb25zdCB0aWxlU3BhY2VCb3VuZHMgPSBbXG4gICAgICAgICAgICAgICAgdGlsZUlELmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKG1pblgsIG1pblkpKSxcbiAgICAgICAgICAgICAgICB0aWxlSUQuZ2V0VGlsZVBvaW50KG5ldyBNZXJjYXRvckNvb3JkaW5hdGUobWF4WCwgbWF4WSkpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBpZiAodGlsZVNwYWNlQm91bmRzWzBdLnggLSBxdWVyeVBhZGRpbmcgPCBFWFRFTlQgJiYgdGlsZVNwYWNlQm91bmRzWzBdLnkgLSBxdWVyeVBhZGRpbmcgPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICB0aWxlU3BhY2VCb3VuZHNbMV0ueCArIHF1ZXJ5UGFkZGluZyA+PSAwICYmIHRpbGVTcGFjZUJvdW5kc1sxXS55ICsgcXVlcnlQYWRkaW5nID49IDApIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGVTcGFjZVF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiA9IHF1ZXJ5R2VvbWV0cnkubWFwKChjKSA9PiB0aWxlSUQuZ2V0VGlsZVBvaW50KGMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlU3BhY2VDYW1lcmFRdWVyeUdlb21ldHJ5ID0gY2FtZXJhUXVlcnlHZW9tZXRyeS5tYXAoKGMpID0+IHRpbGVJRC5nZXRUaWxlUG9pbnQoYykpO1xuXG4gICAgICAgICAgICAgICAgdGlsZVJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUsXG4gICAgICAgICAgICAgICAgICAgIHRpbGVJRCxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogdGlsZVNwYWNlUXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhUXVlcnlHZW9tZXRyeTogdGlsZVNwYWNlQ2FtZXJhUXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aWxlUmVzdWx0cztcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29vcmRpbmF0ZXMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4ge1xuICAgICAgICBjb25zdCBjb29yZHMgPSB0aGlzLmdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXIpLm1hcCgoaWQpID0+IHRoaXMuX3RpbGVzW2lkXS50aWxlSUQpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAgICAgY29vcmQucG9zTWF0cml4ID0gdGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGNvb3JkLnRvVW53cmFwcGVkKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb29yZHM7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmFzdGVyVHlwZSh0aGlzLl9zb3VyY2UudHlwZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLmZhZGVFbmRUaW1lICE9PSB1bmRlZmluZWQgJiYgdGlsZS5mYWRlRW5kVGltZSA+PSBicm93c2VyLm5vdygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBmb3IgYSBmZWF0dXJlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI/OiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nLCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5fc3RhdGUudXBkYXRlU3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmVJZCwgc3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIHN0YXRlIGtleSBmb3IgYSBmZWF0dXJlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI/OiBzdHJpbmcsIGZlYXR1cmVJZD86IG51bWJlciB8IHN0cmluZywga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBlbnRpcmUgc3RhdGUgb2JqZWN0IGZvciBhIGZlYXR1cmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcj86IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgc291cmNlTGF5ZXIgPSBzb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0U3RhdGUoc291cmNlTGF5ZXIsIGZlYXR1cmVJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2V0IG9mIGtleXMgdGhhdCB0aGUgdGlsZSBkZXBlbmRzIG9uLiBUaGlzIGFsbG93cyB0aWxlcyB0b1xuICAgICAqIGJlIHJlbG9hZGVkIHdoZW4gdGhlaXIgZGVwZW5kZW5jaWVzIGNoYW5nZS5cbiAgICAgKi9cbiAgICBzZXREZXBlbmRlbmNpZXModGlsZUtleTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlS2V5XTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUuc2V0RGVwZW5kZW5jaWVzKG5hbWVzcGFjZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgYWxsIHRpbGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBnaXZlbiBrZXlzLlxuICAgICAqL1xuICAgIHJlbG9hZFRpbGVzRm9yRGVwZW5kZW5jaWVzKG5hbWVzcGFjZXM6IEFycmF5PHN0cmluZz4sIGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RlcGVuZGVuY3kobmFtZXNwYWNlcywga2V5cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWxvYWRUaWxlKGlkLCAncmVsb2FkaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FjaGUuZmlsdGVyKHRpbGUgPT4gIXRpbGUuaGFzRGVwZW5kZW5jeShuYW1lc3BhY2VzLCBrZXlzKSk7XG4gICAgfVxufVxuXG5Tb3VyY2VDYWNoZS5tYXhPdmVyem9vbWluZyA9IDEwO1xuU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nID0gMztcblxuZnVuY3Rpb24gY29tcGFyZVRpbGVJZChhOiBPdmVyc2NhbGVkVGlsZUlELCBiOiBPdmVyc2NhbGVkVGlsZUlEKTogbnVtYmVyIHtcbiAgICAvLyBEaWZmZXJlbnQgY29waWVzIG9mIHRoZSB3b3JsZCBhcmUgc29ydGVkIGJhc2VkIG9uIHRoZWlyIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXIuXG4gICAgLy8gV3JhcCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byB1bnNpZ25lZCBkaXN0YW5jZXMgYnkgcmVzZXJ2aW5nIG9kZCBudW1iZXIgZm9yIGNvcGllc1xuICAgIC8vIHdpdGggbmVnYXRpdmUgd3JhcCBhbmQgZXZlbiBudW1iZXJzIGZvciBjb3BpZXMgd2l0aCBwb3NpdGl2ZSB3cmFwLlxuICAgIGNvbnN0IGFXcmFwID0gTWF0aC5hYnMoYS53cmFwICogMikgLSArKGEud3JhcCA8IDApO1xuICAgIGNvbnN0IGJXcmFwID0gTWF0aC5hYnMoYi53cmFwICogMikgLSArKGIud3JhcCA8IDApO1xuICAgIHJldHVybiBhLm92ZXJzY2FsZWRaIC0gYi5vdmVyc2NhbGVkWiB8fCBiV3JhcCAtIGFXcmFwIHx8IGIuY2Fub25pY2FsLnkgLSBhLmNhbm9uaWNhbC55IHx8IGIuY2Fub25pY2FsLnggLSBhLmNhbm9uaWNhbC54O1xufVxuXG5mdW5jdGlvbiBpc1Jhc3RlclR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAncmFzdGVyJyB8fCB0eXBlID09PSAnaW1hZ2UnIHx8IHR5cGUgPT09ICd2aWRlbyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvdXJjZUNhY2hlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi93aW5kb3cnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uLy4uLyc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4uL3dlYl93b3JrZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogV29ya2VySW50ZXJmYWNlIHtcbiAgICByZXR1cm4gKG5ldyB3aW5kb3cuV29ya2VyKG1hcGJveGdsLndvcmtlclVybCk6IGFueSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgV2ViV29ya2VyIGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgdHlwZSB7V29ya2VySW50ZXJmYWNlfSBmcm9tICcuL3dlYl93b3JrZXInO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgd29ya2VyIHBvb2wuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQb29sIHtcbiAgICBzdGF0aWMgd29ya2VyQ291bnQ6IG51bWJlcjtcblxuICAgIGFjdGl2ZToge1tudW1iZXJdOiBib29sZWFufTtcbiAgICB3b3JrZXJzOiBBcnJheTxXb3JrZXJJbnRlcmZhY2U+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0ge307XG4gICAgfVxuXG4gICAgYWNxdWlyZShtYXBJZDogbnVtYmVyKTogQXJyYXk8V29ya2VySW50ZXJmYWNlPiB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJzKSB7XG4gICAgICAgICAgICAvLyBMYXppbHkgbG9vayB1cCB0aGUgdmFsdWUgb2YgbWFwYm94Z2wud29ya2VyQ291bnQgc28gdGhhdFxuICAgICAgICAgICAgLy8gY2xpZW50IGNvZGUgaGFzIGhhZCBhIGNoYW5jZSB0byBzZXQgaXQuXG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLndvcmtlcnMubGVuZ3RoIDwgV29ya2VyUG9vbC53b3JrZXJDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMud29ya2Vycy5wdXNoKG5ldyBXZWJXb3JrZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVttYXBJZF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy53b3JrZXJzLnNsaWNlKCk7XG4gICAgfVxuXG4gICAgcmVsZWFzZShtYXBJZDogbnVtYmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVttYXBJZF07XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuZm9yRWFjaCgodykgPT4ge1xuICAgICAgICAgICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VycyA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycyA9IE1hdGguZmxvb3IoYnJvd3Nlci5oYXJkd2FyZUNvbmN1cnJlbmN5IC8gMik7XG5Xb3JrZXJQb29sLndvcmtlckNvdW50ID0gTWF0aC5tYXgoTWF0aC5taW4oYXZhaWxhYmxlTG9naWNhbFByb2Nlc3NvcnMsIDYpLCAxKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXb3JrZXJQb29sIGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG5sZXQgZ2xvYmFsV29ya2VyUG9vbDtcblxuLyoqXG4gKiBDcmVhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm5zIHRoZSBzaW5nbGUsIGdsb2JhbCBXb3JrZXJQb29sIGluc3RhbmNlXG4gKiB0byBiZSBzaGFyZWQgYWNyb3NzIGVhY2ggTWFwXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHbG9iYWxXb3JrZXJQb29sICgpIHtcbiAgICBpZiAoIWdsb2JhbFdvcmtlclBvb2wpIHtcbiAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG5ldyBXb3JrZXJQb29sKCk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxXb3JrZXJQb29sO1xufVxuIiwiXG5pbXBvcnQgcmVmUHJvcGVydGllcyBmcm9tICcuL3V0aWwvcmVmX3Byb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBkZXJlZihsYXllciwgcGFyZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gbGF5ZXIpIHtcbiAgICAgICAgaWYgKGsgIT09ICdyZWYnKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSBsYXllcltrXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZlByb3BlcnRpZXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICBpZiAoayBpbiBwYXJlbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHBhcmVudFtrXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVyZWZMYXllcnM7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgbGF5ZXJzLCBzb21lIG9mIHdoaWNoIG1heSBjb250YWluIGByZWZgIHByb3BlcnRpZXNcbiAqIHdob3NlIHZhbHVlIGlzIHRoZSBgaWRgIG9mIGFub3RoZXIgcHJvcGVydHksIHJldHVybiBhIG5ldyBhcnJheSB3aGVyZVxuICogc3VjaCBsYXllcnMgaGF2ZSBiZWVuIGF1Z21lbnRlZCB3aXRoIHRoZSAndHlwZScsICdzb3VyY2UnLCBldGMuIHByb3BlcnRpZXNcbiAqIGZyb20gdGhlIHBhcmVudCBsYXllciwgYW5kIHRoZSBgcmVmYCBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkLlxuICpcbiAqIFRoZSBpbnB1dCBpcyBub3QgbW9kaWZpZWQuIFRoZSBvdXRwdXQgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBwb3J0aW9uc1xuICogb2YgdGhlIGlucHV0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PExheWVyPn0gbGF5ZXJzXG4gKiBAcmV0dXJucyB7QXJyYXk8TGF5ZXI+fVxuICovXG5mdW5jdGlvbiBkZXJlZkxheWVycyhsYXllcnMpIHtcbiAgICBsYXllcnMgPSBsYXllcnMuc2xpY2UoKTtcblxuICAgIGNvbnN0IG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2xheWVyc1tpXS5pZF0gPSBsYXllcnNbaV07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCdyZWYnIGluIGxheWVyc1tpXSkge1xuICAgICAgICAgICAgbGF5ZXJzW2ldID0gZGVyZWYobGF5ZXJzW2ldLCBtYXBbbGF5ZXJzW2ldLnJlZl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbn1cbiIsImltcG9ydCBsYXRlc3QgZnJvbSAnLi9yZWZlcmVuY2UvbGF0ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1wdHlTdHlsZSgpIHtcbiAgICBjb25zdCBzdHlsZSA9IHt9O1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IGxhdGVzdFsnJHZlcnNpb24nXTtcbiAgICBmb3IgKGNvbnN0IHN0eWxlS2V5IGluIGxhdGVzdFsnJHJvb3QnXSkge1xuICAgICAgICBjb25zdCBzcGVjID0gbGF0ZXN0Wyckcm9vdCddW3N0eWxlS2V5XTtcblxuICAgICAgICBpZiAoc3BlYy5yZXF1aXJlZCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzdHlsZUtleSA9PT0gJ3ZlcnNpb24nKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2ZXJzaW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3BlYy50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbc3R5bGVLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG59XG4iLCJcbmltcG9ydCBpc0VxdWFsIGZyb20gJy4vdXRpbC9kZWVwX2VxdWFsJztcblxuY29uc3Qgb3BlcmF0aW9ucyA9IHtcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0U3R5bGUnLCBhcmdzOiBbc3R5bGVzaGVldF0gfVxuICAgICAqL1xuICAgIHNldFN0eWxlOiAnc2V0U3R5bGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdhZGRMYXllcicsIGFyZ3M6IFtsYXllciwgJ2JlZm9yZUxheWVySWQnXSB9XG4gICAgICovXG4gICAgYWRkTGF5ZXI6ICdhZGRMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZUxheWVyJywgYXJnczogWydsYXllcklkJ10gfVxuICAgICAqL1xuICAgIHJlbW92ZUxheWVyOiAncmVtb3ZlTGF5ZXInLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydsYXllcklkJywgJ3Byb3AnLCB2YWx1ZV0gfVxuICAgICAqL1xuICAgIHNldFBhaW50UHJvcGVydHk6ICdzZXRQYWludFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0TGF5b3V0UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5b3V0UHJvcGVydHk6ICdzZXRMYXlvdXRQcm9wZXJ0eScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldEZpbHRlcicsIGFyZ3M6IFsnbGF5ZXJJZCcsIGZpbHRlcl0gfVxuICAgICAqL1xuICAgIHNldEZpbHRlcjogJ3NldEZpbHRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZFNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnLCBzb3VyY2VdIH1cbiAgICAgKi9cbiAgICBhZGRTb3VyY2U6ICdhZGRTb3VyY2UnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdyZW1vdmVTb3VyY2UnLCBhcmdzOiBbJ3NvdXJjZUlkJ10gfVxuICAgICAqL1xuICAgIHJlbW92ZVNvdXJjZTogJ3JlbW92ZVNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldEdlb0pTT05Tb3VyY2VEYXRhJywgYXJnczogWydzb3VyY2VJZCcsIGRhdGFdIH1cbiAgICAgKi9cbiAgICBzZXRHZW9KU09OU291cmNlRGF0YTogJ3NldEdlb0pTT05Tb3VyY2VEYXRhJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0TGF5ZXJab29tUmFuZ2UnLCBhcmdzOiBbJ2xheWVySWQnLCAwLCAyMl0gfVxuICAgICAqL1xuICAgIHNldExheWVyWm9vbVJhbmdlOiAnc2V0TGF5ZXJab29tUmFuZ2UnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclByb3BlcnR5JywgYXJnczogWydsYXllcklkJywgJ3Byb3AnLCB2YWx1ZV0gfVxuICAgICAqL1xuICAgIHNldExheWVyUHJvcGVydHk6ICdzZXRMYXllclByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0Q2VudGVyJywgYXJnczogW1tsb24sIGxhdF1dIH1cbiAgICAgKi9cbiAgICBzZXRDZW50ZXI6ICdzZXRDZW50ZXInLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRab29tJywgYXJnczogW3pvb21dIH1cbiAgICAgKi9cbiAgICBzZXRab29tOiAnc2V0Wm9vbScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldEJlYXJpbmcnLCBhcmdzOiBbYmVhcmluZ10gfVxuICAgICAqL1xuICAgIHNldEJlYXJpbmc6ICdzZXRCZWFyaW5nJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0UGl0Y2gnLCBhcmdzOiBbcGl0Y2hdIH1cbiAgICAgKi9cbiAgICBzZXRQaXRjaDogJ3NldFBpdGNoJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0U3ByaXRlJywgYXJnczogWydzcHJpdGVVcmwnXSB9XG4gICAgICovXG4gICAgc2V0U3ByaXRlOiAnc2V0U3ByaXRlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2x5cGhzJywgYXJnczogWydnbHlwaHNVcmwnXSB9XG4gICAgICovXG4gICAgc2V0R2x5cGhzOiAnc2V0R2x5cGhzJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0VHJhbnNpdGlvbicsIGFyZ3M6IFt0cmFuc2l0aW9uXSB9XG4gICAgICovXG4gICAgc2V0VHJhbnNpdGlvbjogJ3NldFRyYW5zaXRpb24nLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMaWdodGluZycsIGFyZ3M6IFtsaWdodFByb3BlcnRpZXNdIH1cbiAgICAgKi9cbiAgICBzZXRMaWdodDogJ3NldExpZ2h0J1xuXG59O1xuXG5mdW5jdGlvbiBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkU291cmNlLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXV19KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpIHtcbiAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnJlbW92ZVNvdXJjZSwgYXJnczogW3NvdXJjZUlkXX0pO1xuICAgIHNvdXJjZXNSZW1vdmVkW3NvdXJjZUlkXSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIHJlbW92ZVNvdXJjZShzb3VyY2VJZCwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKTtcbiAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG59XG5cbmZ1bmN0aW9uIGNhblVwZGF0ZUdlb0pTT04oYmVmb3JlLCBhZnRlciwgc291cmNlSWQpIHtcbiAgICBsZXQgcHJvcDtcbiAgICBmb3IgKHByb3AgaW4gYmVmb3JlW3NvdXJjZUlkXSkge1xuICAgICAgICBpZiAoIWJlZm9yZVtzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHByb3AgaW4gYWZ0ZXJbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYWZ0ZXJbc291cmNlSWRdLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHByb3AgIT09ICdkYXRhJyAmJiAhaXNFcXVhbChiZWZvcmVbc291cmNlSWRdW3Byb3BdLCBhZnRlcltzb3VyY2VJZF1bcHJvcF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRpZmZTb3VyY2VzKGJlZm9yZSwgYWZ0ZXIsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCB7fTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IHt9O1xuXG4gICAgbGV0IHNvdXJjZUlkO1xuXG4gICAgLy8gbG9vayBmb3Igc291cmNlcyB0byByZW1vdmVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGJlZm9yZSkge1xuICAgICAgICBpZiAoIWJlZm9yZS5oYXNPd25Qcm9wZXJ0eShzb3VyY2VJZCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWFmdGVyLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkge1xuICAgICAgICAgICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbG9vayBmb3Igc291cmNlcyB0byBhZGQvdXBkYXRlXG4gICAgZm9yIChzb3VyY2VJZCBpbiBhZnRlcikge1xuICAgICAgICBpZiAoIWFmdGVyLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkge1xuICAgICAgICAgICAgYWRkU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF0sIGFmdGVyW3NvdXJjZUlkXSkpIHtcbiAgICAgICAgICAgIGlmIChiZWZvcmVbc291cmNlSWRdLnR5cGUgPT09ICdnZW9qc29uJyAmJiBhZnRlcltzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGNhblVwZGF0ZUdlb0pTT04oYmVmb3JlLCBhZnRlciwgc291cmNlSWQpKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRHZW9KU09OU291cmNlRGF0YSwgYXJnczogW3NvdXJjZUlkLCBhZnRlcltzb3VyY2VJZF0uZGF0YV19KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gdXBkYXRlIGNvbW1hbmQsIG11c3QgcmVtb3ZlIHRoZW4gYWRkXG4gICAgICAgICAgICAgICAgdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZSwgYWZ0ZXIsIGNvbW1hbmRzLCBsYXllcklkLCBrbGFzcywgY29tbWFuZCkge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCB7fTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IHt9O1xuXG4gICAgbGV0IHByb3A7XG5cbiAgICBmb3IgKHByb3AgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcikge1xuICAgICAgICBpZiAoIWFmdGVyLmhhc093blByb3BlcnR5KHByb3ApIHx8IGJlZm9yZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVbcHJvcF0sIGFmdGVyW3Byb3BdKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZCwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyW3Byb3BdLCBrbGFzc119KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGx1Y2tJZChsYXllcikge1xuICAgIHJldHVybiBsYXllci5pZDtcbn1cbmZ1bmN0aW9uIGluZGV4QnlJZChncm91cCwgbGF5ZXIpIHtcbiAgICBncm91cFtsYXllci5pZF0gPSBsYXllcjtcbiAgICByZXR1cm4gZ3JvdXA7XG59XG5cbmZ1bmN0aW9uIGRpZmZMYXllcnMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUgfHwgW107XG4gICAgYWZ0ZXIgPSBhZnRlciB8fCBbXTtcblxuICAgIC8vIG9yZGVyIG9mIGxheWVycyBieSBpZFxuICAgIGNvbnN0IGJlZm9yZU9yZGVyID0gYmVmb3JlLm1hcChwbHVja0lkKTtcbiAgICBjb25zdCBhZnRlck9yZGVyID0gYWZ0ZXIubWFwKHBsdWNrSWQpO1xuXG4gICAgLy8gaW5kZXggb2YgbGF5ZXIgYnkgaWRcbiAgICBjb25zdCBiZWZvcmVJbmRleCA9IGJlZm9yZS5yZWR1Y2UoaW5kZXhCeUlkLCB7fSk7XG4gICAgY29uc3QgYWZ0ZXJJbmRleCA9IGFmdGVyLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcblxuICAgIC8vIHRyYWNrIG9yZGVyIG9mIGxheWVycyBhcyBpZiB0aGV5IGhhdmUgYmVlbiBtdXRhdGVkXG4gICAgY29uc3QgdHJhY2tlciA9IGJlZm9yZU9yZGVyLnNsaWNlKCk7XG5cbiAgICAvLyBsYXllcnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgZG8gbm90IG5lZWQgdG8gYmUgZGlmZmVkXG4gICAgY29uc3QgY2xlYW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgbGV0IGksIGQsIGxheWVySWQsIGJlZm9yZUxheWVyLCBhZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkLCBwcm9wO1xuXG4gICAgLy8gcmVtb3ZlIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYmVmb3JlT3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGF5ZXJJZCA9IGJlZm9yZU9yZGVyW2ldO1xuICAgICAgICBpZiAoIWFmdGVySW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllcklkXX0pO1xuICAgICAgICAgICAgdHJhY2tlci5zcGxpY2UodHJhY2tlci5pbmRleE9mKGxheWVySWQsIGQpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGxpbWl0IHdoZXJlIGluIHRyYWNrZXIgd2UgbmVlZCB0byBsb29rIGZvciBhIG1hdGNoXG4gICAgICAgICAgICBkKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQvcmVvcmRlciBsYXllcnNcbiAgICBmb3IgKGkgPSAwLCBkID0gMDsgaSA8IGFmdGVyT3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gd29yayBiYWNrd2FyZHMgYXMgaW5zZXJ0IGlzIGJlZm9yZSBhbiBleGlzdGluZyBsYXllclxuICAgICAgICBsYXllcklkID0gYWZ0ZXJPcmRlclthZnRlck9yZGVyLmxlbmd0aCAtIDEgLSBpXTtcblxuICAgICAgICBpZiAodHJhY2tlclt0cmFja2VyLmxlbmd0aCAtIDEgLSBpXSA9PT0gbGF5ZXJJZCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGJlZm9yZUluZGV4Lmhhc093blByb3BlcnR5KGxheWVySWQpKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIGxheWVyIGJlZm9yZSB3ZSBpbnNlcnQgYXQgdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllcklkXX0pO1xuICAgICAgICAgICAgdHJhY2tlci5zcGxpY2UodHJhY2tlci5sYXN0SW5kZXhPZihsYXllcklkLCB0cmFja2VyLmxlbmd0aCAtIGQpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGxpbWl0IHdoZXJlIGluIHRyYWNrZXIgd2UgbmVlZCB0byBsb29rIGZvciBhIG1hdGNoXG4gICAgICAgICAgICBkKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgbGF5ZXIgYXQgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICBpbnNlcnRCZWZvcmVMYXllcklkID0gdHJhY2tlclt0cmFja2VyLmxlbmd0aCAtIGldO1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLmFkZExheWVyLCBhcmdzOiBbYWZ0ZXJJbmRleFtsYXllcklkXSwgaW5zZXJ0QmVmb3JlTGF5ZXJJZF19KTtcbiAgICAgICAgdHJhY2tlci5zcGxpY2UodHJhY2tlci5sZW5ndGggLSBpLCAwLCBsYXllcklkKTtcbiAgICAgICAgY2xlYW5bbGF5ZXJJZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBsYXllcnNcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYWZ0ZXJPcmRlcltpXTtcbiAgICAgICAgYmVmb3JlTGF5ZXIgPSBiZWZvcmVJbmRleFtsYXllcklkXTtcbiAgICAgICAgYWZ0ZXJMYXllciA9IGFmdGVySW5kZXhbbGF5ZXJJZF07XG5cbiAgICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgaWYgcHJldmlvdXNseSBhZGRlZCAobmV3IG9yIG1vdmVkKVxuICAgICAgICBpZiAoY2xlYW5bbGF5ZXJJZF0gfHwgaXNFcXVhbChiZWZvcmVMYXllciwgYWZ0ZXJMYXllcikpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIElmIHNvdXJjZSwgc291cmNlLWxheWVyLCBvciB0eXBlIGhhdmUgY2hhbmdlcywgdGhlbiByZW1vdmUgdGhlIGxheWVyXG4gICAgICAgIC8vIGFuZCBhZGQgaXQgYmFjayAnZnJvbSBzY3JhdGNoJy5cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLnNvdXJjZSwgYWZ0ZXJMYXllci5zb3VyY2UpIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyWydzb3VyY2UtbGF5ZXInXSwgYWZ0ZXJMYXllclsnc291cmNlLWxheWVyJ10pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLnR5cGUsIGFmdGVyTGF5ZXIudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllcklkXX0pO1xuICAgICAgICAgICAgLy8gd2UgYWRkIHRoZSBsYXllciBiYWNrIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGl0IHdhcyBhbHJlYWR5IGluLCBzb1xuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIHVwZGF0ZSB0aGUgYHRyYWNrZXJgXG4gICAgICAgICAgICBpbnNlcnRCZWZvcmVMYXllcklkID0gdHJhY2tlclt0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQpICsgMV07XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLmFkZExheWVyLCBhcmdzOiBbYWZ0ZXJMYXllciwgaW5zZXJ0QmVmb3JlTGF5ZXJJZF19KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGF5b3V0LCBwYWludCwgZmlsdGVyLCBtaW56b29tLCBtYXh6b29tXG4gICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllci5sYXlvdXQsIGFmdGVyTGF5ZXIubGF5b3V0LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRMYXlvdXRQcm9wZXJ0eSk7XG4gICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllci5wYWludCwgYWZ0ZXJMYXllci5wYWludCwgY29tbWFuZHMsIGxheWVySWQsIG51bGwsIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5maWx0ZXIsIGFmdGVyTGF5ZXIuZmlsdGVyKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRGaWx0ZXIsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLmZpbHRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIubWluem9vbSwgYWZ0ZXJMYXllci5taW56b29tKSB8fCAhaXNFcXVhbChiZWZvcmVMYXllci5tYXh6b29tLCBhZnRlckxheWVyLm1heHpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldExheWVyWm9vbVJhbmdlLCBhcmdzOiBbbGF5ZXJJZCwgYWZ0ZXJMYXllci5taW56b29tLCBhZnRlckxheWVyLm1heHpvb21dfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgYWxsIG90aGVyIGxheWVyIHByb3BzLCBpbmNsdWRpbmcgcGFpbnQuKlxuICAgICAgICBmb3IgKHByb3AgaW4gYmVmb3JlTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYmVmb3JlTGF5ZXIuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdsYXlvdXQnIHx8IHByb3AgPT09ICdwYWludCcgfHwgcHJvcCA9PT0gJ2ZpbHRlcicgfHxcbiAgICAgICAgICAgICAgICBwcm9wID09PSAnbWV0YWRhdGEnIHx8IHByb3AgPT09ICdtaW56b29tJyB8fCBwcm9wID09PSAnbWF4em9vbScpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3AuaW5kZXhPZigncGFpbnQuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlTGF5ZXJbcHJvcF0sIGFmdGVyTGF5ZXJbcHJvcF0sIGNvbW1hbmRzLCBsYXllcklkLCBwcm9wLnNsaWNlKDYpLCBvcGVyYXRpb25zLnNldFBhaW50UHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNFcXVhbChiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldExheWVyUHJvcGVydHksIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlckxheWVyW3Byb3BdXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBhZnRlckxheWVyKSB7XG4gICAgICAgICAgICBpZiAoIWFmdGVyTGF5ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlTGF5ZXIuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdsYXlvdXQnIHx8IHByb3AgPT09ICdwYWludCcgfHwgcHJvcCA9PT0gJ2ZpbHRlcicgfHxcbiAgICAgICAgICAgICAgICBwcm9wID09PSAnbWV0YWRhdGEnIHx8IHByb3AgPT09ICdtaW56b29tJyB8fCBwcm9wID09PSAnbWF4em9vbScpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3AuaW5kZXhPZigncGFpbnQuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlTGF5ZXJbcHJvcF0sIGFmdGVyTGF5ZXJbcHJvcF0sIGNvbW1hbmRzLCBsYXllcklkLCBwcm9wLnNsaWNlKDYpLCBvcGVyYXRpb25zLnNldFBhaW50UHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNFcXVhbChiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldExheWVyUHJvcGVydHksIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlckxheWVyW3Byb3BdXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIERpZmYgdHdvIHN0eWxlc2hlZXRcbiAqXG4gKiBDcmVhdGVzIHNlbWFudGljbHkgYXdhcmUgZGlmZnMgdGhhdCBjYW4gZWFzaWx5IGJlIGFwcGxpZWQgYXQgcnVudGltZS5cbiAqIE9wZXJhdGlvbnMgcHJvZHVjZWQgYnkgdGhlIGRpZmYgY2xvc2VseSByZXNlbWJsZSB0aGUgbWFwYm94LWdsLWpzIEFQSS4gQW55XG4gKiBlcnJvciBjcmVhdGluZyB0aGUgZGlmZiB3aWxsIGZhbGwgYmFjayB0byB0aGUgJ3NldFN0eWxlJyBvcGVyYXRpb24uXG4gKlxuICogRXhhbXBsZSBkaWZmOlxuICogW1xuICogICAgIHsgY29tbWFuZDogJ3NldENvbnN0YW50JywgYXJnczogWydAd2F0ZXInLCAnIzAwMDBGRiddIH0sXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0UGFpbnRQcm9wZXJ0eScsIGFyZ3M6IFsnYmFja2dyb3VuZCcsICdiYWNrZ3JvdW5kLWNvbG9yJywgJ2JsYWNrJ10gfVxuICogXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFtiZWZvcmVdIHN0eWxlc2hlZXQgdG8gY29tcGFyZSBmcm9tXG4gKiBAcGFyYW0geyp9IGFmdGVyIHN0eWxlc2hlZXQgdG8gY29tcGFyZSB0b1xuICogQHJldHVybnMgQXJyYXkgbGlzdCBvZiBjaGFuZ2VzXG4gKi9cbmZ1bmN0aW9uIGRpZmZTdHlsZXMoYmVmb3JlLCBhZnRlcikge1xuICAgIGlmICghYmVmb3JlKSByZXR1cm4gW3tjb21tYW5kOiBvcGVyYXRpb25zLnNldFN0eWxlLCBhcmdzOiBbYWZ0ZXJdfV07XG5cbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIEhhbmRsZSBjaGFuZ2VzIHRvIHRvcC1sZXZlbCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUudmVyc2lvbiwgYWZ0ZXIudmVyc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLmNlbnRlciwgYWZ0ZXIuY2VudGVyKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRDZW50ZXIsIGFyZ3M6IFthZnRlci5jZW50ZXJdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS56b29tLCBhZnRlci56b29tKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRab29tLCBhcmdzOiBbYWZ0ZXIuem9vbV19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLmJlYXJpbmcsIGFmdGVyLmJlYXJpbmcpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEJlYXJpbmcsIGFyZ3M6IFthZnRlci5iZWFyaW5nXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUucGl0Y2gsIGFmdGVyLnBpdGNoKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRQaXRjaCwgYXJnczogW2FmdGVyLnBpdGNoXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuc3ByaXRlLCBhZnRlci5zcHJpdGUpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFNwcml0ZSwgYXJnczogW2FmdGVyLnNwcml0ZV19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLmdseXBocywgYWZ0ZXIuZ2x5cGhzKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRHbHlwaHMsIGFyZ3M6IFthZnRlci5nbHlwaHNdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS50cmFuc2l0aW9uLCBhZnRlci50cmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRUcmFuc2l0aW9uLCBhcmdzOiBbYWZ0ZXIudHJhbnNpdGlvbl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLmxpZ2h0LCBhZnRlci5saWdodCkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGlnaHQsIGFyZ3M6IFthZnRlci5saWdodF19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBjaGFuZ2VzIHRvIGBzb3VyY2VzYFxuICAgICAgICAvLyBJZiBhIHNvdXJjZSBpcyB0byBiZSByZW1vdmVkLCB3ZSBhbHNvLS1iZWZvcmUgdGhlIHJlbW92ZVNvdXJjZVxuICAgICAgICAvLyBjb21tYW5kLS1uZWVkIHRvIHJlbW92ZSBhbGwgdGhlIHN0eWxlIGxheWVycyB0aGF0IGRlcGVuZCBvbiBpdC5cbiAgICAgICAgY29uc3Qgc291cmNlc1JlbW92ZWQgPSB7fTtcblxuICAgICAgICAvLyBGaXJzdCBjb2xsZWN0IHRoZSB7YWRkLHJlbW92ZX1Tb3VyY2UgY29tbWFuZHNcbiAgICAgICAgY29uc3QgcmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyA9IFtdO1xuICAgICAgICBkaWZmU291cmNlcyhiZWZvcmUuc291cmNlcywgYWZ0ZXIuc291cmNlcywgcmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuXG4gICAgICAgIC8vIFB1c2ggYSByZW1vdmVMYXllciBjb21tYW5kIGZvciBlYWNoIHN0eWxlIGxheWVyIHRoYXQgZGVwZW5kcyBvbiBhXG4gICAgICAgIC8vIHNvdXJjZSB0aGF0J3MgYmVpbmcgcmVtb3ZlZC5cbiAgICAgICAgLy8gQWxzbywgZXhjbHVkZSBhbnkgc3VjaCBsYXllcnMgdGhlbSBmcm9tIHRoZSBpbnB1dCB0byBgZGlmZkxheWVyc2BcbiAgICAgICAgLy8gYmVsb3csIHNvIHRoYXQgZGlmZkxheWVycyBwcm9kdWNlcyB0aGUgYXBwcm9wcmlhdGUgYGFkZExheWVyc2BcbiAgICAgICAgLy8gY29tbWFuZFxuICAgICAgICBjb25zdCBiZWZvcmVMYXllcnMgPSBbXTtcbiAgICAgICAgaWYgKGJlZm9yZS5sYXllcnMpIHtcbiAgICAgICAgICAgIGJlZm9yZS5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlc1JlbW92ZWRbbGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnJlbW92ZUxheWVyLCBhcmdzOiBbbGF5ZXIuaWRdfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMuY29uY2F0KHJlbW92ZU9yQWRkU291cmNlQ29tbWFuZHMpO1xuXG4gICAgICAgIC8vIEhhbmRsZSBjaGFuZ2VzIHRvIGBsYXllcnNgXG4gICAgICAgIGRpZmZMYXllcnMoYmVmb3JlTGF5ZXJzLCBhZnRlci5sYXllcnMsIGNvbW1hbmRzKTtcblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHNldFN0eWxlXG4gICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGNvbXB1dGUgc3R5bGUgZGlmZjonLCBlKTtcbiAgICAgICAgY29tbWFuZHMgPSBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZHM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpZmZTdHlsZXM7XG5leHBvcnQge29wZXJhdGlvbnN9O1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBHcmlkSW5kZXggaXMgYSBkYXRhIHN0cnVjdHVyZSBmb3IgdGVzdGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mXG4gKiBjaXJjbGVzIGFuZCByZWN0YW5nbGVzIGluIGEgMmQgcGxhbmUuXG4gKiBJdCBpcyBvcHRpbWl6ZWQgZm9yIHJhcGlkIGluc2VydGlvbiBhbmQgcXVlcnlpbmcuXG4gKiBHcmlkSW5kZXggc3BsaXRzIHRoZSBwbGFuZSBpbnRvIGEgc2V0IG9mIFwiY2VsbHNcIiBhbmQga2VlcHMgdHJhY2tcbiAqIG9mIHdoaWNoIGdlb21ldHJpZXMgaW50ZXJzZWN0IHdpdGggZWFjaCBjZWxsLiBBdCBxdWVyeSB0aW1lLFxuICogZnVsbCBnZW9tZXRyeSBjb21wYXJpc29ucyBhcmUgb25seSBkb25lIGZvciBpdGVtcyB0aGF0IHNoYXJlXG4gKiBhdCBsZWFzdCBvbmUgY2VsbC4gQXMgbG9uZyBhcyB0aGUgZ2VvbWV0cmllcyBhcmUgcmVsYXRpdmVseVxuICogdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgcGxhbmUsIHRoaXMgZ3JlYXRseSByZWR1Y2VzXG4gKiB0aGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBHcmlkSW5kZXgge1xuICAgIGNpcmNsZUtleXM6IEFycmF5PGFueT47XG4gICAgYm94S2V5czogQXJyYXk8YW55PjtcbiAgICBib3hDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgY2lyY2xlQ2VsbHM6IEFycmF5PEFycmF5PG51bWJlcj4+O1xuICAgIGJib3hlczogQXJyYXk8bnVtYmVyPjtcbiAgICBjaXJjbGVzOiBBcnJheTxudW1iZXI+O1xuICAgIHhDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB5Q2VsbENvdW50OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB4U2NhbGU6IG51bWJlcjtcbiAgICB5U2NhbGU6IG51bWJlcjtcbiAgICBib3hVaWQ6IG51bWJlcjtcbiAgICBjaXJjbGVVaWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgY2VsbFNpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBib3hDZWxscyA9IHRoaXMuYm94Q2VsbHMgPSBbXTtcbiAgICAgICAgY29uc3QgY2lyY2xlQ2VsbHMgPSB0aGlzLmNpcmNsZUNlbGxzID0gW107XG5cbiAgICAgICAgLy8gTW9yZSBjZWxscyAtPiBmZXdlciBnZW9tZXRyaWVzIHRvIGNoZWNrIHBlciBjZWxsLCBidXQgaXRlbXMgdGVuZFxuICAgICAgICAvLyB0byBiZSBzcGxpdCBhY3Jvc3MgbW9yZSBjZWxscy5cbiAgICAgICAgLy8gU3dlZXQgc3BvdCBhbGxvd3MgbW9zdCBzbWFsbCBpdGVtcyB0byBmaXQgaW4gb25lIGNlbGxcbiAgICAgICAgdGhpcy54Q2VsbENvdW50ID0gTWF0aC5jZWlsKHdpZHRoIC8gY2VsbFNpemUpO1xuICAgICAgICB0aGlzLnlDZWxsQ291bnQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gY2VsbFNpemUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy54Q2VsbENvdW50ICogdGhpcy55Q2VsbENvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGJveENlbGxzLnB1c2goW10pO1xuICAgICAgICAgICAgY2lyY2xlQ2VsbHMucHVzaChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzID0gW107XG4gICAgICAgIHRoaXMuYm94S2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmJib3hlcyA9IFtdO1xuICAgICAgICB0aGlzLmNpcmNsZXMgPSBbXTtcblxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHRoaXMueENlbGxDb3VudCAvIHdpZHRoO1xuICAgICAgICB0aGlzLnlTY2FsZSA9IHRoaXMueUNlbGxDb3VudCAvIGhlaWdodDtcbiAgICAgICAgdGhpcy5ib3hVaWQgPSAwO1xuICAgICAgICB0aGlzLmNpcmNsZVVpZCA9IDA7XG4gICAgfVxuXG4gICAga2V5c0xlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm94S2V5cy5sZW5ndGggKyB0aGlzLmNpcmNsZUtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGluc2VydChrZXk6IGFueSwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5faW5zZXJ0Qm94Q2VsbCwgdGhpcy5ib3hVaWQrKyk7XG4gICAgICAgIHRoaXMuYm94S2V5cy5wdXNoKGtleSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeDEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHkxKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4Mik7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTIpO1xuICAgIH1cblxuICAgIGluc2VydENpcmNsZShrZXk6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeCAtIHJhZGl1cywgeSAtIHJhZGl1cywgeCArIHJhZGl1cywgeSArIHJhZGl1cywgdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCwgdGhpcy5jaXJjbGVVaWQrKyk7XG4gICAgICAgIHRoaXMuY2lyY2xlS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHgpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaCh5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2gocmFkaXVzKTtcbiAgICB9XG5cbiAgICBfaW5zZXJ0Qm94Q2VsbCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlciwgdWlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfaW5zZXJ0Q2lyY2xlQ2VsbCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlciwgdWlkOiBudW1iZXIpICB7XG4gICAgICAgIHRoaXMuY2lyY2xlQ2VsbHNbY2VsbEluZGV4XS5wdXNoKHVpZCk7XG4gICAgfVxuXG4gICAgX3F1ZXJ5KHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGhpdFRlc3Q6IGJvb2xlYW4sIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAoeDEgPD0gMCAmJiB5MSA8PSAwICYmIHRoaXMud2lkdGggPD0geDIgJiYgdGhpcy5oZWlnaHQgPD0geTIpIHtcbiAgICAgICAgICAgIGlmIChoaXRUZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBib3hVaWQgPSAwOyBib3hVaWQgPCB0aGlzLmJveEtleXMubGVuZ3RoOyBib3hVaWQrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmJveEtleXNbYm94VWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHRoaXMuYmJveGVzW2JveFVpZCAqIDRdLFxuICAgICAgICAgICAgICAgICAgICB5MTogdGhpcy5iYm94ZXNbYm94VWlkICogNCArIDFdLFxuICAgICAgICAgICAgICAgICAgICB4MjogdGhpcy5iYm94ZXNbYm94VWlkICogNCArIDJdLFxuICAgICAgICAgICAgICAgICAgICB5MjogdGhpcy5iYm94ZXNbYm94VWlkICogNCArIDNdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBjaXJjbGVVaWQgPSAwOyBjaXJjbGVVaWQgPCB0aGlzLmNpcmNsZUtleXMubGVuZ3RoOyBjaXJjbGVVaWQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogM107XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzICsgMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAyXTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGhpcy5jaXJjbGVLZXlzW2NpcmNsZVVpZF0sXG4gICAgICAgICAgICAgICAgICAgIHgxOiB4IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB5MTogeSAtIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeDI6IHggKyByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkyOiB5ICsgcmFkaXVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlID8gcmVzdWx0LmZpbHRlcihwcmVkaWNhdGUpIDogcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlBcmdzID0ge1xuICAgICAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9xdWVyeUNlbGwsIHJlc3VsdCwgcXVlcnlBcmdzLCBwcmVkaWNhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIGhpdFRlc3Q6IGJvb2xlYW4sIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICAvLyBJbnNlcnQgY2lyY2xlIGludG8gZ3JpZCBmb3IgYWxsIGNlbGxzIGluIHRoZSBjaXJjdW1zY3JpYmluZyBzcXVhcmVcbiAgICAgICAgLy8gSXQncyBtb3JlIHRoYW4gbmVjZXNzYXJ5IChieSBhIGZhY3RvciBvZiA0L1BJKSwgYnV0IGZhc3QgdG8gaW5zZXJ0XG4gICAgICAgIGNvbnN0IHgxID0geCAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeDIgPSB4ICsgcmFkaXVzO1xuICAgICAgICBjb25zdCB5MSA9IHkgLSByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkyID0geSArIHJhZGl1cztcbiAgICAgICAgaWYgKHgyIDwgMCB8fCB4MSA+IHRoaXMud2lkdGggfHwgeTIgPCAwIHx8IHkxID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBoaXRUZXN0ID8gZmFsc2UgOiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJveCBxdWVyeSBlYXJseSBleGl0cyBpZiB0aGUgYm91bmRpbmcgYm94IGlzIGxhcmdlciB0aGFuIHRoZSBncmlkLCBidXQgd2UgZG9uJ3QgZG9cbiAgICAgICAgLy8gdGhlIGVxdWl2YWxlbnQgY2FsY3VsYXRpb24gZm9yIGNpcmNsZSBxdWVyaWVzIGJlY2F1c2UgZWFybHkgZXhpdCBpcyBsZXNzIGxpa2VseVxuICAgICAgICAvLyBhbmQgdGhlIGNhbGN1bGF0aW9uIGlzIG1vcmUgZXhwZW5zaXZlXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICBoaXRUZXN0LFxuICAgICAgICAgICAgY2lyY2xlOiB7eCwgeSwgcmFkaXVzfSxcbiAgICAgICAgICAgIHNlZW5VaWRzOiB7Ym94OiB7fSwgY2lyY2xlOiB7fX1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbENpcmNsZSwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgIHJldHVybiBoaXRUZXN0ID8gcmVzdWx0Lmxlbmd0aCA+IDAgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgcHJlZGljYXRlPzogYW55KTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIGZhbHNlLCBwcmVkaWNhdGUpOiBhbnkpO1xuICAgIH1cblxuICAgIGhpdFRlc3QoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgcHJlZGljYXRlPzogYW55KTogYm9vbGVhbiAge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5KHgxLCB5MSwgeDIsIHkyLCB0cnVlLCBwcmVkaWNhdGUpOiBhbnkpO1xuICAgIH1cblxuICAgIGhpdFRlc3RDaXJjbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeUNpcmNsZSh4LCB5LCByYWRpdXMsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2VsbCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlciwgcmVzdWx0OiBhbnksIHF1ZXJ5QXJnczogYW55LCBwcmVkaWNhdGU/OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VlblVpZHMgPSBxdWVyeUFyZ3Muc2VlblVpZHM7XG4gICAgICAgIGNvbnN0IGJveENlbGwgPSB0aGlzLmJveENlbGxzW2NlbGxJbmRleF07XG4gICAgICAgIGlmIChib3hDZWxsICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBiYm94ZXMgPSB0aGlzLmJib3hlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgYm94VWlkIG9mIGJveENlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmJveFtib3hVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmJveFtib3hVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm94VWlkICogNDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh4MSA8PSBiYm94ZXNbb2Zmc2V0ICsgMl0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeTEgPD0gYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHgyID49IGJib3hlc1tvZmZzZXQgKyAwXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MiA+PSBiYm94ZXNbb2Zmc2V0ICsgMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodGhpcy5ib3hLZXlzW2JveFVpZF0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5QXJncy5oaXRUZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmJveEtleXNbYm94VWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IGJib3hlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogYmJveGVzW29mZnNldCArIDNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2lyY2xlQ2VsbCA9IHRoaXMuY2lyY2xlQ2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGNpcmNsZUNlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZXMgPSB0aGlzLmNpcmNsZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNpcmNsZVVpZCBvZiBjaXJjbGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5jaXJjbGVbY2lyY2xlVWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5jaXJjbGVbY2lyY2xlVWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGNpcmNsZVVpZCAqIDM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodGhpcy5jaXJjbGVLZXlzW2NpcmNsZVVpZF0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5QXJncy5oaXRUZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBjaXJjbGVzW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IGNpcmNsZXNbb2Zmc2V0ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gY2lyY2xlc1tvZmZzZXQgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdGhpcy5jaXJjbGVLZXlzW2NpcmNsZVVpZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOiB4IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogeSAtIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6IHggKyByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiB5ICsgcmFkaXVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsQ2lyY2xlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBjaXJjbGUgPSBxdWVyeUFyZ3MuY2lyY2xlO1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJib3hlc1tvZmZzZXQgKyAwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJib3hlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJib3hlc1tvZmZzZXQgKyAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJib3hlc1tvZmZzZXQgKyAzXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlQ2VsbCA9IHRoaXMuY2lyY2xlQ2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGNpcmNsZUNlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZXMgPSB0aGlzLmNpcmNsZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNpcmNsZVVpZCBvZiBjaXJjbGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5jaXJjbGVbY2lyY2xlVWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5jaXJjbGVbY2lyY2xlVWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGNpcmNsZVVpZCAqIDM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVzQ29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLngsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS5yYWRpdXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodGhpcy5jaXJjbGVLZXlzW2NpcmNsZVVpZF0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9mb3JFYWNoQ2VsbCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBmbjogYW55LCBhcmcxOiBhbnksIGFyZzI/OiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBjeDEgPSB0aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHgxKTtcbiAgICAgICAgY29uc3QgY3kxID0gdGhpcy5fY29udmVydFRvWUNlbGxDb29yZCh5MSk7XG4gICAgICAgIGNvbnN0IGN4MiA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDIpO1xuICAgICAgICBjb25zdCBjeTIgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkyKTtcblxuICAgICAgICBmb3IgKGxldCB4ID0gY3gxOyB4IDw9IGN4MjsgeCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB5ID0gY3kxOyB5IDw9IGN5MjsgeSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gdGhpcy54Q2VsbENvdW50ICogeSArIHg7XG4gICAgICAgICAgICAgICAgaWYgKGZuLmNhbGwodGhpcywgeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgYXJnMSwgYXJnMiwgcHJlZGljYXRlKSkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLnhDZWxsQ291bnQgLSAxLCBNYXRoLmZsb29yKHggKiB0aGlzLnhTY2FsZSkpKTtcbiAgICB9XG5cbiAgICBfY29udmVydFRvWUNlbGxDb29yZCh5OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueUNlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeSAqIHRoaXMueVNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jaXJjbGVzQ29sbGlkZSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCByMTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCByMjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGR4ID0geDIgLSB4MTtcbiAgICAgICAgY29uc3QgZHkgPSB5MiAtIHkxO1xuICAgICAgICBjb25zdCBib3RoUmFkaWkgPSByMSArIHIyO1xuICAgICAgICByZXR1cm4gKGJvdGhSYWRpaSAqIGJvdGhSYWRpaSkgPiAoZHggKiBkeCArIGR5ICogZHkpO1xuICAgIH1cblxuICAgIF9jaXJjbGVBbmRSZWN0Q29sbGlkZShjaXJjbGVYOiBudW1iZXIsIGNpcmNsZVk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaGFsZlJlY3RXaWR0aCA9ICh4MiAtIHgxKSAvIDI7XG4gICAgICAgIGNvbnN0IGRpc3RYID0gTWF0aC5hYnMoY2lyY2xlWCAtICh4MSArIGhhbGZSZWN0V2lkdGgpKTtcbiAgICAgICAgaWYgKGRpc3RYID4gKGhhbGZSZWN0V2lkdGggKyByYWRpdXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYWxmUmVjdEhlaWdodCA9ICh5MiAtIHkxKSAvIDI7XG4gICAgICAgIGNvbnN0IGRpc3RZID0gTWF0aC5hYnMoY2lyY2xlWSAtICh5MSArIGhhbGZSZWN0SGVpZ2h0KSk7XG4gICAgICAgIGlmIChkaXN0WSA+IChoYWxmUmVjdEhlaWdodCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0WCA8PSBoYWxmUmVjdFdpZHRoIHx8IGRpc3RZIDw9IGhhbGZSZWN0SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR4ID0gZGlzdFggLSBoYWxmUmVjdFdpZHRoO1xuICAgICAgICBjb25zdCBkeSA9IGRpc3RZIC0gaGFsZlJlY3RIZWlnaHQ7XG4gICAgICAgIHJldHVybiAoZHggKiBkeCArIGR5ICogZHkgPD0gKHJhZGl1cyAqIHJhZGl1cykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JpZEluZGV4O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge21hdDQsIHZlYzR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgKiBhcyBzeW1ib2xTaXplIGZyb20gJy4vc3ltYm9sX3NpemUnO1xuaW1wb3J0IHthZGREeW5hbWljQXR0cmlidXRlc30gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcmVuZGVyL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEdseXBoT2Zmc2V0QXJyYXksXG4gICAgU3ltYm9sTGluZVZlcnRleEFycmF5LFxuICAgIFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB7V3JpdGluZ01vZGV9IGZyb20gJy4uL3N5bWJvbC9zaGFwaW5nJztcblxuZXhwb3J0IHt1cGRhdGVMaW5lTGFiZWxzLCBoaWRlR2x5cGhzLCBnZXRMYWJlbFBsYW5lTWF0cml4LCBnZXRHbENvb3JkTWF0cml4LCBwcm9qZWN0LCBwbGFjZUZpcnN0QW5kTGFzdEdseXBoLCB4eVRyYW5zZm9ybU1hdDR9O1xuXG4vKlxuICogIyBPdmVydmlldyBvZiBjb29yZGluYXRlIHNwYWNlc1xuICpcbiAqICMjIFRpbGUgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggbGFiZWwgaGFzIGFuIGFuY2hvci4gU29tZSBsYWJlbHMgaGF2ZSBjb3JyZXNwb25kaW5nIGxpbmUgZ2VvbWV0cmllcy5cbiAqIFRoZSBwb2ludHMgZm9yIGJvdGggYW5jaG9ycyBhbmQgbGluZXMgYXJlIHN0b3JlZCBpbiB0aWxlIHVuaXRzLiBFYWNoIHRpbGUgaGFzIGl0J3Mgb3duXG4gKiBjb29yZGluYXRlIHNwYWNlIGdvaW5nIGZyb20gKDAsIDApIGF0IHRoZSB0b3AgbGVmdCB0byAoRVhURU5ULCBFWFRFTlQpIGF0IHRoZSBib3R0b20gcmlnaHQuXG4gKlxuICogIyMgR0wgY29vcmRpbmF0ZSBzcGFjZVxuICogQXQgdGhlIGVuZCBvZiBldmVyeXRoaW5nLCB0aGUgdmVydGV4IHNoYWRlciBuZWVkcyB0byBwcm9kdWNlIGEgcG9zaXRpb24gaW4gR0wgY29vcmRpbmF0ZSBzcGFjZSxcbiAqIHdoaWNoIGlzICgtMSwgMSkgYXQgdGhlIHRvcCBsZWZ0IGFuZCAoMSwgLTEpIGluIHRoZSBib3R0b20gcmlnaHQuXG4gKlxuICogIyMgTWFwIHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VzXG4gKiBFYWNoIHRpbGUgaGFzIGEgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZS4gSXQncyBqdXN0IHRoZSB0aWxlIHVuaXRzIHNjYWxlZCBzbyB0aGF0IG9uZSB1bml0IGlzXG4gKiB3aGF0ZXZlciBjb3VudHMgYXMgMSBwaXhlbCBhdCB0aGUgY3VycmVudCB6b29tLlxuICogVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9bWFwLCByb3RhdGlvbi1hbGlnbm1lbnQ9bWFwXG4gKlxuICogIyMgUm90YXRlZCBtYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIExpa2UgdGhlIGFib3ZlLCBidXQgcm90YXRlZCBzbyBheGlzIG9mIHRoZSBzcGFjZSBhcmUgYWxpZ25lZCB3aXRoIHRoZSB2aWV3cG9ydCBpbnN0ZWFkIG9mIHRoZSB0aWxlLlxuICogVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9bWFwLCByb3RhdGlvbi1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKiAjIyBWaWV3cG9ydCBwaXhlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAoMCwgMCkgaXMgYXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBjYW52YXMgYW5kIChwaXhlbFdpZHRoLCBwaXhlbEhlaWdodCkgaXMgYXQgdGhlIGJvdHRvbSByaWdodCBjb3JuZXJcbiAqIG9mIHRoZSBjYW52YXMuIFRoaXMgc3BhY2UgaXMgdXNlZCBmb3IgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0XG4gKlxuICpcbiAqICMgVmVydGV4IHByb2plY3Rpb25cbiAqIEl0IGdvZXMgcm91Z2hseSBsaWtlIHRoaXM6XG4gKiAxLiBwcm9qZWN0IHRoZSBhbmNob3IgYW5kIGxpbmUgZnJvbSB0aWxlIHVuaXRzIGludG8gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZVxuICogICAgICAtIG1hcCBwaXhlbCBzcGFjZSAgICAgICAgICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqICAgICAgLSByb3RhdGVkIG1hcCBwaXhlbCBzcGFjZSAgIHBpdGNoLWFsaWdubWVudD1tYXAgICAgICAgICByb3RhdGlvbi1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqICAgICAgLSB2aWV3cG9ydCBwaXhlbCBzcGFjZSAgICAgIHBpdGNoLWFsaWdubWVudD12aWV3cG9ydCAgICByb3RhdGlvbi1hbGlnbm1lbnQ9KlxuICogMi4gaWYgdGhlIGxhYmVsIGZvbGxvd3MgYSBsaW5lLCBmaW5kIHRoZSBwb2ludCBhbG9uZyB0aGUgbGluZSB0aGF0IGlzIHRoZSBjb3JyZWN0IGRpc3RhbmNlIGZyb20gdGhlIGFuY2hvci5cbiAqIDMuIGFkZCB0aGUgZ2x5cGgncyBjb3JuZXIgb2Zmc2V0IHRvIHRoZSBwb2ludCBmcm9tIHN0ZXAgM1xuICogNC4gY29udmVydCBmcm9tIHRoZSBsYWJlbCBjb29yZGluYXRlIHNwYWNlIHRvIGdsIGNvb3JkaW5hdGVzXG4gKlxuICogRm9yIGhvcml6b250YWwgbGFiZWxzIHdlIHdhbnQgdG8gZG8gc3RlcCAxIGluIHRoZSBzaGFkZXIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKG5vIGNwdSB3b3JrKS5cbiAqICAgICAgVGhpcyBpcyB3aGF0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgaXMgdXNlZCBmb3IuXG4gKiBGb3IgbGFiZWxzIGFsaWduZWQgd2l0aCBsaW5lcyB3ZSBoYXZlIHRvIHN0ZXBzIDEgYW5kIDIgb24gdGhlIGNwdSBzaW5jZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgbGluZSBnZW9tZXRyeS5cbiAqICAgICAgVGhpcyBpcyB3aGF0IGB1cGRhdGVMaW5lTGFiZWxzKC4uLilgIGRvZXMuXG4gKiAgICAgIFNpbmNlIHRoZSBjb252ZXJzaW9uIGlzIGhhbmRsZWQgb24gdGhlIGNwdSB3ZSBqdXN0IHNldCBgdV9sYWJlbF9wbGFuZV9tYXRyaXhgIHRvIGFuIGlkZW50aXR5IG1hdHJpeC5cbiAqXG4gKiBTdGVwcyAzIGFuZCA0IGFyZSBkb25lIGluIHRoZSBzaGFkZXJzIGZvciBhbGwgbGFiZWxzLlxuICovXG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGlsZSB1bml0cyB0byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlLlxuICovXG5mdW5jdGlvbiBnZXRMYWJlbFBsYW5lTWF0cml4KHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcikge1xuICAgIGNvbnN0IG0gPSBtYXQ0LmNyZWF0ZSgpO1xuICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSAvIHBpeGVsc1RvVGlsZVVuaXRzLCAxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgdHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdDQubXVsdGlwbHkobSwgdHJhbnNmb3JtLmxhYmVsUGxhbmVNYXRyaXgsIHBvc01hdHJpeCk7XG4gICAgfVxuICAgIHJldHVybiBtO1xufVxuXG4vKlxuICogUmV0dXJucyBhIG1hdHJpeCBmb3IgY29udmVydGluZyBmcm9tIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRzLlxuICovXG5mdW5jdGlvbiBnZXRHbENvb3JkTWF0cml4KHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcikge1xuICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgY29uc3QgbSA9IG1hdDQuY2xvbmUocG9zTWF0cml4KTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbcGl4ZWxzVG9UaWxlVW5pdHMsIHBpeGVsc1RvVGlsZVVuaXRzLCAxXSk7XG4gICAgICAgIGlmICghcm90YXRlV2l0aE1hcCkge1xuICAgICAgICAgICAgbWF0NC5yb3RhdGVaKG0sIG0sIC10cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb2plY3QocG9pbnQ6IFBvaW50LCBtYXRyaXg6IG1hdDQpIHtcbiAgICBjb25zdCBwb3MgPSBbcG9pbnQueCwgcG9pbnQueSwgMCwgMV07XG4gICAgeHlUcmFuc2Zvcm1NYXQ0KHBvcywgcG9zLCBtYXRyaXgpO1xuICAgIGNvbnN0IHcgPSBwb3NbM107XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IG5ldyBQb2ludChwb3NbMF0gLyB3LCBwb3NbMV0gLyB3KSxcbiAgICAgICAgc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOiB3XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaXNWaXNpYmxlKGFuY2hvclBvczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgY2xpcHBpbmdCdWZmZXI6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCB4ID0gYW5jaG9yUG9zWzBdIC8gYW5jaG9yUG9zWzNdO1xuICAgIGNvbnN0IHkgPSBhbmNob3JQb3NbMV0gLyBhbmNob3JQb3NbM107XG4gICAgY29uc3QgaW5QYWRkZWRWaWV3cG9ydCA9IChcbiAgICAgICAgeCA+PSAtY2xpcHBpbmdCdWZmZXJbMF0gJiZcbiAgICAgICAgeCA8PSBjbGlwcGluZ0J1ZmZlclswXSAmJlxuICAgICAgICB5ID49IC1jbGlwcGluZ0J1ZmZlclsxXSAmJlxuICAgICAgICB5IDw9IGNsaXBwaW5nQnVmZmVyWzFdKTtcbiAgICByZXR1cm4gaW5QYWRkZWRWaWV3cG9ydDtcbn1cblxuLypcbiAqICBVcGRhdGUgdGhlIGBkeW5hbWljTGF5b3V0VmVydGV4QnVmZmVyYCBmb3IgdGhlIGJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGdseXBoIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgbWFwIHZpZXcuXG4gKiAgVGhpcyBpcyBvbmx5IHJ1biBvbiBsYWJlbHMgdGhhdCBhcmUgYWxpZ25lZCB3aXRoIGxpbmVzLiBIb3Jpem9udGFsIGxhYmVscyBhcmUgaGFuZGxlZCBlbnRpcmVseSBpbiB0aGUgc2hhZGVyLlxuICovXG5mdW5jdGlvbiB1cGRhdGVMaW5lTGFiZWxzKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGV4dDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xDb29yZE1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwVXByaWdodDogYm9vbGVhbikge1xuXG4gICAgY29uc3Qgc2l6ZURhdGEgPSBpc1RleHQgPyBidWNrZXQudGV4dFNpemVEYXRhIDogYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICBjb25zdCBwYXJ0aWFsbHlFdmFsdWF0ZWRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhLCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcblxuICAgIGNvbnN0IGNsaXBwaW5nQnVmZmVyID0gWzI1NiAvIHBhaW50ZXIud2lkdGggKiAyICsgMSwgMjU2IC8gcGFpbnRlci5oZWlnaHQgKiAyICsgMV07XG5cbiAgICBjb25zdCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkgPSBpc1RleHQgP1xuICAgICAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkgOlxuICAgICAgICBidWNrZXQuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmNsZWFyKCk7XG5cbiAgICBjb25zdCBsaW5lVmVydGV4QXJyYXkgPSBidWNrZXQubGluZVZlcnRleEFycmF5O1xuICAgIGNvbnN0IHBsYWNlZFN5bWJvbHMgPSBpc1RleHQgPyBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheSA6IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5O1xuXG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSBwYWludGVyLnRyYW5zZm9ybS53aWR0aCAvIHBhaW50ZXIudHJhbnNmb3JtLmhlaWdodDtcblxuICAgIGxldCB1c2VWZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwbGFjZWRTeW1ib2xzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbDogYW55ID0gcGxhY2VkU3ltYm9scy5nZXQocyk7XG4gICAgICAgIC8vIERvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3IgdmVydGljYWwgZ2x5cGhzIHVubGVzcyB0aGUgcHJldmlvdXMgc3ltYm9sIHdhcyBob3Jpem9udGFsXG4gICAgICAgIC8vIGFuZCB3ZSBkZXRlcm1pbmVkIHRoYXQgdmVydGljYWwgZ2x5cGhzIHdlcmUgbmVjZXNzYXJ5LlxuICAgICAgICAvLyBBbHNvIGRvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3Igc3ltYm9scyB0aGF0IGFyZSBjb2xsaWRlZCBhbmQgZnVsbHkgZmFkZWQgb3V0XG4gICAgICAgIGlmIChzeW1ib2wuaGlkZGVuIHx8IHN5bWJvbC53cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgJiYgIXVzZVZlcnRpY2FsKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBd2t3YXJkLi4uIGJ1dCB3ZSdyZSBjb3VudGluZyBvbiB0aGUgcGFpcmVkIFwidmVydGljYWxcIiBzeW1ib2wgY29taW5nIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBob3Jpem9udGFsIGNvdW50ZXJwYXJ0XG4gICAgICAgIHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yUG9zID0gW3N5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChhbmNob3JQb3MsIGFuY2hvclBvcywgcG9zTWF0cml4KTtcblxuICAgICAgICAvLyBEb24ndCBib3RoZXIgY2FsY3VsYXRpbmcgdGhlIGNvcnJlY3QgcG9pbnQgZm9yIGludmlzaWJsZSBsYWJlbHMuXG4gICAgICAgIGlmICghaXNWaXNpYmxlKGFuY2hvclBvcywgY2xpcHBpbmdCdWZmZXIpKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgPSBhbmNob3JQb3NbM107XG4gICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSAwLjUgKyAwLjUgKiAoY2FtZXJhVG9BbmNob3JEaXN0YW5jZSAvIHBhaW50ZXIudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO1xuXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKHNpemVEYXRhLCBwYXJ0aWFsbHlFdmFsdWF0ZWRTaXplLCBzeW1ib2wpO1xuICAgICAgICBjb25zdCBwaXRjaFNjYWxlZEZvbnRTaXplID0gcGl0Y2hXaXRoTWFwID9cbiAgICAgICAgICAgIGZvbnRTaXplICogcGVyc3BlY3RpdmVSYXRpbyA6XG4gICAgICAgICAgICBmb250U2l6ZSAvIHBlcnNwZWN0aXZlUmF0aW87XG5cbiAgICAgICAgY29uc3QgdGlsZUFuY2hvclBvaW50ID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgIGNvbnN0IGFuY2hvclBvaW50ID0gcHJvamVjdCh0aWxlQW5jaG9yUG9pbnQsIGxhYmVsUGxhbmVNYXRyaXgpLnBvaW50O1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uQ2FjaGUgPSB7fTtcblxuICAgICAgICBjb25zdCBwbGFjZVVuZmxpcHBlZDogYW55ID0gcGxhY2VHbHlwaHNBbG9uZ0xpbmUoc3ltYm9sLCBwaXRjaFNjYWxlZEZvbnRTaXplLCBmYWxzZSAvKnVuZmxpcHBlZCovLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LFxuICAgICAgICAgICAgYnVja2V0LmdseXBoT2Zmc2V0QXJyYXksIGxpbmVWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBwcm9qZWN0aW9uQ2FjaGUsIGFzcGVjdFJhdGlvKTtcblxuICAgICAgICB1c2VWZXJ0aWNhbCA9IHBsYWNlVW5mbGlwcGVkLnVzZVZlcnRpY2FsO1xuXG4gICAgICAgIGlmIChwbGFjZVVuZmxpcHBlZC5ub3RFbm91Z2hSb29tIHx8IHVzZVZlcnRpY2FsIHx8XG4gICAgICAgICAgICAocGxhY2VVbmZsaXBwZWQubmVlZHNGbGlwcGluZyAmJlxuICAgICAgICAgICAgIHBsYWNlR2x5cGhzQWxvbmdMaW5lKHN5bWJvbCwgcGl0Y2hTY2FsZWRGb250U2l6ZSwgdHJ1ZSAvKmZsaXBwZWQqLywga2VlcFVwcmlnaHQsIHBvc01hdHJpeCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgICAgICAgICAgYnVja2V0LmdseXBoT2Zmc2V0QXJyYXksIGxpbmVWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBwcm9qZWN0aW9uQ2FjaGUsIGFzcGVjdFJhdGlvKS5ub3RFbm91Z2hSb29tKSkge1xuICAgICAgICAgICAgaGlkZUdseXBocyhzeW1ib2wubnVtR2x5cGhzLCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBidWNrZXQuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoZm9udFNjYWxlOiBudW1iZXIsIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXksIGxpbmVPZmZzZXRYOiBudW1iZXIsIGxpbmVPZmZzZXRZOiBudW1iZXIsIGZsaXA6IGJvb2xlYW4sIGFuY2hvclBvaW50OiBQb2ludCwgdGlsZUFuY2hvclBvaW50OiBQb2ludCwgc3ltYm9sOiBhbnksIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4OiBtYXQ0LCBwcm9qZWN0aW9uQ2FjaGU6IGFueSwgcmV0dXJuVGlsZURpc3RhbmNlOiBib29sZWFuKSB7XG4gICAgY29uc3QgZ2x5cGhFbmRJbmRleCA9IHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXggKyBzeW1ib2wubnVtR2x5cGhzO1xuICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4O1xuICAgIGNvbnN0IGxpbmVFbmRJbmRleCA9IHN5bWJvbC5saW5lU3RhcnRJbmRleCArIHN5bWJvbC5saW5lTGVuZ3RoO1xuXG4gICAgY29uc3QgZmlyc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChzeW1ib2wuZ2x5cGhTdGFydEluZGV4KTtcbiAgICBjb25zdCBsYXN0R2x5cGhPZmZzZXQgPSBnbHlwaE9mZnNldEFycmF5LmdldG9mZnNldFgoZ2x5cGhFbmRJbmRleCAtIDEpO1xuXG4gICAgY29uc3QgZmlyc3RQbGFjZWRHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZmlyc3RHbHlwaE9mZnNldCwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wuc2VnbWVudCxcbiAgICAgICAgbGluZVN0YXJ0SW5kZXgsIGxpbmVFbmRJbmRleCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUsIHJldHVyblRpbGVEaXN0YW5jZSk7XG4gICAgaWYgKCFmaXJzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGxhc3RQbGFjZWRHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogbGFzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgcmV0dXJuVGlsZURpc3RhbmNlKTtcbiAgICBpZiAoIWxhc3RQbGFjZWRHbHlwaClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4ge2ZpcnN0OiBmaXJzdFBsYWNlZEdseXBoLCBsYXN0OiBsYXN0UGxhY2VkR2x5cGh9O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlc09yaWVudGF0aW9uQ2hhbmdlKHdyaXRpbmdNb2RlLCBmaXJzdFBvaW50LCBsYXN0UG9pbnQsIGFzcGVjdFJhdGlvKSB7XG4gICAgaWYgKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsKSB7XG4gICAgICAgIC8vIE9uIHRvcCBvZiBjaG9vc2luZyB3aGV0aGVyIHRvIGZsaXAsIGNob29zZSB3aGV0aGVyIHRvIHJlbmRlciB0aGlzIHZlcnNpb24gb2YgdGhlIGdseXBocyBvciB0aGUgYWx0ZXJuYXRlXG4gICAgICAgIC8vIHZlcnRpY2FsIGdseXBocy4gV2UgY2FuJ3QganVzdCBmaWx0ZXIgb3V0IHZlcnRpY2FsIGdseXBocyBpbiB0aGUgaG9yaXpvbnRhbCByYW5nZSBiZWNhdXNlIHRoZSBob3Jpem9udGFsXG4gICAgICAgIC8vIGFuZCB2ZXJ0aWNhbCB2ZXJzaW9ucyBjYW4gaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgcHJvamVjdGlvbnMgd2hpY2ggY291bGQgbGVhZCB0byBhbmdsZXMgd2hlcmUgYm90aCBvclxuICAgICAgICAvLyBuZWl0aGVyIHNob3dlZC5cbiAgICAgICAgY29uc3QgcmlzZSA9IE1hdGguYWJzKGxhc3RQb2ludC55IC0gZmlyc3RQb2ludC55KTtcbiAgICAgICAgY29uc3QgcnVuID0gTWF0aC5hYnMobGFzdFBvaW50LnggLSBmaXJzdFBvaW50LngpICogYXNwZWN0UmF0aW87XG4gICAgICAgIGlmIChyaXNlID4gcnVuKSB7XG4gICAgICAgICAgICByZXR1cm4ge3VzZVZlcnRpY2FsOiB0cnVlfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgPyBmaXJzdFBvaW50LnkgPCBsYXN0UG9pbnQueSA6IGZpcnN0UG9pbnQueCA+IGxhc3RQb2ludC54KSB7XG4gICAgICAgIC8vIEluY2x1ZGVzIFwiaG9yaXpvbnRhbE9ubHlcIiBjYXNlIGZvciBsYWJlbHMgd2l0aG91dCB2ZXJ0aWNhbCBnbHlwaHNcbiAgICAgICAgcmV0dXJuIHtuZWVkc0ZsaXBwaW5nOiB0cnVlfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcGxhY2VHbHlwaHNBbG9uZ0xpbmUoc3ltYm9sLCBmb250U2l6ZSwgZmxpcCwga2VlcFVwcmlnaHQsIHBvc01hdHJpeCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCwgZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBmb250U2NhbGUgPSBmb250U2l6ZSAvIDI0O1xuICAgIGNvbnN0IGxpbmVPZmZzZXRYID0gc3ltYm9sLmxpbmVPZmZzZXRYICogZm9udFNjYWxlO1xuICAgIGNvbnN0IGxpbmVPZmZzZXRZID0gc3ltYm9sLmxpbmVPZmZzZXRZICogZm9udFNjYWxlO1xuXG4gICAgbGV0IHBsYWNlZEdseXBocztcbiAgICBpZiAoc3ltYm9sLm51bUdseXBocyA+IDEpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhFbmRJbmRleCA9IHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXggKyBzeW1ib2wubnVtR2x5cGhzO1xuICAgICAgICBjb25zdCBsaW5lU3RhcnRJbmRleCA9IHN5bWJvbC5saW5lU3RhcnRJbmRleDtcbiAgICAgICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICAgICAgLy8gUGxhY2UgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdCBnbHlwaCBpbiB0aGUgbGFiZWwgZmlyc3QsIHNvIHdlIGNhbiBmaWd1cmUgb3V0XG4gICAgICAgIC8vIHRoZSBvdmVyYWxsIG9yaWVudGF0aW9uIG9mIHRoZSBsYWJlbCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgZmxpcHBlZCBpbiBrZWVwVXByaWdodCBtb2RlXG4gICAgICAgIGNvbnN0IGZpcnN0QW5kTGFzdEdseXBoID0gcGxhY2VGaXJzdEFuZExhc3RHbHlwaChmb250U2NhbGUsIGdseXBoT2Zmc2V0QXJyYXksIGxpbmVPZmZzZXRYLCBsaW5lT2Zmc2V0WSwgZmxpcCwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgc3ltYm9sLCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgZmFsc2UpO1xuICAgICAgICBpZiAoIWZpcnN0QW5kTGFzdEdseXBoKSB7XG4gICAgICAgICAgICByZXR1cm4ge25vdEVub3VnaFJvb206IHRydWV9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcHJvamVjdChmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uQ2hhbmdlID0gcmVxdWlyZXNPcmllbnRhdGlvbkNoYW5nZShzeW1ib2wud3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pO1xuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uQ2hhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW2ZpcnN0QW5kTGFzdEdseXBoLmZpcnN0XTtcbiAgICAgICAgZm9yIChsZXQgZ2x5cGhJbmRleCA9IHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXggKyAxOyBnbHlwaEluZGV4IDwgZ2x5cGhFbmRJbmRleCAtIDE7IGdseXBoSW5kZXgrKykge1xuICAgICAgICAgICAgLy8gU2luY2UgZmlyc3QgYW5kIGxhc3QgZ2x5cGggZml0IG9uIHRoZSBsaW5lLCB3ZSdyZSBzdXJlIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGdseXBocyBjYW4gYmUgcGxhY2VkXG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICBwbGFjZWRHbHlwaHMucHVzaChwbGFjZUdseXBoQWxvbmdMaW5lKGZvbnRTY2FsZSAqIGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEluZGV4KSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wuc2VnbWVudCxcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgICBwbGFjZWRHbHlwaHMucHVzaChmaXJzdEFuZExhc3RHbHlwaC5sYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbmx5IGEgc2luZ2xlIGdseXBoIHRvIHBsYWNlXG4gICAgICAgIC8vIFNvLCBkZXRlcm1pbmUgd2hldGhlciB0byBmbGlwIGJhc2VkIG9uIHByb2plY3RlZCBhbmdsZSBvZiB0aGUgbGluZSBzZWdtZW50IGl0J3Mgb25cbiAgICAgICAgaWYgKGtlZXBVcHJpZ2h0ICYmICFmbGlwKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcHJvamVjdCh0aWxlQW5jaG9yUG9pbnQsIHBvc01hdHJpeCkucG9pbnQ7XG4gICAgICAgICAgICBjb25zdCB0aWxlVmVydGV4SW5kZXggPSAoc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLnNlZ21lbnQgKyAxKTtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgIGNvbnN0IHRpbGVTZWdtZW50RW5kID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHRpbGVWZXJ0ZXhJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KHRpbGVWZXJ0ZXhJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkVmVydGV4ID0gcHJvamVjdCh0aWxlU2VnbWVudEVuZCwgcG9zTWF0cml4KTtcbiAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIGFuY2hvciB3aWxsIGJlIGluIHRoZSB2aWV3cG9ydCwgYnV0IHRoZSBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBtYXkgYmVcbiAgICAgICAgICAgIC8vIGJlaGluZCB0aGUgcGxhbmUgb2YgdGhlIGNhbWVyYSwgaW4gd2hpY2ggY2FzZSB3ZSBjYW4gdXNlIGEgcG9pbnQgYXQgYW55IGFyYml0cmFyeSAoY2xvc2VyKVxuICAgICAgICAgICAgLy8gcG9pbnQgb24gdGhlIHNlZ21lbnQuXG4gICAgICAgICAgICBjb25zdCBiID0gKHByb2plY3RlZFZlcnRleC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSA/XG4gICAgICAgICAgICAgICAgcHJvamVjdGVkVmVydGV4LnBvaW50IDpcbiAgICAgICAgICAgICAgICBwcm9qZWN0VHJ1bmNhdGVkTGluZVNlZ21lbnQodGlsZUFuY2hvclBvaW50LCB0aWxlU2VnbWVudEVuZCwgYSwgMSwgcG9zTWF0cml4KTtcblxuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25DaGFuZ2UgPSByZXF1aXJlc09yaWVudGF0aW9uQ2hhbmdlKHN5bWJvbC53cml0aW5nTW9kZSwgYSwgYiwgYXNwZWN0UmF0aW8pO1xuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uQ2hhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgY29uc3Qgc2luZ2xlR2x5cGggPSBwbGFjZUdseXBoQWxvbmdMaW5lKGZvbnRTY2FsZSAqIGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChzeW1ib2wuZ2x5cGhTdGFydEluZGV4KSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wuc2VnbWVudCxcbiAgICAgICAgICAgIHN5bWJvbC5saW5lU3RhcnRJbmRleCwgc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSk7XG4gICAgICAgIGlmICghc2luZ2xlR2x5cGgpXG4gICAgICAgICAgICByZXR1cm4ge25vdEVub3VnaFJvb206IHRydWV9O1xuXG4gICAgICAgIHBsYWNlZEdseXBocyA9IFtzaW5nbGVHbHlwaF07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBnbHlwaDogYW55IG9mIHBsYWNlZEdseXBocykge1xuICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGdseXBoLnBvaW50LCBnbHlwaC5hbmdsZSk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFRydW5jYXRlZExpbmVTZWdtZW50KHByZXZpb3VzVGlsZVBvaW50OiBQb2ludCwgY3VycmVudFRpbGVQb2ludDogUG9pbnQsIHByZXZpb3VzUHJvamVjdGVkUG9pbnQ6IFBvaW50LCBtaW5pbXVtTGVuZ3RoOiBudW1iZXIsIHByb2plY3Rpb25NYXRyaXg6IG1hdDQpIHtcbiAgICAvLyBXZSBhcmUgYXNzdW1pbmcgXCJwcmV2aW91c1RpbGVQb2ludFwiIHdvbid0IHByb2plY3QgdG8gYSBwb2ludCB3aXRoaW4gb25lIHVuaXQgb2YgdGhlIGNhbWVyYSBwbGFuZVxuICAgIC8vIElmIGl0IGRpZCwgdGhhdCB3b3VsZCBtZWFuIG91ciBsYWJlbCBleHRlbmRlZCBhbGwgdGhlIHdheSBvdXQgZnJvbSB3aXRoaW4gdGhlIHZpZXdwb3J0IHRvIGEgKHZlcnkgZGlzdGFudClcbiAgICAvLyBwb2ludCBuZWFyIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLiBXZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHJlbmRlciB0aGUgbGFiZWwgYW55d2F5IG9uY2UgaXQgY3Jvc3NlZCB0aGVcbiAgICAvLyBwbGFuZSBvZiB0aGUgY2FtZXJhLlxuICAgIGNvbnN0IHByb2plY3RlZFVuaXRWZXJ0ZXggPSBwcm9qZWN0KHByZXZpb3VzVGlsZVBvaW50LmFkZChwcmV2aW91c1RpbGVQb2ludC5zdWIoY3VycmVudFRpbGVQb2ludCkuX3VuaXQoKSksIHByb2plY3Rpb25NYXRyaXgpLnBvaW50O1xuICAgIGNvbnN0IHByb2plY3RlZFVuaXRTZWdtZW50ID0gcHJldmlvdXNQcm9qZWN0ZWRQb2ludC5zdWIocHJvamVjdGVkVW5pdFZlcnRleCk7XG5cbiAgICByZXR1cm4gcHJldmlvdXNQcm9qZWN0ZWRQb2ludC5hZGQocHJvamVjdGVkVW5pdFNlZ21lbnQuX211bHQobWluaW11bUxlbmd0aCAvIHByb2plY3RlZFVuaXRTZWdtZW50Lm1hZygpKSk7XG59XG5cbmZ1bmN0aW9uIHBsYWNlR2x5cGhBbG9uZ0xpbmUob2Zmc2V0WDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0WTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JQb2ludDogUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVBbmNob3JQb2ludDogUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclNlZ21lbnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uQ2FjaGU6IHtbbnVtYmVyXTogUG9pbnR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UaWxlRGlzdGFuY2U6IGJvb2xlYW4pIHtcblxuICAgIGNvbnN0IGNvbWJpbmVkT2Zmc2V0WCA9IGZsaXAgP1xuICAgICAgICBvZmZzZXRYIC0gbGluZU9mZnNldFggOlxuICAgICAgICBvZmZzZXRYICsgbGluZU9mZnNldFg7XG5cbiAgICBsZXQgZGlyID0gY29tYmluZWRPZmZzZXRYID4gMCA/IDEgOiAtMTtcblxuICAgIGxldCBhbmdsZSA9IDA7XG4gICAgaWYgKGZsaXApIHtcbiAgICAgICAgLy8gVGhlIGxhYmVsIG5lZWRzIHRvIGJlIGZsaXBwZWQgdG8ga2VlcCB0ZXh0IHVwcmlnaHQuXG4gICAgICAgIC8vIEl0ZXJhdGUgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLlxuICAgICAgICBkaXIgKj0gLTE7XG4gICAgICAgIGFuZ2xlID0gTWF0aC5QSTtcbiAgICB9XG5cbiAgICBpZiAoZGlyIDwgMCkgYW5nbGUgKz0gTWF0aC5QSTtcblxuICAgIGxldCBjdXJyZW50SW5kZXggPSBkaXIgPiAwID9cbiAgICAgICAgbGluZVN0YXJ0SW5kZXggKyBhbmNob3JTZWdtZW50IDpcbiAgICAgICAgbGluZVN0YXJ0SW5kZXggKyBhbmNob3JTZWdtZW50ICsgMTtcblxuICAgIGNvbnN0IGluaXRpYWxJbmRleCA9IGN1cnJlbnRJbmRleDtcbiAgICBsZXQgY3VycmVudCA9IGFuY2hvclBvaW50O1xuICAgIGxldCBwcmV2ID0gYW5jaG9yUG9pbnQ7XG4gICAgbGV0IGRpc3RhbmNlVG9QcmV2ID0gMDtcbiAgICBsZXQgY3VycmVudFNlZ21lbnREaXN0YW5jZSA9IDA7XG4gICAgY29uc3QgYWJzT2Zmc2V0WCA9IE1hdGguYWJzKGNvbWJpbmVkT2Zmc2V0WCk7XG5cbiAgICB3aGlsZSAoZGlzdGFuY2VUb1ByZXYgKyBjdXJyZW50U2VnbWVudERpc3RhbmNlIDw9IGFic09mZnNldFgpIHtcbiAgICAgICAgY3VycmVudEluZGV4ICs9IGRpcjtcblxuICAgICAgICAvLyBvZmZzZXQgZG9lcyBub3QgZml0IG9uIHRoZSBwcm9qZWN0ZWQgbGluZVxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgbGluZVN0YXJ0SW5kZXggfHwgY3VycmVudEluZGV4ID49IGxpbmVFbmRJbmRleClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIHByZXYgPSBjdXJyZW50O1xuXG4gICAgICAgIGN1cnJlbnQgPSBwcm9qZWN0aW9uQ2FjaGVbY3VycmVudEluZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZlcnRleCA9IG5ldyBQb2ludChsaW5lVmVydGV4QXJyYXkuZ2V0eChjdXJyZW50SW5kZXgpLCBsaW5lVmVydGV4QXJyYXkuZ2V0eShjdXJyZW50SW5kZXgpKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSBwcm9qZWN0KGN1cnJlbnRWZXJ0ZXgsIGxhYmVsUGxhbmVNYXRyaXgpO1xuICAgICAgICAgICAgaWYgKHByb2plY3Rpb24uc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhID4gMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwcm9qZWN0aW9uQ2FjaGVbY3VycmVudEluZGV4XSA9IHByb2plY3Rpb24ucG9pbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSB2ZXJ0ZXggaXMgYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBzbyB3ZSBjYW4ndCBwcm9qZWN0IGl0XG4gICAgICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UnbGwgY3JlYXRlIGEgdmVydGV4IGFsb25nIHRoZSBsaW5lIHRoYXQncyBmYXIgZW5vdWdoIHRvIGluY2x1ZGUgdGhlIGdseXBoXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNMaW5lVmVydGV4SW5kZXggPSBjdXJyZW50SW5kZXggLSBkaXI7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNUaWxlUG9pbnQgPSBkaXN0YW5jZVRvUHJldiA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHRpbGVBbmNob3JQb2ludCA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBQb2ludChsaW5lVmVydGV4QXJyYXkuZ2V0eChwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgYmVjYXVzZSB0aGUgbmV3IHZlcnRleCBtaWdodCBub3QgYmUgZmFyIGVub3VnaCBvdXQgZm9yIGZ1dHVyZSBnbHlwaHMgb24gdGhlIHNhbWUgc2VnbWVudFxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwcm9qZWN0VHJ1bmNhdGVkTGluZVNlZ21lbnQocHJldmlvdXNUaWxlUG9pbnQsIGN1cnJlbnRWZXJ0ZXgsIHByZXYsIGFic09mZnNldFggLSBkaXN0YW5jZVRvUHJldiArIDEsIGxhYmVsUGxhbmVNYXRyaXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzdGFuY2VUb1ByZXYgKz0gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICAgICAgY3VycmVudFNlZ21lbnREaXN0YW5jZSA9IHByZXYuZGlzdChjdXJyZW50KTtcbiAgICB9XG5cbiAgICAvLyBUaGUgcG9pbnQgaXMgb24gdGhlIGN1cnJlbnQgc2VnbWVudC4gSW50ZXJwb2xhdGUgdG8gZmluZCBpdC5cbiAgICBjb25zdCBzZWdtZW50SW50ZXJwb2xhdGlvblQgPSAoYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2KSAvIGN1cnJlbnRTZWdtZW50RGlzdGFuY2U7XG4gICAgY29uc3QgcHJldlRvQ3VycmVudCA9IGN1cnJlbnQuc3ViKHByZXYpO1xuICAgIGNvbnN0IHAgPSBwcmV2VG9DdXJyZW50Lm11bHQoc2VnbWVudEludGVycG9sYXRpb25UKS5fYWRkKHByZXYpO1xuXG4gICAgLy8gb2Zmc2V0IHRoZSBwb2ludCBmcm9tIHRoZSBsaW5lIHRvIHRleHQtb2Zmc2V0IGFuZCBpY29uLW9mZnNldFxuICAgIHAuX2FkZChwcmV2VG9DdXJyZW50Ll91bml0KCkuX3BlcnAoKS5fbXVsdChsaW5lT2Zmc2V0WSAqIGRpcikpO1xuXG4gICAgY29uc3Qgc2VnbWVudEFuZ2xlID0gYW5nbGUgKyBNYXRoLmF0YW4yKGN1cnJlbnQueSAtIHByZXYueSwgY3VycmVudC54IC0gcHJldi54KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiBwLFxuICAgICAgICBhbmdsZTogc2VnbWVudEFuZ2xlLFxuICAgICAgICB0aWxlRGlzdGFuY2U6IHJldHVyblRpbGVEaXN0YW5jZSA/XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJldlRpbGVEaXN0YW5jZTogKGN1cnJlbnRJbmRleCAtIGRpcikgPT09IGluaXRpYWxJbmRleCA/IDAgOiBsaW5lVmVydGV4QXJyYXkuZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IoY3VycmVudEluZGV4IC0gZGlyKSxcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2U6IGFic09mZnNldFggLSBkaXN0YW5jZVRvUHJldlxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICB9O1xufVxuXG5jb25zdCBoaWRkZW5HbHlwaEF0dHJpYnV0ZXMgPSBuZXcgRmxvYXQzMkFycmF5KFstSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMF0pO1xuXG4vLyBIaWRlIHRoZW0gYnkgbW92aW5nIHRoZW0gb2Zmc2NyZWVuLiBXZSBzdGlsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoZSBidWZmZXJcbi8vIGJlY2F1c2UgdGhlIGR5bmFtaWMgYnVmZmVyIGlzIHBhaXJlZCB3aXRoIGEgc3RhdGljIGJ1ZmZlciB0aGF0IGRvZXNuJ3QgZ2V0IHVwZGF0ZWQuXG5mdW5jdGlvbiBoaWRlR2x5cGhzKG51bTogbnVtYmVyLCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZHluYW1pY0xheW91dFZlcnRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LnJlc2l6ZShvZmZzZXQgKyA0KTtcbiAgICAgICAgLy8gU2luY2UgYWxsIGhpZGRlbiBnbHlwaHMgaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGVzLCB3ZSBjYW4gYnVpbGQgdXAgdGhlIGFycmF5IGZhc3RlciB3aXRoIGEgc2luZ2xlIGNhbGwgdG8gRmxvYXQzMkFycmF5LnNldFxuICAgICAgICAvLyBmb3IgZWFjaCBzZXQgb2YgZm91ciB2ZXJ0aWNlcywgaW5zdGVhZCBvZiBjYWxsaW5nIGFkZER5bmFtaWNBdHRyaWJ1dGVzIGZvciBlYWNoIHZlcnRleC5cbiAgICAgICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmZsb2F0MzIuc2V0KGhpZGRlbkdseXBoQXR0cmlidXRlcywgb2Zmc2V0ICogMyk7XG4gICAgfVxufVxuXG4vLyBGb3IgbGluZSBsYWJlbCBsYXlvdXQsIHdlJ3JlIG5vdCB1c2luZyB6IG91dHB1dCBhbmQgb3VyIHcgaW5wdXQgaXMgYWx3YXlzIDFcbi8vIFRoaXMgY3VzdG9tIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBpZ25vcmVzIHRob3NlIGNvbXBvbmVudHMgdG8gbWFrZSBwcm9qZWN0aW9uIGZhc3RlclxuZnVuY3Rpb24geHlUcmFuc2Zvcm1NYXQ0KG91dDogdmVjNCwgYTogdmVjNCwgbTogbWF0NCkge1xuICAgIGNvbnN0IHggPSBhWzBdLCB5ID0gYVsxXTtcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzE1XTtcbiAgICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgKiBhcyBpbnRlcnNlY3Rpb25UZXN0cyBmcm9tICcuLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQgR3JpZCBmcm9tICcuL2dyaWRfaW5kZXgnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4uL3N5bWJvbC9wcm9qZWN0aW9uJztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1NpbmdsZUNvbGxpc2lvbkJveH0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXlcbn0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5cbi8vIFdoZW4gYSBzeW1ib2wgY3Jvc3NlcyB0aGUgZWRnZSB0aGF0IGNhdXNlcyBpdCB0byBiZSBpbmNsdWRlZCBpblxuLy8gY29sbGlzaW9uIGRldGVjdGlvbiwgaXQgd2lsbCBjYXVzZSBjaGFuZ2VzIGluIHRoZSBzeW1ib2xzIGFyb3VuZFxuLy8gaXQuIFRoaXMgY29uc3RhbnQgc3BlY2lmaWVzIGhvdyBtYW55IHBpeGVscyB0byBwYWQgdGhlIGVkZ2Ugb2Zcbi8vIHRoZSB2aWV3cG9ydCBmb3IgY29sbGlzaW9uIGRldGVjdGlvbiBzbyB0aGF0IHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzXG4vLyBvY2N1ciBvZmZzY3JlZW4uIE1ha2luZyB0aGlzIGNvbnN0YW50IGdyZWF0ZXIgaW5jcmVhc2VzIGxhYmVsXG4vLyBzdGFiaWxpdHksIGJ1dCBpdCdzIGV4cGVuc2l2ZS5cbmNvbnN0IHZpZXdwb3J0UGFkZGluZyA9IDEwMDtcblxuLyoqXG4gKiBBIGNvbGxpc2lvbiBpbmRleCB1c2VkIHRvIHByZXZlbnQgc3ltYm9scyBmcm9tIG92ZXJsYXBwaW5nLiBJdCBrZWVwIHRyYWNrcyBvZlxuICogd2hlcmUgcHJldmlvdXMgc3ltYm9scyBoYXZlIGJlZW4gcGxhY2VkIGFuZCBpcyB1c2VkIHRvIGNoZWNrIGlmIGEgbmV3XG4gKiBzeW1ib2wgb3ZlcmxhcHMgd2l0aCBhbnkgcHJldmlvdXNseSBhZGRlZCBzeW1ib2xzLlxuICpcbiAqIFRoZXJlIGFyZSB0d28gc3RlcHMgdG8gaW5zZXJ0aW9uOiBmaXJzdCBwbGFjZUNvbGxpc2lvbkJveC9DaXJjbGVzIGNoZWNrcyBpZlxuICogdGhlcmUncyByb29tIGZvciBhIHN5bWJvbCwgdGhlbiBpbnNlcnRDb2xsaXNpb25Cb3gvQ2lyY2xlcyBhY3R1YWxseSBwdXRzIHRoZVxuICogc3ltYm9sIGluIHRoZSBpbmRleC4gVGhlIHR3byBzdGVwIHByb2Nlc3MgYWxsb3dzIHBhaXJlZCBzeW1ib2xzIHRvIGJlIGluc2VydGVkXG4gKiB0b2dldGhlciBldmVuIGlmIHRoZXkgb3ZlcmxhcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2xsaXNpb25JbmRleCB7XG4gICAgZ3JpZDogR3JpZDtcbiAgICBpZ25vcmVkR3JpZDogR3JpZDtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBwaXRjaGZhY3RvcjogbnVtYmVyO1xuICAgIHNjcmVlblJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBzY3JlZW5Cb3R0b21Cb3VuZGFyeTogbnVtYmVyO1xuICAgIGdyaWRSaWdodEJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZEJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgIGdyaWQ6IEdyaWQgPSBuZXcgR3JpZCh0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nLCB0cmFuc2Zvcm0uaGVpZ2h0ICsgMiAqIHZpZXdwb3J0UGFkZGluZywgMjUpLFxuICAgICAgICBpZ25vcmVkR3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSlcbiAgICApIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgdGhpcy5pZ25vcmVkR3JpZCA9IGlnbm9yZWRHcmlkO1xuICAgICAgICB0aGlzLnBpdGNoZmFjdG9yID0gTWF0aC5jb3ModHJhbnNmb3JtLl9waXRjaCkgKiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcblxuICAgICAgICB0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnkgPSB0cmFuc2Zvcm0uaGVpZ2h0ICsgdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRSaWdodEJvdW5kYXJ5ID0gdHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5ncmlkQm90dG9tQm91bmRhcnkgPSB0cmFuc2Zvcm0uaGVpZ2h0ICsgMiAqIHZpZXdwb3J0UGFkZGluZztcbiAgICB9XG5cbiAgICBwbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IFNpbmdsZUNvbGxpc2lvbkJveCwgYWxsb3dPdmVybGFwOiBib29sZWFuLCB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLCBwb3NNYXRyaXg6IG1hdDQsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlPzogYW55KTogeyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgcHJvamVjdGVkUG9pbnQgPSB0aGlzLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKHBvc01hdHJpeCwgY29sbGlzaW9uQm94LmFuY2hvclBvaW50WCwgY29sbGlzaW9uQm94LmFuY2hvclBvaW50WSk7XG4gICAgICAgIGNvbnN0IHRpbGVUb1ZpZXdwb3J0ID0gdGV4dFBpeGVsUmF0aW8gKiBwcm9qZWN0ZWRQb2ludC5wZXJzcGVjdGl2ZVJhdGlvO1xuICAgICAgICBjb25zdCB0bFggPSBjb2xsaXNpb25Cb3gueDEgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IHRsWSA9IGNvbGxpc2lvbkJveC55MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcbiAgICAgICAgY29uc3QgYnJYID0gY29sbGlzaW9uQm94LngyICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC54O1xuICAgICAgICBjb25zdCBiclkgPSBjb2xsaXNpb25Cb3gueTIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lnk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzSW5zaWRlR3JpZCh0bFgsIHRsWSwgYnJYLCBiclkpIHx8XG4gICAgICAgICAgICAoIWFsbG93T3ZlcmxhcCAmJiB0aGlzLmdyaWQuaGl0VGVzdCh0bFgsIHRsWSwgYnJYLCBiclksIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYm94OiBbXSxcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW46IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJveDogW3RsWCwgdGxZLCBiclgsIGJyWV0sXG4gICAgICAgICAgICBvZmZzY3JlZW46IHRoaXMuaXNPZmZzY3JlZW4odGxYLCB0bFksIGJyWCwgYnJZKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFwcHJveGltYXRlVGlsZURpc3RhbmNlKHRpbGVEaXN0YW5jZTogYW55LCBsYXN0U2VnbWVudEFuZ2xlOiBudW1iZXIsIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsIGNhbWVyYVRvQW5jaG9yRGlzdGFuY2U6IG51bWJlciwgcGl0Y2hXaXRoTWFwOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHF1aWNrIGFuZCBkaXJ0eSBzb2x1dGlvbiBmb3IgY2hvc2luZyB3aGljaCBjb2xsaXNpb24gY2lyY2xlcyB0byB1c2UgKHNpbmNlIGNvbGxpc2lvbiBjaXJjbGVzIGFyZVxuICAgICAgICAvLyBsYWlkIG91dCBpbiB0aWxlIHVuaXRzKS4gSWRlYWxseSwgSSB0aGluayB3ZSBzaG91bGQgZ2VuZXJhdGUgY29sbGlzaW9uIGNpcmNsZXMgb24gdGhlIGZseSBpbiB2aWV3cG9ydCBjb29yZGluYXRlc1xuICAgICAgICAvLyBhdCB0aGUgdGltZSB3ZSBkbyBjb2xsaXNpb24gZGV0ZWN0aW9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU0NzRcblxuICAgICAgICAvLyBpbmNpZGVuY2VTdHJldGNoIGlzIHRoZSByYXRpbyBvZiBob3cgbXVjaCB5IHNwYWNlIGEgbGFiZWwgdGFrZXMgdXAgb24gYSB0aWxlIHdoaWxlIGRyYXduIHBlcnBlbmRpY3VsYXIgdG8gdGhlIHZpZXdwb3J0IHZzXG4gICAgICAgIC8vICBob3cgbXVjaCBzcGFjZSBpdCB3b3VsZCB0YWtlIHVwIGlmIGl0IHdlcmUgZHJhd24gZmxhdCBvbiB0aGUgdGlsZVxuICAgICAgICAvLyBVc2luZyBsYXcgb2Ygc2luZXMsIGNhbWVyYV90b19hbmNob3Ivc2luKGdyb3VuZF9hbmdsZSkgPSBjYW1lcmFfdG9fY2VudGVyL3NpbihpbmNpZGVuY2VfYW5nbGUpXG4gICAgICAgIC8vIEluY2lkZW5jZSBhbmdsZSA5MCAtPiBoZWFkIG9uLCBzaW4oaW5jaWRlbmNlX2FuZ2xlKSA9IDEsIG5vIHN0cmV0Y2hcbiAgICAgICAgLy8gSW5jaWRlbmNlIGFuZ2xlIDEgLT4gdmVyeSBvYmxpcXVlLCBzaW4oaW5jaWRlbmNlX2FuZ2xlKSA9fiAwLCBsb3RzIG9mIHN0cmV0Y2hcbiAgICAgICAgLy8gZ3JvdW5kX2FuZ2xlID0gdV9waXRjaCArIFBJLzIgLT4gc2luKGdyb3VuZF9hbmdsZSkgPSBjb3ModV9waXRjaClcbiAgICAgICAgLy8gaW5jaWRlbmNlU3RyZXRjaCA9IDEgLyBzaW4oaW5jaWRlbmNlQW5nbGUpXG5cbiAgICAgICAgY29uc3QgaW5jaWRlbmNlU3RyZXRjaCA9IHBpdGNoV2l0aE1hcCA/IDEgOiBjYW1lcmFUb0FuY2hvckRpc3RhbmNlIC8gdGhpcy5waXRjaGZhY3RvcjtcbiAgICAgICAgY29uc3QgbGFzdFNlZ21lbnRUaWxlID0gdGlsZURpc3RhbmNlLmxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZSAqIHBpeGVsc1RvVGlsZVVuaXRzO1xuICAgICAgICByZXR1cm4gdGlsZURpc3RhbmNlLnByZXZUaWxlRGlzdGFuY2UgK1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRUaWxlICtcbiAgICAgICAgICAgIChpbmNpZGVuY2VTdHJldGNoIC0gMSkgKiBsYXN0U2VnbWVudFRpbGUgKiBNYXRoLmFicyhNYXRoLnNpbihsYXN0U2VnbWVudEFuZ2xlKSk7XG4gICAgfVxuXG4gICAgcGxhY2VDb2xsaXNpb25DaXJjbGVzKGNvbGxpc2lvbkNpcmNsZXM6IEFycmF5PG51bWJlcj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93T3ZlcmxhcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFBpeGVsUmF0aW86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25DaXJjbGVzOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlPzogYW55KTogeyBjaXJjbGVzOiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0ZWRBbmNob3IgPSB0aGlzLnByb2plY3RBbmNob3IocG9zTWF0cml4LCBzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3Rpb25DYWNoZSA9IHt9O1xuICAgICAgICBjb25zdCBmb250U2NhbGUgPSBmb250U2l6ZSAvIDI0O1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0WCA9IHN5bWJvbC5saW5lT2Zmc2V0WCAqIGZvbnRTaXplO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0WSA9IHN5bWJvbC5saW5lT2Zmc2V0WSAqIGZvbnRTaXplO1xuXG4gICAgICAgIGNvbnN0IHRpbGVVbml0QW5jaG9yUG9pbnQgPSBuZXcgUG9pbnQoc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZKTtcbiAgICAgICAgLy8gcHJvamVjdGlvbi5wcm9qZWN0IGdlbmVyYXRlcyBOREMgY29vcmRpbmF0ZXMsIGFzIG9wcG9zZWQgdG8gdGhlXG4gICAgICAgIC8vIHBpeGVsLWJhc2VkIGdyaWQgY29vcmRpbmF0ZXMgZ2VuZXJhdGVkIGJ5IHRoaXMucHJvamVjdFBvaW50XG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVBbmNob3JQb2ludCA9XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnByb2plY3QodGlsZVVuaXRBbmNob3JQb2ludCwgbGFiZWxQbGFuZU1hdHJpeCkucG9pbnQ7XG4gICAgICAgIGNvbnN0IGZpcnN0QW5kTGFzdEdseXBoID0gcHJvamVjdGlvbi5wbGFjZUZpcnN0QW5kTGFzdEdseXBoKFxuICAgICAgICAgICAgZm9udFNjYWxlLFxuICAgICAgICAgICAgZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRYLFxuICAgICAgICAgICAgbGluZU9mZnNldFksXG4gICAgICAgICAgICAvKmZsaXAqLyBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHRpbGVVbml0QW5jaG9yUG9pbnQsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgcHJvamVjdGlvbkNhY2hlLFxuICAgICAgICAgICAgLypyZXR1cm4gdGlsZSBkaXN0YW5jZSovIHRydWUpO1xuXG4gICAgICAgIGxldCBjb2xsaXNpb25EZXRlY3RlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5HcmlkID0gZmFsc2U7XG4gICAgICAgIGxldCBlbnRpcmVseU9mZnNjcmVlbiA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSBwcm9qZWN0ZWRBbmNob3IucGVyc3BlY3RpdmVSYXRpbyAqIHRleHRQaXhlbFJhdGlvO1xuICAgICAgICAvLyBwaXhlbHNUb1RpbGVVbml0cyBpcyB1c2VkIGZvciB0cmFuc2xhdGluZyBsaW5lIGdlb21ldHJ5IHRvIHRpbGUgdW5pdHNcbiAgICAgICAgLy8gLi4uIHNvIHdlIGNhcmUgYWJvdXQgJ3NjYWxlJyBidXQgbm90ICdwZXJzcGVjdGl2ZVJhdGlvJ1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHBpeGVsX3RvX3RpbGVfdW5pdHNcbiAgICAgICAgY29uc3QgcGl4ZWxzVG9UaWxlVW5pdHMgPSAxIC8gKHRleHRQaXhlbFJhdGlvICogc2NhbGUpO1xuXG4gICAgICAgIGxldCBmaXJzdFRpbGVEaXN0YW5jZSA9IDAsIGxhc3RUaWxlRGlzdGFuY2UgPSAwO1xuICAgICAgICBpZiAoZmlyc3RBbmRMYXN0R2x5cGgpIHtcbiAgICAgICAgICAgIGZpcnN0VGlsZURpc3RhbmNlID0gdGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShmaXJzdEFuZExhc3RHbHlwaC5maXJzdC50aWxlRGlzdGFuY2UsIGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cywgcHJvamVjdGVkQW5jaG9yLmNhbWVyYURpc3RhbmNlLCBwaXRjaFdpdGhNYXApO1xuICAgICAgICAgICAgbGFzdFRpbGVEaXN0YW5jZSA9IHRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoZmlyc3RBbmRMYXN0R2x5cGgubGFzdC50aWxlRGlzdGFuY2UsIGZpcnN0QW5kTGFzdEdseXBoLmxhc3QuYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzLCBwcm9qZWN0ZWRBbmNob3IuY2FtZXJhRGlzdGFuY2UsIHBpdGNoV2l0aE1hcCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNvbGxpc2lvbkNpcmNsZXMubGVuZ3RoOyBrICs9IDUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvclBvaW50WCA9IGNvbGxpc2lvbkNpcmNsZXNba107XG4gICAgICAgICAgICBjb25zdCBhbmNob3JQb2ludFkgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVVbml0UmFkaXVzID0gY29sbGlzaW9uQ2lyY2xlc1trICsgMl07XG4gICAgICAgICAgICBjb25zdCBib3hTaWduZWREaXN0YW5jZUZyb21BbmNob3IgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyAzXTtcbiAgICAgICAgICAgIGlmICghZmlyc3RBbmRMYXN0R2x5cGggfHxcbiAgICAgICAgICAgICAgICAoYm94U2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yIDwgLWZpcnN0VGlsZURpc3RhbmNlKSB8fFxuICAgICAgICAgICAgICAgIChib3hTaWduZWREaXN0YW5jZUZyb21BbmNob3IgPiBsYXN0VGlsZURpc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBsYWJlbCBlaXRoZXIgZG9lc24ndCBmaXQgb24gaXRzIGxpbmUgb3Igd2VcbiAgICAgICAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIGNpcmNsZSBiZWNhdXNlIHRoZSBsYWJlbFxuICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgZXh0ZW5kIHRoaXMgZmFyLiBFaXRoZXIgd2F5LCBtYXJrIHRoZSBjaXJjbGUgdW51c2VkLlxuICAgICAgICAgICAgICAgIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXMsIGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkUG9pbnQgPSB0aGlzLnByb2plY3RQb2ludChwb3NNYXRyaXgsIGFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IHRpbGVVbml0UmFkaXVzICogdGlsZVRvVmlld3BvcnQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGF0TGVhc3RPbmVDaXJjbGVQbGFjZWQgPSBwbGFjZWRDb2xsaXNpb25DaXJjbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBpZiAoYXRMZWFzdE9uZUNpcmNsZVBsYWNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGR4ID0gcHJvamVjdGVkUG9pbnQueCAtIHBsYWNlZENvbGxpc2lvbkNpcmNsZXNbcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5sZW5ndGggLSA0XTtcbiAgICAgICAgICAgICAgICBjb25zdCBkeSA9IHByb2plY3RlZFBvaW50LnkgLSBwbGFjZWRDb2xsaXNpb25DaXJjbGVzW3BsYWNlZENvbGxpc2lvbkNpcmNsZXMubGVuZ3RoIC0gM107XG4gICAgICAgICAgICAgICAgLy8gVGhlIGNpcmNsZSBlZGdlcyB0b3VjaCB3aGVuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZWlyIGNlbnRlcnMgaXMgMnggdGhlIHJhZGl1c1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRpc3RhbmNlIGlzIDF4IHRoZSByYWRpdXMsIHRoZXkncmUgZG91YmxlZCB1cCwgYW5kIHdlIGNvdWxkIHJlbW92ZVxuICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IG90aGVyIGNpcmNsZSB3aGlsZSBrZWVwaW5nIHRoZW0gYWxsIGluIHRvdWNoLlxuICAgICAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IHN0YXJ0IHJlbW92aW5nIGNpcmNsZXMgd2hlbiB0aGUgZGlzdGFuY2UgaXMgw6LCiMKaMnggdGhlIHJhZGl1czpcbiAgICAgICAgICAgICAgICAvLyAgdGhpbm5pbmcgdGhlIG51bWJlciBvZiBjaXJjbGVzIGFzIG11Y2ggYXMgcG9zc2libGUgaXMgYSBtYWpvciBwZXJmb3JtYW5jZSB3aW4sXG4gICAgICAgICAgICAgICAgLy8gIGFuZCB0aGUgc21hbGwgZ2FwcyBpbnRyb2R1Y2VkIGRvbid0IG1ha2UgYSB2ZXJ5IG5vdGljZWFibGUgZGlmZmVyZW5jZS5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRUb29EZW5zZWx5ID0gcmFkaXVzICogcmFkaXVzICogMiA+IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZWRUb29EZW5zZWx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0TGVhc3RPbmVNb3JlQ2lyY2xlID0gKGsgKyA4KSA8IGNvbGxpc2lvbkNpcmNsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXRMZWFzdE9uZU1vcmVDaXJjbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRCb3hEaXN0YW5jZVRvQW5jaG9yID0gY29sbGlzaW9uQ2lyY2xlc1trICsgOF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG5leHRCb3hEaXN0YW5jZVRvQW5jaG9yID4gLWZpcnN0VGlsZURpc3RhbmNlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRCb3hEaXN0YW5jZVRvQW5jaG9yIDwgbGFzdFRpbGVEaXN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIHNpZ25pZmljYW50bHkgb3ZlcmxhcHBpbmcgY2lyY2xlcywgdW5sZXNzIHRoaXMgaXMgdGhlIGxhc3Qgb25lIHdlIGNhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgaXQgaW4gcGxhY2UgZXZlbiBpZiBpdCdzIHRpZ2h0bHkgcGFja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgb25lIGJlZm9yZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrQ29sbGlzaW9uQ2lyY2xlVXNlZChjb2xsaXNpb25DaXJjbGVzLCBrLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xsaXNpb25Cb3hBcnJheUluZGV4ID0gayAvIDU7XG4gICAgICAgICAgICBwbGFjZWRDb2xsaXNpb25DaXJjbGVzLnB1c2gocHJvamVjdGVkUG9pbnQueCwgcHJvamVjdGVkUG9pbnQueSwgcmFkaXVzLCBjb2xsaXNpb25Cb3hBcnJheUluZGV4KTtcbiAgICAgICAgICAgIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXMsIGssIHRydWUpO1xuXG4gICAgICAgICAgICBjb25zdCB4MSA9IHByb2plY3RlZFBvaW50LnggLSByYWRpdXM7XG4gICAgICAgICAgICBjb25zdCB5MSA9IHByb2plY3RlZFBvaW50LnkgLSByYWRpdXM7XG4gICAgICAgICAgICBjb25zdCB4MiA9IHByb2plY3RlZFBvaW50LnggKyByYWRpdXM7XG4gICAgICAgICAgICBjb25zdCB5MiA9IHByb2plY3RlZFBvaW50LnkgKyByYWRpdXM7XG4gICAgICAgICAgICBlbnRpcmVseU9mZnNjcmVlbiA9IGVudGlyZWx5T2Zmc2NyZWVuICYmIHRoaXMuaXNPZmZzY3JlZW4oeDEsIHkxLCB4MiwgeTIpO1xuICAgICAgICAgICAgaW5HcmlkID0gaW5HcmlkIHx8IHRoaXMuaXNJbnNpZGVHcmlkKHgxLCB5MSwgeDIsIHkyKTtcblxuICAgICAgICAgICAgaWYgKCFhbGxvd092ZXJsYXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhpdFRlc3RDaXJjbGUocHJvamVjdGVkUG9pbnQueCwgcHJvamVjdGVkUG9pbnQueSwgcmFkaXVzLCBjb2xsaXNpb25Hcm91cFByZWRpY2F0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG93Q29sbGlzaW9uQ2lyY2xlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZWFybHkgZXhpdCBpZiB3ZSdyZSBzaG93aW5nIHRoZSBkZWJ1ZyBjaXJjbGVzIGJlY2F1c2Ugd2Ugc3RpbGwgd2FudCB0byBjYWxjdWxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNpcmNsZXMgYXJlIGluIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNpcmNsZXM6IChjb2xsaXNpb25EZXRlY3RlZCB8fCAhaW5HcmlkKSA/IFtdIDogcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogZW50aXJlbHlPZmZzY3JlZW5cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCZWNhdXNlIHRoZSBnZW9tZXRyaWVzIGluIHRoZSBDb2xsaXNpb25JbmRleCBhcmUgYW4gYXBwcm94aW1hdGlvbiBvZiB0aGUgc2hhcGUgb2ZcbiAgICAgKiBzeW1ib2xzIG9uIHRoZSBtYXAsIHdlIHVzZSB0aGUgQ29sbGlzaW9uSW5kZXggdG8gbG9vayB1cCB0aGUgc3ltYm9sIHBhcnQgb2ZcbiAgICAgKiBgcXVlcnlSZW5kZXJlZEZlYXR1cmVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcXVlcnlSZW5kZXJlZFN5bWJvbHModmlld3BvcnRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKHZpZXdwb3J0UXVlcnlHZW9tZXRyeS5sZW5ndGggPT09IDAgfHwgKHRoaXMuZ3JpZC5rZXlzTGVuZ3RoKCkgPT09IDAgJiYgdGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkgPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IFtdO1xuICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygdmlld3BvcnRRdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBncmlkUG9pbnQgPSBuZXcgUG9pbnQocG9pbnQueCArIHZpZXdwb3J0UGFkZGluZywgcG9pbnQueSArIHZpZXdwb3J0UGFkZGluZyk7XG4gICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZ3JpZFBvaW50LngpO1xuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGdyaWRQb2ludC55KTtcbiAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgcXVlcnkucHVzaChncmlkUG9pbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdyaWQucXVlcnkobWluWCwgbWluWSwgbWF4WCwgbWF4WSlcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5pZ25vcmVkR3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKSk7XG5cbiAgICAgICAgY29uc3Qgc2VlbkZlYXR1cmVzID0ge307XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZUtleSA9IGZlYXR1cmUua2V5O1xuICAgICAgICAgICAgLy8gU2tpcCBhbHJlYWR5IHNlZW4gZmVhdHVyZXMuXG4gICAgICAgICAgICBpZiAoc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlZW5GZWF0dXJlc1tmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF1bZmVhdHVyZUtleS5mZWF0dXJlSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHF1ZXJ5IGludGVyc2VjdHMgd2l0aCB0aGUgZmVhdHVyZSBib3hcbiAgICAgICAgICAgIC8vIFwiQ29sbGlzaW9uIENpcmNsZXNcIiBmb3IgbGluZSBsYWJlbHMgYXJlIHRyZWF0ZWQgYXMgYm94ZXMgaGVyZVxuICAgICAgICAgICAgLy8gU2luY2UgdGhlcmUncyBubyBhY3R1YWwgY29sbGlzaW9uIHRha2luZyBwbGFjZSwgdGhlIGNpcmNsZSB2cy4gc3F1YXJlXG4gICAgICAgICAgICAvLyBkaXN0aW5jdGlvbiBkb2Vzbid0IG1hdHRlciBhcyBtdWNoLCBhbmQgYm94IGdlb21ldHJ5IGlzIGVhc2llclxuICAgICAgICAgICAgLy8gdG8gd29yayB3aXRoLlxuICAgICAgICAgICAgY29uc3QgYmJveCA9IFtcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MSwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTEpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngyLCBmZWF0dXJlLnkyKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MSwgZmVhdHVyZS55MilcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoIWludGVyc2VjdGlvblRlc3RzLnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihxdWVyeSwgYmJveCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF1bZmVhdHVyZUtleS5mZWF0dXJlSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdLnB1c2goZmVhdHVyZUtleS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpbnNlcnRDb2xsaXNpb25Cb3goY29sbGlzaW9uQm94OiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZ3JpZC5pbnNlcnQoa2V5LCBjb2xsaXNpb25Cb3hbMF0sIGNvbGxpc2lvbkJveFsxXSwgY29sbGlzaW9uQm94WzJdLCBjb2xsaXNpb25Cb3hbM10pO1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPiwgaWdub3JlUGxhY2VtZW50OiBib29sZWFuLCBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIsIGZlYXR1cmVJbmRleDogbnVtYmVyLCBjb2xsaXNpb25Hcm91cElEOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IGlnbm9yZVBsYWNlbWVudCA/IHRoaXMuaWdub3JlZEdyaWQgOiB0aGlzLmdyaWQ7XG5cbiAgICAgICAgY29uc3Qga2V5ID0ge2J1Y2tldEluc3RhbmNlSWQsIGZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXBJRH07XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7IGsgKz0gNCkge1xuICAgICAgICAgICAgZ3JpZC5pbnNlcnRDaXJjbGUoa2V5LCBjb2xsaXNpb25DaXJjbGVzW2tdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAxXSwgY29sbGlzaW9uQ2lyY2xlc1trICsgMl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvamVjdEFuY2hvcihwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwZXJzcGVjdGl2ZVJhdGlvOiAwLjUgKyAwLjUgKiAodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHBbM10pLFxuICAgICAgICAgICAgY2FtZXJhRGlzdGFuY2U6IHBbM11cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9qZWN0UG9pbnQocG9zTWF0cml4OiBtYXQ0LCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwID0gW3gsIHksIDAsIDFdO1xuICAgICAgICBwcm9qZWN0aW9uLnh5VHJhbnNmb3JtTWF0NChwLCBwLCBwb3NNYXRyaXgpO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAgICAgKCgocFswXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0ud2lkdGgpICsgdmlld3BvcnRQYWRkaW5nLFxuICAgICAgICAgICAgKCgoLXBbMV0gLyBwWzNdICsgMSkgLyAyKSAqIHRoaXMudHJhbnNmb3JtLmhlaWdodCkgKyB2aWV3cG9ydFBhZGRpbmdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IGEgPSBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnQ6IGEsXG4gICAgICAgICAgICAvLyBTZWUgcGVyc3BlY3RpdmUgcmF0aW8gY29tbWVudCBpbiBzeW1ib2xfc2RmLnZlcnRleFxuICAgICAgICAgICAgLy8gV2UncmUgZG9pbmcgY29sbGlzaW9uIGRldGVjdGlvbiBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3ZSBuZWVkXG4gICAgICAgICAgICAvLyB0byBzY2FsZSBkb3duIGJveGVzIGluIHRoZSBkaXN0YW5jZVxuICAgICAgICAgICAgcGVyc3BlY3RpdmVSYXRpbzogMC41ICsgMC41ICogKHRoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBwWzNdKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlzT2Zmc2NyZWVuKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHgxID49IHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSB8fCB5MiA8IHZpZXdwb3J0UGFkZGluZyB8fCB5MSA+IHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk7XG4gICAgfVxuXG4gICAgaXNJbnNpZGVHcmlkKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyID49IDAgJiYgeDEgPCB0aGlzLmdyaWRSaWdodEJvdW5kYXJ5ICYmIHkyID49IDAgJiYgeTEgPCB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXM6IEFycmF5PG51bWJlcj4sIGluZGV4OiBudW1iZXIsIHVzZWQ6IGJvb2xlYW4pIHtcbiAgICBjb2xsaXNpb25DaXJjbGVzW2luZGV4ICsgNF0gPSB1c2VkID8gMSA6IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxpc2lvbkluZGV4O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5cbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgYXQgYSB0aGUgZ2l2ZW4gem9vbSBsZXZlbCB0byB0aWxlIHVuaXRzLlxuICpcbiAqIFRoZSBzaGFkZXJzIG1vc3RseSBjYWxjdWxhdGUgZXZlcnl0aGluZyBpbiB0aWxlIHVuaXRzIHNvIHN0eWxlXG4gKiBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgY29udmVydGVkIGZyb20gcGl4ZWxzIHRvIHRpbGUgdW5pdHMgdXNpbmcgdGhpcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBieSAzMCBwaXhlbHMgYXQgem9vbSA2LjUgd2lsbCBiZSBhXG4gKiB0cmFuc2xhdGlvbiBieSBwaXhlbHNUb1RpbGVVbml0cygzMCwgNi41KSB0aWxlIHVuaXRzLlxuICpcbiAqIEByZXR1cm5zIHZhbHVlIGluIHRpbGUgdW5pdHNcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRpbGU6IHt0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHRpbGVTaXplOiBudW1iZXJ9LCBwaXhlbFZhbHVlOiBudW1iZXIsIHo6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHBpeGVsVmFsdWUgKiAoRVhURU5UIC8gKHRpbGUudGlsZVNpemUgKiBNYXRoLnBvdygyLCB6IC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopKSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sbGlzaW9uSW5kZXggZnJvbSAnLi9jb2xsaXNpb25faW5kZXgnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgKiBhcyBzeW1ib2xTaXplIGZyb20gJy4vc3ltYm9sX3NpemUnO1xuaW1wb3J0ICogYXMgcHJvamVjdGlvbiBmcm9tICcuL3Byb2plY3Rpb24nO1xuaW1wb3J0IHtnZXRBbmNob3JKdXN0aWZpY2F0aW9uLCBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtnZXRBbmNob3JBbGlnbm1lbnQsIFdyaXRpbmdNb2RlfSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQsIHtDb2xsaXNpb25BcnJheXMsIFNpbmdsZUNvbGxpc2lvbkJveH0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheSwgQ29sbGlzaW9uVmVydGV4QXJyYXksIFN5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtUZXh0QW5jaG9yfSBmcm9tICcuL3N5bWJvbF9sYXlvdXQnO1xuXG5jbGFzcyBPcGFjaXR5U3RhdGUge1xuICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICBwbGFjZWQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHJldlN0YXRlOiA/T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkOiBib29sZWFuLCBza2lwRmFkZTogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcHJldlN0YXRlLm9wYWNpdHkgKyAocHJldlN0YXRlLnBsYWNlZCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSAoc2tpcEZhZGUgJiYgcGxhY2VkKSA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGxhY2VkID0gcGxhY2VkO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BhY2l0eSA9PT0gMCAmJiAhdGhpcy5wbGFjZWQ7XG4gICAgfVxufVxuXG5jbGFzcyBKb2ludE9wYWNpdHlTdGF0ZSB7XG4gICAgdGV4dDogT3BhY2l0eVN0YXRlO1xuICAgIGljb246IE9wYWNpdHlTdGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9Kb2ludE9wYWNpdHlTdGF0ZSwgaW5jcmVtZW50OiBudW1iZXIsIHBsYWNlZFRleHQ6IGJvb2xlYW4sIHBsYWNlZEljb246IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSBuZXcgT3BhY2l0eVN0YXRlKHByZXZTdGF0ZSA/IHByZXZTdGF0ZS50ZXh0IDogbnVsbCwgaW5jcmVtZW50LCBwbGFjZWRUZXh0LCBza2lwRmFkZSk7XG4gICAgICAgIHRoaXMuaWNvbiA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLmljb24gOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZEljb24sIHNraXBGYWRlKTtcbiAgICB9XG4gICAgaXNIaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSAmJiB0aGlzLmljb24uaXNIaWRkZW4oKTtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50UGxhY2VtZW50IHtcbiAgICB0ZXh0OiBib29sZWFuO1xuICAgIGljb246IGJvb2xlYW47XG4gICAgLy8gc2tpcEZhZGUgPSBvdXRzaWRlIHZpZXdwb3J0LCBidXQgd2l0aGluIENvbGxpc2lvbkluZGV4Ojp2aWV3cG9ydFBhZGRpbmcgcHggb2YgdGhlIGVkZ2VcbiAgICAvLyBCZWNhdXNlIHRoZXNlIHN5bWJvbHMgYXJlbid0IG9uc2NyZWVuIHlldCwgd2UgY2FuIHNraXAgdGhlIFwiZmFkZSBpblwiIGFuaW1hdGlvbixcbiAgICAvLyBhbmQgaWYgYSBzdWJzZXF1ZW50IHZpZXdwb3J0IGNoYW5nZSBicmluZ3MgdGhlbSBpbnRvIHZpZXcsIHRoZXknbGwgYmUgZnVsbHlcbiAgICAvLyB2aXNpYmxlIHJpZ2h0IGF3YXkuXG4gICAgc2tpcEZhZGU6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IodGV4dDogYm9vbGVhbiwgaWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5pY29uID0gaWNvbjtcbiAgICAgICAgdGhpcy5za2lwRmFkZSA9IHNraXBGYWRlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJldGFpbmVkUXVlcnlEYXRhIHtcbiAgICBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXg7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIGZlYXR1cmVTb3J0T3JkZXI6ID9BcnJheTxudW1iZXI+XG4gICAgY29uc3RydWN0b3IoYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleDogRmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICB0aGlzLmJ1Y2tldEluc3RhbmNlSWQgPSBidWNrZXRJbnN0YW5jZUlkO1xuICAgICAgICB0aGlzLmZlYXR1cmVJbmRleCA9IGZlYXR1cmVJbmRleDtcbiAgICAgICAgdGhpcy5zb3VyY2VMYXllckluZGV4ID0gc291cmNlTGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5idWNrZXRJbmRleCA9IGJ1Y2tldEluZGV4O1xuICAgICAgICB0aGlzLnRpbGVJRCA9IHRpbGVJRDtcbiAgICB9XG59XG5cbnR5cGUgQ29sbGlzaW9uR3JvdXAgPSB7IElEOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSB9O1xuXG5jbGFzcyBDb2xsaXNpb25Hcm91cHMge1xuICAgIGNvbGxpc2lvbkdyb3Vwczoge1tncm91cE5hbWU6IHN0cmluZ106IENvbGxpc2lvbkdyb3VwfTtcbiAgICBtYXhHcm91cElEOiBudW1iZXI7XG4gICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zID0gY3Jvc3NTb3VyY2VDb2xsaXNpb25zO1xuICAgICAgICB0aGlzLm1heEdyb3VwSUQgPSAwO1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkdyb3VwcyA9IHt9O1xuICAgIH1cblxuICAgIGdldChzb3VyY2VJRDogc3RyaW5nKSB7XG4gICAgICAgIC8vIFRoZSBwcmVkaWNhdGUvZ3JvdXBJRCBtZWNoYW5pc20gYWxsb3dzIGZvciBhcmJpdHJhcnkgZ3JvdXBpbmcsXG4gICAgICAgIC8vIGJ1dCB0aGUgY3VycmVudCBpbnRlcmZhY2UgZGVmaW5lcyBvbmUgc291cmNlID09IG9uZSBncm91cCB3aGVuXG4gICAgICAgIC8vIGNyb3NzU291cmNlQ29sbGlzaW9ucyA9PSB0cnVlLlxuICAgICAgICBpZiAoIXRoaXMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sbGlzaW9uR3JvdXBzW3NvdXJjZUlEXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRHcm91cElEID0gKyt0aGlzLm1heEdyb3VwSUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHNbc291cmNlSURdID0ge1xuICAgICAgICAgICAgICAgICAgICBJRDogbmV4dEdyb3VwSUQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5jb2xsaXNpb25Hcm91cElEID09PSBuZXh0R3JvdXBJRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xsaXNpb25Hcm91cHNbc291cmNlSURdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtJRDogMCwgcHJlZGljYXRlOiBudWxsfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlVmFyaWFibGVMYXlvdXRTaGlmdChhbmNob3I6IFRleHRBbmNob3IsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLCB0ZXh0Qm94U2NhbGU6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudChhbmNob3IpO1xuICAgIGNvbnN0IHNoaWZ0WCA9IC0oaG9yaXpvbnRhbEFsaWduIC0gMC41KSAqIHdpZHRoO1xuICAgIGNvbnN0IHNoaWZ0WSA9IC0odmVydGljYWxBbGlnbiAtIDAuNSkgKiBoZWlnaHQ7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZXZhbHVhdGVWYXJpYWJsZU9mZnNldChhbmNob3IsIHRleHRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgIHNoaWZ0WCArIG9mZnNldFswXSAqIHRleHRCb3hTY2FsZSxcbiAgICAgICAgc2hpZnRZICsgb2Zmc2V0WzFdICogdGV4dEJveFNjYWxlXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gc2hpZnRWYXJpYWJsZUNvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IFNpbmdsZUNvbGxpc2lvbkJveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFg6IG51bWJlciwgc2hpZnRZOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcDogYm9vbGVhbiwgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlOiBudW1iZXIpIHtcbiAgICBjb25zdCB7eDEsIHgyLCB5MSwgeTIsIGFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZfSA9IGNvbGxpc2lvbkJveDtcbiAgICBjb25zdCByb3RhdGVkT2Zmc2V0ID0gbmV3IFBvaW50KHNoaWZ0WCwgc2hpZnRZKTtcbiAgICBpZiAocm90YXRlV2l0aE1hcCkge1xuICAgICAgICByb3RhdGVkT2Zmc2V0Ll9yb3RhdGUocGl0Y2hXaXRoTWFwID8gYW5nbGUgOiAtYW5nbGUpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB4MTogeDEgKyByb3RhdGVkT2Zmc2V0LngsXG4gICAgICAgIHkxOiB5MSArIHJvdGF0ZWRPZmZzZXQueSxcbiAgICAgICAgeDI6IHgyICsgcm90YXRlZE9mZnNldC54LFxuICAgICAgICB5MjogeTIgKyByb3RhdGVkT2Zmc2V0LnksXG4gICAgICAgIC8vIHN5bWJvbCBhbmNob3IgcG9pbnQgc3RheXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0ZXh0LWFuY2hvclxuICAgICAgICBhbmNob3JQb2ludFgsXG4gICAgICAgIGFuY2hvclBvaW50WVxuICAgIH07XG59XG5cbmV4cG9ydCB0eXBlIFZhcmlhYmxlT2Zmc2V0ID0ge1xuICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBhbmNob3I6IFRleHRBbmNob3IsXG4gICAgdGV4dEJveFNjYWxlOiBudW1iZXIsXG4gICAgcHJldkFuY2hvcj86IFRleHRBbmNob3Jcbn07XG5cbnR5cGUgVGlsZUxheWVyUGFyYW1ldGVycyA9IHtcbiAgICBidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICBsYXlvdXQ6IGFueSxcbiAgICBwb3NNYXRyaXg6IG1hdDQsXG4gICAgdGV4dExhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgIGhvbGRpbmdGb3JGYWRlOiBib29sZWFuLFxuICAgIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXksXG4gICAgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6IGFueSxcbiAgICBjb2xsaXNpb25Hcm91cDogYW55XG59O1xuXG5leHBvcnQgdHlwZSBCdWNrZXRQYXJ0ID0ge1xuICAgIHNvcnRLZXk/OiBudW1iZXIgfCB2b2lkLFxuICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IG51bWJlcixcbiAgICBzeW1ib2xJbnN0YW5jZUVuZDogbnVtYmVyLFxuICAgIHBhcmFtZXRlcnM6IFRpbGVMYXllclBhcmFtZXRlcnNcbn07XG5cbmV4cG9ydCB0eXBlIENyb3NzVGlsZUlEID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgY2xhc3MgUGxhY2VtZW50IHtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBjb2xsaXNpb25JbmRleDogQ29sbGlzaW9uSW5kZXg7XG4gICAgcGxhY2VtZW50czogeyBbQ3Jvc3NUaWxlSURdOiBKb2ludFBsYWNlbWVudCB9O1xuICAgIG9wYWNpdGllczogeyBbQ3Jvc3NUaWxlSURdOiBKb2ludE9wYWNpdHlTdGF0ZSB9O1xuICAgIHZhcmlhYmxlT2Zmc2V0czoge1tDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0IH07XG4gICAgcGxhY2VkT3JpZW50YXRpb25zOiB7W0Nyb3NzVGlsZUlEXTogbnVtYmVyIH07XG4gICAgY29tbWl0VGltZTogbnVtYmVyO1xuICAgIHByZXZab29tQWRqdXN0bWVudDogbnVtYmVyO1xuICAgIGxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOiBudW1iZXI7XG4gICAgc3RhbGU6IGJvb2xlYW47XG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgcmV0YWluZWRRdWVyeURhdGE6IHtbbnVtYmVyXTogUmV0YWluZWRRdWVyeURhdGF9O1xuICAgIGNvbGxpc2lvbkdyb3VwczogQ29sbGlzaW9uR3JvdXBzO1xuICAgIHByZXZQbGFjZW1lbnQ6ID9QbGFjZW1lbnQ7XG4gICAgem9vbUF0TGFzdFJlY2VuY3lDaGVjazogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIGZhZGVEdXJhdGlvbjogbnVtYmVyLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sIHByZXZQbGFjZW1lbnQ/OiBQbGFjZW1lbnQpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0uY2xvbmUoKTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleCA9IG5ldyBDb2xsaXNpb25JbmRleCh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgIHRoaXMucGxhY2VtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLm9wYWNpdGllcyA9IHt9O1xuICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0cyA9IHt9O1xuICAgICAgICB0aGlzLnN0YWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tbWl0VGltZSA9IDA7XG4gICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gZmFkZUR1cmF0aW9uO1xuICAgICAgICB0aGlzLnJldGFpbmVkUXVlcnlEYXRhID0ge307XG4gICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzID0gbmV3IENvbGxpc2lvbkdyb3Vwcyhjcm9zc1NvdXJjZUNvbGxpc2lvbnMpO1xuXG4gICAgICAgIHRoaXMucHJldlBsYWNlbWVudCA9IHByZXZQbGFjZW1lbnQ7XG4gICAgICAgIGlmIChwcmV2UGxhY2VtZW50KSB7XG4gICAgICAgICAgICBwcmV2UGxhY2VtZW50LnByZXZQbGFjZW1lbnQgPSB1bmRlZmluZWQ7IC8vIE9ubHkgaG9sZCBvbiB0byBvbmUgcGxhY2VtZW50IGJhY2tcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zID0ge307XG4gICAgfVxuXG4gICAgZ2V0QnVja2V0UGFydHMocmVzdWx0czogQXJyYXk8QnVja2V0UGFydD4sIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHRpbGU6IFRpbGUsIHNvcnRBY3Jvc3NUaWxlczogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlSW5kZXggPSB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgIWJ1Y2tldEZlYXR1cmVJbmRleCB8fCBzdHlsZUxheWVyLmlkICE9PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uQm94QXJyYXkgPSB0aWxlLmNvbGxpc2lvbkJveEFycmF5O1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IHN5bWJvbEJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgdGhpcy50cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgdGV4dFBpeGVsUmF0aW8gPSB0aWxlLnRpbGVTaXplIC8gRVhURU5UO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IHRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlLnRpbGVJRC50b1Vud3JhcHBlZCgpKTtcblxuICAgICAgICBjb25zdCB0ZXh0TGFiZWxQbGFuZU1hdHJpeCA9IHByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdGhpcy50cmFuc2Zvcm0uem9vbSkpO1xuXG4gICAgICAgIC8vIEFzIGxvbmcgYXMgdGhpcyBwbGFjZW1lbnQgbGl2ZXMsIHdlIGhhdmUgdG8gaG9sZCBvbnRvIHRoaXMgYnVja2V0J3NcbiAgICAgICAgLy8gbWF0Y2hpbmcgRmVhdHVyZUluZGV4L2RhdGEgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzXG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGFbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gbmV3IFJldGFpbmVkUXVlcnlEYXRhKFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5pbmRleCxcbiAgICAgICAgICAgIHRpbGUudGlsZUlEXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGJ1Y2tldDogc3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgaG9sZGluZ0ZvckZhZGU6IHRpbGUuaG9sZGluZ0ZvckZhZGUoKSxcbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzeW1ib2xCdWNrZXQudGV4dFNpemVEYXRhLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwOiB0aGlzLmNvbGxpc2lvbkdyb3Vwcy5nZXQoc3ltYm9sQnVja2V0LnNvdXJjZUlEKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzb3J0QWNyb3NzVGlsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmFuZ2Ugb2Ygc3ltYm9sQnVja2V0LnNvcnRLZXlSYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7c29ydEtleSwgc3ltYm9sSW5zdGFuY2VTdGFydCwgc3ltYm9sSW5zdGFuY2VFbmR9ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtzb3J0S2V5LCBzeW1ib2xJbnN0YW5jZVN0YXJ0LCBzeW1ib2xJbnN0YW5jZUVuZCwgcGFyYW1ldGVyc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZVN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlRW5kOiBzeW1ib2xCdWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGF0dGVtcHRBbmNob3JQbGFjZW1lbnQoYW5jaG9yOiBUZXh0QW5jaG9yLCB0ZXh0Qm94OiBTaW5nbGVDb2xsaXNpb25Cb3gsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlOiBudW1iZXIsIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXA6IENvbGxpc2lvbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcDogYm9vbGVhbiwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgaWNvbkJveDogP1NpbmdsZUNvbGxpc2lvbkJveCk6ID97IHNoaWZ0OiBQb2ludCwgcGxhY2VkR2x5cGhCb3hlczogeyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IH0gIHtcblxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gW3N5bWJvbEluc3RhbmNlLnRleHRPZmZzZXQwLCBzeW1ib2xJbnN0YW5jZS50ZXh0T2Zmc2V0MV07XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVMYXlvdXRTaGlmdChhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VkR2x5cGhCb3hlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgIHRleHRCb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSksXG4gICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuXG4gICAgICAgIGlmIChpY29uQm94KSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWRJY29uQm94ZXMgPSB0aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdGhpcy50cmFuc2Zvcm0uYW5nbGUpLFxuICAgICAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICBpZiAocGxhY2VkSWNvbkJveGVzLmJveC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwbGFjZWRHbHlwaEJveGVzLmJveC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcHJldkFuY2hvcjtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgbGFiZWwgd2FzIHBsYWNlZCBpbiB0aGUgcHJldmlvdXMgcGxhY2VtZW50LCByZWNvcmQgdGhlIGFuY2hvciBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdG8gYWxsb3cgdXMgdG8gYW5pbWF0ZSB0aGUgdHJhbnNpdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMucHJldlBsYWNlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdLnRleHQpIHtcbiAgICAgICAgICAgICAgICBwcmV2QW5jaG9yID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0uYW5jaG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzZXJ0KHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEICE9PSAwKTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlLFxuICAgICAgICAgICAgICAgIHByZXZBbmNob3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsIGFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgb3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtzaGlmdCwgcGxhY2VkR2x5cGhCb3hlc307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwbGFjZUxheWVyQnVja2V0UGFydChidWNrZXRQYXJ0OiBPYmplY3QsIHNlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSwgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgYnVja2V0LFxuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgaG9sZGluZ0ZvckZhZGUsXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLFxuICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBcbiAgICAgICAgfSA9IGJ1Y2tldFBhcnQucGFyYW1ldGVycztcblxuICAgICAgICBjb25zdCB0ZXh0T3B0aW9uYWwgPSBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJyk7XG4gICAgICAgIGNvbnN0IGljb25PcHRpb25hbCA9IGxheW91dC5nZXQoJ2ljb24tb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IGhhc0ljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHpPcmRlckJ5Vmlld3BvcnRZID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSA9PT0gJ3ZpZXdwb3J0LXknO1xuXG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgc2ltaWxhciB0byB0aGUgXCJkZWZhdWx0T3BhY2l0eVN0YXRlXCIgbG9naWMgYmVsb3cgaW4gdXBkYXRlQnVja2V0T3BhY2l0aWVzXG4gICAgICAgIC8vIElmIHdlIGtub3cgYSBzeW1ib2wgaXMgYWx3YXlzIHN1cHBvc2VkIHRvIHNob3csIGZvcmNlIGl0IHRvIGJlIG1hcmtlZCB2aXNpYmxlIGV2ZW4gaWZcbiAgICAgICAgLy8gaXQgd2Fzbid0IHBsYWNlZCBpbnRvIHRoZSBjb2xsaXNpb24gaW5kZXggKGJlY2F1c2Ugc29tZSBvciBhbGwgb2YgaXQgd2FzIG91dHNpZGUgdGhlIHJhbmdlXG4gICAgICAgIC8vIG9mIHRoZSBjb2xsaXNpb24gZ3JpZCkuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgc3VidGxlIGVkZ2UgY2FzZSBoZXJlIHdlJ3JlIGFjY2VwdGluZzpcbiAgICAgICAgLy8gIFN5bWJvbCBBIGhhcyB0ZXh0LWFsbG93LW92ZXJsYXA6IHRydWUsIGljb24tYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1vcHRpb25hbDogZmFsc2VcbiAgICAgICAgLy8gIEEncyBpY29uIGlzIG91dHNpZGUgdGhlIGdyaWQsIHNvIGRvZXNuJ3QgZ2V0IHBsYWNlZFxuICAgICAgICAvLyAgQSdzIHRleHQgd291bGQgYmUgaW5zaWRlIGdyaWQsIGJ1dCBkb2Vzbid0IGdldCBwbGFjZWQgYmVjYXVzZSBvZiBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgV2Ugc3RpbGwgc2hvdyBBIGJlY2F1c2Ugb2YgdGhlIGFsbG93LW92ZXJsYXAgc2V0dGluZ3MuXG4gICAgICAgIC8vICBTeW1ib2wgQiBoYXMgYWxsb3ctb3ZlcmxhcDogZmFsc2UsIGFuZCBnZXRzIHBsYWNlZCB3aGVyZSBBJ3MgdGV4dCB3b3VsZCBiZVxuICAgICAgICAvLyAgT24gcGFubmluZyBpbiwgdGhlcmUgaXMgYSBzaG9ydCBwZXJpb2Qgd2hlbiBTeW1ib2wgQiBhbmQgU3ltYm9sIEEgd2lsbCBvdmVybGFwXG4gICAgICAgIC8vICBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIG91ciBub3JtYWwgcG9saWN5IG9mIFwiZmFkZSBpbiBvbiBwYW5cIiwgYnV0IHNob3VsZCBsb29rIGxpa2UgYW55IG90aGVyXG4gICAgICAgIC8vICBjb2xsaXNpb24gYW5kIGhvcGVmdWxseSBub3QgYmUgdG9vIG5vdGljZWFibGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzE3MlxuICAgICAgICBjb25zdCBhbHdheXNTaG93VGV4dCA9IHRleHRBbGxvd092ZXJsYXAgJiYgKGljb25BbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNJY29uRGF0YSgpIHx8IGljb25PcHRpb25hbCk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dJY29uID0gaWNvbkFsbG93T3ZlcmxhcCAmJiAodGV4dEFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc1RleHREYXRhKCkgfHwgdGV4dE9wdGlvbmFsKTtcblxuICAgICAgICBpZiAoIWJ1Y2tldC5jb2xsaXNpb25BcnJheXMgJiYgY29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGNvbGxpc2lvbkJveEFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBsYWNlU3ltYm9sID0gKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY29sbGlzaW9uQXJyYXlzOiBDb2xsaXNpb25BcnJheXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuQ3Jvc3NUaWxlSURzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGhvbGRpbmdGb3JGYWRlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayBhbGwgc3ltYm9scyBmcm9tIHRoaXMgdGlsZSBhcyBcIm5vdCBwbGFjZWRcIiwgYnV0IGRvbid0IGFkZCB0byBzZWVuQ3Jvc3NUaWxlSURzLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgICAgICAgICAgICAgLy8ga25vdyB5ZXQgaWYgd2UgaGF2ZSBhIGR1cGxpY2F0ZSBpbiBhIHBhcmVudCB0aWxlIHRoYXQgX3Nob3VsZF8gYmUgcGxhY2VkLlxuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRQbGFjZW1lbnQoZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGxhY2VUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcGxhY2VJY29uID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgb2Zmc2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IG51bGw7XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWQgPSB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgbGV0IHBsYWNlZFZlcnRpY2FsVGV4dCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaEJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaENpcmNsZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEljb25Cb3hlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdGV4dEZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCBpY29uRmVhdHVyZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnRleHRCb3g7XG4gICAgICAgICAgICBpZiAodGV4dEJveCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkID0gKGlzUGxhY2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c09yaWVudGF0aW9uID0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFpc1BsYWNlZCAmJiB0aGlzLnByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZQbGFjZWRPcmllbnRhdGlvbiA9IHRoaXMucHJldlBsYWNlbWVudC5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZQbGFjZWRPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHByZXZQbGFjZWRPcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c09yaWVudGF0aW9uID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIHByZXZpb3VzT3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNPcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VUZXh0Rm9yUGxhY2VtZW50TW9kZXMgPSAocGxhY2VIb3Jpem9udGFsRm4sIHBsYWNlVmVydGljYWxGbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMCAmJiBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBsYWNlbWVudE1vZGUgb2YgYnVja2V0LndyaXRpbmdNb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnRNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWQgPSBwbGFjZVZlcnRpY2FsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkVmVydGljYWxUZXh0ID0gcGxhY2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWQgJiYgcGxhY2VkLmJveCAmJiBwbGFjZWQuYm94Lmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWQgPSBwbGFjZUhvcml6b250YWxGbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUJveCA9IChjb2xsaXNpb25UZXh0Qm94LCBvcmllbnRhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VkRmVhdHVyZSA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goY29sbGlzaW9uVGV4dEJveCwgdGV4dEFsbG93T3ZlcmxhcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEZlYXR1cmUgJiYgcGxhY2VkRmVhdHVyZS5ib3ggJiYgcGxhY2VkRmVhdHVyZS5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgb3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWRGZWF0dXJlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSG9yaXpvbnRhbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh0ZXh0Qm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveCh2ZXJ0aWNhbFRleHRCb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByZXZpb3VzT3JpZW50YXRpb25JZk5vdFBsYWNlZChwbGFjZWQgJiYgcGxhY2VkLmJveCAmJiBwbGFjZWQuYm94Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9ycyA9IGxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzeW1ib2wgd2FzIGluIHRoZSBsYXN0IHBsYWNlbWVudCwgc2hpZnQgdGhlIHByZXZpb3VzbHkgdXNlZFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmNob3IgdG8gdGhlIGZyb250IG9mIHRoZSBhbmNob3IgbGlzdCwgb25seSBpZiB0aGUgcHJldmlvdXMgYW5jaG9yXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIHN0aWxsIGluIHRoZSBhbmNob3IgbGlzdFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2UGxhY2VtZW50ICYmIHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0cyA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvcnMuaW5kZXhPZihwcmV2T2Zmc2V0cy5hbmNob3IpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMgPSBhbmNob3JzLmZpbHRlcihhbmNob3IgPT4gYW5jaG9yICE9PSBwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMudW5zaGlmdChwcmV2T2Zmc2V0cy5hbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnMgPSAoY29sbGlzaW9uVGV4dEJveCwgY29sbGlzaW9uSWNvbkJveCwgb3JpZW50YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY29sbGlzaW9uVGV4dEJveC54MiAtIGNvbGxpc2lvblRleHRCb3gueDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjb2xsaXNpb25UZXh0Qm94LnkyIC0gY29sbGlzaW9uVGV4dEJveC55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCb3hTY2FsZSA9IHN5bWJvbEluc3RhbmNlLnRleHRCb3hTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFibGVJY29uQm94ID0gaGFzSWNvblRleHRGaXQgJiYgIWljb25BbGxvd092ZXJsYXAgPyBjb2xsaXNpb25JY29uQm94IDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBsYWNlZEJveDogP3sgYm94OiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSAgPSB7Ym94OiBbXSwgb2Zmc2NyZWVuOiBmYWxzZX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRBdHRlbXB0cyA9IHRleHRBbGxvd092ZXJsYXAgPyBhbmNob3JzLmxlbmd0aCAqIDIgOiBhbmNob3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhY2VtZW50QXR0ZW1wdHM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGFuY2hvcnNbaSAlIGFuY2hvcnMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvd092ZXJsYXAgPSAoaSA+PSBhbmNob3JzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IsIGNvbGxpc2lvblRleHRCb3gsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZSwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cCwgYWxsb3dPdmVybGFwLCBzeW1ib2xJbnN0YW5jZSwgYnVja2V0LCBvcmllbnRhdGlvbiwgdmFyaWFibGVJY29uQm94KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkQm94ID0gcmVzdWx0LnBsYWNlZEdseXBoQm94ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWRCb3ggJiYgcGxhY2VkQm94LmJveCAmJiBwbGFjZWRCb3guYm94Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gcmVzdWx0LnNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZWRCb3g7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VIb3Jpem9udGFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94Rm9yVmFyaWFibGVBbmNob3JzKHRleHRCb3gsIGNvbGxpc2lvbkFycmF5cy5pY29uQm94LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVZlcnRpY2FsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Qm94ID0gY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc1BsYWNlZCA9IHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICF3YXNQbGFjZWQgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMCAmJiB2ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModmVydGljYWxUZXh0Qm94LCBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyhwbGFjZUhvcml6b250YWwsIHBsYWNlVmVydGljYWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbGFjZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZC5ib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBwbGFjZWQub2Zmc2NyZWVuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9uID0gdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IHBsYWNlZCwgd2Ugc3RpbGwgbmVlZCB0byBjb3B5IG91ciBwb3NpdGlvbiBmcm9tIHRoZSBsYXN0IHBsYWNlbWVudCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gZmFkZSBhbmltYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGxhY2VUZXh0ICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk9mZnNldCA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBwcmV2T2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgcHJldk9mZnNldC5hbmNob3IsIHN5bWJvbEluc3RhbmNlLCBwcmV2T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBsYWNlZEdseXBoQm94ZXMgPSBwbGFjZWQ7XG4gICAgICAgICAgICBwbGFjZVRleHQgPSBwbGFjZWRHbHlwaEJveGVzICYmIHBsYWNlZEdseXBoQm94ZXMuYm94ICYmIHBsYWNlZEdseXBoQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2lyY2xlcyA9IGNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztcbiAgICAgICAgICAgIGlmICh0ZXh0Q2lyY2xlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLCBwbGFjZWRTeW1ib2wpO1xuICAgICAgICAgICAgICAgIHBsYWNlZEdseXBoQ2lyY2xlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKHRleHRDaXJjbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRTeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQubGluZVZlcnRleEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmdseXBoT2Zmc2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0ZXh0LWFsbG93LW92ZXJsYXAgaXMgc2V0LCBmb3JjZSBcInBsYWNlZENpcmNsZXNcIiB0byB0cnVlXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlb3J5IHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGNpcmNsZSBwbGFjZWRcbiAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIGJ1dCBmb3Igbm93IHF1aXJrcyBpbiB0ZXh0LWFuY2hvclxuICAgICAgICAgICAgICAgIC8vIGFuZCB0ZXh0LW9mZnNldCBtYXkgcHJldmVudCB0aGF0IGZyb20gYmVpbmcgdHJ1ZS5cbiAgICAgICAgICAgICAgICBwbGFjZVRleHQgPSB0ZXh0QWxsb3dPdmVybGFwIHx8IHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuID0gb2Zmc2NyZWVuICYmIHBsYWNlZEdseXBoQ2lyY2xlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMuaWNvbkZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgIGljb25GZWF0dXJlSW5kZXggPSBjb2xsaXNpb25BcnJheXMuaWNvbkZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uQm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUljb25GZWF0dXJlID0gaWNvbkJveCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0ZWRJY29uQm94ID0gaGFzSWNvblRleHRGaXQgJiYgc2hpZnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYXJpYWJsZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQm94LCBzaGlmdC54LCBzaGlmdC55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdGhpcy50cmFuc2Zvcm0uYW5nbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25Cb3g7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHNoaWZ0ZWRJY29uQm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkFsbG93T3ZlcmxhcCwgdGV4dFBpeGVsUmF0aW8sIHBvc01hdHJpeCwgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlZFZlcnRpY2FsVGV4dCAmJiBwbGFjZWRWZXJ0aWNhbFRleHQuYm94ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3gubGVuZ3RoICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gcGxhY2VJY29uRmVhdHVyZShjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KTtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VkSWNvbkJveGVzLmJveC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlZEljb25Cb3hlcyA9IHBsYWNlSWNvbkZlYXR1cmUoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpO1xuICAgICAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IG9mZnNjcmVlbiAmJiBwbGFjZWRJY29uQm94ZXMub2Zmc2NyZWVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpY29uV2l0aG91dFRleHQgPSB0ZXh0T3B0aW9uYWwgfHxcbiAgICAgICAgICAgICAgICAoc3ltYm9sSW5zdGFuY2UubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPT09IDAgJiYgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaXRob3V0SWNvbiA9IGljb25PcHRpb25hbCB8fCBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMgPT09IDA7XG5cbiAgICAgICAgICAgIC8vIENvbWJpbmUgdGhlIHNjYWxlcyBmb3IgaWNvbnMgYW5kIHRleHQuXG4gICAgICAgICAgICBpZiAoIWljb25XaXRob3V0VGV4dCAmJiAhdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VJY29uID0gcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRleHRXaXRob3V0SWNvbikge1xuICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpY29uV2l0aG91dFRleHQpIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGxhY2VUZXh0ICYmIHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWxUZXh0ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3ggJiYgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEdseXBoQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwbGFjZWRHbHlwaEJveGVzLmJveCwgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBsYWNlSWNvbiAmJiBwbGFjZWRJY29uQm94ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwbGFjZWRJY29uQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCdpY29uLWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCBpY29uRmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGxhY2VUZXh0ICYmIHBsYWNlZEdseXBoQ2lyY2xlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcywgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkICE9PSAwKTtcblxuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChwbGFjZVRleHQgfHwgYWx3YXlzU2hvd1RleHQsIHBsYWNlSWNvbiB8fCBhbHdheXNTaG93SWNvbiwgb2Zmc2NyZWVuIHx8IGJ1Y2tldC5qdXN0UmVsb2FkZWQpO1xuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh6T3JkZXJCeVZpZXdwb3J0WSkge1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldFBhcnQuc3ltYm9sSW5zdGFuY2VTdGFydCA9PT0gMCk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleGVzID0gYnVja2V0LmdldFNvcnRlZFN5bWJvbEluZGV4ZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN5bWJvbEluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleCA9IHN5bWJvbEluZGV4ZXNbaV07XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoc3ltYm9sSW5kZXgpLCBidWNrZXQuY29sbGlzaW9uQXJyYXlzW3N5bWJvbEluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZVN0YXJ0OyBpIDwgYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZUVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoaSksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0Lmp1c3RSZWxvYWRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgcGxhY2VkQW5jaG9yOiBUZXh0QW5jaG9yLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB7XG4gICAgICAgICAgICBcImxlZnRcIjogc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwiY2VudGVyXCI6IHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwicmlnaHRcIjogc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXV0b0luZGV4O1xuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICBhdXRvSW5kZXggPSBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF1dG9JbmRleCA9IGp1c3RpZmljYXRpb25zW2dldEFuY2hvckp1c3RpZmljYXRpb24ocGxhY2VkQW5jaG9yKV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF1dG9JbmRleCA+PSAwICYmIGluZGV4ICE9PSBhdXRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGp1c3RpZmljYXRpb25zIGFuZCB0aGlzIG9uZSBpc24ndCBpdDogc2hpZnQgb2Zmc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBjaG9zZW4ganVzdGlmaWNhdGlvbiBvciB0aGUganVzdGlmaWNhdGlvbiBpcyBoYXJkd2lyZWQ6IHVzZSB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmNyb3NzVGlsZUlEID0gc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgb3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5KSA/IG9yaWVudGF0aW9uIDogMDtcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgPyBvcmllbnRhdGlvbiA6IDA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEluZGV4ZXMgPSBbXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGhvcml6b250YWxJbmRleGVzKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uID0gaG9yaXpvbnRhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkge1xuICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbiA9IHZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tbWl0VGltZSA9IG5vdztcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcblxuICAgICAgICBjb25zdCBwcmV2UGxhY2VtZW50ID0gdGhpcy5wcmV2UGxhY2VtZW50O1xuICAgICAgICBsZXQgcGxhY2VtZW50Q2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJldlpvb21BZGp1c3RtZW50ID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQuem9vbUFkanVzdG1lbnQodGhpcy50cmFuc2Zvcm0uem9vbSkgOiAwO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKG5vdykgOiAxO1xuXG4gICAgICAgIGNvbnN0IHByZXZPcGFjaXRpZXMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5vcGFjaXRpZXMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9mZnNldHMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9ucyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9ucyA6IHt9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgb3BhY2l0aWVzIGZyb20gdGhlIGN1cnJlbnQgcGxhY2VtZW50LCBhbmQgY29weSB0aGVpciBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91cyBwbGFjZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiB0aGlzLnBsYWNlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGpvaW50UGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZPcGFjaXR5ID0gcHJldk9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAocHJldk9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbik7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQudGV4dCAhPT0gcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQuaWNvbiAhPT0gcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCBpbmNyZW1lbnQsIGpvaW50UGxhY2VtZW50LnRleHQsIGpvaW50UGxhY2VtZW50Lmljb24sIGpvaW50UGxhY2VtZW50LnNraXBGYWRlKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fCBqb2ludFBsYWNlbWVudC50ZXh0IHx8IGpvaW50UGxhY2VtZW50Lmljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb3B5IGFuZCB1cGRhdGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudCB0aGF0IGFyZW4ndCBpbiB0aGUgY3VycmVudCBwbGFjZW1lbnQgYnV0IGhhdmVuJ3QgZmluaXNoZWQgZmFkaW5nXG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9wYWNpdGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbnRPcGFjaXR5ID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKHByZXZPcGFjaXR5LCBpbmNyZW1lbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2ludE9wYWNpdHkuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBqb2ludE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IHByZXZPcGFjaXR5LnRleHQucGxhY2VkIHx8IHByZXZPcGFjaXR5Lmljb24ucGxhY2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPZmZzZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdID0gcHJldk9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3JpZW50YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdID0gcHJldk9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGNvbW1pdCgpIHRoYXRcbiAgICAgICAgLy8gcmVzdWx0ZWQgaW4gYSBwbGFjZW1lbnQgY2hhbmdlIC0tIGluIG90aGVyIHdvcmRzLCB0aGUgc3RhcnQgdGltZSBvZlxuICAgICAgICAvLyB0aGUgbGFzdCBzeW1ib2wgZmFkZSBhbmltYXRpb25cbiAgICAgICAgYXNzZXJ0KCFwcmV2UGxhY2VtZW50IHx8IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDogbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+KSB7XG4gICAgICAgIGNvbnN0IHNlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEJ1Y2tldCAmJiB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleCAmJiBzdHlsZUxheWVyLmlkID09PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhzeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHMsIHRpbGUuY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQnVja2V0T3BhY2l0aWVzKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpKSBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpKSBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSkgYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlUGxhY2VtZW50ID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcbiAgICAgICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgLy8gSWYgYWxsb3ctb3ZlcmxhcCBpcyB0cnVlLCB3ZSBjYW4gc2hvdyBzeW1ib2xzIGJlZm9yZSBwbGFjZW1lbnQgcnVucyBvbiB0aGVtXG4gICAgICAgIC8vIEJ1dCB3ZSBoYXZlIHRvIHdhaXQgZm9yIHBsYWNlbWVudCBpZiB3ZSBwb3RlbnRpYWxseSBkZXBlbmQgb24gYSBwYWlyZWQgaWNvbi90ZXh0XG4gICAgICAgIC8vIHdpdGggYWxsb3ctb3ZlcmxhcDogZmFsc2UuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzAzMlxuICAgICAgICBjb25zdCBkZWZhdWx0T3BhY2l0eVN0YXRlID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKG51bGwsIDAsXG4gICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCAmJiAoaWNvbkFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc0ljb25EYXRhKCkgfHwgbGF5b3V0LmdldCgnaWNvbi1vcHRpb25hbCcpKSxcbiAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwICYmICh0ZXh0QWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzVGV4dERhdGEoKSB8fCBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIHRydWUpO1xuXG4gICAgICAgIGlmICghYnVja2V0LmNvbGxpc2lvbkFycmF5cyAmJiBjb2xsaXNpb25Cb3hBcnJheSAmJiAoKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpIHx8XG4gICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkpKSB7XG4gICAgICAgICAgICBidWNrZXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRPcGFjaXRpZXMgPSAoaWNvbk9yVGV4dCwgbnVtVmVydGljZXM6IG51bWJlciwgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVZlcnRpY2VzIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWNvbk9yVGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sob3BhY2l0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KHMpO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICAgICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgICAgICAgICBjcm9zc1RpbGVJRFxuICAgICAgICAgICAgfSA9IHN5bWJvbEluc3RhbmNlO1xuXG4gICAgICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHNlZW5Dcm9zc1RpbGVJRHNbY3Jvc3NUaWxlSURdO1xuXG4gICAgICAgICAgICBsZXQgb3BhY2l0eVN0YXRlID0gdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eVN0YXRlID0gZHVwbGljYXRlT3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghb3BhY2l0eVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eVN0YXRlID0gZGVmYXVsdE9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgc3RhdGUgc28gdGhhdCBmdXR1cmUgcGxhY2VtZW50cyB1c2UgaXQgYXMgYSBzdGFydGluZyBwb2ludFxuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tjcm9zc1RpbGVJRF0gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNUZXh0ID0gbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPiAwIHx8IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA+IDA7XG4gICAgICAgICAgICBjb25zdCBoYXNJY29uID0gc3ltYm9sSW5zdGFuY2UubnVtSWNvblZlcnRpY2VzID4gMDtcblxuICAgICAgICAgICAgY29uc3QgcGxhY2VkT3JpZW50YXRpb24gPSB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsSGlkZGVuID0gcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsO1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWxIaWRkZW4gPSBwbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fCBwbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk7XG5cbiAgICAgICAgICAgIGlmIChoYXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja2VkT3BhY2l0eSA9IHBhY2tPcGFjaXR5KG9wYWNpdHlTdGF0ZS50ZXh0KTtcbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCB0ZXh0IGZhZGVzIGluL291dCBvbiBjb2xsaXNpb24gdGhlIHNhbWUgd2F5IGFzIGNvcnJlc3BvbmRpbmdcbiAgICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHRleHQuIFN3aXRjaCBiZXR3ZWVuIHZlcnRpY2FsL2hvcml6b250YWwgc2hvdWxkIGJlIGluc3RhbnRhbmVvdXNcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsT3BhY2l0eSA9IGhvcml6b250YWxIaWRkZW4gPyBQQUNLRURfSElEREVOX09QQUNJVFkgOiBwYWNrZWRPcGFjaXR5O1xuICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQudGV4dCwgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsIGhvcml6b250YWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9wYWNpdHkgPSB2ZXJ0aWNhbEhpZGRlbiA/IFBBQ0tFRF9ISURERU5fT1BBQ0lUWSA6IHBhY2tlZE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC50ZXh0LCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsIHZlcnRpY2FsT3BhY2l0eSk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGxhYmVsIGlzIGNvbXBsZXRlbHkgZmFkZWQsIG1hcmsgaXQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgIC8vIGl0cyBwb3NpdGlvbiBhdCByZW5kZXIgdGltZS4gSWYgdGhpcyBsYXllciBoYXMgdmFyaWFibGUgcGxhY2VtZW50LCBzaGlmdCB0aGUgdmFyaW91c1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBpbnN0YW5jZXMgYXBwcm9wcmlhdGVseSBzbyB0aGF0IHN5bWJvbHMgZnJvbSBidWNrZXRzIHRoYXQgaGF2ZSB5ZXQgdG8gYmUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gb2Zmc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sSGlkZGVuID0gb3BhY2l0eVN0YXRlLnRleHQuaXNIaWRkZW4oKTtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGluZGV4KS5oaWRkZW4gPSBzeW1ib2xIaWRkZW4gfHwgaG9yaXpvbnRhbEhpZGRlbiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbiA9IHN5bWJvbEhpZGRlbiB8fCB2ZXJ0aWNhbEhpZGRlbiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXQgPSB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHBsYWNlZE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgaWYgKHByZXZPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsICdsZWZ0Jywgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIHByZXZPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrZWRPcGFjaXR5ID0gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlLmljb24pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlSG9yaXpvbnRhbCA9ICEoaGFzSWNvblRleHRGaXQgJiYgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggJiYgaG9yaXpvbnRhbEhpZGRlbik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9wYWNpdHkgPSB1c2VIb3Jpem9udGFsID8gcGFja2VkT3BhY2l0eSA6IFBBQ0tFRF9ISURERU5fT1BBQ0lUWTtcbiAgICAgICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC5pY29uLCBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMsIGhvcml6b250YWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChvcGFjaXR5U3RhdGUuaWNvbi5pc0hpZGRlbigpOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsT3BhY2l0eSA9ICF1c2VIb3Jpem9udGFsID8gcGFja2VkT3BhY2l0eSA6IFBBQ0tFRF9ISURERU5fT1BBQ0lUWTtcbiAgICAgICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC5pY29uLCBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcywgdmVydGljYWxPcGFjaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKG9wYWNpdHlTdGF0ZS5pY29uLmlzSGlkZGVuKCk6IGFueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkgfHxcbiAgICAgICAgICAgICAgICBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkFycmF5cyA9IGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbc107XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2hpZnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudGV4dEJveCB8fCBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZU9mZnNldCA9IHRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHNob3cgZWl0aGVyIHRoZSBjdXJyZW50bHkgcGxhY2VkIHBvc2l0aW9uIG9yIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NmdWxseSBwbGFjZWQgcG9zaXRpb24gKHNvIHlvdSBjYW4gdmlzdWFsaXplIHdoYXQgY29sbGlzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbWFkZSB0aGUgc3ltYm9sIGRpc2FwcGVhciwgYW5kIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN5bWJvbCB0byBjb21lIGJhY2spXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVMYXlvdXRTaGlmdCh2YXJpYWJsZU9mZnNldC5hbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9mZnNldC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LnRleHRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LnRleHRCb3hTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC5fcm90YXRlKHBpdGNoV2l0aE1hcCA/IHRoaXMudHJhbnNmb3JtLmFuZ2xlIDogLXRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG9mZnNldCAtPiB0aGlzIHN5bWJvbCBoYXNuJ3QgYmVlbiBwbGFjZWQgc2luY2UgY29taW5nIG9uLXNjcmVlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBzaW5nbGUgYm94IGlzIHBhcnRpY3VsYXJseSBtZWFuaW5nZnVsIGFuZCBhbGwgb2YgdGhlbSB3b3VsZCBiZSB0b28gbm9pc3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBjZW50ZXIgYm94IGp1c3QgdG8gc2hvdyBzb21ldGhpbmcncyB0aGVyZSwgYnV0IG1hcmsgaXQgXCJub3QgdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsICF1c2VkIHx8IGhvcml6b250YWxIaWRkZW4sIHNoaWZ0LngsIHNoaWZ0LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLnRleHQucGxhY2VkLCAhdXNlZCB8fCB2ZXJ0aWNhbEhpZGRlbiwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEljb25Vc2VkID0gQm9vbGVhbighdmVydGljYWxIaWRkZW4gJiYgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLmljb24ucGxhY2VkLCB2ZXJ0aWNhbEljb25Vc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC55IDogMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS5pY29uLnBsYWNlZCwgIXZlcnRpY2FsSWNvblVzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC54IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDaXJjbGVzID0gY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dENpcmNsZXMgJiYgYnVja2V0Lmhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGV4dENpcmNsZXMubGVuZ3RoOyBrICs9IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RVc2VkID0gaXNEdXBsaWNhdGUgfHwgdGV4dENpcmNsZXNbayArIDRdID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsIG5vdFVzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIGlmICh0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXQuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlciA9IGJ1Y2tldC5mZWF0dXJlU29ydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpICYmIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkRhdGEoKSAmJiBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgJiYgYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpICYmIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSAmJiBidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uQ29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC5pY29uQ29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkgJiYgYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aCA9PT0gYnVja2V0LnRleHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoIC8gNCk7XG4gICAgICAgIGFzc2VydChidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RoID09PSBidWNrZXQuaWNvbi5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggLyA0KTtcbiAgICB9XG5cbiAgICBzeW1ib2xGYWRlQ2hhbmdlKG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhZGVEdXJhdGlvbiA9PT0gMCA/XG4gICAgICAgICAgICAxIDpcbiAgICAgICAgICAgICgobm93IC0gdGhpcy5jb21taXRUaW1lKSAvIHRoaXMuZmFkZUR1cmF0aW9uICsgdGhpcy5wcmV2Wm9vbUFkanVzdG1lbnQpO1xuICAgIH1cblxuICAgIHpvb21BZGp1c3RtZW50KHpvb206IG51bWJlcikge1xuICAgICAgICAvLyBXaGVuIHpvb21pbmcgb3V0IHF1aWNrbHksIGxhYmVscyBjYW4gb3ZlcmxhcCBlYWNoIG90aGVyLiBUaGlzXG4gICAgICAgIC8vIGFkanVzdG1lbnQgaXMgdXNlZCB0byByZWR1Y2UgdGhlIGludGVydmFsIGJldHdlZW4gcGxhY2VtZW50IGNhbGN1bGF0aW9uc1xuICAgICAgICAvLyBhbmQgdG8gcmVkdWNlIHRoZSBmYWRlIGR1cmF0aW9uIHdoZW4gem9vbWluZyBvdXQgcXVpY2tseS4gRGlzY292ZXJpbmcgdGhlXG4gICAgICAgIC8vIGNvbGxpc2lvbnMgbW9yZSBxdWlja2x5IGFuZCBmYWRpbmcgdGhlbSBtb3JlIHF1aWNrbHkgcmVkdWNlcyB0aGUgdW53YW50ZWQgZWZmZWN0LlxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgKHRoaXMudHJhbnNmb3JtLnpvb20gLSB6b29tKSAvIDEuNSk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhbGUgfHxcbiAgICAgICAgICAgIG5vdyAtIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgPCB0aGlzLmZhZGVEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBzdGlsbFJlY2VudChub3c6IG51bWJlciwgem9vbTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFRoZSBhZGp1c3RtZW50IG1ha2VzIHBsYWNlbWVudCBtb3JlIGZyZXF1ZW50IHdoZW4gem9vbWluZy5cbiAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gYXBwbGllcyB0aGUgYWRqdXN0bWVudCBvbmx5IGFmdGVyIHRoZSBtYXAgaGFzXG4gICAgICAgIC8vIHN0b3BwZWQgem9vbWluZy4gVGhpcyBhdm9pZHMgYWRkaW5nIGV4dHJhIGphbmsgd2hpbGUgem9vbWluZy5cbiAgICAgICAgY29uc3QgZHVyYXRpb25BZGp1c3RtZW50ID0gdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID09PSB6b29tID9cbiAgICAgICAgICAgICgxIC0gdGhpcy56b29tQWRqdXN0bWVudCh6b29tKSkgOlxuICAgICAgICAgICAgMTtcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gem9vbTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21taXRUaW1lICsgdGhpcy5mYWRlRHVyYXRpb24gKiBkdXJhdGlvbkFkanVzdG1lbnQgPiBub3c7XG4gICAgfVxuXG4gICAgc2V0U3RhbGUoKSB7XG4gICAgICAgIHRoaXMuc3RhbGUgPSB0cnVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5LCBwbGFjZWQ6IGJvb2xlYW4sIG5vdFVzZWQ6IGJvb2xlYW4gfCBudW1iZXIsIHNoaWZ0WD86IG51bWJlciwgc2hpZnRZPzogbnVtYmVyKSB7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbn1cblxuLy8gQWxsIGZvdXIgdmVydGljZXMgZm9yIGEgZ2x5cGggd2lsbCBoYXZlIHRoZSBzYW1lIG9wYWNpdHkgc3RhdGVcbi8vIFNvIHdlIHBhY2sgdGhlIG9wYWNpdHkgaW50byBhIHVpbnQ4LCBhbmQgdGhlbiByZXBlYXQgaXQgZm91ciB0aW1lc1xuLy8gdG8gbWFrZSBhIHNpbmdsZSB1aW50MzIgdGhhdCB3ZSBjYW4gdXBsb2FkIGZvciBlYWNoIGdseXBoIGluIHRoZVxuLy8gbGFiZWwuXG5jb25zdCBzaGlmdDI1ID0gTWF0aC5wb3coMiwgMjUpO1xuY29uc3Qgc2hpZnQyNCA9IE1hdGgucG93KDIsIDI0KTtcbmNvbnN0IHNoaWZ0MTcgPSBNYXRoLnBvdygyLCAxNyk7XG5jb25zdCBzaGlmdDE2ID0gTWF0aC5wb3coMiwgMTYpO1xuY29uc3Qgc2hpZnQ5ID0gTWF0aC5wb3coMiwgOSk7XG5jb25zdCBzaGlmdDggPSBNYXRoLnBvdygyLCA4KTtcbmNvbnN0IHNoaWZ0MSA9IE1hdGgucG93KDIsIDEpO1xuZnVuY3Rpb24gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlOiBPcGFjaXR5U3RhdGUpOiBudW1iZXIge1xuICAgIGlmIChvcGFjaXR5U3RhdGUub3BhY2l0eSA9PT0gMCAmJiAhb3BhY2l0eVN0YXRlLnBsYWNlZCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ID09PSAxICYmIG9wYWNpdHlTdGF0ZS5wbGFjZWQpIHtcbiAgICAgICAgcmV0dXJuIDQyOTQ5NjcyOTU7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldEJpdCA9IG9wYWNpdHlTdGF0ZS5wbGFjZWQgPyAxIDogMDtcbiAgICBjb25zdCBvcGFjaXR5Qml0cyA9IE1hdGguZmxvb3Iob3BhY2l0eVN0YXRlLm9wYWNpdHkgKiAxMjcpO1xuICAgIHJldHVybiBvcGFjaXR5Qml0cyAqIHNoaWZ0MjUgKyB0YXJnZXRCaXQgKiBzaGlmdDI0ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDE3ICsgdGFyZ2V0Qml0ICogc2hpZnQxNiArXG4gICAgICAgIG9wYWNpdHlCaXRzICogc2hpZnQ5ICsgdGFyZ2V0Qml0ICogc2hpZnQ4ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDEgKyB0YXJnZXRCaXQ7XG59XG5cbmNvbnN0IFBBQ0tFRF9ISURERU5fT1BBQ0lUWSA9IDA7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcnR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuXG5jbGFzcyBMYXllclBsYWNlbWVudCB7XG4gICAgX3NvcnRBY3Jvc3NUaWxlczogYm9vbGVhbjtcbiAgICBfY3VycmVudFRpbGVJbmRleDogbnVtYmVyO1xuICAgIF9jdXJyZW50UGFydEluZGV4OiBudW1iZXI7XG4gICAgX3NlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfTtcbiAgICBfYnVja2V0UGFydHM6IEFycmF5PEJ1Y2tldFBhcnQ+O1xuXG4gICAgY29uc3RydWN0b3Ioc3R5bGVMYXllcjogU3ltYm9sU3R5bGVMYXllcikge1xuICAgICAgICB0aGlzLl9zb3J0QWNyb3NzVGlsZXMgPSBzdHlsZUxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC16LW9yZGVyJykgIT09ICd2aWV3cG9ydC15JyAmJlxuICAgICAgICAgICAgc3R5bGVMYXllci5sYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbGVJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzID0ge307XG4gICAgICAgIHRoaXMuX2J1Y2tldFBhcnRzID0gW107XG4gICAgfVxuXG4gICAgY29udGludWVQbGFjZW1lbnQodGlsZXM6IEFycmF5PFRpbGU+LCBwbGFjZW1lbnQ6IFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLCBzdHlsZUxheWVyOiBTdHlsZUxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudDogKCkgPT4gYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldFBhcnRzID0gdGhpcy5fYnVja2V0UGFydHM7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRUaWxlSW5kZXggPCB0aWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1t0aGlzLl9jdXJyZW50VGlsZUluZGV4XTtcbiAgICAgICAgICAgIHBsYWNlbWVudC5nZXRCdWNrZXRQYXJ0cyhidWNrZXRQYXJ0cywgc3R5bGVMYXllciwgdGlsZSwgdGhpcy5fc29ydEFjcm9zc1RpbGVzKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbGVJbmRleCsrO1xuICAgICAgICAgICAgaWYgKHNob3VsZFBhdXNlUGxhY2VtZW50KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zb3J0QWNyb3NzVGlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyA9IGZhbHNlO1xuICAgICAgICAgICAgYnVja2V0UGFydHMuc29ydCgoYSwgYikgPT4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKSk7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFBhcnRJbmRleCA8IGJ1Y2tldFBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0UGFydCA9IGJ1Y2tldFBhcnRzW3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXhdO1xuICAgICAgICAgICAgcGxhY2VtZW50LnBsYWNlTGF5ZXJCdWNrZXRQYXJ0KGJ1Y2tldFBhcnQsIHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMsIHNob3dDb2xsaXNpb25Cb3hlcyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXgrKztcbiAgICAgICAgICAgIGlmIChzaG91bGRQYXVzZVBsYWNlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuY2xhc3MgUGF1c2VhYmxlUGxhY2VtZW50IHtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICBfZG9uZTogYm9vbGVhbjtcbiAgICBfY3VycmVudFBsYWNlbWVudEluZGV4OiBudW1iZXI7XG4gICAgX2ZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbjtcbiAgICBfc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIF9pblByb2dyZXNzTGF5ZXI6ID9MYXllclBsYWNlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogVHJhbnNmb3JtLCBvcmRlcjogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgICAgICBmb3JjZUZ1bGxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBwcmV2UGxhY2VtZW50PzogUGxhY2VtZW50KSB7XG5cbiAgICAgICAgdGhpcy5wbGFjZW1lbnQgPSBuZXcgUGxhY2VtZW50KHRyYW5zZm9ybSwgZmFkZUR1cmF0aW9uLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnMsIHByZXZQbGFjZW1lbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXggPSBvcmRlci5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQgPSBmb3JjZUZ1bGxQbGFjZW1lbnQ7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyA9IHNob3dDb2xsaXNpb25Cb3hlcztcbiAgICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlzRG9uZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvbmU7XG4gICAgfVxuXG4gICAgY29udGludWVQbGFjZW1lbnQob3JkZXI6IEFycmF5PHN0cmluZz4sIGxheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSwgbGF5ZXJUaWxlczoge1tzdHJpbmddOiBBcnJheTxUaWxlPn0pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gYnJvd3Nlci5ub3coKTtcblxuICAgICAgICBjb25zdCBzaG91bGRQYXVzZVBsYWNlbWVudCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gYnJvd3Nlci5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQgPyBmYWxzZSA6IGVsYXBzZWRUaW1lID4gMjtcbiAgICAgICAgfTtcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySWQgPSBvcmRlclt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJZF07XG4gICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRab29tID0gdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207XG4gICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ3N5bWJvbCcgJiZcbiAgICAgICAgICAgICAgICAoIWxheWVyLm1pbnpvb20gfHwgbGF5ZXIubWluem9vbSA8PSBwbGFjZW1lbnRab29tKSAmJlxuICAgICAgICAgICAgICAgICghbGF5ZXIubWF4em9vbSB8fCBsYXllci5tYXh6b29tID4gcGxhY2VtZW50Wm9vbSkpIHtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW5Qcm9ncmVzc0xheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luUHJvZ3Jlc3NMYXllciA9IG5ldyBMYXllclBsYWNlbWVudCgoKGxheWVyOiBhbnkpOiBTeW1ib2xTdHlsZUxheWVyKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF1c2VQbGFjZW1lbnQgPSB0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobGF5ZXJUaWxlc1tsYXllci5zb3VyY2VdLCB0aGlzLnBsYWNlbWVudCwgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLCBsYXllciwgc2hvdWxkUGF1c2VQbGFjZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhdXNlUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRpZG4ndCBmaW5pc2ggcGxhY2luZyBhbGwgbGF5ZXJzIHdpdGhpbiAybXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4ga2VlcCByZW5kZXJpbmcgd2l0aCBhIHBhcnRpYWwgcGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlJ2xsIHJlc3VtZSBoZXJlIG9uIHRoZSBuZXh0IGZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5faW5Qcm9ncmVzc0xheWVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXgtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbW1pdChub3c6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBsYWNlbWVudC5jb21taXQobm93KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGF1c2VhYmxlUGxhY2VtZW50O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5cbmltcG9ydCB7U3ltYm9sSW5zdGFuY2VBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtTeW1ib2xJbnN0YW5jZX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcblxuLypcbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggZ2VuZXJhbGx5IHdvcmtzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXRcbiAgICBhIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sXCIgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHRleHQgb2ZcbiAgICB0aGUgbGFiZWwgY29tYmluZWQgd2l0aCB0aGUgYW5jaG9yIHBvaW50LiBUaGUgZ29hbCBpcyB0byBhc3NpZ25cbiAgICB0aGVzZSBjb25jZXB0dWFsIFwidW5pcXVlIHN5bWJvbHNcIiBhIHNoYXJlZCBjcm9zc1RpbGVJRCB0aGF0IGNhbiBiZVxuICAgIHVzZWQgYnkgUGxhY2VtZW50IHRvIGtlZXAgZmFkaW5nIG9wYWNpdHkgc3RhdGVzIGNvbnNpc3RlbnQgYW5kIHRvXG4gICAgZGVkdXBsaWNhdGUgbGFiZWxzLlxuXG4gICAgVGhlIENyb3NzVGlsZVN5bWJvbEluZGV4IGluZGV4ZXMgYWxsIHRoZSBjdXJyZW50IHN5bWJvbCBpbnN0YW5jZXMgYW5kXG4gICAgdGhlaXIgY3Jvc3NUaWxlSURzLiBXaGVuIGEgc3ltYm9sIGJ1Y2tldCBnZXRzIGFkZGVkIG9yIHVwZGF0ZWQsIHRoZVxuICAgIGluZGV4IGFzc2lnbnMgYSBjcm9zc1RpbGVJRCB0byBlYWNoIG9mIGl0J3Mgc3ltYm9sIGluc3RhbmNlcyBieSBlaXRoZXJcbiAgICBtYXRjaGluZyBpdCB3aXRoIGFuIGV4aXN0aW5nIGlkIG9yIGFzc2lnbmluZyBhIG5ldyBvbmUuXG4qL1xuXG4vLyBSb3VuZCBhbmNob3IgcG9zaXRpb25zIHRvIHJvdWdobHkgNCBwaXhlbCBncmlkXG5jb25zdCByb3VuZGluZ0ZhY3RvciA9IDUxMiAvIEVYVEVOVCAvIDI7XG5cbmNsYXNzIFRpbGVMYXllckluZGV4IHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgaW5kZXhlZFN5bWJvbEluc3RhbmNlczoge1tudW1iZXJdOiBBcnJheTx7XG4gICAgICAgIGNyb3NzVGlsZUlEOiBudW1iZXIsXG4gICAgICAgIGNvb3JkOiB7XG4gICAgICAgICAgICB4OiBudW1iZXIsXG4gICAgICAgICAgICB5OiBudW1iZXJcbiAgICAgICAgfVxuICAgIH0+fTtcbiAgICBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHN5bWJvbEluc3RhbmNlczogU3ltYm9sSW5zdGFuY2VBcnJheSwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgdGhpcy5idWNrZXRJbnN0YW5jZUlkID0gYnVja2V0SW5zdGFuY2VJZDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBzeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc3ltYm9sSW5zdGFuY2Uua2V5O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGlzIHRpbGUgbWF5IGhhdmUgbXVsdGlwbGUgc3ltYm9sIGluc3RhbmNlcyB3aXRoIHRoZSBzYW1lIGtleVxuICAgICAgICAgICAgLy8gU3RvcmUgZWFjaCBvbmUgYWxvbmcgd2l0aCBpdHMgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldLnB1c2goe1xuICAgICAgICAgICAgICAgIGNyb3NzVGlsZUlEOiBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCxcbiAgICAgICAgICAgICAgICBjb29yZDogdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgdGlsZUlEKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGlucHV0IHN5bWJvbCBpbnN0YW5jZSBpbnRvIGNvb3JkaW5hdGVzIHRoYXQgYmUgY2FuIGNvbXBhcmVkXG4gICAgLy8gYWdhaW5zdCBvdGhlciBzeW1ib2xzIGluIHRoaXMgaW5kZXguIENvb3JkaW5hdGVzIGFyZTpcbiAgICAvLyAoMSkgd29ybGQtYmFzZWQgKHNvIGFmdGVyIGNvbnZlcnNpb24gdGhlIHNvdXJjZSB0aWxlIGlzIGlycmVsZXZhbnQpXG4gICAgLy8gKDIpIGNvbnZlcnRlZCB0byB0aGUgei1zY2FsZSBvZiB0aGlzIFRpbGVMYXllckluZGV4XG4gICAgLy8gKDMpIGRvd24tc2FtcGxlZCBieSBcInJvdW5kaW5nRmFjdG9yXCIgZnJvbSB0aWxlIGNvb3JkaW5hdGUgcHJlY2lzaW9uIGluIG9yZGVyIHRvIGJlXG4gICAgLy8gICAgIG1vcmUgdG9sZXJhbnQgb2Ygc21hbGwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aWxlcy5cbiAgICBnZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGNoaWxkVGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gY2hpbGRUaWxlSUQuY2Fub25pY2FsLnogLSB0aGlzLnRpbGVJRC5jYW5vbmljYWwuejtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByb3VuZGluZ0ZhY3RvciAvIE1hdGgucG93KDIsIHpEaWZmZXJlbmNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC54ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWCkgKiBzY2FsZSksXG4gICAgICAgICAgICB5OiBNYXRoLmZsb29yKChjaGlsZFRpbGVJRC5jYW5vbmljYWwueSAqIEVYVEVOVCArIHN5bWJvbEluc3RhbmNlLmFuY2hvclkpICogc2NhbGUpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZmluZE1hdGNoZXMoc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBuZXdUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHpvb21Dcm9zc1RpbGVJRHM6IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59KSB7XG4gICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IHRoaXMudGlsZUlELmNhbm9uaWNhbC56IDwgbmV3VGlsZUlELmNhbm9uaWNhbC56ID8gMSA6IE1hdGgucG93KDIsIHRoaXMudGlsZUlELmNhbm9uaWNhbC56IC0gbmV3VGlsZUlELmNhbm9uaWNhbC56KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBzeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEKSB7XG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXMgYSBtYXRjaCwgc2tpcFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRleGVkSW5zdGFuY2VzID0gdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3N5bWJvbEluc3RhbmNlLmtleV07XG4gICAgICAgICAgICBpZiAoIWluZGV4ZWRJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBObyBzeW1ib2wgd2l0aCB0aGlzIGtleSBpbiB0aGlzIGJ1Y2tldFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY2FsZWRTeW1ib2xDb29yZCA9IHRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoc3ltYm9sSW5zdGFuY2UsIG5ld1RpbGVJRCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGhpc1RpbGVTeW1ib2wgb2YgaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIFJldHVybiBhbnkgc3ltYm9sIHdpdGggdGhlIHNhbWUga2V5cyB3aG9zZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIDFcbiAgICAgICAgICAgICAgICAvLyBncmlkIHVuaXQuICh3aXRoIGEgNHB4IGdyaWQsIHRoaXMgY292ZXJzIGEgMTJweCBieSAxMnB4IGFyZWEpXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXNUaWxlU3ltYm9sLmNvb3JkLnggLSBzY2FsZWRTeW1ib2xDb29yZC54KSA8PSB0b2xlcmFuY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueSAtIHNjYWxlZFN5bWJvbENvb3JkLnkpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICAhem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25jZSB3ZSd2ZSBtYXJrZWQgb3Vyc2VsdmVzIGR1cGxpY2F0ZSBhZ2FpbnN0IHRoaXMgcGFyZW50IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgbGV0IGFueSBvdGhlciBzeW1ib2xzIGF0IHRoZSBzYW1lIHpvb20gbGV2ZWwgZHVwbGljYXRlIGFnYWluc3RcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgcGFyZW50IChzZWUgaXNzdWUgIzU5OTMpXG4gICAgICAgICAgICAgICAgICAgIHpvb21Dcm9zc1RpbGVJRHNbdGhpc1RpbGVTeW1ib2wuY3Jvc3NUaWxlSURdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSB0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc1RpbGVJRHMge1xuICAgIG1heENyb3NzVGlsZUlEOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWF4Q3Jvc3NUaWxlSUQgPSAwO1xuICAgIH1cbiAgICBnZW5lcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICsrdGhpcy5tYXhDcm9zc1RpbGVJRDtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZVN5bWJvbExheWVySW5kZXgge1xuICAgIGluZGV4ZXM6IHtbem9vbTogc3RyaW5nIHwgbnVtYmVyXToge1t0aWxlSWQ6IHN0cmluZyB8IG51bWJlcl06IFRpbGVMYXllckluZGV4fX07XG4gICAgdXNlZENyb3NzVGlsZUlEczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W2Nyb3NzVGlsZUlEOiBudW1iZXJdOiBib29sZWFufX07XG4gICAgbG5nOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzID0ge307XG4gICAgICAgIHRoaXMudXNlZENyb3NzVGlsZUlEcyA9IHt9O1xuICAgICAgICB0aGlzLmxuZyA9IDA7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBTb21ldGltZXMgd2hlbiBhIHVzZXIgcGFucyBhY3Jvc3MgdGhlIGFudGltZXJpZGlhbiB0aGUgbG9uZ2l0dWRlIHZhbHVlIGdldHMgd3JhcHBlZC5cbiAgICAgKiBUbyBwcmV2ZW50IGxhYmVscyBmcm9tIGZsYXNoaW5nIG91dCBhbmQgaW4gd2UgYWRqdXN0IHRoZSB0aWxlSUQgdmFsdWVzIGluIHRoZSBpbmRleGVzXG4gICAgICogc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBuZXcgd3JhcHBlZCB2ZXJzaW9uIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd3JhcERlbHRhID0gTWF0aC5yb3VuZCgobG5nIC0gdGhpcy5sbmcpIC8gMzYwKTtcbiAgICAgICAgaWYgKHdyYXBEZWx0YSAhPT0gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pvb21dO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1pvb21JbmRleCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdGlsZUlEJ3Mgd3JhcCBhbmQgYWRkIGl0IHRvIGEgbmV3IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gem9vbUluZGV4ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgudGlsZUlEID0gaW5kZXgudGlsZUlELnVud3JhcFRvKGluZGV4LnRpbGVJRC53cmFwICsgd3JhcERlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Wm9vbUluZGV4W2luZGV4LnRpbGVJRC5rZXldID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t6b29tXSA9IG5ld1pvb21JbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxuZyA9IGxuZztcbiAgICB9XG5cbiAgICBhZGRCdWNrZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgY3Jvc3NUaWxlSURzOiBDcm9zc1RpbGVJRHMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdICYmXG4gICAgICAgICAgICB0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXVt0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldLmJ1Y2tldEluc3RhbmNlSWQgPT09XG4gICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJlcGxhY2luZyB0aGlzIGJ1Y2tldCB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkIGJ1Y2tldCdzIFwidXNlZCBjcm9zc1RpbGVJRHNcIiBub3cgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXcgYnVja2V0IGNhbiBjbGFpbSB0aGVtLlxuICAgICAgICAgICAgICAgIC8vIFRoZSBvbGQgaW5kZXggZW50cmllcyB0aGVtc2VsdmVzIHN0aWNrIGFyb3VuZCB1bnRpbFxuICAgICAgICAgICAgICAgIC8vICdyZW1vdmVTdGFsZUJ1Y2tldHMnIGlzIGNhbGxlZC5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0pIHtcbiAgICAgICAgICAgIHRoaXMudXNlZENyb3NzVGlsZUlEc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9vbUNyb3NzVGlsZUlEcyA9IHRoaXMudXNlZENyb3NzVGlsZUlEc1t0aWxlSUQub3ZlcnNjYWxlZFpdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgem9vbSBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pvb21dO1xuICAgICAgICAgICAgaWYgKE51bWJlcih6b29tKSA+IHRpbGVJRC5vdmVyc2NhbGVkWikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJbmRleCA9IHpvb21JbmRleGVzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXgudGlsZUlELmlzQ2hpbGRPZih0aWxlSUQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvb3JkID0gdGlsZUlELnNjYWxlZFRvKE51bWJlcih6b29tKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSB6b29tSW5kZXhlc1twYXJlbnRDb29yZC5rZXldO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbmRleC5maW5kTWF0Y2hlcyhidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCB0aWxlSUQsIHpvb21Dcm9zc1RpbGVJRHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIGlmICghc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBzeW1ib2wgZGlkIG5vdCBtYXRjaCBhbnkga25vd24gc3ltYm9sLCBhc3NpZ24gYSBuZXcgaWRcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IGNyb3NzVGlsZUlEcy5nZW5lcmF0ZSgpO1xuICAgICAgICAgICAgICAgIHpvb21Dcm9zc1RpbGVJRHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4ZXNbdGlsZUlELm92ZXJzY2FsZWRaXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldID0gbmV3IFRpbGVMYXllckluZGV4KHRpbGVJRCwgYnVja2V0LnN5bWJvbEluc3RhbmNlcywgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh6b29tOiBzdHJpbmcgfCBudW1iZXIsIHJlbW92ZWRCdWNrZXQ6IFRpbGVMYXllckluZGV4KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xJbnN0YW5jZSBvZiByZW1vdmVkQnVja2V0LmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbKGtleTogYW55KV0pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3pvb21dW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50SURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0pIHtcbiAgICAgICAgbGV0IHRpbGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHogaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICBjb25zdCB6b29tSW5kZXhlcyA9IHRoaXMuaW5kZXhlc1t6XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGlsZUtleSBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudElEc1t6b29tSW5kZXhlc1t0aWxlS2V5XS5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh6LCB6b29tSW5kZXhlc1t0aWxlS2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB6b29tSW5kZXhlc1t0aWxlS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbGVzQ2hhbmdlZDtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZVN5bWJvbEluZGV4IHtcbiAgICBsYXllckluZGV4ZXM6IHtbbGF5ZXJJZDogc3RyaW5nXTogQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleH07XG4gICAgY3Jvc3NUaWxlSURzOiBDcm9zc1RpbGVJRHM7XG4gICAgbWF4QnVja2V0SW5zdGFuY2VJZDogbnVtYmVyO1xuICAgIGJ1Y2tldHNJbkN1cnJlbnRQbGFjZW1lbnQ6IHtbbnVtYmVyXTogYm9vbGVhbn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVJRHMgPSBuZXcgQ3Jvc3NUaWxlSURzKCk7XG4gICAgICAgIHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZCA9IDA7XG4gICAgICAgIHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudCA9IHt9O1xuICAgIH1cblxuICAgIGFkZExheWVyKHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHRpbGVzOiBBcnJheTxUaWxlPiwgbG5nOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXggPSB0aGlzLmxheWVySW5kZXhlc1tzdHlsZUxheWVyLmlkXTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdID0gbmV3IENyb3NzVGlsZVN5bWJvbExheWVySW5kZXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50QnVja2V0SURzID0ge307XG5cbiAgICAgICAgbGF5ZXJJbmRleC5oYW5kbGVXcmFwSnVtcChsbmcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGlsZSBvZiB0aWxlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sQnVja2V0ID0gKCh0aWxlLmdldEJ1Y2tldChzdHlsZUxheWVyKTogYW55KTogU3ltYm9sQnVja2V0KTtcbiAgICAgICAgICAgIGlmICghc3ltYm9sQnVja2V0IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkID0gKyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYXllckluZGV4LmFkZEJ1Y2tldCh0aWxlLnRpbGVJRCwgc3ltYm9sQnVja2V0LCB0aGlzLmNyb3NzVGlsZUlEcykpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50QnVja2V0SURzW3N5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5ZXJJbmRleC5yZW1vdmVTdGFsZUJ1Y2tldHMoY3VycmVudEJ1Y2tldElEcykpIHtcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzeW1ib2xCdWNrZXRzQ2hhbmdlZDtcbiAgICB9XG5cbiAgICBwcnVuZVVudXNlZExheWVycyh1c2VkTGF5ZXJzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHVzZWRMYXllck1hcCA9IHt9O1xuICAgICAgICB1c2VkTGF5ZXJzLmZvckVhY2goKHVzZWRMYXllcikgPT4ge1xuICAgICAgICAgICAgdXNlZExheWVyTWFwW3VzZWRMYXllcl0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMubGF5ZXJJbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzZWRMYXllck1hcFtsYXllcklkXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxheWVySW5kZXhlc1tsYXllcklkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3Jvc3NUaWxlU3ltYm9sSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCBjcmVhdGVTdHlsZUxheWVyIGZyb20gJy4vY3JlYXRlX3N0eWxlX2xheWVyJztcbmltcG9ydCBsb2FkU3ByaXRlIGZyb20gJy4vbG9hZF9zcHJpdGUnO1xuaW1wb3J0IEltYWdlTWFuYWdlciBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgR2x5cGhNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9nbHlwaF9tYW5hZ2VyJztcbmltcG9ydCBMaWdodCBmcm9tICcuL2xpZ2h0JztcbmltcG9ydCBMaW5lQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2xpbmVfYXRsYXMnO1xuaW1wb3J0IHtwaWNrLCBjbG9uZSwgZXh0ZW5kLCBkZWVwRXF1YWwsIGZpbHRlck9iamVjdCwgbWFwT2JqZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtnZXRKU09OLCBnZXRSZWZlcnJlciwgbWFrZVJlcXVlc3QsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7aXNNYXBib3hVUkx9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHt2YWxpZGF0ZVN0eWxlLCBlbWl0VmFsaWRhdGlvbkVycm9ycyBhcyBfZW1pdFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHtcbiAgICBnZXRUeXBlIGFzIGdldFNvdXJjZVR5cGUsXG4gICAgc2V0VHlwZSBhcyBzZXRTb3VyY2VUeXBlLFxuICAgIHR5cGUgU291cmNlQ2xhc3Ncbn0gZnJvbSAnLi4vc291cmNlL3NvdXJjZSc7XG5pbXBvcnQge3F1ZXJ5UmVuZGVyZWRGZWF0dXJlcywgcXVlcnlSZW5kZXJlZFN5bWJvbHMsIHF1ZXJ5U291cmNlRmVhdHVyZXN9IGZyb20gJy4uL3NvdXJjZS9xdWVyeV9mZWF0dXJlcyc7XG5pbXBvcnQgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgR2VvSlNPTlNvdXJjZSBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IGdldFdvcmtlclBvb2wgZnJvbSAnLi4vdXRpbC9nbG9iYWxfd29ya2VyX3Bvb2wnO1xuaW1wb3J0IGRlcmVmIGZyb20gJy4uL3N0eWxlLXNwZWMvZGVyZWYnO1xuaW1wb3J0IGVtcHR5U3R5bGUgZnJvbSAnLi4vc3R5bGUtc3BlYy9lbXB0eSc7XG5pbXBvcnQgZGlmZlN0eWxlcywge29wZXJhdGlvbnMgYXMgZGlmZk9wZXJhdGlvbnN9IGZyb20gJy4uL3N0eWxlLXNwZWMvZGlmZic7XG5pbXBvcnQge1xuICAgIHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UsXG4gICAgZXZlbnRlZCBhcyBydGxUZXh0UGx1Z2luRXZlbnRlZCxcbiAgICB0cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50XG59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IFBhdXNlYWJsZVBsYWNlbWVudCBmcm9tICcuL3BhdXNlYWJsZV9wbGFjZW1lbnQnO1xuaW1wb3J0IFpvb21IaXN0b3J5IGZyb20gJy4vem9vbV9oaXN0b3J5JztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0IHt2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXJ9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuLy8gV2UncmUgc2tpcHBpbmcgdmFsaWRhdGlvbiBlcnJvcnMgd2l0aCB0aGUgYHNvdXJjZS5jYW52YXNgIGlkZW50aWZpZXIgaW4gb3JkZXJcbi8vIHRvIGNvbnRpbnVlIHRvIGFsbG93IGNhbnZhcyBzb3VyY2VzIHRvIGJlIGFkZGVkIGF0IHJ1bnRpbWUvdXBkYXRlZCBpblxuLy8gc21hcnQgc2V0U3R5bGUgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9wdWxsLzY0MjQpOlxuY29uc3QgZW1pdFZhbGlkYXRpb25FcnJvcnMgPSAoZXZlbnRlZDogRXZlbnRlZCwgZXJyb3JzOiA/JFJlYWRPbmx5QXJyYXk8e21lc3NhZ2U6IHN0cmluZywgaWRlbnRpZmllcj86IHN0cmluZ30+KSA9PlxuICAgIF9lbWl0VmFsaWRhdGlvbkVycm9ycyhldmVudGVkLCBlcnJvcnMgJiYgZXJyb3JzLmZpbHRlcihlcnJvciA9PiBlcnJvci5pZGVudGlmaWVyICE9PSAnc291cmNlLmNhbnZhcycpKTtcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtQbGFjZW1lbnR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0dlb0pTT059IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGF5ZXJTcGVjaWZpY2F0aW9uLFxuICAgIEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgU3R5bGVTcGVjaWZpY2F0aW9uLFxuICAgIExpZ2h0U3BlY2lmaWNhdGlvbixcbiAgICBTb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7VmFsaWRhdG9yfSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmNvbnN0IHN1cHBvcnRlZERpZmZPcGVyYXRpb25zID0gcGljayhkaWZmT3BlcmF0aW9ucywgW1xuICAgICdhZGRMYXllcicsXG4gICAgJ3JlbW92ZUxheWVyJyxcbiAgICAnc2V0UGFpbnRQcm9wZXJ0eScsXG4gICAgJ3NldExheW91dFByb3BlcnR5JyxcbiAgICAnc2V0RmlsdGVyJyxcbiAgICAnYWRkU291cmNlJyxcbiAgICAncmVtb3ZlU291cmNlJyxcbiAgICAnc2V0TGF5ZXJab29tUmFuZ2UnLFxuICAgICdzZXRMaWdodCcsXG4gICAgJ3NldFRyYW5zaXRpb24nLFxuICAgICdzZXRHZW9KU09OU291cmNlRGF0YSdcbiAgICAvLyAnc2V0R2x5cGhzJyxcbiAgICAvLyAnc2V0U3ByaXRlJyxcbl0pO1xuXG5jb25zdCBpZ25vcmVkRGlmZk9wZXJhdGlvbnMgPSBwaWNrKGRpZmZPcGVyYXRpb25zLCBbXG4gICAgJ3NldENlbnRlcicsXG4gICAgJ3NldFpvb20nLFxuICAgICdzZXRCZWFyaW5nJyxcbiAgICAnc2V0UGl0Y2gnXG5dKTtcblxuY29uc3QgZW1wdHkgPSBlbXB0eVN0eWxlKCk7XG5cbmV4cG9ydCB0eXBlIFN0eWxlT3B0aW9ucyA9IHtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW4sXG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5Pzogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBTdHlsZVNldHRlck9wdGlvbnMgPSB7XG4gICAgdmFsaWRhdGU/OiBib29sZWFuXG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHlsZSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIG1hcDogTWFwO1xuICAgIHN0eWxlc2hlZXQ6IFN0eWxlU3BlY2lmaWNhdGlvbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIGltYWdlTWFuYWdlcjogSW1hZ2VNYW5hZ2VyO1xuICAgIGdseXBoTWFuYWdlcjogR2x5cGhNYW5hZ2VyO1xuICAgIGxpbmVBdGxhczogTGluZUF0bGFzO1xuICAgIGxpZ2h0OiBMaWdodDtcblxuICAgIF9yZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfc3ByaXRlUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2xheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfTtcbiAgICBfb3JkZXI6IEFycmF5PHN0cmluZz47XG4gICAgc291cmNlQ2FjaGVzOiB7W3N0cmluZ106IFNvdXJjZUNhY2hlfTtcbiAgICB6b29tSGlzdG9yeTogWm9vbUhpc3Rvcnk7XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfcnRsVGV4dFBsdWdpbkNhbGxiYWNrOiBGdW5jdGlvbjtcbiAgICBfY2hhbmdlZDogYm9vbGVhbjtcbiAgICBfdXBkYXRlZFNvdXJjZXM6IHtbc3RyaW5nXTogJ2NsZWFyJyB8ICdyZWxvYWQnfTtcbiAgICBfdXBkYXRlZExheWVyczoge1tzdHJpbmddOiB0cnVlfTtcbiAgICBfcmVtb3ZlZExheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfTtcbiAgICBfY2hhbmdlZEltYWdlczoge1tzdHJpbmddOiB0cnVlfTtcbiAgICBfdXBkYXRlZFBhaW50UHJvcHM6IHtbbGF5ZXI6IHN0cmluZ106IHRydWV9O1xuICAgIF9sYXllck9yZGVyQ2hhbmdlZDogYm9vbGVhbjtcblxuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBwYXVzZWFibGVQbGFjZW1lbnQ6IFBhdXNlYWJsZVBsYWNlbWVudDtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICB6OiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGJ5IHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgZ2V0U291cmNlVHlwZTogdHlwZW9mIGdldFNvdXJjZVR5cGU7XG4gICAgc3RhdGljIHNldFNvdXJjZVR5cGU6IHR5cGVvZiBzZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlOiB0eXBlb2YgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZTtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiBTdHlsZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcihnZXRXb3JrZXJQb29sKCksIHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBuZXcgR2x5cGhNYW5hZ2VyKG1hcC5fcmVxdWVzdE1hbmFnZXIsIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KTtcbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBuZXcgTGluZUF0bGFzKDI1NiwgNTEyKTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9vcmRlciAgPSBbXTtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXMgPSB7fTtcbiAgICAgICAgdGhpcy56b29tSGlzdG9yeSA9IG5ldyBab29tSGlzdG9yeSgpO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRSZWZlcnJlcicsIGdldFJlZmVycmVyKCkpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2sgPSBTdHlsZS5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luU3RhdHVzOiBldmVudC5wbHVnaW5TdGF0dXMsXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMOiBldmVudC5wbHVnaW5VUkxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzeW5jUlRMUGx1Z2luU3RhdGUnLCBzdGF0ZSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb21wbGV0ZSA9IHJlc3VsdHMuZXZlcnkoKGVsZW0pID0+IGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gc2VsZi5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7IC8vIFNob3VsZCBiZSBhIG5vLW9wIGlmIHRoZSBwbHVnaW4gbG9hZHMgYmVmb3JlIGFueSB0aWxlcyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVR5cGUgIT09ICdzb3VyY2UnIHx8IGV2ZW50LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2V2ZW50LnNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS52ZWN0b3JMYXllcklkcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5zb3VyY2UgPT09IHNvdXJjZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRVUkwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgICAgICBhY2Nlc3NUb2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSA6ICFpc01hcGJveFVSTCh1cmwpO1xuXG4gICAgICAgIHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTCh1cmwsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU3R5bGUpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZ2V0SlNPTihyZXF1ZXN0LCAoZXJyb3I6ID9FcnJvciwganNvbjogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkSlNPTihqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSBicm93c2VyLmZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZChqc29uLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRFbXB0eSgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuX2xvYWQoZW1wdHksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfbG9hZChqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIHZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKGpzb24pKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0ganNvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24uc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGpzb24uc291cmNlc1tpZF0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc29uLnNwcml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFNwcml0ZShqc29uLnNwcml0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoanNvbi5nbHlwaHMpO1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGRlcmVmKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO1xuXG4gICAgICAgIHRoaXMuX29yZGVyID0gbGF5ZXJzLm1hcCgobGF5ZXIpID0+IGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLl9sYXllcnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICBsYXllciA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXIpO1xuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzLCB7bGF5ZXI6IHtpZDogbGF5ZXIuaWR9fSk7XG4gICAgICAgICAgICB0aGlzLl9sYXllcnNbbGF5ZXIuaWRdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnc2V0TGF5ZXJzJywgdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKSk7XG5cbiAgICAgICAgdGhpcy5saWdodCA9IG5ldyBMaWdodCh0aGlzLnN0eWxlc2hlZXQubGlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlLmxvYWQnKSk7XG4gICAgfVxuXG4gICAgX2xvYWRTcHJpdGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IGxvYWRTcHJpdGUodXJsLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIGltYWdlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2VzW2lkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRJbWFnZXMnLCB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCkpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICBpZiAoIXNvdXJjZUNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGxheWVyLnNvdXJjZUxheWVyO1xuICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSAnZ2VvanNvbicgfHwgKHNvdXJjZS52ZWN0b3JMYXllcklkcyAmJiBzb3VyY2UudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihzb3VyY2VMYXllcikgPT09IC0xKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU291cmNlIGxheWVyIFwiJHtzb3VyY2VMYXllcn1cIiBgICtcbiAgICAgICAgICAgICAgICBgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJHtzb3VyY2UuaWR9XCIgYCArXG4gICAgICAgICAgICAgICAgYGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIiR7bGF5ZXIuaWR9XCJgXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpXG4gICAgICAgICAgICBpZiAoIXRoaXMuc291cmNlQ2FjaGVzW2lkXS5sb2FkZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9zZXJpYWxpemVMYXllcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMYXllcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnMucHVzaChsYXllci5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRMYXllcnM7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpZ2h0ICYmIHRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NoZWNrTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBxdWV1ZWQgc3R5bGUgdXBkYXRlcyBpbiBhIGJhdGNoIGFuZCByZWNhbGN1bGF0ZSB6b29tLWRlcGVuZGVudCBwYWludCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHVwZGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2NoYW5nZWQ7XG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VkKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkSWRzID0gT2JqZWN0LmtleXModGhpcy5fdXBkYXRlZExheWVycyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSWRzID0gT2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7XG5cbiAgICAgICAgICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCB8fCByZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzLCByZW1vdmVkSWRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdXBkYXRlZFNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl91cGRhdGVkU291cmNlc1tpZF07XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGFjdGlvbiA9PT0gJ3JlbG9hZCcgfHwgYWN0aW9uID09PSAnY2xlYXInKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAncmVsb2FkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxvYWRTb3VyY2UoaWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY2xlYXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyU291cmNlKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzW2lkXS51cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVzZXRVcGRhdGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJZF0udXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5fb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuXG4gICAgICAgICAgICBsYXllci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKCFsYXllci5pc0hpZGRlbihwYXJhbWV0ZXJzLnpvb20pICYmIGxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0udXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLnogPSBwYXJhbWV0ZXJzLnpvb207XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qXG4gICAgICogQXBwbHkgYW55IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIF91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRJbWFnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jaGFuZ2VkSW1hZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZWRJbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tuYW1lXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbJ2ljb25zJywgJ3BhdHRlcm5zJ10sIGNoYW5nZWRJbWFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEltYWdlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzOiBBcnJheTxzdHJpbmc+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3VwZGF0ZUxheWVycycsIHtcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHVwZGF0ZWRJZHMpLFxuICAgICAgICAgICAgcmVtb3ZlZElkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzZXRVcGRhdGVzKCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMgPSB7fTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgc3R5bGUncyBzdGF0ZSB0byBtYXRjaCB0aGUgZ2l2ZW4gc3R5bGUgSlNPTiwgcGVyZm9ybWluZyBvbmx5XG4gICAgICogdGhlIG5lY2Vzc2FyeSBtdXRhdGlvbnMuXG4gICAgICpcbiAgICAgKiBNYXkgdGhyb3cgYW4gRXJyb3IgKCdVbmltcGxlbWVudGVkOiBNRVRIT0QnKSBpZiB0aGUgbWFwYm94LWdsLXN0eWxlLXNwZWNcbiAgICAgKiBkaWZmIGFsZ29yaXRobSBwcm9kdWNlcyBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYW55IGNoYW5nZXMgd2VyZSBtYWRlOyBmYWxzZSBvdGhlcndpc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldFN0YXRlKG5leHRTdGF0ZTogU3R5bGVTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlU3R5bGUobmV4dFN0YXRlKSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBuZXh0U3RhdGUgPSBjbG9uZShuZXh0U3RhdGUpO1xuICAgICAgICBuZXh0U3RhdGUubGF5ZXJzID0gZGVyZWYobmV4dFN0YXRlLmxheWVycyk7XG5cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRpZmZTdHlsZXModGhpcy5zZXJpYWxpemUoKSwgbmV4dFN0YXRlKVxuICAgICAgICAgICAgLmZpbHRlcihvcCA9PiAhKG9wLmNvbW1hbmQgaW4gaWdub3JlZERpZmZPcGVyYXRpb25zKSk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmltcGxlbWVudGVkT3BzID0gY2hhbmdlcy5maWx0ZXIob3AgPT4gIShvcC5jb21tYW5kIGluIHN1cHBvcnRlZERpZmZPcGVyYXRpb25zKSk7XG4gICAgICAgIGlmICh1bmltcGxlbWVudGVkT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogJHt1bmltcGxlbWVudGVkT3BzLm1hcChvcCA9PiBvcC5jb21tYW5kKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgIGlmIChvcC5jb21tYW5kID09PSAnc2V0VHJhbnNpdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBgdHJhbnNpdGlvbmAgaXMgYWx3YXlzIHJlYWQgZGlyZWN0bHkgb2ZmIG9mXG4gICAgICAgICAgICAgICAgLy8gYHRoaXMuc3R5bGVzaGVldGAsIHdoaWNoIHdlIHVwZGF0ZSBiZWxvd1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh0aGlzOiBhbnkpW29wLmNvbW1hbmRdLmFwcGx5KHRoaXMsIG9wLmFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0eWxlc2hlZXQgPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SW1hZ2UoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgIH1cblxuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnVwZGF0ZUltYWdlKGlkLCBpbWFnZSk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoaWQ6IHN0cmluZyk6ID9TdHlsZUltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlKGlkKTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5nZXRJbWFnZShpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdObyBpbWFnZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5yZW1vdmVJbWFnZShpZCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgfVxuXG4gICAgbGlzdEltYWdlcygpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpO1xuICAgIH1cblxuICAgIGFkZFNvdXJjZShpZDogc3RyaW5nLCBzb3VyY2U6IFNvdXJjZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVzW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNvdXJjZS50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAke09iamVjdC5rZXlzKHNvdXJjZSkuam9pbignLCAnKX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWlsdElucyA9IFsndmVjdG9yJywgJ3Jhc3RlcicsICdnZW9qc29uJywgJ3ZpZGVvJywgJ2ltYWdlJ107XG4gICAgICAgIGNvbnN0IHNob3VsZFZhbGlkYXRlID0gYnVpbHRJbnMuaW5kZXhPZihzb3VyY2UudHlwZSkgPj0gMDtcbiAgICAgICAgaWYgKHNob3VsZFZhbGlkYXRlICYmIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuc291cmNlLCBgc291cmNlcy4ke2lkfWAsIHNvdXJjZSwgbnVsbCwgb3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5tYXAgJiYgdGhpcy5tYXAuX2NvbGxlY3RSZXNvdXJjZVRpbWluZykgKHNvdXJjZTogYW55KS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2lkXSA9IG5ldyBTb3VyY2VDYWNoZShpZCwgc291cmNlLCB0aGlzLmRpc3BhdGNoZXIpO1xuICAgICAgICBzb3VyY2VDYWNoZS5zdHlsZSA9IHRoaXM7XG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEV2ZW50ZWRQYXJlbnQodGhpcywgKCkgPT4gKHtcbiAgICAgICAgICAgIGlzU291cmNlTG9hZGVkOiB0aGlzLmxvYWRlZCgpLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VDYWNoZS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIHNvdXJjZUlkOiBpZFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgc291cmNlQ2FjaGUub25BZGQodGhpcy5tYXApO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBzb3VyY2UgZnJvbSB0aGlzIHN0eWxlc2hlZXQsIGdpdmVuIGl0cyBpZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIHNvdXJjZSB0byByZW1vdmVcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gc291cmNlIGlzIGZvdW5kIHdpdGggdGhlIGdpdmVuIElEXG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sYXllcnNbbGF5ZXJJZF0uc291cmNlID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBTb3VyY2UgXCIke2lkfVwiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJHtsYXllcklkfVwiIGlzIHVzaW5nIGl0LmApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgc291cmNlQ2FjaGUuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7c291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YScsIGRhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VJZDogaWR9KSk7XG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIHNvdXJjZUNhY2hlLmNsZWFyVGlsZXMoKTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUub25SZW1vdmUpIHNvdXJjZUNhY2hlLm9uUmVtb3ZlKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXQgdGhlIGRhdGEgb2YgYSBHZW9KU09OIHNvdXJjZSwgZ2l2ZW4gaXRzIGlkLlxuICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2VcbiAgICAqIEBwYXJhbSB7R2VvSlNPTnxzdHJpbmd9IGRhdGEgR2VvSlNPTiBzb3VyY2VcbiAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhKGlkOiBzdHJpbmcsIGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBhc3NlcnQodGhpcy5zb3VyY2VDYWNoZXNbaWRdICE9PSB1bmRlZmluZWQsICdUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIGNvbnN0IGdlb2pzb25Tb3VyY2U6IEdlb0pTT05Tb3VyY2UgPSAodGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpOiBhbnkpO1xuICAgICAgICBhc3NlcnQoZ2VvanNvblNvdXJjZS50eXBlID09PSAnZ2VvanNvbicpO1xuXG4gICAgICAgIGdlb2pzb25Tb3VyY2Uuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc291cmNlIGJ5IGlkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgZGVzaXJlZCBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gJiYgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGxheWVyIHRvIHRoZSBtYXAgc3R5bGUuIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlXSBJRCBvZiBhbiBleGlzdGluZyBsYXllciB0byBpbnNlcnQgYmVmb3JlXG4gICAgICovXG4gICAgYWRkTGF5ZXIobGF5ZXJPYmplY3Q6IExheWVyU3BlY2lmaWNhdGlvbiB8IEN1c3RvbUxheWVySW50ZXJmYWNlLCBiZWZvcmU/OiBzdHJpbmcsIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgaWQgPSBsYXllck9iamVjdC5pZDtcblxuICAgICAgICBpZiAodGhpcy5nZXRMYXllcihpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYExheWVyIHdpdGggaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgbWFwYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXllcjtcbiAgICAgICAgaWYgKGxheWVyT2JqZWN0LnR5cGUgPT09ICdjdXN0b20nKSB7XG5cbiAgICAgICAgICAgIGlmIChlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIobGF5ZXJPYmplY3QpKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBsYXllciA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJPYmplY3QpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxheWVyT2JqZWN0LnNvdXJjZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNvdXJjZShpZCwgbGF5ZXJPYmplY3Quc291cmNlKTtcbiAgICAgICAgICAgICAgICBsYXllck9iamVjdCA9IGNsb25lKGxheWVyT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBsYXllck9iamVjdCA9IChleHRlbmQobGF5ZXJPYmplY3QsIHtzb3VyY2U6IGlkfSk6IGFueSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoaXMgbGF5ZXIgaXMgbm90IGluIHRoZSBzdHlsZS5sYXllcnMgYXJyYXksIHNvIHdlIHBhc3MgYW4gaW1wb3NzaWJsZSBhcnJheSBpbmRleFxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUubGF5ZXIsXG4gICAgICAgICAgICAgICAgYGxheWVycy4ke2lkfWAsIGxheWVyT2JqZWN0LCB7YXJyYXlJbmRleDogLTF9LCBvcHRpb25zKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBsYXllciA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJPYmplY3QpO1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVMYXllcihsYXllcik7XG5cbiAgICAgICAgICAgIGxheWVyLnNldEV2ZW50ZWRQYXJlbnQodGhpcywge2xheWVyOiB7aWR9fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGJlZm9yZSA/IHRoaXMuX29yZGVyLmluZGV4T2YoYmVmb3JlKSA6IHRoaXMuX29yZGVyLmxlbmd0aDtcbiAgICAgICAgaWYgKGJlZm9yZSAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYExheWVyIHdpdGggaWQgXCIke2JlZm9yZX1cIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3JkZXIuc3BsaWNlKGluZGV4LCAwLCBpZCk7XG4gICAgICAgIHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9sYXllcnNbaWRdID0gbGF5ZXI7XG5cbiAgICAgICAgaWYgKHRoaXMuX3JlbW92ZWRMYXllcnNbaWRdICYmIGxheWVyLnNvdXJjZSAmJiBsYXllci50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgLy8gSWYsIGluIHRoZSBjdXJyZW50IGJhdGNoLCB3ZSBoYXZlIGFscmVhZHkgcmVtb3ZlZCB0aGlzIGxheWVyXG4gICAgICAgICAgICAvLyBhbmQgd2UgYXJlIG5vdyByZS1hZGRpbmcgaXQgd2l0aCBhIGRpZmZlcmVudCBgdHlwZWAsIHRoZW4gd2VcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY2xlYXIgKHJhdGhlciB0aGFuIGp1c3QgcmVsb2FkKSB0aGUgdW5kZXJ5bGluZyBzb3VyY2Unc1xuICAgICAgICAgICAgLy8gdGlsZXMuICBPdGhlcndpc2UsIHRpbGVzIG1hcmtlZCAncmVsb2FkaW5nJyB3aWxsIGhhdmUgYnVja2V0cyAvXG4gICAgICAgICAgICAvLyBidWZmZXJzIHRoYXQgYXJlIHNldCB1cCBmb3IgdGhlIF9wcmV2aW91c18gdmVyc2lvbiBvZiB0aGlzXG4gICAgICAgICAgICAvLyBsYXllciwgY2F1c2luZywgZS5nLjpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zNjMzXG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fcmVtb3ZlZExheWVyc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVtb3ZlZExheWVyc1tpZF07XG4gICAgICAgICAgICBpZiAocmVtb3ZlZC50eXBlICE9PSBsYXllci50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdjbGVhcic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAncmVsb2FkJztcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdLnBhdXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuXG4gICAgICAgIGlmIChsYXllci5vbkFkZCkge1xuICAgICAgICAgICAgbGF5ZXIub25BZGQodGhpcy5tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBsYXllciB0byBhIGRpZmZlcmVudCB6LXBvc2l0aW9uLiBUaGUgbGF5ZXIgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGxheWVyIHdpdGhcbiAgICAgKiBJRCBgYmVmb3JlYCwgb3IgYXBwZW5kZWQgaWYgYGJlZm9yZWAgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgIElEIG9mIHRoZSBsYXllciB0byBtb3ZlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVdIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCBiZWZvcmVcbiAgICAgKi9cbiAgICBtb3ZlTGF5ZXIoaWQ6IHN0cmluZywgYmVmb3JlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2lkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgbW92ZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PT0gYmVmb3JlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX29yZGVyLmluZGV4T2YoaWQpO1xuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYmVmb3JlID8gdGhpcy5fb3JkZXIuaW5kZXhPZihiZWZvcmUpIDogdGhpcy5fb3JkZXIubGVuZ3RoO1xuICAgICAgICBpZiAoYmVmb3JlICYmIG5ld0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7YmVmb3JlfVwiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3JkZXIuc3BsaWNlKG5ld0luZGV4LCAwLCBpZCk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgZnJvbSB0aGUgc3R5bGUuXG4gICAgICpcbiAgICAgKiBJZiBubyBzdWNoIGxheWVyIGV4aXN0cywgYW4gYGVycm9yYCBldmVudCBpcyBmaXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgbGF5ZXIgdG8gcmVtb3ZlXG4gICAgICogQGZpcmVzIGVycm9yXG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2lkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX29yZGVyLmluZGV4T2YoaWQpO1xuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlbW92ZWRMYXllcnNbaWRdID0gbGF5ZXI7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tpZF07XG5cbiAgICAgICAgaWYgKGxheWVyLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBsYXllci5vblJlbW92ZSh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHN0eWxlIGxheWVyIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBgaWRgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWQgb2YgdGhlIGRlc2lyZWQgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7P09iamVjdH0gYSBsYXllciwgaWYgb25lIHdpdGggdGhlIGdpdmVuIGBpZGAgZXhpc3RzXG4gICAgICovXG4gICAgZ2V0TGF5ZXIoaWQ6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXllcnNbaWRdO1xuICAgIH1cblxuICAgIHNldExheWVyWm9vbVJhbmdlKGxheWVySWQ6IHN0cmluZywgbWluem9vbTogP251bWJlciwgbWF4em9vbTogP251bWJlcikge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBoYXZlIHpvb20gZXh0ZW50LmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5ZXIubWluem9vbSA9PT0gbWluem9vbSAmJiBsYXllci5tYXh6b29tID09PSBtYXh6b29tKSByZXR1cm47XG5cbiAgICAgICAgaWYgKG1pbnpvb20gIT0gbnVsbCkge1xuICAgICAgICAgICAgbGF5ZXIubWluem9vbSA9IG1pbnpvb207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heHpvb20gIT0gbnVsbCkge1xuICAgICAgICAgICAgbGF5ZXIubWF4em9vbSA9IG1heHpvb207XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIHNldEZpbHRlcihsYXllcklkOiBzdHJpbmcsIGZpbHRlcjogP0ZpbHRlclNwZWNpZmljYXRpb24sICBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBmaWx0ZXJlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5maWx0ZXIsIGZpbHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXIgPT09IG51bGwgfHwgZmlsdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxheWVyLmZpbHRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmZpbHRlciwgYGxheWVycy4ke2xheWVyLmlkfS5maWx0ZXJgLCBmaWx0ZXIsIG51bGwsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsYXllci5maWx0ZXIgPSBjbG9uZShmaWx0ZXIpO1xuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgbGF5ZXIncyBmaWx0ZXIgb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciB0byBpbnNwZWN0XG4gICAgICogQHJldHVybnMgeyp9IHRoZSBsYXllcidzIGZpbHRlciwgaWYgYW55XG4gICAgICovXG4gICAgZ2V0RmlsdGVyKGxheWVyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuZ2V0TGF5ZXIobGF5ZXIpLmZpbHRlcik7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksICBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRMYXllcihsYXllcklkKTtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZ2V0TGF5b3V0UHJvcGVydHkobmFtZSksIHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgICAgIGxheWVyLnNldExheW91dFByb3BlcnR5KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxheW91dCBwcm9wZXJ0eSdzIHZhbHVlIGZyb20gYSBnaXZlbiBsYXllclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIHRoZSBsYXllciB0byBpbnNwZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eVxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgcHJvcGVydHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGF5ZXIuZ2V0TGF5b3V0UHJvcGVydHkobmFtZSk7XG4gICAgfVxuXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmdldFBhaW50UHJvcGVydHkobmFtZSksIHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHJlcXVpcmVzUmVsYXlvdXQgPSBsYXllci5zZXRQYWludFByb3BlcnR5KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHJlcXVpcmVzUmVsYXlvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShsYXllcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGF5ZXIobGF5ZXIpLmdldFBhaW50UHJvcGVydHkobmFtZSk7XG4gICAgfVxuXG4gICAgc2V0RmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0sIHN0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHRhcmdldC5zb3VyY2VMYXllcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJZF07XG5cbiAgICAgICAgaWYgKHNvdXJjZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2UgJyR7c291cmNlSWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdnZW9qc29uJyAmJiBzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgR2VvSlNPTiBzb3VyY2VzIGNhbm5vdCBoYXZlIGEgc291cmNlTGF5ZXIgcGFyYW1ldGVyLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldC5pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC5gKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlQ2FjaGUuc2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCB0YXJnZXQuaWQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0OiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IH0sIGtleT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VJZCA9IHRhcmdldC5zb3VyY2U7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBzb3VyY2VUeXBlID09PSAndmVjdG9yJyA/IHRhcmdldC5zb3VyY2VMYXllciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgJiYgKHR5cGVvZiB0YXJnZXQuaWQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB0YXJnZXQuaWQgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgQSBmZWF0dXJlIGlkIGlzIHJlcXVyZWQgdG8gcmVtb3ZlIGl0cyBzcGVjaWZpYyBzdGF0ZSBwcm9wZXJ0eS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlQ2FjaGUucmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyLCB0YXJnZXQuaWQsIGtleSk7XG4gICAgfVxuXG4gICAgZ2V0RmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHRhcmdldC5zb3VyY2VMYXllcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tzb3VyY2VJZF07XG5cbiAgICAgICAgaWYgKHNvdXJjZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2UgJyR7c291cmNlSWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkudHlwZTtcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldC5pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC5gKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZUNhY2hlLmdldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkKTtcbiAgICB9XG5cbiAgICBnZXRUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHtkdXJhdGlvbjogMzAwLCBkZWxheTogMH0sIHRoaXMuc3R5bGVzaGVldCAmJiB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbik7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KHtcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMuc3R5bGVzaGVldC52ZXJzaW9uLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5zdHlsZXNoZWV0Lm5hbWUsXG4gICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5zdHlsZXNoZWV0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgbGlnaHQ6IHRoaXMuc3R5bGVzaGVldC5saWdodCxcbiAgICAgICAgICAgIGNlbnRlcjogdGhpcy5zdHlsZXNoZWV0LmNlbnRlcixcbiAgICAgICAgICAgIHpvb206IHRoaXMuc3R5bGVzaGVldC56b29tLFxuICAgICAgICAgICAgYmVhcmluZzogdGhpcy5zdHlsZXNoZWV0LmJlYXJpbmcsXG4gICAgICAgICAgICBwaXRjaDogdGhpcy5zdHlsZXNoZWV0LnBpdGNoLFxuICAgICAgICAgICAgc3ByaXRlOiB0aGlzLnN0eWxlc2hlZXQuc3ByaXRlLFxuICAgICAgICAgICAgZ2x5cGhzOiB0aGlzLnN0eWxlc2hlZXQuZ2x5cGhzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24sXG4gICAgICAgICAgICBzb3VyY2VzOiBtYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsIChzb3VyY2UpID0+IHNvdXJjZS5zZXJpYWxpemUoKSksXG4gICAgICAgICAgICBsYXllcnM6IHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcilcbiAgICAgICAgfSwgKHZhbHVlKSA9PiB7IHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkOyB9KTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVyc1tsYXllci5pZF0gPSB0cnVlO1xuICAgICAgICBpZiAobGF5ZXIuc291cmNlICYmICF0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdICYmXG4gICAgICAgICAgICAvL1NraXAgZm9yIHJhc3RlciBsYXllcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83ODY1KVxuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXS5nZXRTb3VyY2UoKS50eXBlICE9PSAncmFzdGVyJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXS5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIF9mbGF0dGVuQW5kU29ydFJlbmRlcmVkRmVhdHVyZXMoc291cmNlUmVzdWx0czogQXJyYXk8YW55Pikge1xuICAgICAgICAvLyBGZWF0dXJlIG9yZGVyIGlzIGNvbXBsaWNhdGVkLlxuICAgICAgICAvLyBUaGUgb3JkZXIgYmV0d2VlbiBmZWF0dXJlcyBpbiB0d28gMkQgbGF5ZXJzIGlzIGFsd2F5cyBkZXRlcm1pbmVkIGJ5IGxheWVyIG9yZGVyLlxuICAgICAgICAvLyBUaGUgb3JkZXIgYmV0d2VlbiBmZWF0dXJlcyBpbiB0d28gM0QgbGF5ZXJzIGlzIGFsd2F5cyBkZXRlcm1pbmVkIGJ5IGRlcHRoLlxuICAgICAgICAvLyBUaGUgb3JkZXIgYmV0d2VlbiBhIGZlYXR1cmUgaW4gYSAyRCBsYXllciBhbmQgYSAzRCBsYXllciBpcyB0cmlja3k6XG4gICAgICAgIC8vICAgICAgTW9zdCBvZnRlbiBsYXllciBvcmRlciBkZXRlcm1pbmVzIHRoZSBmZWF0dXJlIG9yZGVyIGluIHRoaXMgY2FzZS4gSWZcbiAgICAgICAgLy8gICAgICBhIGxpbmUgbGF5ZXIgaXMgYWJvdmUgYSBleHRydXNpb24gbGF5ZXIgdGhlIGxpbmUgZmVhdHVyZSB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICAgIC8vICAgICAgYWJvdmUgdGhlIGV4dHJ1c2lvbi4gSWYgdGhlIGxpbmUgbGF5ZXIgaXMgYmVsb3cgdGhlIGV4dHJ1c2lvbiBsYXllcixcbiAgICAgICAgLy8gICAgICBpdCB3aWxsIGJlIHJlbmRlcmVkIGJlbG93IGl0LlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgIFRoZXJlIGlzIGEgd2VpcmQgY2FzZSB0aG91Z2guXG4gICAgICAgIC8vICAgICAgWW91IGhhdmUgbGF5ZXJzIGluIHRoaXMgb3JkZXI6IGV4dHJ1c2lvbl9sYXllcl9hLCBsaW5lX2xheWVyLCBleHRydXNpb25fbGF5ZXJfYlxuICAgICAgICAvLyAgICAgIEVhY2ggbGF5ZXIgaGFzIGEgZmVhdHVyZSB0aGF0IG92ZXJsYXBzIHRoZSBvdGhlciBmZWF0dXJlcy5cbiAgICAgICAgLy8gICAgICBUaGUgZmVhdHVyZSBpbiBleHRydXNpb25fbGF5ZXJfYSBpcyBjbG9zZXIgdGhhbiB0aGUgZmVhdHVyZSBpbiBleHRydXNpb25fbGF5ZXJfYiBzbyBpdCBpcyByZW5kZXJlZCBhYm92ZS5cbiAgICAgICAgLy8gICAgICBUaGUgZmVhdHVyZSBpbiBsaW5lX2xheWVyIGlzIHJlbmRlcmVkIGFib3ZlIGV4dHJ1c2lvbl9sYXllcl9hLlxuICAgICAgICAvLyAgICAgIFRoaXMgbWVhbnMgdGhhdCB0aGF0IHRoZSBsaW5lX2xheWVyIGZlYXR1cmUgaXMgYWJvdmUgdGhlIGV4dHJ1c2lvbl9sYXllcl9iIGZlYXR1cmUgZGVzcGl0ZVxuICAgICAgICAvLyAgICAgIGl0IGJlaW5nIGluIGFuIGVhcmxpZXIgbGF5ZXIuXG5cbiAgICAgICAgY29uc3QgaXNMYXllcjNEID0gbGF5ZXJJZCA9PiB0aGlzLl9sYXllcnNbbGF5ZXJJZF0udHlwZSA9PT0gJ2ZpbGwtZXh0cnVzaW9uJztcblxuICAgICAgICBjb25zdCBsYXllckluZGV4ID0ge307XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzM0QgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgbCA9IHRoaXMuX29yZGVyLmxlbmd0aCAtIDE7IGwgPj0gMDsgbC0tKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllcklkID0gdGhpcy5fb3JkZXJbbF07XG4gICAgICAgICAgICBpZiAoaXNMYXllcjNEKGxheWVySWQpKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJJbmRleFtsYXllcklkXSA9IGw7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzb3VyY2VSZXN1bHQgb2Ygc291cmNlUmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXllckZlYXR1cmVzID0gc291cmNlUmVzdWx0W2xheWVySWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlV3JhcHBlciBvZiBsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMzRC5wdXNoKGZlYXR1cmVXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZlYXR1cmVzM0Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGIuaW50ZXJzZWN0aW9uWiAtIGEuaW50ZXJzZWN0aW9uWjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgbCA9IHRoaXMuX29yZGVyLmxlbmd0aCAtIDE7IGwgPj0gMDsgbC0tKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllcklkID0gdGhpcy5fb3JkZXJbbF07XG5cbiAgICAgICAgICAgIGlmIChpc0xheWVyM0QobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYWxsIDNEIGZlYXR1cmVzIHRoYXQgYXJlIGluIG9yIGFib3ZlIHRoZSBjdXJyZW50IGxheWVyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZlYXR1cmVzM0QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wbW9zdDNEID0gZmVhdHVyZXMzRFtpXS5mZWF0dXJlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJJbmRleFt0b3Btb3N0M0QubGF5ZXIuaWRdIDwgbCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2godG9wbW9zdDNEKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMzRC5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc291cmNlUmVzdWx0IG9mIHNvdXJjZVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXJGZWF0dXJlcyA9IHNvdXJjZVJlc3VsdFtsYXllcklkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZVdyYXBwZXIgb2YgbGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZVdyYXBwZXIuZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmVhdHVyZXM7XG4gICAgfVxuXG4gICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKHF1ZXJ5R2VvbWV0cnk6IGFueSwgcGFyYW1zOiBhbnksIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsICdxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyJywgcGFyYW1zLmZpbHRlciwgbnVsbCwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkU291cmNlcyA9IHt9O1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMubGF5ZXJzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ3BhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuJykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgcGFyYW1zLmxheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBsYXllciBpcyBub3QgaW4gdGhlIHN0eWxlLmxheWVycyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHF1ZXJpZWQgZm9yIGZlYXR1cmVzLmApKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5jbHVkZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlUmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGF5ZXJzICYmICFpbmNsdWRlZFNvdXJjZXNbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgcGxhY2VtZW50IGhhcyBydW4sIHF1ZXJ5IGFnYWluc3QgaXRzIENvbGxpc2lvbkluZGV4XG4gICAgICAgICAgICAvLyBmb3Igc3ltYm9sIHJlc3VsdHMsIGFuZCB0cmVhdCBpdCBhcyBhbiBleHRyYSBzb3VyY2UgdG8gbWVyZ2VcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlEOiBzdHJpbmcsIHBhcmFtczogP3tzb3VyY2VMYXllcjogP3N0cmluZywgZmlsdGVyOiA/QXJyYXk8YW55PiwgdmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXInLCBwYXJhbXMuZmlsdGVyLCBudWxsLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSURdO1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUgPyBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlLCBwYXJhbXMpIDogW107XG4gICAgfVxuXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IFNvdXJjZUNsYXNzLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgaWYgKFN0eWxlLmdldFNvdXJjZVR5cGUobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEEgc291cmNlIHR5cGUgY2FsbGVkIFwiJHtuYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0eWxlLnNldFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFTb3VyY2VUeXBlLndvcmtlclNvdXJjZVVSTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnbG9hZFdvcmtlclNvdXJjZScsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB1cmw6IFNvdXJjZVR5cGUud29ya2VyU291cmNlVVJMXG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodE9wdGlvbnM6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsaWdodCA9IHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICAgICAgbGV0IF91cGRhdGUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHRPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChsaWdodE9wdGlvbnNba2V5XSwgbGlnaHRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIV91cGRhdGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgbm93OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgIGRlbGF5OiAwXG4gICAgICAgICAgICB9LCB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbilcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxpZ2h0LnNldExpZ2h0KGxpZ2h0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBWYWxpZGF0b3IsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wczogYW55LCBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuc2VyaWFsaXplKCksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9LCBwcm9wcykpKTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zcHJpdGVSZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcnRsVGV4dFBsdWdpbkV2ZW50ZWQub2ZmKCdwbHVnaW5TdGF0ZUNoYW5nZScsIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayk7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyOiBTdHlsZUxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uY2xlYXJUaWxlcygpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgX2NsZWFyU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmNsZWFyVGlsZXMoKTtcbiAgICB9XG5cbiAgICBfcmVsb2FkU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlc3VtZSgpO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVNvdXJjZXModHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnVwZGF0ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlUGxhY2VtZW50KHRyYW5zZm9ybTogVHJhbnNmb3JtLCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIGZhZGVEdXJhdGlvbjogbnVtYmVyLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgcGxhY2VtZW50Q29tbWl0dGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgIT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc3R5bGVMYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdID0gc291cmNlQ2FjaGUuZ2V0UmVuZGVyYWJsZUlkcyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIudGlsZUlELm92ZXJzY2FsZWRaIC0gYS50aWxlSUQub3ZlcnNjYWxlZFopIHx8IChhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1Y2tldHNDaGFuZ2VkID0gdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihzdHlsZUxheWVyLCBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSwgdHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBzeW1ib2xCdWNrZXRzQ2hhbmdlZCB8fCBsYXllckJ1Y2tldHNDaGFuZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO1xuXG4gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgY2hhbmdlcyBvdXIgXCJpbiBwcm9ncmVzc1wiIGxheWVyIGFuZCB0aWxlIGluZGljZXMgcmVxdWlyZXMgdXNcbiAgICAgICAgLy8gdG8gc3RhcnQgb3Zlci4gV2hlbiB3ZSBzdGFydCBvdmVyLCB3ZSBkbyBhIGZ1bGwgcGxhY2VtZW50IGluc3RlYWQgb2YgaW5jcmVtZW50YWxcbiAgICAgICAgLy8gdG8gcHJldmVudCBzdGFydmF0aW9uLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc3RhcnQgcGxhY2VtZW50IHRvIGtlZXAgbGF5ZXIgaW5kaWNlcyBpbiBzeW5jLlxuICAgICAgICAvLyBBbHNvIGZvcmNlIGZ1bGwgcGxhY2VtZW50IHdoZW4gZmFkZUR1cmF0aW9uID09PSAwIHRvIGVuc3VyZSB0aGF0IG5ld2x5IGxvYWRlZFxuICAgICAgICAvLyB0aWxlcyB3aWxsIGZ1bGx5IGRpc3BsYXkgc3ltYm9scyBpbiB0aGVpciBmaXJzdCBmcmFtZVxuICAgICAgICBmb3JjZUZ1bGxQbGFjZW1lbnQgPSBmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgfHwgZmFkZUR1cmF0aW9uID09PSAwO1xuXG4gICAgICAgIGlmIChmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50IHx8ICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSAmJiAhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYnJvd3Nlci5ub3coKSwgdHJhbnNmb3JtLnpvb20pKSkge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgPSBuZXcgUGF1c2VhYmxlUGxhY2VtZW50KHRyYW5zZm9ybSwgdGhpcy5fb3JkZXIsIGZvcmNlRnVsbFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgLy8gdGhlIGxhc3QgcGxhY2VtZW50IGZpbmlzaGVkIHJ1bm5pbmcsIGJ1dCB0aGUgbmV4dCBvbmUgaGFzbsOiwoDCmXRcbiAgICAgICAgICAgIC8vIHN0YXJ0ZWQgeWV0IGJlY2F1c2Ugb2YgdGhlIGBzdGlsbFJlY2VudGAgY2hlY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIC8vIGFib3ZlLCBzbyBtYXJrIGl0IHN0YWxlIHRvIGVuc3VyZSB0aGF0IHdlIHJlcXVlc3QgYW5vdGhlclxuICAgICAgICAgICAgLy8gcmVuZGVyIGZyYW1lXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsIHRoaXMuX2xheWVycywgbGF5ZXJUaWxlcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50ID0gdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KGJyb3dzZXIubm93KCkpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBwbGFjZW1lbnQgZ2V0cyBzcGxpdCBvdmVyIG11bHRpcGxlIGZyYW1lcyBpdCBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Y2tldHMgd2VyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkgd2VyZSBjaGFuZ2VkIGFuZCBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBwbGFjZW1lbnQgaXMgYWxyZWFkeSBzdGFsZSB3aGlsZSBpdCBpcyBpbiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudENvbW1pdHRlZCB8fCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZHNSZW5kZXIgaXMgZmFsc2Ugd2hlbiB3ZSBoYXZlIGp1c3QgZmluaXNoZWQgYSBwbGFjZW1lbnQgdGhhdCBkaWRuJ3QgY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIGFueSBzeW1ib2xzXG4gICAgICAgIGNvbnN0IG5lZWRzUmVyZW5kZXIgPSAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkgfHwgdGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYnJvd3Nlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBuZWVkc1JlcmVuZGVyO1xuICAgIH1cblxuICAgIF9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbGJhY2tzIGZyb20gd2ViIHdvcmtlcnNcblxuICAgIGdldEltYWdlcyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtpY29uczogQXJyYXk8c3RyaW5nPiwgc291cmNlOiBzdHJpbmcsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKHBhcmFtcy5pY29ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIC8vIEFwcGx5IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzIGJlZm9yZSBzZXR0aW5nIHRoZSB0aWxlJ3MgZGVwZW5kZW5jaWVzIHNvIHRoYXQgdGhlIHRpbGVcbiAgICAgICAgLy8gaXMgbm90IHJlbG9hZGVkIHVuZWNlc3NhcmlseS4gV2l0aG91dCB0aGlzIGZvcmNlZCB1cGRhdGUgdGhlIHJlbG9hZCBjb3VsZCBoYXBwZW4gaW4gY2FzZXNcbiAgICAgICAgLy8gbGlrZSB0aGlzIG9uZTpcbiAgICAgICAgLy8gLSBpY29ucyBjb250YWlucyBcIm15LWltYWdlXCJcbiAgICAgICAgLy8gLSBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKC4uLikgdHJpZ2dlcnMgYG9uc3R5bGVpbWFnZW1pc3NpbmdgXG4gICAgICAgIC8vIC0gdGhlIHVzZXIgYWRkcyBcIm15LWltYWdlXCIgd2l0aGluIHRoZSBjYWxsYmFja1xuICAgICAgICAvLyAtIGFkZEltYWdlIGFkZHMgXCJteS1pbWFnZVwiIHRvIHRoaXMuX2NoYW5nZWRJbWFnZXNcbiAgICAgICAgLy8gLSB0aGUgbmV4dCBmcmFtZSB0cmlnZ2VycyBhIHJlbG9hZCBvZiB0aGlzIHRpbGUgZXZlbiB0aG91Z2ggaXQgYWxyZWFkeSBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSkge1xuICAgICAgICAgICAgc291cmNlQ2FjaGUuc2V0RGVwZW5kZW5jaWVzKHBhcmFtcy50aWxlSUQua2V5LCBwYXJhbXMudHlwZSwgcGFyYW1zLmljb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdseXBocyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzdGFja3M6IHtbc3RyaW5nXTogQXJyYXk8bnVtYmVyPn19LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhwYXJhbXMuc3RhY2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0UmVzb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxufVxuXG5TdHlsZS5nZXRTb3VyY2VUeXBlID0gZ2V0U291cmNlVHlwZTtcblN0eWxlLnNldFNvdXJjZVR5cGUgPSBzZXRTb3VyY2VUeXBlO1xuU3R5bGUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSA9IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIHR5cGU6ICdJbnQxNicsIGNvbXBvbmVudHM6IDJ9XG5dKTtcbiIsIlxuLy8gRGlzYWJsZSBGbG93IGFubm90YXRpb25zIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBpbXBvcnRpbmcgR0xTTCBmaWxlc1xuLyogZXNsaW50LWRpc2FibGUgZmxvd3R5cGUvcmVxdWlyZS12YWxpZC1maWxlLWFubm90YXRpb24gKi9cblxuaW1wb3J0IHByZWx1ZGVGcmFnIGZyb20gJy4vX3ByZWx1ZGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgcHJlbHVkZVZlcnQgZnJvbSAnLi9fcHJlbHVkZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZEZyYWcgZnJvbSAnLi9iYWNrZ3JvdW5kLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRWZXJ0IGZyb20gJy4vYmFja2dyb3VuZC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFBhdHRlcm5GcmFnIGZyb20gJy4vYmFja2dyb3VuZF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRQYXR0ZXJuVmVydCBmcm9tICcuL2JhY2tncm91bmRfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY2lyY2xlRnJhZyBmcm9tICcuL2NpcmNsZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjaXJjbGVWZXJ0IGZyb20gJy4vY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tGcmFnIGZyb20gJy4vY2xpcHBpbmdfbWFzay5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tWZXJ0IGZyb20gJy4vY2xpcHBpbmdfbWFzay52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcEZyYWcgZnJvbSAnLi9oZWF0bWFwLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBWZXJ0IGZyb20gJy4vaGVhdG1hcC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFRleHR1cmVGcmFnIGZyb20gJy4vaGVhdG1hcF90ZXh0dXJlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBUZXh0dXJlVmVydCBmcm9tICcuL2hlYXRtYXBfdGV4dHVyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94RnJhZyBmcm9tICcuL2NvbGxpc2lvbl9ib3guZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94VmVydCBmcm9tICcuL2NvbGxpc2lvbl9ib3gudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZUZyYWcgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZVZlcnQgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBkZWJ1Z0ZyYWcgZnJvbSAnLi9kZWJ1Zy5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBkZWJ1Z1ZlcnQgZnJvbSAnLi9kZWJ1Zy52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEZyYWcgZnJvbSAnLi9maWxsLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxWZXJ0IGZyb20gJy4vZmlsbC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVGcmFnIGZyb20gJy4vZmlsbF9vdXRsaW5lLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lVmVydCBmcm9tICcuL2ZpbGxfb3V0bGluZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVQYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfb3V0bGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX291dGxpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbFBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxQYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVByZXBhcmVGcmFnIGZyb20gJy4vaGlsbHNoYWRlX3ByZXBhcmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlUHJlcGFyZVZlcnQgZnJvbSAnLi9oaWxsc2hhZGVfcHJlcGFyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlRnJhZyBmcm9tICcuL2hpbGxzaGFkZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVWZXJ0IGZyb20gJy4vaGlsbHNoYWRlLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lRnJhZyBmcm9tICcuL2xpbmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVZlcnQgZnJvbSAnLi9saW5lLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRGcmFnIGZyb20gJy4vbGluZV9ncmFkaWVudC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRWZXJ0IGZyb20gJy4vbGluZV9ncmFkaWVudC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVBhdHRlcm5GcmFnIGZyb20gJy4vbGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVQYXR0ZXJuVmVydCBmcm9tICcuL2xpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVNERkZyYWcgZnJvbSAnLi9saW5lX3NkZi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lU0RGVmVydCBmcm9tICcuL2xpbmVfc2RmLnZlcnRleC5nbHNsJztcbmltcG9ydCByYXN0ZXJGcmFnIGZyb20gJy4vcmFzdGVyLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHJhc3RlclZlcnQgZnJvbSAnLi9yYXN0ZXIudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbEljb25GcmFnIGZyb20gJy4vc3ltYm9sX2ljb24uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sSWNvblZlcnQgZnJvbSAnLi9zeW1ib2xfaWNvbi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGRnJhZyBmcm9tICcuL3N5bWJvbF9zZGYuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGVmVydCBmcm9tICcuL3N5bWJvbF9zZGYudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uRnJhZyBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uVmVydCBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLnZlcnRleC5nbHNsJztcblxuZXhwb3J0IGNvbnN0IHByZWx1ZGUgPSBjb21waWxlKHByZWx1ZGVGcmFnLCBwcmVsdWRlVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZCA9IGNvbXBpbGUoYmFja2dyb3VuZEZyYWcsIGJhY2tncm91bmRWZXJ0KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kUGF0dGVybiA9IGNvbXBpbGUoYmFja2dyb3VuZFBhdHRlcm5GcmFnLCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGNpcmNsZSA9IGNvbXBpbGUoY2lyY2xlRnJhZywgY2lyY2xlVmVydCk7XG5leHBvcnQgY29uc3QgY2xpcHBpbmdNYXNrID0gY29tcGlsZShjbGlwcGluZ01hc2tGcmFnLCBjbGlwcGluZ01hc2tWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwID0gY29tcGlsZShoZWF0bWFwRnJhZywgaGVhdG1hcFZlcnQpO1xuZXhwb3J0IGNvbnN0IGhlYXRtYXBUZXh0dXJlID0gY29tcGlsZShoZWF0bWFwVGV4dHVyZUZyYWcsIGhlYXRtYXBUZXh0dXJlVmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94ID0gY29tcGlsZShjb2xsaXNpb25Cb3hGcmFnLCBjb2xsaXNpb25Cb3hWZXJ0KTtcbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGUgPSBjb21waWxlKGNvbGxpc2lvbkNpcmNsZUZyYWcsIGNvbGxpc2lvbkNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGRlYnVnID0gY29tcGlsZShkZWJ1Z0ZyYWcsIGRlYnVnVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbCA9IGNvbXBpbGUoZmlsbEZyYWcsIGZpbGxWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZSA9IGNvbXBpbGUoZmlsbE91dGxpbmVGcmFnLCBmaWxsT3V0bGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxPdXRsaW5lUGF0dGVybiA9IGNvbXBpbGUoZmlsbE91dGxpbmVQYXR0ZXJuRnJhZywgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbFBhdHRlcm4gPSBjb21waWxlKGZpbGxQYXR0ZXJuRnJhZywgZmlsbFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uID0gY29tcGlsZShmaWxsRXh0cnVzaW9uRnJhZywgZmlsbEV4dHJ1c2lvblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuID0gY29tcGlsZShmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcsIGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlUHJlcGFyZSA9IGNvbXBpbGUoaGlsbHNoYWRlUHJlcGFyZUZyYWcsIGhpbGxzaGFkZVByZXBhcmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBoaWxsc2hhZGUgPSBjb21waWxlKGhpbGxzaGFkZUZyYWcsIGhpbGxzaGFkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmUgPSBjb21waWxlKGxpbmVGcmFnLCBsaW5lVmVydCk7XG5leHBvcnQgY29uc3QgbGluZUdyYWRpZW50ID0gY29tcGlsZShsaW5lR3JhZGllbnRGcmFnLCBsaW5lR3JhZGllbnRWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lUGF0dGVybiA9IGNvbXBpbGUobGluZVBhdHRlcm5GcmFnLCBsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVTREYgPSBjb21waWxlKGxpbmVTREZGcmFnLCBsaW5lU0RGVmVydCk7XG5leHBvcnQgY29uc3QgcmFzdGVyID0gY29tcGlsZShyYXN0ZXJGcmFnLCByYXN0ZXJWZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xJY29uID0gY29tcGlsZShzeW1ib2xJY29uRnJhZywgc3ltYm9sSWNvblZlcnQpO1xuZXhwb3J0IGNvbnN0IHN5bWJvbFNERiA9IGNvbXBpbGUoc3ltYm9sU0RGRnJhZywgc3ltYm9sU0RGVmVydCk7XG5leHBvcnQgY29uc3Qgc3ltYm9sVGV4dEFuZEljb24gPSBjb21waWxlKHN5bWJvbFRleHRBbmRJY29uRnJhZywgc3ltYm9sVGV4dEFuZEljb25WZXJ0KTtcblxuLy8gRXhwYW5kICNwcmFnbWFzIHRvICNpZmRlZnMuXG5cbmZ1bmN0aW9uIGNvbXBpbGUoZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZSkge1xuICAgIGNvbnN0IHJlID0gLyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nO1xuXG4gICAgY29uc3QgZnJhZ21lbnRQcmFnbWFzID0ge307XG5cbiAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50U291cmNlLnJlcGxhY2UocmUsIChtYXRjaCwgb3BlcmF0aW9uLCBwcmVjaXNpb24sIHR5cGUsIG5hbWUpID0+IHtcbiAgICAgICAgZnJhZ21lbnRQcmFnbWFzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICByZXR1cm4gYFxuI2lmZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNvdXJjZS5yZXBsYWNlKHJlLCAobWF0Y2gsIG9wZXJhdGlvbiwgcHJlY2lzaW9uLCB0eXBlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJUeXBlID0gdHlwZSA9PT0gJ2Zsb2F0JyA/ICd2ZWMyJyA6ICd2ZWM0JztcbiAgICAgICAgY29uc3QgdW5wYWNrVHlwZSA9IG5hbWUubWF0Y2goL2NvbG9yLykgPyAnY29sb3InIDogYXR0clR5cGU7XG5cbiAgICAgICAgaWYgKGZyYWdtZW50UHJhZ21hc1tuYW1lXSkge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7bmFtZX0gPSB1bnBhY2tfbWl4XyR7dW5wYWNrVHlwZX0oYV8ke25hbWV9LCB1XyR7bmFtZX1fdCk7XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAqL3tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVucGFja19taXhfJHt1bnBhY2tUeXBlfShhXyR7bmFtZX0sIHVfJHtuYW1lfV90KTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZX07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5jbGFzcyBWZXJ0ZXhBcnJheU9iamVjdCB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBib3VuZFByb2dyYW06ID9Qcm9ncmFtPCo+O1xuICAgIGJvdW5kTGF5b3V0VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIGJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuICAgIGJvdW5kSW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcjtcbiAgICBib3VuZFZlcnRleE9mZnNldDogP251bWJlcjtcbiAgICBib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgYm91bmREeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB2YW86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmFvID0gbnVsbDtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICBpbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyLFxuICAgICAgICAgdmVydGV4T2Zmc2V0OiA/bnVtYmVyLFxuICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgICBsZXQgcGFpbnRCdWZmZXJzRGlmZmVyID0gdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGggIT09IHBhaW50VmVydGV4QnVmZmVycy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyAhcGFpbnRCdWZmZXJzRGlmZmVyICYmIGkgPCBwYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2ldICE9PSBwYWludFZlcnRleEJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgICAgICBwYWludEJ1ZmZlcnNEaWZmZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNGcmVzaEJpbmRSZXF1aXJlZCA9IChcbiAgICAgICAgICAgICF0aGlzLnZhbyB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gIT09IHByb2dyYW0gfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgIT09IGxheW91dFZlcnRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgcGFpbnRCdWZmZXJzRGlmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgIT09IGluZGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ICE9PSB2ZXJ0ZXhPZmZzZXQgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyICE9PSBkeW5hbWljVmVydGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIgIT09IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0IHx8IGlzRnJlc2hCaW5kUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZnJlc2hCaW5kKHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgcGFpbnRWZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgdmVydGV4T2Zmc2V0LCBkeW5hbWljVmVydGV4QnVmZmVyLCBkeW5hbWljVmVydGV4QnVmZmVyMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pO1xuXG4gICAgICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbiB1cGRhdGVkLiBSZWJpbmQgdG8gdXBsb2FkIGRhdGEuXG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleEJ1ZmZlciAmJiBpbmRleEJ1ZmZlci5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuYmluZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlc2hCaW5kKHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICAgICAgIGluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgIHZlcnRleE9mZnNldDogP251bWJlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgbGV0IG51bVByZXZBdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBudW1OZXh0QXR0cmlidXRlcyA9IHByb2dyYW0ubnVtQXR0cmlidXRlcztcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbykgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyk7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhcmd1bWVudHMgc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoZW0gd2hlbiB0aGUgdmFvIGlzIGJvdW5kIGFnYWluXG4gICAgICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyID0gbGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycyA9IHBhaW50VmVydGV4QnVmZmVycztcbiAgICAgICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCA9IHZlcnRleE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyID0gZHluYW1pY1ZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiA9IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgfHwgMDtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBhbGwgYXR0cmlidXRlcyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmFtIHRoYXQgYXJlbid0IHVzZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcHJvZ3JhbS4gTm90ZTogYXR0cmlidXRlIGluZGljZXMgYXJlICpub3QqIHByb2dyYW0gc3BlY2lmaWMhXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbnVtTmV4dEF0dHJpYnV0ZXM7IGkgPCBudW1QcmV2QXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gV2ViR0wgYnJlYWtzIGlmIHlvdSBkaXNhYmxlIGF0dHJpYnV0ZSAwLlxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAzMDUyMzFcbiAgICAgICAgICAgICAgICBhc3NlcnQoaSAhPT0gMCk7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleEJ1ZmZlciBvZiBwYWludFZlcnRleEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIGZvciAoY29uc3QgdmVydGV4QnVmZmVyIG9mIHBhaW50VmVydGV4QnVmZmVycykge1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5iaW5kKCk7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgPSBudW1OZXh0QXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy52YW8pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlcnRleEFycmF5T2JqZWN0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwcmVsdWRlfSBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5pbXBvcnQgdHlwZSBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IHR5cGUgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCB0eXBlIENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCB0eXBlIEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybUJpbmRpbmdzLCBVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7QmluZGVyVW5pZm9ybX0gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgdHlwZSBEcmF3TW9kZSA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnVFJJQU5HTEVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORV9TVFJJUCc+O1xuXG5jbGFzcyBQcm9ncmFtPFVzOiBVbmlmb3JtQmluZGluZ3M+IHtcbiAgICBwcm9ncmFtOiBXZWJHTFByb2dyYW07XG4gICAgYXR0cmlidXRlczoge1tzdHJpbmddOiBudW1iZXJ9O1xuICAgIG51bUF0dHJpYnV0ZXM6IG51bWJlcjtcbiAgICBmaXhlZFVuaWZvcm1zOiBVcztcbiAgICBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT47XG4gICAgZmFpbGVkVG9DcmVhdGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHNvdXJjZToge2ZyYWdtZW50U291cmNlOiBzdHJpbmcsIHZlcnRleFNvdXJjZTogc3RyaW5nfSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiA/UHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgZml4ZWRVbmlmb3JtczogKENvbnRleHQsIFVuaWZvcm1Mb2NhdGlvbnMpID0+IFVzLFxuICAgICAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBjb25zdCBkZWZpbmVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZGVmaW5lcygpIDogW107XG4gICAgICAgIGlmIChzaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGRlZmluZXMucHVzaCgnI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsIHNvdXJjZS5mcmFnbWVudFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUudmVydGV4U291cmNlLCBzb3VyY2UudmVydGV4U291cmNlKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgaWYgKGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRUb0NyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcblxuICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIGlmIChnbC5pc0NvbnRleHRMb3N0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkVG9DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSwgKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgYmluZCBsYXlvdXQgYXR0cmlidXRlcyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpclxuICAgICAgICAvLyBQcm9ncmFtSW50ZXJmYWNlIHNvIHRoYXQgd2UgZG9uJ3QgZHluYW1pY2FsbHkgbGluayBhbiB1bnVzZWRcbiAgICAgICAgLy8gYXR0cmlidXRlIGF0IHBvc2l0aW9uIDAsIHdoaWNoIGNhbiBjYXVzZSByZW5kZXJpbmcgdG8gZmFpbCBmb3IgYW5cbiAgICAgICAgLy8gZW50aXJlIGxheWVyIChzZWUgIzQ2MDcsICM0NzI4KVxuICAgICAgICBjb25zdCBsYXlvdXRBdHRyaWJ1dGVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24ubGF5b3V0QXR0cmlidXRlcyA6IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGksIGxheW91dEF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSwgKGdsLmdldFByb2dyYW1JbmZvTG9nKHRoaXMucHJvZ3JhbSk6IGFueSkpO1xuXG4gICAgICAgIHRoaXMubnVtQXR0cmlidXRlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHVuaWZvcm1Mb2NhdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1Vbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVuaWZvcm1zOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbnNbdW5pZm9ybS5uYW1lXSA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHVuaWZvcm0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXMgPSBmaXhlZFVuaWZvcm1zKGNvbnRleHQsIHVuaWZvcm1Mb2NhdGlvbnMpO1xuICAgICAgICB0aGlzLmJpbmRlclVuaWZvcm1zID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0VW5pZm9ybXMoY29udGV4dCwgdW5pZm9ybUxvY2F0aW9ucykgOiBbXTtcbiAgICB9XG5cbiAgICBkcmF3KGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBkcmF3TW9kZTogRHJhd01vZGUsXG4gICAgICAgICBkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+LFxuICAgICAgICAgc3RlbmNpbE1vZGU6ICRSZWFkT25seTxTdGVuY2lsTW9kZT4sXG4gICAgICAgICBjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+LFxuICAgICAgICAgY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPixcbiAgICAgICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8VXM+LFxuICAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgICAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICAgICAgIGN1cnJlbnRQcm9wZXJ0aWVzOiBhbnksXG4gICAgICAgICB6b29tOiA/bnVtYmVyLFxuICAgICAgICAgY29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLmZhaWxlZFRvQ3JlYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29udGV4dC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDdWxsRmFjZShjdWxsRmFjZU1vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLmZpeGVkVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRVbmlmb3Jtc1tuYW1lXS5zZXQodW5pZm9ybVZhbHVlc1tuYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zZXRVbmlmb3Jtcyhjb250ZXh0LCB0aGlzLmJpbmRlclVuaWZvcm1zLCBjdXJyZW50UHJvcGVydGllcywge3pvb206ICh6b29tOiBhbnkpfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltaXRpdmVTaXplID0ge1xuICAgICAgICAgICAgW2dsLkxJTkVTXTogMixcbiAgICAgICAgICAgIFtnbC5UUklBTkdMRVNdOiAzLFxuICAgICAgICAgICAgW2dsLkxJTkVfU1RSSVBdOiAxXG4gICAgICAgIH1bZHJhd01vZGVdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cy5nZXQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFvcyA9IHNlZ21lbnQudmFvcyB8fCAoc2VnbWVudC52YW9zID0ge30pO1xuICAgICAgICAgICAgY29uc3QgdmFvOiBWZXJ0ZXhBcnJheU9iamVjdCA9IHZhb3NbbGF5ZXJJRF0gfHwgKHZhb3NbbGF5ZXJJRF0gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoKSk7XG5cbiAgICAgICAgICAgIHZhby5iaW5kKFxuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCkgOiBbXSxcbiAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleE9mZnNldCxcbiAgICAgICAgICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZHJhd01vZGUsXG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKiBwcmltaXRpdmVTaXplLFxuICAgICAgICAgICAgICAgIGdsLlVOU0lHTkVEX1NIT1JULFxuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlT2Zmc2V0ICogcHJpbWl0aXZlU2l6ZSAqIDIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtNGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbnR5cGUgQmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BhdHRlcm5fdGxfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX2JyX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl90bF9iJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYic6IFVuaWZvcm0yZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X21peCc6IFVuaWZvcm0xZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9hJzogVW5pZm9ybTFmLFxuICAgICd1X3NjYWxlX2InOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGlsZV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtNGYsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZlxufH07XG5cbmZ1bmN0aW9uIHBhdHRlcm5Vbmlmb3JtVmFsdWVzKGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycywgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxQYXR0ZXJuVW5pZm9ybXNUeXBlPiB7XG5cbiAgICBjb25zdCB0aWxlUmF0aW8gPSAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pO1xuXG4gICAgY29uc3QgbnVtVGlsZXMgPSBNYXRoLnBvdygyLCB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgY29uc3QgdGlsZVNpemVBdE5lYXJlc3Rab29tID0gdGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSAvIG51bVRpbGVzO1xuXG4gICAgY29uc3QgcGl4ZWxYID0gdGlsZVNpemVBdE5lYXJlc3Rab29tICogKHRpbGUudGlsZUlELmNhbm9uaWNhbC54ICsgdGlsZS50aWxlSUQud3JhcCAqIG51bVRpbGVzKTtcbiAgICBjb25zdCBwaXhlbFkgPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxcbiAgICAgICAgLy8gdGhpcyBhc3N1bWVzIGFsbCBpbWFnZXMgaW4gdGhlIGljb24gYXRsYXMgdGV4dHVyZSBoYXZlIHRoZSBzYW1lIHBpeGVsIHJhdGlvXG4gICAgICAgICd1X3NjYWxlJzogW2Jyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbywgdGlsZVJhdGlvLCBjcm9zc2ZhZGUuZnJvbVNjYWxlLCBjcm9zc2ZhZGUudG9TY2FsZV0sXG4gICAgICAgICd1X2ZhZGUnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBpeGVsIGNvb3JkIGludG8gdHdvIHBhaXJzIG9mIDE2IGJpdCBudW1iZXJzLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbi5cbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBbcGl4ZWxYID4+IDE2LCBwaXhlbFkgPj4gMTZdLFxuICAgICAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFtwaXhlbFggJiAweEZGRkYsIHBpeGVsWSAmIDB4RkZGRl1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzKGltYWdlOiBDcm9zc0ZhZGVkPFJlc29sdmVkSW1hZ2U+LCBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgICAgIHRpbGU6IHt0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHRpbGVTaXplOiBudW1iZXJ9XG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlPiB7XG4gICAgY29uc3QgaW1hZ2VQb3NBID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS5mcm9tLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IGltYWdlUG9zQiA9IHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UudG8udG9TdHJpbmcoKSk7XG4gICAgYXNzZXJ0KGltYWdlUG9zQSAmJiBpbWFnZVBvc0IpO1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpO1xuXG4gICAgY29uc3QgbnVtVGlsZXMgPSBNYXRoLnBvdygyLCB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgY29uc3QgdGlsZVNpemVBdE5lYXJlc3Rab29tID0gdGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSAvIG51bVRpbGVzO1xuXG4gICAgY29uc3QgcGl4ZWxYID0gdGlsZVNpemVBdE5lYXJlc3Rab29tICogKHRpbGUudGlsZUlELmNhbm9uaWNhbC54ICsgdGlsZS50aWxlSUQud3JhcCAqIG51bVRpbGVzKTtcbiAgICBjb25zdCBwaXhlbFkgPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfcGF0dGVybl90bF9hJzogKGltYWdlUG9zQTogYW55KS50bCxcbiAgICAgICAgJ3VfcGF0dGVybl9icl9hJzogKGltYWdlUG9zQTogYW55KS5icixcbiAgICAgICAgJ3VfcGF0dGVybl90bF9iJzogKGltYWdlUG9zQjogYW55KS50bCxcbiAgICAgICAgJ3VfcGF0dGVybl9icl9iJzogKGltYWdlUG9zQjogYW55KS5icixcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgICAgICAgJ3VfbWl4JzogY3Jvc3NmYWRlLnQsXG4gICAgICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogKGltYWdlUG9zQTogYW55KS5kaXNwbGF5U2l6ZSxcbiAgICAgICAgJ3VfcGF0dGVybl9zaXplX2InOiAoaW1hZ2VQb3NCOiBhbnkpLmRpc3BsYXlTaXplLFxuICAgICAgICAndV9zY2FsZV9hJzogY3Jvc3NmYWRlLmZyb21TY2FsZSxcbiAgICAgICAgJ3Vfc2NhbGVfYic6IGNyb3NzZmFkZS50b1NjYWxlLFxuICAgICAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSksXG4gICAgICAgIC8vIHNwbGl0IHRoZSBwaXhlbCBjb29yZCBpbnRvIHR3byBwYWlycyBvZiAxNiBiaXQgbnVtYmVycy4gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZiBwcmVjaXNpb24uXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogW3BpeGVsWCA+PiAxNiwgcGl4ZWxZID4+IDE2XSxcbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBbcGl4ZWxYICYgMHhGRkZGLCBwaXhlbFkgJiAweEZGRkZdXG4gICAgfTtcbn1cbmV4cG9ydCB7YmdQYXR0ZXJuVW5pZm9ybVZhbHVlcywgcGF0dGVyblVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm00ZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHttYXQzLCB2ZWMzfSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcblxuZXhwb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xpZ2h0cG9zJzogVW5pZm9ybTNmLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2xpZ2h0Y29sb3InOiBVbmlmb3JtM2YsXG4gICAgJ3VfdmVydGljYWxfZ3JhZGllbnQnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfbGlnaHRwb3MnOiBVbmlmb3JtM2YsXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfbGlnaHRjb2xvcic6IFVuaWZvcm0zZixcbiAgICAndV9oZWlnaHRfZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogVW5pZm9ybTFmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm00ZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbEV4dHJ1c2lvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9saWdodHBvcyc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRwb3MpLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGludGVuc2l0eSksXG4gICAgJ3VfbGlnaHRjb2xvcic6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRjb2xvciksXG4gICAgJ3VfdmVydGljYWxfZ3JhZGllbnQnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3ZlcnRpY2FsX2dyYWRpZW50KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KVxufSk7XG5cbmNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGlnaHRwb3MnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0cG9zKSxcbiAgICAndV9saWdodGludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRpbnRlbnNpdHkpLFxuICAgICd1X2xpZ2h0Y29sb3InOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0Y29sb3IpLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV92ZXJ0aWNhbF9ncmFkaWVudCksXG4gICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaGVpZ2h0X2ZhY3RvciksXG4gICAgLy8gcGF0dGVybiB1bmlmb3Jtc1xuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQ6IGJvb2xlYW4sXG4gICAgb3BhY2l0eTogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCBsaWdodCA9IHBhaW50ZXIuc3R5bGUubGlnaHQ7XG4gICAgY29uc3QgX2xwID0gbGlnaHQucHJvcGVydGllcy5nZXQoJ3Bvc2l0aW9uJyk7XG4gICAgY29uc3QgbGlnaHRQb3MgPSBbX2xwLngsIF9scC55LCBfbHAuel07XG4gICAgY29uc3QgbGlnaHRNYXQgPSBtYXQzLmNyZWF0ZSgpO1xuICAgIGlmIChsaWdodC5wcm9wZXJ0aWVzLmdldCgnYW5jaG9yJykgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgbWF0My5mcm9tUm90YXRpb24obGlnaHRNYXQsIC1wYWludGVyLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgfVxuICAgIHZlYzMudHJhbnNmb3JtTWF0MyhsaWdodFBvcywgbGlnaHRQb3MsIGxpZ2h0TWF0KTtcblxuICAgIGNvbnN0IGxpZ2h0Q29sb3IgPSBsaWdodC5wcm9wZXJ0aWVzLmdldCgnY29sb3InKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfbGlnaHRwb3MnOiBsaWdodFBvcyxcbiAgICAgICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBsaWdodC5wcm9wZXJ0aWVzLmdldCgnaW50ZW5zaXR5JyksXG4gICAgICAgICd1X2xpZ2h0Y29sb3InOiBbbGlnaHRDb2xvci5yLCBsaWdodENvbG9yLmcsIGxpZ2h0Q29sb3IuYl0sXG4gICAgICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogK3Nob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQsXG4gICAgICAgICd1X29wYWNpdHknOiBvcGFjaXR5XG4gICAgfTtcbn07XG5cbmNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQ6IGJvb2xlYW4sXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlELFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgcmV0dXJuIGV4dGVuZChmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQsIG9wYWNpdHkpLFxuICAgICAgICBwYXR0ZXJuVW5pZm9ybVZhbHVlcyhjcm9zc2ZhZGUsIHBhaW50ZXIsIHRpbGUpLFxuICAgICAgICB7XG4gICAgICAgICAgICAndV9oZWlnaHRfZmFjdG9yJzogLU1hdGgucG93KDIsIGNvb3JkLm92ZXJzY2FsZWRaKSAvIHRpbGUudGlsZVNpemUgLyA4XG4gICAgICAgIH0pO1xufTtcblxuZXhwb3J0IHtcbiAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGxVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfd29ybGQnOiBVbmlmb3JtMmZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm00ZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfd29ybGQnOiBVbmlmb3JtMmYsXG4gICAgLy8gcGF0dGVybiB1bmlmb3JtczpcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlJzogVW5pZm9ybTRmLFxuICAgICd1X2ZhZGUnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBmaWxsVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGZpbGxQYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfdXBwZXIpLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF9sb3dlciksXG4gICAgJ3Vfc2NhbGUnOiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlKSxcbiAgICAndV9mYWRlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlKVxuXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBGaWxsT3V0bGluZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3dvcmxkJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV93b3JsZCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfdXBwZXIpLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF9sb3dlciksXG4gICAgJ3Vfc2NhbGUnOiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlKSxcbiAgICAndV9mYWRlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlKVxufSk7XG5cbmNvbnN0IGZpbGxVbmlmb3JtVmFsdWVzID0gKG1hdHJpeDogRmxvYXQzMkFycmF5KTogVW5pZm9ybVZhbHVlczxGaWxsVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeFxufSk7XG5cbmNvbnN0IGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiBleHRlbmQoXG4gICAgZmlsbFVuaWZvcm1WYWx1ZXMobWF0cml4KSxcbiAgICBwYXR0ZXJuVW5pZm9ybVZhbHVlcyhjcm9zc2ZhZGUsIHBhaW50ZXIsIHRpbGUpXG4pO1xuXG5jb25zdCBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgZHJhd2luZ0J1ZmZlclNpemU6IFtudW1iZXIsIG51bWJlcl1cbik6IFVuaWZvcm1WYWx1ZXM8RmlsbE91dGxpbmVVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X3dvcmxkJzogZHJhd2luZ0J1ZmZlclNpemVcbn0pO1xuXG5jb25zdCBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgZHJhd2luZ0J1ZmZlclNpemU6IFtudW1iZXIsIG51bWJlcl1cbik6IFVuaWZvcm1WYWx1ZXM8RmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiBleHRlbmQoXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgY3Jvc3NmYWRlLCB0aWxlKSxcbiAgICB7XG4gICAgICAgICd1X3dvcmxkJzogZHJhd2luZ0J1ZmZlclNpemVcbiAgICB9XG4pO1xuXG5leHBvcnQge1xuICAgIGZpbGxVbmlmb3JtcyxcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbFVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuZXhwb3J0IHR5cGUgQ2lyY2xlVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3NjYWxlX3dpdGhfbWFwJzogVW5pZm9ybTFpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogVW5pZm9ybTFpLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmNvbnN0IGNpcmNsZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IENpcmNsZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3NjYWxlX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZV93aXRoX21hcCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9leHRydWRlX3NjYWxlKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgY2lyY2xlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlELFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IENpcmNsZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8Q2lyY2xlVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICBsZXQgcGl0Y2hXaXRoTWFwOiBib29sZWFuLCBleHRydWRlU2NhbGU6IFtudW1iZXIsIG51bWJlcl07XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJykge1xuICAgICAgICBjb25zdCBwaXhlbFJhdGlvID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBwaXRjaFdpdGhNYXAgPSB0cnVlO1xuICAgICAgICBleHRydWRlU2NhbGUgPSBbcGl4ZWxSYXRpbywgcGl4ZWxSYXRpb107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGl0Y2hXaXRoTWFwID0gZmFsc2U7XG4gICAgICAgIGV4dHJ1ZGVTY2FsZSA9IHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV9zY2FsZV93aXRoX21hcCc6ICsobGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtc2NhbGUnKSA9PT0gJ21hcCcpLFxuICAgICAgICAndV9tYXRyaXgnOiBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3InKSksXG4gICAgICAgICd1X3BpdGNoX3dpdGhfbWFwJzogKyhwaXRjaFdpdGhNYXApLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBleHRydWRlU2NhbGVcbiAgICB9O1xufTtcblxuZXhwb3J0IHtjaXJjbGVVbmlmb3JtcywgY2lyY2xlVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIENvbGxpc2lvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl4ZWxzX3RvX3RpbGVfdW5pdHMnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IFVuaWZvcm0yZixcbiAgICAndV9vdmVyc2NhbGVfZmFjdG9yJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgY29sbGlzaW9uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ29sbGlzaW9uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbHNfdG9fdGlsZV91bml0cyksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcnNjYWxlX2ZhY3Rvcilcbn0pO1xuXG5jb25zdCBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8Q29sbGlzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgIGNvbnN0IG92ZXJzY2FsZUZhY3RvciA9IHRpbGUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IHBpeGVsUmF0aW8sXG4gICAgICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBbdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSAvIChwaXhlbFJhdGlvICogc2NhbGUpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXSAvIChwaXhlbFJhdGlvICogc2NhbGUpXSxcbiAgICAgICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG92ZXJzY2FsZUZhY3RvclxuICAgIH07XG59O1xuXG5leHBvcnQge2NvbGxpc2lvblVuaWZvcm1zLCBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5leHBvcnQgdHlwZSBEZWJ1Z1VuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY29sb3InOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuY29uc3QgZGVidWdVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBEZWJ1Z1VuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2NvbG9yJzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9jb2xvciksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgZGVidWdVbmlmb3JtVmFsdWVzID0gKG1hdHJpeDogRmxvYXQzMkFycmF5LCBjb2xvcjogQ29sb3IpOiBVbmlmb3JtVmFsdWVzPERlYnVnVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9jb2xvcic6IGNvbG9yXG59KTtcblxuZXhwb3J0IHtkZWJ1Z1VuaWZvcm1zLCBkZWJ1Z1VuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtVbmlmb3JtTWF0cml4NGZ9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgQ2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjbGlwcGluZ01hc2tVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDbGlwcGluZ01hc2tVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzID0gKG1hdHJpeDogRmxvYXQzMkFycmF5KTogVW5pZm9ybVZhbHVlczxDbGlwcGluZ01hc2tVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4XG59KTtcblxuZXhwb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtcywgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCB0eXBlIEhlYXRtYXBVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmV4cG9ydCB0eXBlIEhlYXRtYXBUZXh0dXJlVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfd29ybGQnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfY29sb3JfcmFtcCc6IFVuaWZvcm0xaSxcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgaGVhdG1hcFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhlYXRtYXBVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9leHRydWRlX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9leHRydWRlX3NjYWxlKSxcbiAgICAndV9pbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ludGVuc2l0eSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgaGVhdG1hcFRleHR1cmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfY29sb3JfcmFtcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3JfcmFtcCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBoZWF0bWFwVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0aWxlOiBUaWxlLFxuICAgIHpvb206IG51bWJlcixcbiAgICBpbnRlbnNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIZWF0bWFwVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9leHRydWRlX3NjYWxlJzogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgem9vbSksXG4gICAgJ3VfaW50ZW5zaXR5JzogaW50ZW5zaXR5XG59KTtcblxuY29uc3QgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbGF5ZXI6IEhlYXRtYXBTdHlsZUxheWVyLFxuICAgIHRleHR1cmVVbml0OiBudW1iZXIsXG4gICAgY29sb3JSYW1wVW5pdDogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEhlYXRtYXBUZXh0dXJlVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICBtYXQ0Lm9ydGhvKG1hdHJpeCwgMCwgcGFpbnRlci53aWR0aCwgcGFpbnRlci5oZWlnaHQsIDAsIDAsIDEpO1xuXG4gICAgY29uc3QgZ2wgPSBwYWludGVyLmNvbnRleHQuZ2w7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X3dvcmxkJzogW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0sXG4gICAgICAgICd1X2ltYWdlJzogdGV4dHVyZVVuaXQsXG4gICAgICAgICd1X2NvbG9yX3JhbXAnOiBjb2xvclJhbXBVbml0LFxuICAgICAgICAndV9vcGFjaXR5JzogbGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKVxuICAgIH07XG59O1xuXG5leHBvcnQge1xuICAgIGhlYXRtYXBVbmlmb3JtcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1zLFxuICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzLFxuICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmLFxuICAgIFVuaWZvcm00ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi8uLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uLy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgSGlsbHNoYWRlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oaWxsc2hhZGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgREVNRGF0YSBmcm9tICcuLi8uLi9kYXRhL2RlbV9kYXRhJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCB0eXBlIEhpbGxzaGFkZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2xhdHJhbmdlJzogVW5pZm9ybTJmLFxuICAgICd1X2xpZ2h0JzogVW5pZm9ybTJmLFxuICAgICd1X3NoYWRvdyc6IFVuaWZvcm1Db2xvcixcbiAgICAndV9oaWdobGlnaHQnOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfYWNjZW50JzogVW5pZm9ybUNvbG9yXG58fTtcblxuZXhwb3J0IHR5cGUgSGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2RpbWVuc2lvbic6IFVuaWZvcm0yZixcbiAgICAndV96b29tJzogVW5pZm9ybTFmLFxuICAgICd1X21heHpvb20nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5wYWNrJzogVW5pZm9ybTRmXG58fTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGlsbHNoYWRlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfbGF0cmFuZ2UnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhdHJhbmdlKSxcbiAgICAndV9saWdodCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHQpLFxuICAgICd1X3NoYWRvdyc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfc2hhZG93KSxcbiAgICAndV9oaWdobGlnaHQnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2hpZ2hsaWdodCksXG4gICAgJ3VfYWNjZW50JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9hY2NlbnQpXG59KTtcblxuY29uc3QgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV9kaW1lbnNpb24nOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RpbWVuc2lvbiksXG4gICAgJ3Vfem9vbSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfem9vbSksXG4gICAgJ3VfbWF4em9vbSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF4em9vbSksXG4gICAgJ3VfdW5wYWNrJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV91bnBhY2spXG59KTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IEhpbGxzaGFkZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGlsbHNoYWRlVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3Qgc2hhZG93ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiKTtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCIpO1xuICAgIGNvbnN0IGFjY2VudCA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIik7XG5cbiAgICBsZXQgYXppbXV0aGFsID0gbGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbicpICogKE1hdGguUEkgLyAxODApO1xuICAgIC8vIG1vZGlmeSBhemltdXRoYWwgYW5nbGUgYnkgbWFwIHJvdGF0aW9uIGlmIGxpZ2h0IGlzIGFuY2hvcmVkIGF0IHRoZSB2aWV3cG9ydFxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2hpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yJykgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgYXppbXV0aGFsIC09IHBhaW50ZXIudHJhbnNmb3JtLmFuZ2xlO1xuICAgIH1cbiAgICBjb25zdCBhbGlnbiA9ICFwYWludGVyLm9wdGlvbnMubW92aW5nO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IHBhaW50ZXIudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlLnRpbGVJRC50b1Vud3JhcHBlZCgpLCBhbGlnbiksXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfbGF0cmFuZ2UnOiBnZXRUaWxlTGF0UmFuZ2UocGFpbnRlciwgdGlsZS50aWxlSUQpLFxuICAgICAgICAndV9saWdodCc6IFtsYXllci5wYWludC5nZXQoJ2hpbGxzaGFkZS1leGFnZ2VyYXRpb24nKSwgYXppbXV0aGFsXSxcbiAgICAgICAgJ3Vfc2hhZG93Jzogc2hhZG93LFxuICAgICAgICAndV9oaWdobGlnaHQnOiBoaWdobGlnaHQsXG4gICAgICAgICd1X2FjY2VudCc6IGFjY2VudFxuICAgIH07XG59O1xuXG5jb25zdCBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlcyA9IChcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRlbTogREVNRGF0YSwgbWF4em9vbTogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGU+ID0+IHtcblxuICAgIGNvbnN0IHN0cmlkZSA9IGRlbS5zdHJpZGU7XG4gICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAvLyBGbGlwIHJlbmRlcmluZyBhdCB5IGF4aXMuXG4gICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIEVYVEVOVCwgLUVYVEVOVCwgMCwgMCwgMSk7XG4gICAgbWF0NC50cmFuc2xhdGUobWF0cml4LCBtYXRyaXgsIFswLCAtRVhURU5ULCAwXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2ltYWdlJzogMSxcbiAgICAgICAgJ3VfZGltZW5zaW9uJzogW3N0cmlkZSwgc3RyaWRlXSxcbiAgICAgICAgJ3Vfem9vbSc6IHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgJ3VfbWF4em9vbSc6IG1heHpvb20sXG4gICAgICAgICd1X3VucGFjayc6IGRlbS5nZXRVbnBhY2tWZWN0b3IoKVxuICAgIH07XG59O1xuXG5mdW5jdGlvbiBnZXRUaWxlTGF0UmFuZ2UocGFpbnRlcjogUGFpbnRlciwgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgLy8gZm9yIHNjYWxpbmcgdGhlIG1hZ25pdHVkZSBvZiBhIHBvaW50cyBzbG9wZSBieSBpdHMgbGF0aXR1ZGVcbiAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHRpbGVJRC5jYW5vbmljYWwueik7XG4gICAgY29uc3QgeSA9IHRpbGVJRC5jYW5vbmljYWwueTtcbiAgICByZXR1cm4gW1xuICAgICAgICBuZXcgTWVyY2F0b3JDb29yZGluYXRlKDAsIHkgLyB0aWxlc0F0Wm9vbSkudG9MbmdMYXQoKS5sYXQsXG4gICAgICAgIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoMCwgKHkgKyAxKSAvIHRpbGVzQXRab29tKS50b0xuZ0xhdCgpLmxhdF07XG59XG5cbmV4cG9ydCB7XG4gICAgaGlsbHNoYWRlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm00ZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5leHBvcnQgdHlwZSBMaW5lVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZlxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9zY2FsZSc6IFVuaWZvcm00ZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZVNERlVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybnNjYWxlX2InOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2RmZ2FtbWEnOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4X3lfYSc6IFVuaWZvcm0xZixcbiAgICAndV90ZXhfeV9iJzogVW5pZm9ybTFmLFxuICAgICd1X21peCc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGxpbmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKVxufSk7XG5cbmNvbnN0IGxpbmVHcmFkaWVudFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKVxufSk7XG5cbmNvbnN0IGxpbmVQYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3Vfc2NhbGUnOiBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlKSxcbiAgICAndV9mYWRlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlKVxufSk7XG5cbmNvbnN0IGxpbmVTREZVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lU0RGVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKSxcbiAgICAndV9wYXR0ZXJuc2NhbGVfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybnNjYWxlX2EpLFxuICAgICd1X3BhdHRlcm5zY2FsZV9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuc2NhbGVfYiksXG4gICAgJ3Vfc2RmZ2FtbWEnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NkZmdhbW1hKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleF95X2EnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleF95X2EpLFxuICAgICd1X3RleF95X2InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleF95X2IpLFxuICAgICd1X21peCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWl4KVxufSk7XG5cbmNvbnN0IGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSxcbiAgICAgICAgJ3VfcmF0aW8nOiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFtcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLFxuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV1cbiAgICAgICAgXVxuICAgIH07XG59O1xuXG5jb25zdCBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8TGluZUdyYWRpZW50VW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgcmV0dXJuIGV4dGVuZChsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciksIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwXG4gICAgfSk7XG59O1xuXG5jb25zdCBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnNcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCB0aWxlWm9vbVJhdGlvID0gY2FsY3VsYXRlVGlsZVJhdGlvKHRpbGUsIHRyYW5zZm9ybSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxcbiAgICAgICAgLy8gY2FtZXJhIHpvb20gcmF0aW9cbiAgICAgICAgJ3VfcmF0aW8nOiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgLy8gdGhpcyBhc3N1bWVzIGFsbCBpbWFnZXMgaW4gdGhlIGljb24gYXRsYXMgdGV4dHVyZSBoYXZlIHRoZSBzYW1lIHBpeGVsIHJhdGlvXG4gICAgICAgICd1X3NjYWxlJzogW2Jyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbywgdGlsZVpvb21SYXRpbywgY3Jvc3NmYWRlLmZyb21TY2FsZSwgY3Jvc3NmYWRlLnRvU2NhbGVdLFxuICAgICAgICAndV9mYWRlJzogY3Jvc3NmYWRlLnQsXG4gICAgICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFtcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLFxuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV1cbiAgICAgICAgXVxuICAgIH07XG59O1xuXG5jb25zdCBsaW5lU0RGVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyLFxuICAgIGRhc2hhcnJheTogQ3Jvc3NGYWRlZDxBcnJheTxudW1iZXI+PixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnNcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVNERlVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuICAgIGNvbnN0IGxpbmVBdGxhcyA9IHBhaW50ZXIubGluZUF0bGFzO1xuICAgIGNvbnN0IHRpbGVSYXRpbyA9IGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlLCB0cmFuc2Zvcm0pO1xuXG4gICAgY29uc3Qgcm91bmQgPSBsYXllci5sYXlvdXQuZ2V0KCdsaW5lLWNhcCcpID09PSAncm91bmQnO1xuXG4gICAgY29uc3QgcG9zQSA9IGxpbmVBdGxhcy5nZXREYXNoKGRhc2hhcnJheS5mcm9tLCByb3VuZCk7XG4gICAgY29uc3QgcG9zQiA9IGxpbmVBdGxhcy5nZXREYXNoKGRhc2hhcnJheS50bywgcm91bmQpO1xuXG4gICAgY29uc3Qgd2lkdGhBID0gcG9zQS53aWR0aCAqIGNyb3NzZmFkZS5mcm9tU2NhbGU7XG4gICAgY29uc3Qgd2lkdGhCID0gcG9zQi53aWR0aCAqIGNyb3NzZmFkZS50b1NjYWxlO1xuXG4gICAgcmV0dXJuIGV4dGVuZChsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciksIHtcbiAgICAgICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBbdGlsZVJhdGlvIC8gd2lkdGhBLCAtcG9zQS5oZWlnaHQgLyAyXSxcbiAgICAgICAgJ3VfcGF0dGVybnNjYWxlX2InOiBbdGlsZVJhdGlvIC8gd2lkdGhCLCAtcG9zQi5oZWlnaHQgLyAyXSxcbiAgICAgICAgJ3Vfc2RmZ2FtbWEnOiBsaW5lQXRsYXMud2lkdGggLyAoTWF0aC5taW4od2lkdGhBLCB3aWR0aEIpICogMjU2ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvKSAvIDIsXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfdGV4X3lfYSc6IHBvc0EueSxcbiAgICAgICAgJ3VfdGV4X3lfYic6IHBvc0IueSxcbiAgICAgICAgJ3VfbWl4JzogY3Jvc3NmYWRlLnRcbiAgICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlOiBUaWxlLCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgIHJldHVybiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnRpbGVab29tKTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSB7XG4gICAgcmV0dXJuIHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KFxuICAgICAgICB0aWxlLnRpbGVJRC5wb3NNYXRyaXgsXG4gICAgICAgIHRpbGUsXG4gICAgICAgIGxheWVyLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSxcbiAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZS1hbmNob3InKVxuICAgICk7XG59XG5cbmV4cG9ydCB7XG4gICAgbGluZVVuaWZvcm1zLFxuICAgIGxpbmVHcmFkaWVudFVuaWZvcm1zLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgbGluZVNERlVuaWZvcm1zLFxuICAgIGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVHcmFkaWVudFVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVTREZVbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFJhc3RlclN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IHR5cGUgUmFzdGVyVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfdGxfcGFyZW50JzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IFVuaWZvcm0xZixcbiAgICAndV9idWZmZXJfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV90JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW1hZ2UwJzogVW5pZm9ybTFpLFxuICAgICd1X2ltYWdlMSc6IFVuaWZvcm0xaSxcbiAgICAndV9icmlnaHRuZXNzX2xvdyc6IFVuaWZvcm0xZixcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBVbmlmb3JtMWYsXG4gICAgJ3VfY29udHJhc3RfZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IFVuaWZvcm0zZlxufH07XG5cbmNvbnN0IHJhc3RlclVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFJhc3RlclVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV90bF9wYXJlbnQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RsX3BhcmVudCksXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZV9wYXJlbnQpLFxuICAgICd1X2J1ZmZlcl9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnVmZmVyX3NjYWxlKSxcbiAgICAndV9mYWRlX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfdCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSksXG4gICAgJ3VfaW1hZ2UwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZTApLFxuICAgICd1X2ltYWdlMSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UxKSxcbiAgICAndV9icmlnaHRuZXNzX2xvdyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnJpZ2h0bmVzc19sb3cpLFxuICAgICd1X2JyaWdodG5lc3NfaGlnaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnJpZ2h0bmVzc19oaWdoKSxcbiAgICAndV9zYXR1cmF0aW9uX2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2F0dXJhdGlvbl9mYWN0b3IpLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY29udHJhc3RfZmFjdG9yKSxcbiAgICAndV9zcGluX3dlaWdodHMnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NwaW5fd2VpZ2h0cylcbn0pO1xuXG5jb25zdCByYXN0ZXJVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhcmVudFRMOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHBhcmVudFNjYWxlQnk6IG51bWJlcixcbiAgICBmYWRlOiB7bWl4OiBudW1iZXIsIG9wYWNpdHk6IG51bWJlcn0sXG4gICAgbGF5ZXI6IFJhc3RlclN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8UmFzdGVyVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV90bF9wYXJlbnQnOiBwYXJlbnRUTCxcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBwYXJlbnRTY2FsZUJ5LFxuICAgICd1X2J1ZmZlcl9zY2FsZSc6IDEsXG4gICAgJ3VfZmFkZV90JzogZmFkZS5taXgsXG4gICAgJ3Vfb3BhY2l0eSc6IGZhZGUub3BhY2l0eSAqIGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSxcbiAgICAndV9pbWFnZTAnOiAwLFxuICAgICd1X2ltYWdlMSc6IDEsXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1icmlnaHRuZXNzLW1pbicpLFxuICAgICd1X2JyaWdodG5lc3NfaGlnaCc6IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWJyaWdodG5lc3MtbWF4JyksXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBzYXR1cmF0aW9uRmFjdG9yKGxheWVyLnBhaW50LmdldCgncmFzdGVyLXNhdHVyYXRpb24nKSksXG4gICAgJ3VfY29udHJhc3RfZmFjdG9yJzogY29udHJhc3RGYWN0b3IobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItY29udHJhc3QnKSksXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogc3BpbldlaWdodHMobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItaHVlLXJvdGF0ZScpKVxufSk7XG5cbmZ1bmN0aW9uIHNwaW5XZWlnaHRzKGFuZ2xlKSB7XG4gICAgYW5nbGUgKj0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgKDIgKiBjICsgMSkgLyAzLFxuICAgICAgICAoLU1hdGguc3FydCgzKSAqIHMgLSBjICsgMSkgLyAzLFxuICAgICAgICAoTWF0aC5zcXJ0KDMpICogcyAtIGMgKyAxKSAvIDNcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBjb250cmFzdEZhY3Rvcihjb250cmFzdCkge1xuICAgIHJldHVybiBjb250cmFzdCA+IDAgP1xuICAgICAgICAxIC8gKDEgLSBjb250cmFzdCkgOlxuICAgICAgICAxICsgY29udHJhc3Q7XG59XG5cbmZ1bmN0aW9uIHNhdHVyYXRpb25GYWN0b3Ioc2F0dXJhdGlvbikge1xuICAgIHJldHVybiBzYXR1cmF0aW9uID4gMCA/XG4gICAgICAgIDEgLSAxIC8gKDEuMDAxIC0gc2F0dXJhdGlvbikgOlxuICAgICAgICAtc2F0dXJhdGlvbjtcbn1cblxuZXhwb3J0IHtyYXN0ZXJVbmlmb3JtcywgcmFzdGVyVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJY29uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHR1cmUnOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xTREZVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2l6ZV90JzogVW5pZm9ybTFmLFxuICAgICd1X3NpemUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaCc6IFVuaWZvcm0xZixcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogVW5pZm9ybTFpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9mYWRlX2NoYW5nZSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pc190ZXh0JzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4dHVyZSc6IFVuaWZvcm0xaSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfaXNfaGFsbyc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemVfaWNvbic6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHR1cmVfaWNvbic6IFVuaWZvcm0xaSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfaXNfaGFsbyc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IHN5bWJvbEljb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBTeW1ib2xJY29uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX3pvb21fY29uc3RhbnQpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSxcbiAgICAndV9zaXplX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemVfdCksXG4gICAgJ3Vfc2l6ZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZSksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3VfcGl0Y2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoKSxcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9yb3RhdGVfc3ltYm9sKSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2FzcGVjdF9yYXRpbyksXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfY2hhbmdlKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9sYWJlbF9wbGFuZV9tYXRyaXgpLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfY29vcmRfbWF0cml4KSxcbiAgICAndV9pc190ZXh0JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pc190ZXh0KSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2hfd2l0aF9tYXApLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpXG59KTtcblxuY29uc3Qgc3ltYm9sU0RGVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogU3ltYm9sU0RGVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX3pvb21fY29uc3RhbnQpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSxcbiAgICAndV9zaXplX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemVfdCksXG4gICAgJ3Vfc2l6ZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZSksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3VfcGl0Y2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoKSxcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9yb3RhdGVfc3ltYm9sKSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2FzcGVjdF9yYXRpbyksXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfY2hhbmdlKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9sYWJlbF9wbGFuZV9tYXRyaXgpLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfY29vcmRfbWF0cml4KSxcbiAgICAndV9pc190ZXh0JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pc190ZXh0KSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2hfd2l0aF9tYXApLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpLFxuICAgICd1X2dhbW1hX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9nYW1tYV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2lzX2hhbG8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX2hhbG8pXG59KTtcblxuY29uc3Qgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXhzaXplX2ljb24nOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemVfaWNvbiksXG4gICAgJ3VfdGV4dHVyZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZSksXG4gICAgJ3VfdGV4dHVyZV9pY29uJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlX2ljb24pLFxuICAgICd1X2dhbW1hX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9nYW1tYV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2lzX2hhbG8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX2hhbG8pXG59KTtcblxuY29uc3Qgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xJY29uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiArKGZ1bmN0aW9uVHlwZSA9PT0gJ2NvbnN0YW50JyB8fCBmdW5jdGlvblR5cGUgPT09ICdzb3VyY2UnKSxcbiAgICAgICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogKyhmdW5jdGlvblR5cGUgPT09ICdjb25zdGFudCcgfHwgZnVuY3Rpb25UeXBlID09PSAnY2FtZXJhJyksXG4gICAgICAgICd1X3NpemVfdCc6IHNpemUgPyBzaXplLnVTaXplVCA6IDAsXG4gICAgICAgICd1X3NpemUnOiBzaXplID8gc2l6ZS51U2l6ZSA6IDAsXG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3VfcGl0Y2gnOiB0cmFuc2Zvcm0ucGl0Y2ggLyAzNjAgKiAyICogTWF0aC5QSSxcbiAgICAgICAgJ3Vfcm90YXRlX3N5bWJvbCc6ICtyb3RhdGVJblNoYWRlcixcbiAgICAgICAgJ3VfYXNwZWN0X3JhdGlvJzogdHJhbnNmb3JtLndpZHRoIC8gdHJhbnNmb3JtLmhlaWdodCxcbiAgICAgICAgJ3VfZmFkZV9jaGFuZ2UnOiBwYWludGVyLm9wdGlvbnMuZmFkZUR1cmF0aW9uID8gcGFpbnRlci5zeW1ib2xGYWRlQ2hhbmdlIDogMSxcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAndV9jb29yZF9tYXRyaXgnOiBnbENvb3JkTWF0cml4LFxuICAgICAgICAndV9pc190ZXh0JzogK2lzVGV4dCxcbiAgICAgICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiArcGl0Y2hXaXRoTWFwLFxuICAgICAgICAndV90ZXhzaXplJzogdGV4U2l6ZSxcbiAgICAgICAgJ3VfdGV4dHVyZSc6IDBcbiAgICB9O1xufTtcblxuY29uc3Qgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcyA9IChcbiAgICBmdW5jdGlvblR5cGU6IHN0cmluZyxcbiAgICBzaXplOiA/e3VTaXplVDogbnVtYmVyLCB1U2l6ZTogbnVtYmVyfSxcbiAgICByb3RhdGVJblNoYWRlcjogYm9vbGVhbixcbiAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgZ2xDb29yZE1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGlzVGV4dDogYm9vbGVhbixcbiAgICB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGlzSGFsbzogYm9vbGVhblxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xTREZVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiBleHRlbmQoc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMoZnVuY3Rpb25UeXBlLCBzaXplLFxuICAgICAgICByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgIGdsQ29vcmRNYXRyaXgsIGlzVGV4dCwgdGV4U2l6ZSksIHtcbiAgICAgICAgJ3VfZ2FtbWFfc2NhbGUnOiAocGl0Y2hXaXRoTWFwID8gTWF0aC5jb3ModHJhbnNmb3JtLl9waXRjaCkgKiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSA6IDEpLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X2lzX2hhbG8nOiAraXNIYWxvXG4gICAgfSk7XG59O1xuXG5jb25zdCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0ZXhTaXplU0RGOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHRleFNpemVJY29uOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPFN5bWJvbEljb25Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICByZXR1cm4gZXh0ZW5kKHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoZnVuY3Rpb25UeXBlLCBzaXplLFxuICAgICAgICByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgIGdsQ29vcmRNYXRyaXgsIHRydWUsIHRleFNpemVTREYsIHRydWUpLCB7XG4gICAgICAgICd1X3RleHNpemVfaWNvbic6IHRleFNpemVJY29uLFxuICAgICAgICAndV90ZXh0dXJlX2ljb24nOiAxXG4gICAgfSk7XG59O1xuXG5leHBvcnQge3N5bWJvbEljb25Vbmlmb3Jtcywgc3ltYm9sU0RGVW5pZm9ybXMsIHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzLCBzeW1ib2xTREZVbmlmb3JtVmFsdWVzLCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXMsIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIEJhY2tncm91bmRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yXG58fTtcblxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGJhY2tncm91bmRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2NvbG9yJzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9jb2xvcilcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3RsX2EpLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9icl9hKSxcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fdGxfYiksXG4gICAgJ3VfcGF0dGVybl9icl9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX2JyX2IpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X21peCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWl4KSxcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9zaXplX2EpLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3NpemVfYiksXG4gICAgJ3Vfc2NhbGVfYSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYSksXG4gICAgJ3Vfc2NhbGVfYic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYiksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90aWxlX3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBvcGFjaXR5OiBudW1iZXIsXG4gICAgY29sb3I6IENvbG9yXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X29wYWNpdHknOiBvcGFjaXR5LFxuICAgICd1X2NvbG9yJzogY29sb3Jcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sXG4gICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiBleHRlbmQoXG4gICAgYmdQYXR0ZXJuVW5pZm9ybVZhbHVlcyhpbWFnZSwgY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IG9wYWNpdHlcbiAgICB9XG4pO1xuXG5leHBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZmlsbEV4dHJ1c2lvblVuaWZvcm1zLCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtmaWxsVW5pZm9ybXMsIGZpbGxQYXR0ZXJuVW5pZm9ybXMsIGZpbGxPdXRsaW5lVW5pZm9ybXMsIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfcHJvZ3JhbSc7XG5pbXBvcnQge2NpcmNsZVVuaWZvcm1zfSBmcm9tICcuL2NpcmNsZV9wcm9ncmFtJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybXN9IGZyb20gJy4vY29sbGlzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtkZWJ1Z1VuaWZvcm1zfSBmcm9tICcuL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3Jtc30gZnJvbSAnLi9jbGlwcGluZ19tYXNrX3Byb2dyYW0nO1xuaW1wb3J0IHtoZWF0bWFwVW5pZm9ybXMsIGhlYXRtYXBUZXh0dXJlVW5pZm9ybXN9IGZyb20gJy4vaGVhdG1hcF9wcm9ncmFtJztcbmltcG9ydCB7aGlsbHNoYWRlVW5pZm9ybXMsIGhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc30gZnJvbSAnLi9oaWxsc2hhZGVfcHJvZ3JhbSc7XG5pbXBvcnQge2xpbmVVbmlmb3JtcywgbGluZUdyYWRpZW50VW5pZm9ybXMsIGxpbmVQYXR0ZXJuVW5pZm9ybXMsIGxpbmVTREZVbmlmb3Jtc30gZnJvbSAnLi9saW5lX3Byb2dyYW0nO1xuaW1wb3J0IHtyYXN0ZXJVbmlmb3Jtc30gZnJvbSAnLi9yYXN0ZXJfcHJvZ3JhbSc7XG5pbXBvcnQge3N5bWJvbEljb25Vbmlmb3Jtcywgc3ltYm9sU0RGVW5pZm9ybXMsIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXN9IGZyb20gJy4vc3ltYm9sX3Byb2dyYW0nO1xuaW1wb3J0IHtiYWNrZ3JvdW5kVW5pZm9ybXMsIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXN9IGZyb20gJy4vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuZXhwb3J0IGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IHtcbiAgICBmaWxsRXh0cnVzaW9uOiBmaWxsRXh0cnVzaW9uVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm46IGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbDogZmlsbFVuaWZvcm1zLFxuICAgIGZpbGxQYXR0ZXJuOiBmaWxsUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lOiBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVybjogZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgY2lyY2xlOiBjaXJjbGVVbmlmb3JtcyxcbiAgICBjb2xsaXNpb25Cb3g6IGNvbGxpc2lvblVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkNpcmNsZTogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgZGVidWc6IGRlYnVnVW5pZm9ybXMsXG4gICAgY2xpcHBpbmdNYXNrOiBjbGlwcGluZ01hc2tVbmlmb3JtcyxcbiAgICBoZWF0bWFwOiBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmU6IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlOiBoaWxsc2hhZGVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVQcmVwYXJlOiBoaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXMsXG4gICAgbGluZTogbGluZVVuaWZvcm1zLFxuICAgIGxpbmVHcmFkaWVudDogbGluZUdyYWRpZW50VW5pZm9ybXMsXG4gICAgbGluZVBhdHRlcm46IGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgbGluZVNERjogbGluZVNERlVuaWZvcm1zLFxuICAgIHJhc3RlcjogcmFzdGVyVW5pZm9ybXMsXG4gICAgc3ltYm9sSWNvbjogc3ltYm9sSWNvblVuaWZvcm1zLFxuICAgIHN5bWJvbFNERjogc3ltYm9sU0RGVW5pZm9ybXMsXG4gICAgc3ltYm9sVGV4dEFuZEljb246IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZDogYmFja2dyb3VuZFVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuOiBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NvbGxpc2lvbkRlYnVnO1xuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCBkcmF3Q2lyY2xlczogYm9vbGVhbixcbiAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sIHRyYW5zbGF0ZUFuY2hvcjogJ21hcCcgfCAndmlld3BvcnQnLCBpc1RleHQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBwcm9ncmFtID0gZHJhd0NpcmNsZXMgPyBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkNpcmNsZScpIDogcGFpbnRlci51c2VQcm9ncmFtKCdjb2xsaXNpb25Cb3gnKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP1N5bWJvbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IGRyYXdDaXJjbGVzID8gKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlIDogYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUpIDogKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94IDogYnVja2V0Lmljb25Db2xsaXNpb25Cb3gpO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcG9zTWF0cml4ID0gY29vcmQucG9zTWF0cml4O1xuICAgICAgICBpZiAodHJhbnNsYXRlWzBdICE9PSAwIHx8IHRyYW5zbGF0ZVsxXSAhPT0gMCkge1xuICAgICAgICAgICAgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGRyYXdDaXJjbGVzID8gZ2wuVFJJQU5HTEVTIDogZ2wuTElORVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksXG4gICAgICAgICAgICBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aWxlKSxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWZmZXJzLmxheW91dFZlcnRleEJ1ZmZlciwgYnVmZmVycy5pbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIGJ1ZmZlcnMuc2VnbWVudHMsIG51bGwsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIG51bGwsIG51bGwsXG4gICAgICAgICAgICBidWZmZXJzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgZHJhd0NvbGxpc2lvbkRlYnVnR2VvbWV0cnkocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGZhbHNlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgaXNUZXh0KTtcbiAgICBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsIGlzVGV4dCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgZHJhd0NvbGxpc2lvbkRlYnVnIGZyb20gJy4vZHJhd19jb2xsaXNpb25fZGVidWcnO1xuXG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgKiBhcyBzeW1ib2xQcm9qZWN0aW9uIGZyb20gJy4uL3N5bWJvbC9wcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmNvbnN0IGlkZW50aXR5TWF0NCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHtnZXRBbmNob3JBbGlnbm1lbnQsIFdyaXRpbmdNb2RlfSBmcm9tICcuLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4uL3N5bWJvbC9vbmVfZW0nO1xuaW1wb3J0IHtldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX2xheW91dCc7XG5cbmltcG9ydCB7XG4gICAgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMsXG4gICAgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcyxcbiAgICBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQsIHtTeW1ib2xCdWZmZXJzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7U3ltYm9sU0RGVW5pZm9ybXNUeXBlfSBmcm9tICcuLi9yZW5kZXIvcHJvZ3JhbS9zeW1ib2xfcHJvZ3JhbSc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NUaWxlSUQsIFZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuLi9zeW1ib2wvcGxhY2VtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd1N5bWJvbHM7XG5cbnR5cGUgU3ltYm9sVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yLFxuICAgIHNvcnRLZXk6IG51bWJlcixcbiAgICBzdGF0ZToge1xuICAgICAgICBwcm9ncmFtOiBhbnksXG4gICAgICAgIGJ1ZmZlcnM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgIHVuaWZvcm1WYWx1ZXM6IGFueSxcbiAgICAgICAgYXRsYXNUZXh0dXJlOiBUZXh0dXJlLFxuICAgICAgICBhdGxhc1RleHR1cmVJY29uOiBUZXh0dXJlIHwgbnVsbCxcbiAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uOiBhbnksXG4gICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb246IGFueSxcbiAgICAgICAgaXNTREY6IGJvb2xlYW4sXG4gICAgICAgIGhhc0hhbG86IGJvb2xlYW5cbiAgICB9XG59O1xuXG5mdW5jdGlvbiBkcmF3U3ltYm9scyhwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCB2YXJpYWJsZU9mZnNldHM6IHtbQ3Jvc3NUaWxlSURdOiBWYXJpYWJsZU9mZnNldH0pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICAvLyBEaXNhYmxlIHRoZSBzdGVuY2lsIHRlc3Qgc28gdGhhdCBsYWJlbHMgYXJlbid0IGNsaXBwZWQgdG8gdGlsZSBib3VuZGFyaWVzLlxuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG4gICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgLy9Db21wdXRlIHZhcmlhYmxlLW9mZnNldHMgYmVmb3JlIHBhaW50aW5nIHNpbmNlIGljb25zIGFuZCB0ZXh0IGRhdGEgcG9zaXRpb25pbmdcbiAgICAvL2RlcGVuZCBvbiBlYWNoIG90aGVyIGluIHRoaXMgY2FzZS5cbiAgICBpZiAodmFyaWFibGVQbGFjZW1lbnQpIHtcbiAgICAgICAgdXBkYXRlVmFyaWFibGVBbmNob3JzKGNvb3JkcywgcGFpbnRlciwgbGF5ZXIsIHNvdXJjZUNhY2hlLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICB2YXJpYWJsZU9mZnNldHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdpY29uLW9wYWNpdHknKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGZhbHNlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1rZWVwLXVwcmlnaHQnKSxcbiAgICAgICAgICAgIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LW9wYWNpdHknKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIHRydWUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LWtlZXAtdXByaWdodCcpLFxuICAgICAgICAgICAgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VDYWNoZS5tYXAuc2hvd0NvbGxpc2lvbkJveGVzKSB7XG4gICAgICAgIGRyYXdDb2xsaXNpb25EZWJ1ZyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZS1hbmNob3InKSwgdHJ1ZSk7XG4gICAgICAgIGRyYXdDb2xsaXNpb25EZWJ1ZyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZS1hbmNob3InKSwgZmFsc2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlVmFyaWFibGVSZW5kZXJTaGlmdChhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSwgcmVuZGVyVGV4dFNpemUpOiBQb2ludCB7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQoYW5jaG9yKTtcbiAgICBjb25zdCBzaGlmdFggPSAtKGhvcml6b250YWxBbGlnbiAtIDAuNSkgKiB3aWR0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAtKHZlcnRpY2FsQWxpZ24gLSAwLjUpICogaGVpZ2h0O1xuICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gZXZhbHVhdGVWYXJpYWJsZU9mZnNldChhbmNob3IsIHRleHRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgIChzaGlmdFggLyB0ZXh0Qm94U2NhbGUgKyB2YXJpYWJsZU9mZnNldFswXSkgKiByZW5kZXJUZXh0U2l6ZSxcbiAgICAgICAgKHNoaWZ0WSAvIHRleHRCb3hTY2FsZSArIHZhcmlhYmxlT2Zmc2V0WzFdKSAqIHJlbmRlclRleHRTaXplXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFyaWFibGVBbmNob3JzKGNvb3JkcywgcGFpbnRlciwgbGF5ZXIsIHNvdXJjZUNhY2hlLCByb3RhdGlvbkFsaWdubWVudCwgcGl0Y2hBbGlnbm1lbnQsIHZhcmlhYmxlT2Zmc2V0cykge1xuICAgIGNvbnN0IHRyID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IHJvdGF0aW9uQWxpZ25tZW50ID09PSAnbWFwJztcbiAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBwaXRjaEFsaWdubWVudCA9PT0gJ21hcCc7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogU3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQgfHwgIWJ1Y2tldC50ZXh0IHx8ICFidWNrZXQudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHNpemVEYXRhID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgdHIuem9vbSk7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxUb1RpbGVTY2FsZSA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcGl4ZWxUb1RpbGVTY2FsZSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVRleHRGaXRJY29uID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZScgJiYgIGJ1Y2tldC5oYXNJY29uRGF0YSgpO1xuXG4gICAgICAgIGlmIChzaXplKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlU2NhbGUgPSBNYXRoLnBvdygyLCB0ci56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICAgICAgdXBkYXRlVmFyaWFibGVBbmNob3JzRm9yQnVja2V0KGJ1Y2tldCwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB2YXJpYWJsZU9mZnNldHMsIHN5bWJvbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIsIGxhYmVsUGxhbmVNYXRyaXgsIGNvb3JkLnBvc01hdHJpeCwgdGlsZVNjYWxlLCBzaXplLCB1cGRhdGVUZXh0Rml0SWNvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZhcmlhYmxlQW5jaG9yc0ZvckJ1Y2tldChidWNrZXQsIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdmFyaWFibGVPZmZzZXRzLCBzeW1ib2xTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSwgbGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4LCB0aWxlU2NhbGUsIHNpemUsIHVwZGF0ZVRleHRGaXRJY29uKSB7XG4gICAgY29uc3QgcGxhY2VkU3ltYm9scyA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5O1xuICAgIGNvbnN0IGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkgPSBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7XG4gICAgY29uc3QgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSA9IGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBwbGFjZWRUZXh0U2hpZnRzID0ge307XG5cbiAgICBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwbGFjZWRTeW1ib2xzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbDogYW55ID0gcGxhY2VkU3ltYm9scy5nZXQocyk7XG4gICAgICAgIGNvbnN0IHNraXBPcmllbnRhdGlvbiA9IGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFzeW1ib2wucGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gKCFzeW1ib2wuaGlkZGVuICYmIHN5bWJvbC5jcm9zc1RpbGVJRCAmJiAhc2tpcE9yaWVudGF0aW9uKSA/IHZhcmlhYmxlT2Zmc2V0c1tzeW1ib2wuY3Jvc3NUaWxlSURdIDogbnVsbDtcblxuICAgICAgICBpZiAoIXZhcmlhYmxlT2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBUaGVzZSBzeW1ib2xzIGFyZSBmcm9tIGEganVzdGlmaWNhdGlvbiB0aGF0IGlzIG5vdCBiZWluZyB1c2VkLCBvciBhIGxhYmVsIHRoYXQgd2Fzbid0IHBsYWNlZFxuICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgZXh0cmEgbWF0aCB0byBmaWd1cmUgb3V0IHdoYXQgaW5jcmVtZW50YWwgc2hpZnQgdG8gYXBwbHkuXG4gICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgY29uc3QgdGlsZUFuY2hvciA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkQW5jaG9yID0gc3ltYm9sUHJvamVjdGlvbi5wcm9qZWN0KHRpbGVBbmNob3IsIHBpdGNoV2l0aE1hcCA/IHBvc01hdHJpeCA6IGxhYmVsUGxhbmVNYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgcGVyc3BlY3RpdmVSYXRpbyA9IDAuNSArIDAuNSAqICh0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHByb2plY3RlZEFuY2hvci5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEpO1xuICAgICAgICAgICAgbGV0IHJlbmRlclRleHRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHNpemUsIHN5bWJvbCkgKiBwZXJzcGVjdGl2ZVJhdGlvIC8gT05FX0VNO1xuICAgICAgICAgICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICAgICAgICAgIC8vIEdvIGZyb20gc2l6ZSBpbiBwaXhlbHMgdG8gZXF1aXZhbGVudCBzaXplIGluIHRpbGUgdW5pdHNcbiAgICAgICAgICAgICAgICByZW5kZXJUZXh0U2l6ZSAqPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gLyB0aWxlU2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBhbmNob3IsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZX0gPSB2YXJpYWJsZU9mZnNldDtcblxuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZVJlbmRlclNoaWZ0KFxuICAgICAgICAgICAgICAgIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlLCByZW5kZXJUZXh0U2l6ZSk7XG5cbiAgICAgICAgICAgIC8vIFVzdWFsIGNhc2UgaXMgdGhhdCB3ZSB0YWtlIHRoZSBwcm9qZWN0ZWQgYW5jaG9yIGFuZCBhZGQgdGhlIHBpeGVsLWJhc2VkIHNoaWZ0XG4gICAgICAgICAgICAvLyBjYWxjdWxhdGVkIGFib3ZlLiBJbiB0aGUgKHNvbWV3aGF0IHdlaXJkKSBjYXNlIG9mIHBpdGNoLWFsaWduZWQgdGV4dCwgd2UgYWRkIGFuIGVxdWl2YWxlbnRcbiAgICAgICAgICAgIC8vIHRpbGUtdW5pdCBiYXNlZCBzaGlmdCB0byB0aGUgYW5jaG9yIGJlZm9yZSBwcm9qZWN0aW5nIHRvIHRoZSBsYWJlbCBwbGFuZS5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ZWRBbmNob3IgPSBwaXRjaFdpdGhNYXAgP1xuICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24ucHJvamVjdCh0aWxlQW5jaG9yLmFkZChzaGlmdCksIGxhYmVsUGxhbmVNYXRyaXgpLnBvaW50IDpcbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRBbmNob3IucG9pbnQuYWRkKHJvdGF0ZVdpdGhNYXAgP1xuICAgICAgICAgICAgICAgICAgICBzaGlmdC5yb3RhdGUoLXRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICBzaGlmdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHN5bWJvbC5wbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpID8gTWF0aC5QSSAvIDIgOiAwO1xuICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBzeW1ib2wubnVtR2x5cGhzOyBnKyspIHtcbiAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5LCBzaGlmdGVkQW5jaG9yLCBhbmdsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL09ubHkgb2Zmc2V0IGhvcml6b250YWwgdGV4dCBpY29uc1xuICAgICAgICAgICAgaWYgKHVwZGF0ZVRleHRGaXRJY29uICYmIHN5bWJvbC5hc3NvY2lhdGVkSWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBwbGFjZWRUZXh0U2hpZnRzW3N5bWJvbC5hc3NvY2lhdGVkSWNvbkluZGV4XSA9IHtzaGlmdGVkQW5jaG9yLCBhbmdsZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXBkYXRlVGV4dEZpdEljb24pIHtcbiAgICAgICAgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBjb25zdCBwbGFjZWRJY29ucyA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlZEljb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWRJY29uID0gcGxhY2VkSWNvbnMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKHBsYWNlZEljb24uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzKHBsYWNlZEljb24ubnVtR2x5cGhzLCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBwbGFjZWRUZXh0U2hpZnRzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghc2hpZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzKHBsYWNlZEljb24ubnVtR2x5cGhzLCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBnID0gMDsgZyA8IHBsYWNlZEljb24ubnVtR2x5cGhzOyBnKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXksIHNoaWZ0LnNoaWZ0ZWRBbmNob3IsIHNoaWZ0LmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBidWNrZXQuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfVxuICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sUHJvZ3JhbU5hbWUoaXNTREY6IGJvb2xlYW4sIGlzVGV4dDogYm9vbGVhbiwgYnVja2V0OiBTeW1ib2xCdWNrZXQpIHtcbiAgICBpZiAoYnVja2V0Lmljb25zSW5UZXh0ICYmIGlzVGV4dCkge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbFRleHRBbmRJY29uJztcbiAgICB9IGVsc2UgaWYgKGlzU0RGKSB7XG4gICAgICAgIHJldHVybiAnc3ltYm9sU0RGJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbEljb24nO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgaXNUZXh0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbGlnbm1lbnQsIHBpdGNoQWxpZ25tZW50LCBrZWVwVXByaWdodCwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSByb3RhdGlvbkFsaWdubWVudCA9PT0gJ21hcCc7XG4gICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gcGl0Y2hBbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IGFsb25nTGluZSA9IHJvdGF0ZVdpdGhNYXAgJiYgbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgIC8vIExpbmUgbGFiZWwgcm90YXRpb24gaGFwcGVucyBpbiBgdXBkYXRlTGluZUxhYmVsc2BcbiAgICAvLyBQaXRjaGVkIHBvaW50IGxhYmVscyBhcmUgYXV0b21hdGljYWxseSByb3RhdGVkIGJ5IHRoZSBsYWJlbFBsYW5lTWF0cml4IHByb2plY3Rpb25cbiAgICAvLyBVbnBpdGNoZWQgcG9pbnQgbGFiZWxzIG5lZWQgdG8gaGF2ZSB0aGVpciByb3RhdGlvbiBhcHBsaWVkIGFmdGVyIHByb2plY3Rpb25cbiAgICBjb25zdCByb3RhdGVJblNoYWRlciA9IHJvdGF0ZVdpdGhNYXAgJiYgIXBpdGNoV2l0aE1hcCAmJiAhYWxvbmdMaW5lO1xuXG4gICAgY29uc3Qgc29ydEZlYXR1cmVzQnlLZXkgPSBsYXllci5sYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG5cbiAgICBsZXQgcHJvZ3JhbTtcbiAgICBsZXQgc2l6ZTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICBjb25zdCB0aWxlUmVuZGVyU3RhdGU6IEFycmF5PFN5bWJvbFRpbGVSZW5kZXJTdGF0ZT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBpc1RleHQgPyBidWNrZXQudGV4dCA6IGJ1Y2tldC5pY29uO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMgfHwgIWJ1ZmZlcnMuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWZmZXJzLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuXG4gICAgICAgIGNvbnN0IGlzU0RGID0gaXNUZXh0IHx8IGJ1Y2tldC5zZGZJY29ucztcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBpdGNoV2l0aE1hcCB8fCB0ci5waXRjaCAhPT0gMDtcblxuICAgICAgICBpZiAoIXByb2dyYW0pIHtcbiAgICAgICAgICAgIHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oZ2V0U3ltYm9sUHJvZ3JhbU5hbWUoaXNTREYsIGlzVGV4dCwgYnVja2V0KSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgc2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgdHIuem9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgbGV0IHRleFNpemVJY29uOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuICAgICAgICBsZXQgYXRsYXNUZXh0dXJlO1xuICAgICAgICBsZXQgYXRsYXNJbnRlcnBvbGF0aW9uO1xuICAgICAgICBsZXQgYXRsYXNUZXh0dXJlSWNvbiA9IG51bGw7XG4gICAgICAgIGxldCBhdGxhc0ludGVycG9sYXRpb25JY29uO1xuICAgICAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgICAgICBhdGxhc1RleHR1cmUgPSB0aWxlLmdseXBoQXRsYXNUZXh0dXJlO1xuICAgICAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uID0gZ2wuTElORUFSO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgICAgIGlmIChidWNrZXQuaWNvbnNJblRleHQpIHtcbiAgICAgICAgICAgICAgICB0ZXhTaXplSWNvbiA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgICAgICAgICBhdGxhc1RleHR1cmVJY29uID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgICAgICBjb25zdCB6b29tRGVwZW5kZW50U2l6ZSA9IHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnIHx8IHNpemVEYXRhLmtpbmQgPT09ICdjYW1lcmEnO1xuICAgICAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb24gPSB0cmFuc2Zvcm1lZCB8fCBwYWludGVyLm9wdGlvbnMucm90YXRpbmcgfHwgcGFpbnRlci5vcHRpb25zLnpvb21pbmcgfHwgem9vbURlcGVuZGVudFNpemUgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWNvblNjYWxlZCA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tc2l6ZScpLmNvbnN0YW50T3IoMCkgIT09IDEgfHwgYnVja2V0Lmljb25zTmVlZExpbmVhcjtcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmU7XG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24gPSBpc1NERiB8fCBwYWludGVyLm9wdGlvbnMucm90YXRpbmcgfHwgcGFpbnRlci5vcHRpb25zLnpvb21pbmcgfHwgaWNvblNjYWxlZCB8fCB0cmFuc2Zvcm1lZCA/XG4gICAgICAgICAgICAgICAgZ2wuTElORUFSIDpcbiAgICAgICAgICAgICAgICBnbC5ORUFSRVNUO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHMgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZU1hdHJpeCA9IHN5bWJvbFByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChjb29yZC5wb3NNYXRyaXgsIHBpdGNoV2l0aE1hcCwgcm90YXRlV2l0aE1hcCwgcGFpbnRlci50cmFuc2Zvcm0sIHMpO1xuICAgICAgICBjb25zdCBnbENvb3JkTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcyk7XG5cbiAgICAgICAgY29uc3QgaGFzVmFyaWFibGVBbmNob3JzID0gdmFyaWFibGVQbGFjZW1lbnQgJiYgYnVja2V0Lmhhc1RleHREYXRhKCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVRleHRGaXRJY29uID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgIGhhc1ZhcmlhYmxlQW5jaG9ycyAmJlxuICAgICAgICAgICAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKGFsb25nTGluZSkge1xuICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi51cGRhdGVMaW5lTGFiZWxzKGJ1Y2tldCwgY29vcmQucG9zTWF0cml4LCBwYWludGVyLCBpc1RleHQsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsIHBpdGNoV2l0aE1hcCwga2VlcFVwcmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciksXG4gICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCA9IChhbG9uZ0xpbmUgfHwgKGlzVGV4dCAmJiB2YXJpYWJsZVBsYWNlbWVudCkgfHwgdXBkYXRlVGV4dEZpdEljb24pID8gaWRlbnRpdHlNYXQ0IDogbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgIHVnbENvb3JkTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoZ2xDb29yZE1hdHJpeCwgdGlsZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGhhc0hhbG8gPSBpc1NERiAmJiBsYXllci5wYWludC5nZXQoaXNUZXh0ID8gJ3RleHQtaGFsby13aWR0aCcgOiAnaWNvbi1oYWxvLXdpZHRoJykuY29uc3RhbnRPcigxKSAhPT0gMDtcblxuICAgICAgICBsZXQgdW5pZm9ybVZhbHVlcztcbiAgICAgICAgaWYgKGlzU0RGKSB7XG4gICAgICAgICAgICBpZiAoIWJ1Y2tldC5pY29uc0luVGV4dCkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBzeW1ib2xTREZVbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgaXNUZXh0LCB0ZXhTaXplLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybVZhbHVlcyhzaXplRGF0YS5raW5kLFxuICAgICAgICAgICAgICAgIHNpemUsIHJvdGF0ZUluU2hhZGVyLCBwaXRjaFdpdGhNYXAsIHBhaW50ZXIsIG1hdHJpeCxcbiAgICAgICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCwgdWdsQ29vcmRNYXRyaXgsIHRleFNpemUsIHRleFNpemVJY29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyhzaXplRGF0YS5raW5kLFxuICAgICAgICAgICAgICAgIHNpemUsIHJvdGF0ZUluU2hhZGVyLCBwaXRjaFdpdGhNYXAsIHBhaW50ZXIsIG1hdHJpeCxcbiAgICAgICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCwgdWdsQ29vcmRNYXRyaXgsIGlzVGV4dCwgdGV4U2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICBidWZmZXJzLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSxcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZUljb24sXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24sXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb25JY29uLFxuICAgICAgICAgICAgaXNTREYsXG4gICAgICAgICAgICBoYXNIYWxvXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTZWdtZW50cyA9IGJ1ZmZlcnMuc2VnbWVudHMuZ2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb2xkU2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0aWxlUmVuZGVyU3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBuZXcgU2VnbWVudFZlY3Rvcihbc2VnbWVudF0pLFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5OiAoKHNlZ21lbnQuc29ydEtleTogYW55KTogbnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBzZWdtZW50czogYnVmZmVycy5zZWdtZW50cyxcbiAgICAgICAgICAgICAgICBzb3J0S2V5OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICB0aWxlUmVuZGVyU3RhdGUuc29ydCgoYSwgYikgPT4gYS5zb3J0S2V5IC0gYi5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnRTdGF0ZSBvZiB0aWxlUmVuZGVyU3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzZWdtZW50U3RhdGUuc3RhdGU7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHN0YXRlLmF0bGFzVGV4dHVyZS5iaW5kKHN0YXRlLmF0bGFzSW50ZXJwb2xhdGlvbiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGlmIChzdGF0ZS5hdGxhc1RleHR1cmVJY29uKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5hdGxhc1RleHR1cmVJY29uKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYXRsYXNUZXh0dXJlSWNvbi5iaW5kKHN0YXRlLmF0bGFzSW50ZXJwb2xhdGlvbkljb24sIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLmlzU0RGKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gKChzdGF0ZS51bmlmb3JtVmFsdWVzOiBhbnkpOiBVbmlmb3JtVmFsdWVzPFN5bWJvbFNERlVuaWZvcm1zVHlwZT4pO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmhhc0hhbG8pIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzWyd1X2lzX2hhbG8nXSA9IDE7XG4gICAgICAgICAgICAgICAgZHJhd1N5bWJvbEVsZW1lbnRzKHN0YXRlLmJ1ZmZlcnMsIHNlZ21lbnRTdGF0ZS5zZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHN0YXRlLnByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgdW5pZm9ybVZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzWyd1X2lzX2hhbG8nXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1N5bWJvbEVsZW1lbnRzKHN0YXRlLmJ1ZmZlcnMsIHNlZ21lbnRTdGF0ZS5zZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHN0YXRlLnByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgc3RhdGUudW5pZm9ybVZhbHVlcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3U3ltYm9sRWxlbWVudHMoYnVmZmVycywgc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBwcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHVuaWZvcm1WYWx1ZXMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIGJ1ZmZlcnMubGF5b3V0VmVydGV4QnVmZmVyLFxuICAgICAgICBidWZmZXJzLmluZGV4QnVmZmVyLCBzZWdtZW50cywgbGF5ZXIucGFpbnQsXG4gICAgICAgIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIGJ1ZmZlcnMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCksXG4gICAgICAgIGJ1ZmZlcnMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlciwgYnVmZmVycy5vcGFjaXR5VmVydGV4QnVmZmVyKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB7Y2lyY2xlVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDaXJjbGVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvY2lyY2xlX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDaXJjbGVVbmlmb3Jtc1R5cGV9IGZyb20gJy4vcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdDaXJjbGVzO1xuXG50eXBlIFRpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbjogUHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgcHJvZ3JhbTogUHJvZ3JhbTwqPixcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcixcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgdW5pZm9ybVZhbHVlczogVW5pZm9ybVZhbHVlczxDaXJjbGVVbmlmb3Jtc1R5cGU+XG59O1xuXG50eXBlIFNlZ21lbnRzVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yLFxuICAgIHNvcnRLZXk6IG51bWJlcixcbiAgICBzdGF0ZTogVGlsZVJlbmRlclN0YXRlXG59O1xuXG5mdW5jdGlvbiBkcmF3Q2lyY2xlcyhwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ3RyYW5zbHVjZW50JykgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLW9wYWNpdHknKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS13aWR0aCcpO1xuICAgIGNvbnN0IHN0cm9rZU9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1zdHJva2Utb3BhY2l0eScpO1xuICAgIGNvbnN0IHNvcnRGZWF0dXJlc0J5S2V5ID0gbGF5ZXIubGF5b3V0LmdldCgnY2lyY2xlLXNvcnQta2V5JykuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCAmJiAoc3Ryb2tlV2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCB8fCBzdHJva2VPcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICAvLyBUdXJuIG9mZiBzdGVuY2lsIHRlc3RpbmcgdG8gYWxsb3cgY2lyY2xlcyB0byBiZSBkcmF3biBhY3Jvc3MgYm91bmRhcmllcyxcbiAgICAvLyBzbyB0aGF0IGxhcmdlIGNpcmNsZXMgYXJlIG5vdCBjbGlwcGVkIHRvIHRpbGVzXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IHNlZ21lbnRzUmVuZGVyU3RhdGVzOiBBcnJheTxTZWdtZW50c1RpbGVSZW5kZXJTdGF0ZT4gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuXG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/Q2lyY2xlQnVja2V0PCo+ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdjaXJjbGUnLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEJ1ZmZlciA9IGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXI7XG4gICAgICAgIGNvbnN0IGluZGV4QnVmZmVyID0gYnVja2V0LmluZGV4QnVmZmVyO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gY2lyY2xlVW5pZm9ybVZhbHVlcyhwYWludGVyLCBjb29yZCwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzZWdtZW50czogbmV3IFNlZ21lbnRWZWN0b3IoW3NlZ21lbnRdKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydEtleTogKChzZWdtZW50LnNvcnRLZXk6IGFueSk6IG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzZWdtZW50czogYnVja2V0LnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMuc29ydCgoYSwgYikgPT4gYS5zb3J0S2V5IC0gYi5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnRzU3RhdGUgb2Ygc2VnbWVudHNSZW5kZXJTdGF0ZXMpIHtcbiAgICAgICAgY29uc3Qge3Byb2dyYW1Db25maWd1cmF0aW9uLCBwcm9ncmFtLCBsYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCB1bmlmb3JtVmFsdWVzfSA9IHNlZ21lbnRzU3RhdGUuc3RhdGU7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudHNTdGF0ZS5zZWdtZW50cztcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLFxuICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgc2VnbWVudHMsXG4gICAgICAgICAgICBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi4vZ2wvY29sb3JfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9oZWF0bWFwX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9oZWF0bWFwX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3SGVhdG1hcDtcblxuZnVuY3Rpb24gZHJhd0hlYXRtYXAocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogSGVhdG1hcFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICAgICAgLy8gQWxsb3cga2VybmVscyB0byBiZSBkcmF3biBhY3Jvc3MgYm91bmRhcmllcywgc28gdGhhdFxuICAgICAgICAvLyBsYXJnZSBrZXJuZWxzIGFyZSBub3QgY2xpcHBlZCB0byB0aWxlc1xuICAgICAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgICAgICAvLyBUdXJuIG9uIGFkZGl0aXZlIGJsZW5kaW5nIGZvciBrZXJuZWxzLCB3aGljaCBpcyBhIGtleSBhc3BlY3Qgb2Yga2VybmVsIGRlbnNpdHkgZXN0aW1hdGlvbiBmb3JtdWxhXG4gICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IG5ldyBDb2xvck1vZGUoW2dsLk9ORSwgZ2wuT05FXSwgQ29sb3IudHJhbnNwYXJlbnQsIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG5cbiAgICAgICAgYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKTtcblxuICAgICAgICBjb250ZXh0LmNsZWFyKHtjb2xvcjogQ29sb3IudHJhbnNwYXJlbnR9KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNraXAgdGlsZXMgdGhhdCBoYXZlIHVuY292ZXJlZCBwYXJlbnRzIHRvIGF2b2lkIGZsaWNrZXJpbmc7IHdlIGRvbid0IG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHVzZSBjb21wbGV4IHRpbGUgbWFza2luZyBoZXJlIGJlY2F1c2UgdGhlIGNoYW5nZSBiZXR3ZWVuIHpvb20gbGV2ZWxzIGlzIHN1YnRsZSxcbiAgICAgICAgICAgIC8vIHNvIGl0J3MgZmluZSB0byBzaW1wbHkgcmVuZGVyIHRoZSBwYXJlbnQgdW50aWwgYWxsIGl0cyA0IGNoaWxkcmVuIGFyZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS5oYXNSZW5kZXJhYmxlUGFyZW50KGNvb3JkKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldDogP0hlYXRtYXBCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hlYXRtYXAnLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7em9vbX0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMoY29vcmQucG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICB0aWxlLCB6b29tLCBsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtaW50ZW5zaXR5JykpLFxuICAgICAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgcGFpbnRlci53aWR0aCwgcGFpbnRlci5oZWlnaHRdKTtcblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG4gICAgICAgIHBhaW50ZXIuY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICByZW5kZXJUZXh0dXJlVG9NYXAocGFpbnRlciwgbGF5ZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKSB7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgLy8gVXNlIGEgNHggZG93bnNjYWxlZCBzY3JlZW4gdGV4dHVyZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDRdKTtcblxuICAgIGxldCBmYm8gPSBsYXllci5oZWF0bWFwRmJvO1xuXG4gICAgaWYgKCFmYm8pIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuXG4gICAgICAgIGZibyA9IGxheWVyLmhlYXRtYXBGYm8gPSBjb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDQpO1xuXG4gICAgICAgIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZmJvLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7XG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChmYm8uZnJhbWVidWZmZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZFRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIHRleHR1cmUsIGZibykge1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAvLyBVc2UgdGhlIGhpZ2hlciBwcmVjaXNpb24gaGFsZi1mbG9hdCB0ZXh0dXJlIHdoZXJlIGF2YWlsYWJsZSAocHJvZHVjaW5nIG11Y2ggc21vb3RoZXIgbG9va2luZyBoZWF0bWFwcyk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0LCAwLCBnbC5SR0JBLFxuICAgICAgICBjb250ZXh0LmV4dFRleHR1cmVIYWxmRmxvYXQgPyBjb250ZXh0LmV4dFRleHR1cmVIYWxmRmxvYXQuSEFMRl9GTE9BVF9PRVMgOiBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuICAgIGZiby5jb2xvckF0dGFjaG1lbnQuc2V0KHRleHR1cmUpO1xuXG4gICAgLy8gSWYgdXNpbmcgaGFsZi1mbG9hdCB0ZXh0dXJlIGFzIGEgcmVuZGVyIHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkLCBmYWxsIGJhY2sgdG8gYSBsb3cgcHJlY2lzaW9uIHRleHR1cmVcbiAgICBpZiAoY29udGV4dC5leHRUZXh0dXJlSGFsZkZsb2F0ICYmIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpICE9PSBnbC5GUkFNRUJVRkZFUl9DT01QTEVURSkge1xuICAgICAgICBjb250ZXh0LmV4dFRleHR1cmVIYWxmRmxvYXQgPSBudWxsO1xuICAgICAgICBmYm8uY29sb3JBdHRhY2htZW50LnNldERpcnR5KCk7XG4gICAgICAgIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyVGV4dHVyZVRvTWFwKHBhaW50ZXIsIGxheWVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAvLyBIZXJlIHdlIGJpbmQgdHdvIGRpZmZlcmVudCB0ZXh0dXJlcyBmcm9tIHdoaWNoIHdlJ2xsIHNhbXBsZSBpbiBkcmF3aW5nXG4gICAgLy8gaGVhdG1hcHM6IHRoZSBrZXJuZWwgdGV4dHVyZSwgcHJlcGFyZWQgaW4gdGhlIG9mZnNjcmVlbiBwYXNzLCBhbmQgYVxuICAgIC8vIGNvbG9yIHJhbXAgdGV4dHVyZS5cbiAgICBjb25zdCBmYm8gPSBsYXllci5oZWF0bWFwRmJvO1xuICAgIGlmICghZmJvKSByZXR1cm47XG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZmJvLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7XG5cbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcbiAgICBsZXQgY29sb3JSYW1wVGV4dHVyZSA9IGxheWVyLmNvbG9yUmFtcFRleHR1cmU7XG4gICAgaWYgKCFjb2xvclJhbXBUZXh0dXJlKSB7XG4gICAgICAgIGNvbG9yUmFtcFRleHR1cmUgPSBsYXllci5jb2xvclJhbXBUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgbGF5ZXIuY29sb3JSYW1wLCBnbC5SR0JBKTtcbiAgICB9XG4gICAgY29sb3JSYW1wVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICBwYWludGVyLnVzZVByb2dyYW0oJ2hlYXRtYXBUZXh0dXJlJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgIERlcHRoTW9kZS5kaXNhYmxlZCwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlcyhwYWludGVyLCBsYXllciwgMCwgMSksXG4gICAgICAgIGxheWVyLmlkLCBwYWludGVyLnZpZXdwb3J0QnVmZmVyLCBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLFxuICAgICAgICBwYWludGVyLnZpZXdwb3J0U2VnbWVudHMsIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQge1xuICAgIGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lU0RGVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9saW5lX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTGluZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkcmF3TGluZShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBMaW5lU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2xpbmUtb3BhY2l0eScpO1xuICAgIGNvbnN0IHdpZHRoID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLXdpZHRoJyk7XG4gICAgaWYgKG9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCB8fCB3aWR0aC5jb25zdGFudE9yKDEpID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBkYXNoYXJyYXkgPSBsYXllci5wYWludC5nZXQoJ2xpbmUtZGFzaGFycmF5Jyk7XG4gICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLXBhdHRlcm4nKTtcbiAgICBjb25zdCBpbWFnZSA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKCgxOiBhbnkpKTtcblxuICAgIGNvbnN0IGdyYWRpZW50ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLWdyYWRpZW50Jyk7XG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbUlkID1cbiAgICAgICAgaW1hZ2UgPyAnbGluZVBhdHRlcm4nIDpcbiAgICAgICAgZGFzaGFycmF5ID8gJ2xpbmVTREYnIDpcbiAgICAgICAgZ3JhZGllbnQgPyAnbGluZUdyYWRpZW50JyA6ICdsaW5lJztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgbGV0IGZpcnN0VGlsZSA9IHRydWU7XG5cbiAgICBpZiAoZ3JhZGllbnQpIHtcbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgbGV0IGdyYWRpZW50VGV4dHVyZSA9IGxheWVyLmdyYWRpZW50VGV4dHVyZTtcbiAgICAgICAgaWYgKCFsYXllci5ncmFkaWVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWdyYWRpZW50VGV4dHVyZSkgZ3JhZGllbnRUZXh0dXJlID0gbGF5ZXIuZ3JhZGllbnRUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgbGF5ZXIuZ3JhZGllbnQsIGdsLlJHQkEpO1xuICAgICAgICBncmFkaWVudFRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcblxuICAgICAgICBpZiAoaW1hZ2UgJiYgIXRpbGUucGF0dGVybnNMb2FkZWQoKSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgYnVja2V0OiA/TGluZUJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJldlByb2dyYW0gPSBwYWludGVyLmNvbnRleHQucHJvZ3JhbS5nZXQoKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShwcm9ncmFtSWQsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNoYW5nZWQgPSBmaXJzdFRpbGUgfHwgcHJvZ3JhbS5wcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybiAmJiB0aWxlLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0bGFzID0gdGlsZS5pbWFnZUF0bGFzO1xuICAgICAgICAgICAgY29uc3QgcG9zVG8gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi50by50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IHBvc0Zyb20gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi5mcm9tLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgaWYgKHBvc1RvICYmIHBvc0Zyb20pIHByb2dyYW1Db25maWd1cmF0aW9uLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgPyBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgZGFzaGFycmF5ID8gbGluZVNERlVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGRhc2hhcnJheSwgY3Jvc3NmYWRlKSA6XG4gICAgICAgICAgICBncmFkaWVudCA/IGxpbmVHcmFkaWVudFVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpIDpcbiAgICAgICAgICAgIGxpbmVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYWludEJ1ZmZlcnMoY3Jvc3NmYWRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXNoYXJyYXkgJiYgKHByb2dyYW1DaGFuZ2VkIHx8IHBhaW50ZXIubGluZUF0bGFzLmRpcnR5KSkge1xuICAgICAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICBwYWludGVyLmxpbmVBdGxhcy5iaW5kKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgcGFpbnRlci5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKGNvb3JkKSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgICAgICBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLCBidWNrZXQuc2VnbWVudHMsXG4gICAgICAgICAgICBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGZpcnN0VGlsZSA9IGZhbHNlO1xuICAgICAgICAvLyBvbmNlIHJlZmFjdG9yZWQgc28gdGhhdCBib3VuZCB0ZXh0dXJlIHN0YXRlIGlzIG1hbmFnZWQsIHdlJ2xsIGFsc28gYmUgYWJsZSB0byByZW1vdmUgdGhpcyBmaXJzdFRpbGUvcHJvZ3JhbUNoYW5nZWQgbG9naWNcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgZmlsbFVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9maWxsX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3RmlsbDtcblxuZnVuY3Rpb24gZHJhd0ZpbGwocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogRmlsbFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBjb25zdCBjb2xvciA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1jb2xvcicpO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtb3BhY2l0eScpO1xuXG4gICAgaWYgKG9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBwYXR0ZXJuID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLXBhdHRlcm4nKTtcbiAgICBjb25zdCBwYXNzID0gcGFpbnRlci5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkgJiZcbiAgICAgICAgKCFwYXR0ZXJuLmNvbnN0YW50T3IoKDE6IGFueSkpICYmXG4gICAgICAgIGNvbG9yLmNvbnN0YW50T3IoQ29sb3IudHJhbnNwYXJlbnQpLmEgPT09IDEgJiZcbiAgICAgICAgb3BhY2l0eS5jb25zdGFudE9yKDApID09PSAxKSA/ICdvcGFxdWUnIDogJ3RyYW5zbHVjZW50JztcblxuICAgIC8vIERyYXcgZmlsbFxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09IHBhc3MpIHtcbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihcbiAgICAgICAgICAgIDEsIHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29wYXF1ZScgPyBEZXB0aE1vZGUuUmVhZFdyaXRlIDogRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICAgICAgZHJhd0ZpbGxUaWxlcyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBjb2xvck1vZGUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBEcmF3IHN0cm9rZVxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcgJiYgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWFudGlhbGlhcycpKSB7XG5cbiAgICAgICAgLy8gSWYgd2UgZGVmaW5lZCBhIGRpZmZlcmVudCBjb2xvciBmb3IgdGhlIGZpbGwgb3V0bGluZSwgd2UgYXJlXG4gICAgICAgIC8vIGdvaW5nIHRvIGlnbm9yZSB0aGUgYml0cyBpbiAweDA3IGFuZCBqdXN0IGNhcmUgYWJvdXQgdGhlIGdsb2JhbFxuICAgICAgICAvLyBjbGlwcGluZyBtYXNrLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG9ubHkgd2FudCB0byBkcmF3RmlsbCB0aGUgYW50aWFsaWFzZWQgcGFydHMgdGhhdCBhcmVcbiAgICAgICAgLy8gKm91dHNpZGUqIHRoZSBjdXJyZW50IHNoYXBlLiBUaGlzIGlzIGltcG9ydGFudCBpbiBjYXNlIHRoZSBmaWxsXG4gICAgICAgIC8vIG9yIHN0cm9rZSBjb2xvciBpcyB0cmFuc2x1Y2VudC4gSWYgd2Ugd291bGRuJ3QgY2xpcCB0byBvdXRzaWRlXG4gICAgICAgIC8vIHRoZSBjdXJyZW50IHNoYXBlLCBzb21lIHBpeGVscyBmcm9tIHRoZSBvdXRsaW5lIHN0cm9rZSBvdmVybGFwcGVkXG4gICAgICAgIC8vIHRoZSAobm9uLWFudGlhbGlhc2VkKSBmaWxsLlxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKFxuICAgICAgICAgICAgbGF5ZXIuZ2V0UGFpbnRQcm9wZXJ0eSgnZmlsbC1vdXRsaW5lLWNvbG9yJykgPyAyIDogMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICAgICAgZHJhd0ZpbGxUaWxlcyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBjb2xvck1vZGUsIHRydWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0ZpbGxUaWxlcyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBjb2xvck1vZGUsIGlzT3V0bGluZSkge1xuICAgIGNvbnN0IGdsID0gcGFpbnRlci5jb250ZXh0LmdsO1xuXG4gICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLXBhdHRlcm4nKTtcbiAgICBjb25zdCBpbWFnZSA9IHBhdHRlcm5Qcm9wZXJ0eSAmJiBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGxldCBkcmF3TW9kZSwgcHJvZ3JhbU5hbWUsIHVuaWZvcm1WYWx1ZXMsIGluZGV4QnVmZmVyLCBzZWdtZW50cztcblxuICAgIGlmICghaXNPdXRsaW5lKSB7XG4gICAgICAgIHByb2dyYW1OYW1lID0gaW1hZ2UgPyAnZmlsbFBhdHRlcm4nIDogJ2ZpbGwnO1xuICAgICAgICBkcmF3TW9kZSA9IGdsLlRSSUFOR0xFUztcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmFtTmFtZSA9IGltYWdlICYmICFsYXllci5nZXRQYWludFByb3BlcnR5KCdmaWxsLW91dGxpbmUtY29sb3InKSA/ICdmaWxsT3V0bGluZVBhdHRlcm4nIDogJ2ZpbGxPdXRsaW5lJztcbiAgICAgICAgZHJhd01vZGUgPSBnbC5MSU5FUztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGlmIChpbWFnZSAmJiAhdGlsZS5wYXR0ZXJuc0xvYWRlZCgpKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBidWNrZXQ6ID9GaWxsQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKHByb2dyYW1OYW1lLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBwYWludGVyLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYWludEJ1ZmZlcnMoY3Jvc3NmYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuICYmIHRpbGUuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXMgPSB0aWxlLmltYWdlQXRsYXM7XG4gICAgICAgICAgICBjb25zdCBwb3NUbyA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLnRvLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgcG9zRnJvbSA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLmZyb20udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBpZiAocG9zVG8gJiYgcG9zRnJvbSkgcHJvZ3JhbUNvbmZpZ3VyYXRpb24uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbGVNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksIGxheWVyLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJykpO1xuXG4gICAgICAgIGlmICghaXNPdXRsaW5lKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgICAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgcGFpbnRlciwgY3Jvc3NmYWRlLCB0aWxlKSA6XG4gICAgICAgICAgICAgICAgZmlsbFVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlciA9IGJ1Y2tldC5pbmRleEJ1ZmZlcjI7XG4gICAgICAgICAgICBzZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50czI7XG4gICAgICAgICAgICBjb25zdCBkcmF3aW5nQnVmZmVyU2l6ZSA9IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdO1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IChwcm9ncmFtTmFtZSA9PT0gJ2ZpbGxPdXRsaW5lUGF0dGVybicgJiYgaW1hZ2UpID9cbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSwgZHJhd2luZ0J1ZmZlclNpemUpIDpcbiAgICAgICAgICAgICAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgZHJhd2luZ0J1ZmZlclNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KHBhaW50ZXIuY29udGV4dCwgZHJhd01vZGUsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhjb29yZCksIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCBzZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsRXh0cnVzaW9uVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG59IGZyb20gJy4vcHJvZ3JhbS9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3O1xuXG5mdW5jdGlvbiBkcmF3KHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBuZXcgRGVwdGhNb2RlKHBhaW50ZXIuY29udGV4dC5nbC5MRVFVQUwsIERlcHRoTW9kZS5SZWFkV3JpdGUsIHBhaW50ZXIuZGVwdGhSYW5nZUZvcjNEKTtcblxuICAgICAgICBpZiAob3BhY2l0eSA9PT0gMSAmJiAhbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJykuY29uc3RhbnRPcigoMTogYW55KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRHJhdyB0cmFuc3BhcmVudCBidWlsZGluZ3MgaW4gdHdvIHBhc3NlcyBzbyB0aGF0IG9ubHkgdGhlIGNsb3Nlc3Qgc3VyZmFjZSBpcyBkcmF3bi5cbiAgICAgICAgICAgIC8vIEZpcnN0IGRyYXcgYWxsIHRoZSBleHRydXNpb25zIGludG8gb25seSB0aGUgZGVwdGggYnVmZmVyLiBObyBjb2xvcnMgYXJlIGRyYXduLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCk7XG5cbiAgICAgICAgICAgIC8vIFRoZW4gZHJhdyBhbGwgdGhlIGV4dHJ1c2lvbnMgYSBzZWNvbmQgdHlwZSwgb25seSBjb2xvcmluZyBmcmFnbWVudHMgaWYgdGhleSBoYXZlIHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBkZXB0aCB2YWx1ZSBhcyB0aGUgY2xvc2VzdCBmcmFnbWVudCBpbiB0aGUgcHJldmlvdXMgcGFzcy4gVXNlIHRoZSBzdGVuY2lsIGJ1ZmZlclxuICAgICAgICAgICAgLy8gdG8gcHJldmVudCB0aGUgc2Vjb25kIGRyYXcgaW4gY2FzZXMgd2hlcmUgd2UgaGF2ZSBjb2luY2lkZW50IHBvbHlnb25zLlxuICAgICAgICAgICAgZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3IzRCgpLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0V4dHJ1c2lvblRpbGVzKHBhaW50ZXIsIHNvdXJjZSwgbGF5ZXIsIGNvb3JkcywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLW9wYWNpdHknKTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2UuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxFeHRydXNpb25CdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oaW1hZ2UgPyAnZmlsbEV4dHJ1c2lvblBhdHRlcm4nIDogJ2ZpbGxFeHRydXNpb24nLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBwYWludGVyLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbi51cGRhdGVQYWludEJ1ZmZlcnMoY3Jvc3NmYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuICYmIHRpbGUuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXMgPSB0aWxlLmltYWdlQXRsYXM7XG4gICAgICAgICAgICBjb25zdCBwb3NUbyA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLnRvLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgcG9zRnJvbSA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLmZyb20udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBpZiAocG9zVG8gJiYgcG9zRnJvbSkgcHJvZ3JhbUNvbmZpZ3VyYXRpb24uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KFxuICAgICAgICAgICAgY29vcmQucG9zTWF0cml4LFxuICAgICAgICAgICAgdGlsZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQnKTtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIHNob3VsZFVzZVZlcnRpY2FsR3JhZGllbnQsIG9wYWNpdHksIGNvb3JkLCBjcm9zc2ZhZGUsIHRpbGUpIDpcbiAgICAgICAgICAgIGZpbGxFeHRydXNpb25Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCwgb3BhY2l0eSk7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGNvbnRleHQuZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5iYWNrQ0NXLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1Y2tldC5pbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIGJ1Y2tldC5zZWdtZW50cywgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sXG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBoaWxsc2hhZGVVbmlmb3JtVmFsdWVzLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9oaWxsc2hhZGVfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgSGlsbHNoYWRlU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9oaWxsc2hhZGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0hpbGxzaGFkZTtcblxuZnVuY3Rpb24gZHJhd0hpbGxzaGFkZShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBIaWxsc2hhZGVTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICdvZmZzY3JlZW4nICYmIHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ3RyYW5zbHVjZW50JykgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBzb3VyY2VNYXhab29tID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCkubWF4em9vbTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IFtzdGVuY2lsTW9kZXMsIGNvb3Jkc10gPSBwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcgP1xuICAgICAgICBwYWludGVyLnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKHRpbGVJRHMpIDogW3t9LCB0aWxlSURzXTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgaWYgKHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlICYmIHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcbiAgICAgICAgICAgIHByZXBhcmVIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIHNvdXJjZU1heFpvb20sIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG4gICAgICAgICAgICByZW5kZXJIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGVzW2Nvb3JkLm92ZXJzY2FsZWRaXSwgY29sb3JNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoLCBwYWludGVyLmhlaWdodF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIaWxsc2hhZGUocGFpbnRlciwgdGlsZSwgbGF5ZXIsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IGZibyA9IHRpbGUuZmJvO1xuICAgIGlmICghZmJvKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGUnKTtcblxuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnJhc3RlckJvdW5kc0J1ZmZlcixcbiAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG59XG5cbi8vIGhpbGxzaGFkZSByZW5kZXJpbmcgaXMgZG9uZSBpbiB0d28gc3RlcHMuIHRoZSBwcmVwYXJlIHN0ZXAgZmlyc3QgY2FsY3VsYXRlcyB0aGUgc2xvcGUgb2YgdGhlIHRlcnJhaW4gaW4gdGhlIHggYW5kIHlcbi8vIGRpcmVjdGlvbnMgZm9yIGVhY2ggcGl4ZWwsIGFuZCBzYXZlcyB0aG9zZSB2YWx1ZXMgdG8gYSBmcmFtZWJ1ZmZlciB0ZXh0dXJlIGluIHRoZSByIGFuZCBnIGNoYW5uZWxzLlxuZnVuY3Rpb24gcHJlcGFyZUhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgc291cmNlTWF4Wm9vbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgZGVtID0gdGlsZS5kZW07XG4gICAgaWYgKGRlbSAmJiBkZW0uZGF0YSkge1xuICAgICAgICBjb25zdCB0aWxlU2l6ZSA9IGRlbS5kaW07XG4gICAgICAgIGNvbnN0IHRleHR1cmVTdHJpZGUgPSBkZW0uc3RyaWRlO1xuXG4gICAgICAgIGNvbnN0IHBpeGVsRGF0YSA9IGRlbS5nZXRQaXhlbHMoKTtcbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoZmFsc2UpO1xuICAgICAgICB0aWxlLmRlbVRleHR1cmUgPSB0aWxlLmRlbVRleHR1cmUgfHwgcGFpbnRlci5nZXRUaWxlVGV4dHVyZSh0ZXh0dXJlU3RyaWRlKTtcbiAgICAgICAgaWYgKHRpbGUuZGVtVGV4dHVyZSkge1xuICAgICAgICAgICAgY29uc3QgZGVtVGV4dHVyZSA9IHRpbGUuZGVtVGV4dHVyZTtcbiAgICAgICAgICAgIGRlbVRleHR1cmUudXBkYXRlKHBpeGVsRGF0YSwge3ByZW11bHRpcGx5OiBmYWxzZX0pO1xuICAgICAgICAgICAgZGVtVGV4dHVyZS5iaW5kKGdsLk5FQVJFU1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS5kZW1UZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgcGl4ZWxEYXRhLCBnbC5SR0JBLCB7cHJlbXVsdGlwbHk6IGZhbHNlfSk7XG4gICAgICAgICAgICB0aWxlLmRlbVRleHR1cmUuYmluZChnbC5ORUFSRVNULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCBmYm8gPSB0aWxlLmZibztcblxuICAgICAgICBpZiAoIWZibykge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHt3aWR0aDogdGlsZVNpemUsIGhlaWdodDogdGlsZVNpemUsIGRhdGE6IG51bGx9LCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHJlbmRlclRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgICAgICAgICBmYm8gPSB0aWxlLmZibyA9IGNvbnRleHQuY3JlYXRlRnJhbWVidWZmZXIodGlsZVNpemUsIHRpbGVTaXplKTtcbiAgICAgICAgICAgIGZiby5jb2xvckF0dGFjaG1lbnQuc2V0KHJlbmRlclRleHR1cmUudGV4dHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoZmJvLmZyYW1lYnVmZmVyKTtcbiAgICAgICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHRpbGVTaXplLCB0aWxlU2l6ZV0pO1xuXG4gICAgICAgIHBhaW50ZXIudXNlUHJvZ3JhbSgnaGlsbHNoYWRlUHJlcGFyZScpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICAgICAgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlcyh0aWxlLnRpbGVJRCwgZGVtLCBzb3VyY2VNYXhab29tKSxcbiAgICAgICAgICAgIGxheWVyLmlkLCBwYWludGVyLnJhc3RlckJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHBhaW50ZXIucmFzdGVyQm91bmRzU2VnbWVudHMpO1xuXG4gICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gZmFsc2U7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4uL3NvdXJjZS9pbWFnZV9zb3VyY2UnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtyYXN0ZXJVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vcmFzdGVyX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFJhc3RlclN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdSYXN0ZXI7XG5cbmZ1bmN0aW9uIGRyYXdSYXN0ZXIocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogUmFzdGVyU3R5bGVMYXllciwgdGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG4gICAgaWYgKGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSA9PT0gMCkgcmV0dXJuO1xuICAgIGlmICghdGlsZUlEcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ3Jhc3RlcicpO1xuXG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBbc3RlbmNpbE1vZGVzLCBjb29yZHNdID0gc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UgPyBbe30sIHRpbGVJRHNdIDpcbiAgICAgICAgcGFpbnRlci5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcCh0aWxlSURzKTtcblxuICAgIGNvbnN0IG1pblRpbGVaID0gY29vcmRzW2Nvb3Jkcy5sZW5ndGggLSAxXS5vdmVyc2NhbGVkWjtcblxuICAgIGNvbnN0IGFsaWduID0gIXBhaW50ZXIub3B0aW9ucy5tb3Zpbmc7XG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgLy8gU2V0IHRoZSBsb3dlciB6b29tIGxldmVsIHRvIHN1YmxheWVyIDAsIGFuZCBoaWdoZXIgem9vbSBsZXZlbHMgdG8gaGlnaGVyIHN1YmxheWVyc1xuICAgICAgICAvLyBVc2UgZ2wuTEVTUyB0byBwcmV2ZW50IGRvdWJsZSBkcmF3aW5nIGluIGFyZWFzIHdoZXJlIHRpbGVzIG92ZXJsYXAuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoY29vcmQub3ZlcnNjYWxlZFogLSBtaW5UaWxlWixcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSA9PT0gMSA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHksIGdsLkxFU1MpO1xuXG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGNvb3JkLnRvVW53cmFwcGVkKCksIGFsaWduKTtcblxuICAgICAgICB0aWxlLnJlZ2lzdGVyRmFkZUR1cmF0aW9uKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWZhZGUtZHVyYXRpb24nKSk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50VGlsZSA9IHNvdXJjZUNhY2hlLmZpbmRMb2FkZWRQYXJlbnQoY29vcmQsIDApLFxuICAgICAgICAgICAgZmFkZSA9IGdldEZhZGVWYWx1ZXModGlsZSwgcGFyZW50VGlsZSwgc291cmNlQ2FjaGUsIGxheWVyLCBwYWludGVyLnRyYW5zZm9ybSk7XG5cbiAgICAgICAgbGV0IHBhcmVudFNjYWxlQnksIHBhcmVudFRMO1xuXG4gICAgICAgIGNvbnN0IHRleHR1cmVGaWx0ZXIgPSBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1yZXNhbXBsaW5nJykgPT09ICduZWFyZXN0JyA/ICBnbC5ORUFSRVNUIDogZ2wuTElORUFSO1xuXG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICB0aWxlLnRleHR1cmUuYmluZCh0ZXh0dXJlRmlsdGVyLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgICAgIGlmIChwYXJlbnRUaWxlKSB7XG4gICAgICAgICAgICBwYXJlbnRUaWxlLnRleHR1cmUuYmluZCh0ZXh0dXJlRmlsdGVyLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuICAgICAgICAgICAgcGFyZW50U2NhbGVCeSA9IE1hdGgucG93KDIsIHBhcmVudFRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICAgICAgcGFyZW50VEwgPSBbdGlsZS50aWxlSUQuY2Fub25pY2FsLnggKiBwYXJlbnRTY2FsZUJ5ICUgMSwgdGlsZS50aWxlSUQuY2Fub25pY2FsLnkgKiBwYXJlbnRTY2FsZUJ5ICUgMV07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gcmFzdGVyVW5pZm9ybVZhbHVlcyhwb3NNYXRyaXgsIHBhcmVudFRMIHx8IFswLCAwXSwgcGFyZW50U2NhbGVCeSB8fCAxLCBmYWRlLCBsYXllcik7XG5cbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEltYWdlU291cmNlKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgc291cmNlLmJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBzb3VyY2UuYm91bmRzU2VnbWVudHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZXNbY29vcmQub3ZlcnNjYWxlZFpdLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci5yYXN0ZXJCb3VuZHNCdWZmZXIsXG4gICAgICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEZhZGVWYWx1ZXModGlsZSwgcGFyZW50VGlsZSwgc291cmNlQ2FjaGUsIGxheWVyLCB0cmFuc2Zvcm0pIHtcbiAgICBjb25zdCBmYWRlRHVyYXRpb24gPSBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1mYWRlLWR1cmF0aW9uJyk7XG5cbiAgICBpZiAoZmFkZUR1cmF0aW9uID4gMCkge1xuICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpO1xuICAgICAgICBjb25zdCBzaW5jZVRpbGUgPSAobm93IC0gdGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uO1xuICAgICAgICBjb25zdCBzaW5jZVBhcmVudCA9IHBhcmVudFRpbGUgPyAobm93IC0gcGFyZW50VGlsZS50aW1lQWRkZWQpIC8gZmFkZUR1cmF0aW9uIDogLTE7XG5cbiAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgIGNvbnN0IGlkZWFsWiA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh7XG4gICAgICAgICAgICB0aWxlU2l6ZTogc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgcm91bmRab29tOiBzb3VyY2Uucm91bmRab29tXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmIG5vIHBhcmVudCBvciBwYXJlbnQgaXMgb2xkZXIsIGZhZGUgaW47IGlmIHBhcmVudCBpcyB5b3VuZ2VyLCBmYWRlIG91dFxuICAgICAgICBjb25zdCBmYWRlSW4gPSAhcGFyZW50VGlsZSB8fCBNYXRoLmFicyhwYXJlbnRUaWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWikgPiBNYXRoLmFicyh0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWiAtIGlkZWFsWik7XG5cbiAgICAgICAgY29uc3QgY2hpbGRPcGFjaXR5ID0gKGZhZGVJbiAmJiB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uKSA/IDEgOiBjbGFtcChmYWRlSW4gPyBzaW5jZVRpbGUgOiAxIC0gc2luY2VQYXJlbnQsIDAsIDEpO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGNyb3NzZmFkZSB0aWxlcyB0aGF0IHdlcmUganVzdCByZWZyZXNoZWQgdXBvbiBleHBpcmluZzpcbiAgICAgICAgLy8gb25jZSB0aGV5J3JlIG9sZCBlbm91Z2ggdG8gcGFzcyB0aGUgY3Jvc3NmYWRpbmcgdGhyZXNob2xkXG4gICAgICAgIC8vIChmYWRlRHVyYXRpb24pLCB1bnNldCB0aGUgYHJlZnJlc2hlZFVwb25FeHBpcmF0aW9uYCBmbGFnIHNvIHdlIGRvbid0XG4gICAgICAgIC8vIGluY29ycmVjdGx5IGZhaWwgdG8gY3Jvc3NmYWRlIHRoZW0gd2hlbiB6b29taW5nXG4gICAgICAgIGlmICh0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uICYmIHNpbmNlVGlsZSA+PSAxKSB0aWxlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICBtaXg6IDEgLSBjaGlsZE9wYWNpdHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGNoaWxkT3BhY2l0eSxcbiAgICAgICAgICAgICAgICBtaXg6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIG1peDogMFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2JhY2tncm91bmRfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdCYWNrZ3JvdW5kO1xuXG5mdW5jdGlvbiBkcmF3QmFja2dyb3VuZChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBCYWNrZ3JvdW5kU3R5bGVMYXllcikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVNpemUgPSB0cmFuc2Zvcm0udGlsZVNpemU7XG4gICAgY29uc3QgaW1hZ2UgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtcGF0dGVybicpO1xuICAgIGlmIChwYWludGVyLmlzUGF0dGVybk1pc3NpbmcoaW1hZ2UpKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXNzID0gKCFpbWFnZSAmJiBjb2xvci5hID09PSAxICYmIG9wYWNpdHkgPT09IDEgJiYgcGFpbnRlci5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09IHBhc3MpIHJldHVybjtcblxuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBwYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShpbWFnZSA/ICdiYWNrZ3JvdW5kUGF0dGVybicgOiAnYmFja2dyb3VuZCcpO1xuXG4gICAgY29uc3QgdGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZX0pO1xuXG4gICAgaWYgKGltYWdlKSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICBwYWludGVyLmltYWdlTWFuYWdlci5iaW5kKHBhaW50ZXIuY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3Jvc3NmYWRlID0gbGF5ZXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO1xuICAgIGZvciAoY29uc3QgdGlsZUlEIG9mIHRpbGVJRHMpIHtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGVJRC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID9cbiAgICAgICAgICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIHBhaW50ZXIsIGltYWdlLCB7dGlsZUlELCB0aWxlU2l6ZX0sIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMobWF0cml4LCBvcGFjaXR5LCBjb2xvcik7XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgcGFpbnRlci50aWxlRXh0ZW50QnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtQb3NBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5fSBmcm9tICcuLi9kYXRhL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHBvc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9wb3NfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0RlYnVnO1xuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuTElORV9TVFJJUCwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgIGRlYnVnVW5pZm9ybVZhbHVlcyhwb3NNYXRyaXgsIENvbG9yLnJlZCksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnRpbGVCb3JkZXJJbmRleEJ1ZmZlciwgcGFpbnRlci5kZWJ1Z1NlZ21lbnRzKTtcblxuICAgIGNvbnN0IHRpbGVSYXdEYXRhID0gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoY29vcmQua2V5KS5sYXRlc3RSYXdUaWxlRGF0YTtcbiAgICBjb25zdCB0aWxlQnl0ZUxlbmd0aCA9ICh0aWxlUmF3RGF0YSAmJiB0aWxlUmF3RGF0YS5ieXRlTGVuZ3RoKSB8fCAwO1xuICAgIGNvbnN0IHRpbGVTaXplS2IgPSBNYXRoLmZsb29yKHRpbGVCeXRlTGVuZ3RoIC8gMTAyNCk7XG4gICAgY29uc3QgdGlsZVNpemUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKS50aWxlU2l6ZTtcbiAgICBjb25zdCBzY2FsZVJhdGlvID0gNTEyIC8gTWF0aC5taW4odGlsZVNpemUsIDUxMik7XG4gICAgbGV0IHRpbGVJZFRleHQgPSBjb29yZC5jYW5vbmljYWwudG9TdHJpbmcoKTtcbiAgICBpZiAoY29vcmQub3ZlcnNjYWxlZFogIT09IGNvb3JkLmNhbm9uaWNhbC56KSB7XG4gICAgICAgIHRpbGVJZFRleHQgKz0gYCA9PiAke2Nvb3JkLm92ZXJzY2FsZWRafWA7XG4gICAgfVxuICAgIGNvbnN0IHZlcnRpY2VzID0gY3JlYXRlVGV4dFZlcnRpY2VzKGAke3RpbGVJZFRleHR9ICR7dGlsZVNpemVLYn1rYmAsIDUwLCAyMDAgKiBzY2FsZVJhdGlvLCA1ICogc2NhbGVSYXRpbyk7XG4gICAgY29uc3QgZGVidWdUZXh0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICBjb25zdCBkZWJ1Z1RleHRJbmRpY2VzID0gbmV3IExpbmVJbmRleEFycmF5KCk7XG4gICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2ZXJ0aWNlcy5sZW5ndGg7IHYgKz0gMikge1xuICAgICAgICBkZWJ1Z1RleHRBcnJheS5lbXBsYWNlQmFjayh2ZXJ0aWNlc1t2XSwgdmVydGljZXNbdiArIDFdKTtcbiAgICAgICAgZGVidWdUZXh0SW5kaWNlcy5lbXBsYWNlQmFjayh2LCB2ICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IGRlYnVnVGV4dEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKGRlYnVnVGV4dEFycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgIGNvbnN0IGRlYnVnVGV4dEluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihkZWJ1Z1RleHRJbmRpY2VzKTtcbiAgICBjb25zdCBkZWJ1Z1RleHRTZWdtZW50ID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIGRlYnVnVGV4dEFycmF5Lmxlbmd0aCAvIDIsIGRlYnVnVGV4dEFycmF5Lmxlbmd0aCAvIDIpO1xuXG4gICAgLy8gRHJhdyB0aGUgaGFsbyB3aXRoIG11bHRpcGxlIDFweCBsaW5lcyBpbnN0ZWFkIG9mIG9uZSB3aWRlciBsaW5lIGJlY2F1c2VcbiAgICAvLyB0aGUgZ2wgc3BlYyBkb2Vzbid0IGd1YXJhbnRlZSBzdXBwb3J0IGZvciBsaW5lcyB3aXRoIHdpZHRoID4gMS5cbiAgICBjb25zdCBvbmVQaXhlbCA9IEVYVEVOVCAvIChNYXRoLnBvdygyLCBwYWludGVyLnRyYW5zZm9ybS56b29tIC0gY29vcmQub3ZlcnNjYWxlZFopICogdGlsZVNpemUgKiBzY2FsZVJhdGlvKTtcblxuICAgIGNvbnN0IGhhbG9XaWR0aCA9IDE7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gW107XG4gICAgZm9yIChsZXQgeCA9IC1oYWxvV2lkdGg7IHggPD0gaGFsb1dpZHRoOyB4KyspIHtcbiAgICAgICAgZm9yIChsZXQgeSA9IC1oYWxvV2lkdGg7IHkgPD0gaGFsb1dpZHRoOyB5KyspIHtcbiAgICAgICAgICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBkb24ndCBkcmF3IHRoZSBoYWxvIGF0IDAsMCBzaW5jZSB0aGUgdGV4dCBpcyBkcmF3biB0aGVyZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMucHVzaChbeCwgeV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2xhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnNbaV07XG5cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGRlYnVnVW5pZm9ybVZhbHVlcyhcbiAgICAgICAgICAgICAgICBtYXQ0LnRyYW5zbGF0ZShbXSwgcG9zTWF0cml4LCBbXG4gICAgICAgICAgICAgICAgICAgIG9uZVBpeGVsICogdHJhbnNsYXRpb25bMF0sXG4gICAgICAgICAgICAgICAgICAgIG9uZVBpeGVsICogdHJhbnNsYXRpb25bMV0sIDBdKSxcbiAgICAgICAgICAgICAgICBDb2xvci53aGl0ZSksXG4gICAgICAgICAgICBpZCwgZGVidWdUZXh0QnVmZmVyLCBkZWJ1Z1RleHRJbmRleEJ1ZmZlciwgZGVidWdUZXh0U2VnbWVudCk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgZGVidWdVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgQ29sb3IuYmxhY2spLCBpZCxcbiAgICAgICAgZGVidWdUZXh0QnVmZmVyLCBkZWJ1Z1RleHRJbmRleEJ1ZmZlciwgZGVidWdUZXh0U2VnbWVudCk7XG5cbiAgICBkZWJ1Z1RleHRCdWZmZXIuZGVzdHJveSgpO1xuICAgIGRlYnVnVGV4dEluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICBkZWJ1Z1RleHRTZWdtZW50LmRlc3Ryb3koKTtcbn1cblxuLy8gRm9udCBkYXRhIEZyb20gSGVyc2hleSBTaW1wbGV4IEZvbnRcbi8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9kYXRhZm9ybWF0cy9oZXJzaGV5L1xuY29uc3Qgc2ltcGxleEZvbnQgPSB7XG4gICAgXCIgXCI6IFsxNiwgW11dLFxuICAgIFwiIVwiOiBbMTAsIFs1LCAyMSwgNSwgNywgLTEsIC0xLCA1LCAyLCA0LCAxLCA1LCAwLCA2LCAxLCA1LCAyXV0sXG4gICAgXCJcXFwiXCI6IFsxNiwgWzQsIDIxLCA0LCAxNCwgLTEsIC0xLCAxMiwgMjEsIDEyLCAxNF1dLFxuICAgIFwiI1wiOiBbMjEsIFsxMSwgMjUsIDQsIC03LCAtMSwgLTEsIDE3LCAyNSwgMTAsIC03LCAtMSwgLTEsIDQsIDEyLCAxOCwgMTIsIC0xLCAtMSwgMywgNiwgMTcsIDZdXSxcbiAgICBcIiRcIjogWzIwLCBbOCwgMjUsIDgsIC00LCAtMSwgLTEsIDEyLCAyNSwgMTIsIC00LCAtMSwgLTEsIDE3LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDgsIDIxLCA1LCAyMCwgMywgMTgsIDMsIDE2LCA0LCAxNCwgNSwgMTMsIDcsIDEyLCAxMywgMTAsIDE1LCA5LCAxNiwgOCwgMTcsIDYsIDE3LCAzLCAxNSwgMSwgMTIsIDAsIDgsIDAsIDUsIDEsIDMsIDNdXSxcbiAgICBcIiVcIjogWzI0LCBbMjEsIDIxLCAzLCAwLCAtMSwgLTEsIDgsIDIxLCAxMCwgMTksIDEwLCAxNywgOSwgMTUsIDcsIDE0LCA1LCAxNCwgMywgMTYsIDMsIDE4LCA0LCAyMCwgNiwgMjEsIDgsIDIxLCAxMCwgMjAsIDEzLCAxOSwgMTYsIDE5LCAxOSwgMjAsIDIxLCAyMSwgLTEsIC0xLCAxNywgNywgMTUsIDYsIDE0LCA0LCAxNCwgMiwgMTYsIDAsIDE4LCAwLCAyMCwgMSwgMjEsIDMsIDIxLCA1LCAxOSwgNywgMTcsIDddXSxcbiAgICBcIiZcIjogWzI2LCBbMjMsIDEyLCAyMywgMTMsIDIyLCAxNCwgMjEsIDE0LCAyMCwgMTMsIDE5LCAxMSwgMTcsIDYsIDE1LCAzLCAxMywgMSwgMTEsIDAsIDcsIDAsIDUsIDEsIDQsIDIsIDMsIDQsIDMsIDYsIDQsIDgsIDUsIDksIDEyLCAxMywgMTMsIDE0LCAxNCwgMTYsIDE0LCAxOCwgMTMsIDIwLCAxMSwgMjEsIDksIDIwLCA4LCAxOCwgOCwgMTYsIDksIDEzLCAxMSwgMTAsIDE2LCAzLCAxOCwgMSwgMjAsIDAsIDIyLCAwLCAyMywgMSwgMjMsIDJdXSxcbiAgICBcIidcIjogWzEwLCBbNSwgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjAsIDYsIDE4LCA1LCAxNiwgNCwgMTVdXSxcbiAgICBcIihcIjogWzE0LCBbMTEsIDI1LCA5LCAyMywgNywgMjAsIDUsIDE2LCA0LCAxMSwgNCwgNywgNSwgMiwgNywgLTIsIDksIC01LCAxMSwgLTddXSxcbiAgICBcIilcIjogWzE0LCBbMywgMjUsIDUsIDIzLCA3LCAyMCwgOSwgMTYsIDEwLCAxMSwgMTAsIDcsIDksIDIsIDcsIC0yLCA1LCAtNSwgMywgLTddXSxcbiAgICBcIipcIjogWzE2LCBbOCwgMjEsIDgsIDksIC0xLCAtMSwgMywgMTgsIDEzLCAxMiwgLTEsIC0xLCAxMywgMTgsIDMsIDEyXV0sXG4gICAgXCIrXCI6IFsyNiwgWzEzLCAxOCwgMTMsIDAsIC0xLCAtMSwgNCwgOSwgMjIsIDldXSxcbiAgICBcIixcIjogWzEwLCBbNiwgMSwgNSwgMCwgNCwgMSwgNSwgMiwgNiwgMSwgNiwgLTEsIDUsIC0zLCA0LCAtNF1dLFxuICAgIFwiLVwiOiBbMjYsIFs0LCA5LCAyMiwgOV1dLFxuICAgIFwiLlwiOiBbMTAsIFs1LCAyLCA0LCAxLCA1LCAwLCA2LCAxLCA1LCAyXV0sXG4gICAgXCIvXCI6IFsyMiwgWzIwLCAyNSwgMiwgLTddXSxcbiAgICBcIjBcIjogWzIwLCBbOSwgMjEsIDYsIDIwLCA0LCAxNywgMywgMTIsIDMsIDksIDQsIDQsIDYsIDEsIDksIDAsIDExLCAwLCAxNCwgMSwgMTYsIDQsIDE3LCA5LCAxNywgMTIsIDE2LCAxNywgMTQsIDIwLCAxMSwgMjEsIDksIDIxXV0sXG4gICAgXCIxXCI6IFsyMCwgWzYsIDE3LCA4LCAxOCwgMTEsIDIxLCAxMSwgMF1dLFxuICAgIFwiMlwiOiBbMjAsIFs0LCAxNiwgNCwgMTcsIDUsIDE5LCA2LCAyMCwgOCwgMjEsIDEyLCAyMSwgMTQsIDIwLCAxNSwgMTksIDE2LCAxNywgMTYsIDE1LCAxNSwgMTMsIDEzLCAxMCwgMywgMCwgMTcsIDBdXSxcbiAgICBcIjNcIjogWzIwLCBbNSwgMjEsIDE2LCAyMSwgMTAsIDEzLCAxMywgMTMsIDE1LCAxMiwgMTYsIDExLCAxNywgOCwgMTcsIDYsIDE2LCAzLCAxNCwgMSwgMTEsIDAsIDgsIDAsIDUsIDEsIDQsIDIsIDMsIDRdXSxcbiAgICBcIjRcIjogWzIwLCBbMTMsIDIxLCAzLCA3LCAxOCwgNywgLTEsIC0xLCAxMywgMjEsIDEzLCAwXV0sXG4gICAgXCI1XCI6IFsyMCwgWzE1LCAyMSwgNSwgMjEsIDQsIDEyLCA1LCAxMywgOCwgMTQsIDExLCAxNCwgMTQsIDEzLCAxNiwgMTEsIDE3LCA4LCAxNywgNiwgMTYsIDMsIDE0LCAxLCAxMSwgMCwgOCwgMCwgNSwgMSwgNCwgMiwgMywgNF1dLFxuICAgIFwiNlwiOiBbMjAsIFsxNiwgMTgsIDE1LCAyMCwgMTIsIDIxLCAxMCwgMjEsIDcsIDIwLCA1LCAxNywgNCwgMTIsIDQsIDcsIDUsIDMsIDcsIDEsIDEwLCAwLCAxMSwgMCwgMTQsIDEsIDE2LCAzLCAxNywgNiwgMTcsIDcsIDE2LCAxMCwgMTQsIDEyLCAxMSwgMTMsIDEwLCAxMywgNywgMTIsIDUsIDEwLCA0LCA3XV0sXG4gICAgXCI3XCI6IFsyMCwgWzE3LCAyMSwgNywgMCwgLTEsIC0xLCAzLCAyMSwgMTcsIDIxXV0sXG4gICAgXCI4XCI6IFsyMCwgWzgsIDIxLCA1LCAyMCwgNCwgMTgsIDQsIDE2LCA1LCAxNCwgNywgMTMsIDExLCAxMiwgMTQsIDExLCAxNiwgOSwgMTcsIDcsIDE3LCA0LCAxNiwgMiwgMTUsIDEsIDEyLCAwLCA4LCAwLCA1LCAxLCA0LCAyLCAzLCA0LCAzLCA3LCA0LCA5LCA2LCAxMSwgOSwgMTIsIDEzLCAxMywgMTUsIDE0LCAxNiwgMTYsIDE2LCAxOCwgMTUsIDIwLCAxMiwgMjEsIDgsIDIxXV0sXG4gICAgXCI5XCI6IFsyMCwgWzE2LCAxNCwgMTUsIDExLCAxMywgOSwgMTAsIDgsIDksIDgsIDYsIDksIDQsIDExLCAzLCAxNCwgMywgMTUsIDQsIDE4LCA2LCAyMCwgOSwgMjEsIDEwLCAyMSwgMTMsIDIwLCAxNSwgMTgsIDE2LCAxNCwgMTYsIDksIDE1LCA0LCAxMywgMSwgMTAsIDAsIDgsIDAsIDUsIDEsIDQsIDNdXSxcbiAgICBcIjpcIjogWzEwLCBbNSwgMTQsIDQsIDEzLCA1LCAxMiwgNiwgMTMsIDUsIDE0LCAtMSwgLTEsIDUsIDIsIDQsIDEsIDUsIDAsIDYsIDEsIDUsIDJdXSxcbiAgICBcIjtcIjogWzEwLCBbNSwgMTQsIDQsIDEzLCA1LCAxMiwgNiwgMTMsIDUsIDE0LCAtMSwgLTEsIDYsIDEsIDUsIDAsIDQsIDEsIDUsIDIsIDYsIDEsIDYsIC0xLCA1LCAtMywgNCwgLTRdXSxcbiAgICBcIjxcIjogWzI0LCBbMjAsIDE4LCA0LCA5LCAyMCwgMF1dLFxuICAgIFwiPVwiOiBbMjYsIFs0LCAxMiwgMjIsIDEyLCAtMSwgLTEsIDQsIDYsIDIyLCA2XV0sXG4gICAgXCI+XCI6IFsyNCwgWzQsIDE4LCAyMCwgOSwgNCwgMF1dLFxuICAgIFwiP1wiOiBbMTgsIFszLCAxNiwgMywgMTcsIDQsIDE5LCA1LCAyMCwgNywgMjEsIDExLCAyMSwgMTMsIDIwLCAxNCwgMTksIDE1LCAxNywgMTUsIDE1LCAxNCwgMTMsIDEzLCAxMiwgOSwgMTAsIDksIDcsIC0xLCAtMSwgOSwgMiwgOCwgMSwgOSwgMCwgMTAsIDEsIDksIDJdXSxcbiAgICBcIkBcIjogWzI3LCBbMTgsIDEzLCAxNywgMTUsIDE1LCAxNiwgMTIsIDE2LCAxMCwgMTUsIDksIDE0LCA4LCAxMSwgOCwgOCwgOSwgNiwgMTEsIDUsIDE0LCA1LCAxNiwgNiwgMTcsIDgsIC0xLCAtMSwgMTIsIDE2LCAxMCwgMTQsIDksIDExLCA5LCA4LCAxMCwgNiwgMTEsIDUsIC0xLCAtMSwgMTgsIDE2LCAxNywgOCwgMTcsIDYsIDE5LCA1LCAyMSwgNSwgMjMsIDcsIDI0LCAxMCwgMjQsIDEyLCAyMywgMTUsIDIyLCAxNywgMjAsIDE5LCAxOCwgMjAsIDE1LCAyMSwgMTIsIDIxLCA5LCAyMCwgNywgMTksIDUsIDE3LCA0LCAxNSwgMywgMTIsIDMsIDksIDQsIDYsIDUsIDQsIDcsIDIsIDksIDEsIDEyLCAwLCAxNSwgMCwgMTgsIDEsIDIwLCAyLCAyMSwgMywgLTEsIC0xLCAxOSwgMTYsIDE4LCA4LCAxOCwgNiwgMTksIDVdXSxcbiAgICBcIkFcIjogWzE4LCBbOSwgMjEsIDEsIDAsIC0xLCAtMSwgOSwgMjEsIDE3LCAwLCAtMSwgLTEsIDQsIDcsIDE0LCA3XV0sXG4gICAgXCJCXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNSwgMTcsIDEzLCAxNiwgMTIsIDEzLCAxMSwgLTEsIC0xLCA0LCAxMSwgMTMsIDExLCAxNiwgMTAsIDE3LCA5LCAxOCwgNywgMTgsIDQsIDE3LCAyLCAxNiwgMSwgMTMsIDAsIDQsIDBdXSxcbiAgICBcIkNcIjogWzIxLCBbMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1XV0sXG4gICAgXCJEXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMSwgMjEsIDE0LCAyMCwgMTYsIDE4LCAxNywgMTYsIDE4LCAxMywgMTgsIDgsIDE3LCA1LCAxNiwgMywgMTQsIDEsIDExLCAwLCA0LCAwXV0sXG4gICAgXCJFXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxNywgMjEsIC0xLCAtMSwgNCwgMTEsIDEyLCAxMSwgLTEsIC0xLCA0LCAwLCAxNywgMF1dLFxuICAgIFwiRlwiOiBbMTgsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAyMSwgMTcsIDIxLCAtMSwgLTEsIDQsIDExLCAxMiwgMTFdXSxcbiAgICBcIkdcIjogWzIxLCBbMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1LCAxOCwgOCwgLTEsIC0xLCAxMywgOCwgMTgsIDhdXSxcbiAgICBcIkhcIjogWzIyLCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgMTgsIDIxLCAxOCwgMCwgLTEsIC0xLCA0LCAxMSwgMTgsIDExXV0sXG4gICAgXCJJXCI6IFs4LCBbNCwgMjEsIDQsIDBdXSxcbiAgICBcIkpcIjogWzE2LCBbMTIsIDIxLCAxMiwgNSwgMTEsIDIsIDEwLCAxLCA4LCAwLCA2LCAwLCA0LCAxLCAzLCAyLCAyLCA1LCAyLCA3XV0sXG4gICAgXCJLXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDE4LCAyMSwgNCwgNywgLTEsIC0xLCA5LCAxMiwgMTgsIDBdXSxcbiAgICBcIkxcIjogWzE3LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMCwgMTYsIDBdXSxcbiAgICBcIk1cIjogWzI0LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgNCwgMjEsIDEyLCAwLCAtMSwgLTEsIDIwLCAyMSwgMTIsIDAsIC0xLCAtMSwgMjAsIDIxLCAyMCwgMF1dLFxuICAgIFwiTlwiOiBbMjIsIFs0LCAyMSwgNCwgMCwgLTEsIC0xLCA0LCAyMSwgMTgsIDAsIC0xLCAtMSwgMTgsIDIxLCAxOCwgMF1dLFxuICAgIFwiT1wiOiBbMjIsIFs5LCAyMSwgNywgMjAsIDUsIDE4LCA0LCAxNiwgMywgMTMsIDMsIDgsIDQsIDUsIDUsIDMsIDcsIDEsIDksIDAsIDEzLCAwLCAxNSwgMSwgMTcsIDMsIDE4LCA1LCAxOSwgOCwgMTksIDEzLCAxOCwgMTYsIDE3LCAxOCwgMTUsIDIwLCAxMywgMjEsIDksIDIxXV0sXG4gICAgXCJQXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNCwgMTcsIDEyLCAxNiwgMTEsIDEzLCAxMCwgNCwgMTBdXSxcbiAgICBcIlFcIjogWzIyLCBbOSwgMjEsIDcsIDIwLCA1LCAxOCwgNCwgMTYsIDMsIDEzLCAzLCA4LCA0LCA1LCA1LCAzLCA3LCAxLCA5LCAwLCAxMywgMCwgMTUsIDEsIDE3LCAzLCAxOCwgNSwgMTksIDgsIDE5LCAxMywgMTgsIDE2LCAxNywgMTgsIDE1LCAyMCwgMTMsIDIxLCA5LCAyMSwgLTEsIC0xLCAxMiwgNCwgMTgsIC0yXV0sXG4gICAgXCJSXCI6IFsyMSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDIxLCAxMywgMjEsIDE2LCAyMCwgMTcsIDE5LCAxOCwgMTcsIDE4LCAxNSwgMTcsIDEzLCAxNiwgMTIsIDEzLCAxMSwgNCwgMTEsIC0xLCAtMSwgMTEsIDExLCAxOCwgMF1dLFxuICAgIFwiU1wiOiBbMjAsIFsxNywgMTgsIDE1LCAyMCwgMTIsIDIxLCA4LCAyMSwgNSwgMjAsIDMsIDE4LCAzLCAxNiwgNCwgMTQsIDUsIDEzLCA3LCAxMiwgMTMsIDEwLCAxNSwgOSwgMTYsIDgsIDE3LCA2LCAxNywgMywgMTUsIDEsIDEyLCAwLCA4LCAwLCA1LCAxLCAzLCAzXV0sXG4gICAgXCJUXCI6IFsxNiwgWzgsIDIxLCA4LCAwLCAtMSwgLTEsIDEsIDIxLCAxNSwgMjFdXSxcbiAgICBcIlVcIjogWzIyLCBbNCwgMjEsIDQsIDYsIDUsIDMsIDcsIDEsIDEwLCAwLCAxMiwgMCwgMTUsIDEsIDE3LCAzLCAxOCwgNiwgMTgsIDIxXV0sXG4gICAgXCJWXCI6IFsxOCwgWzEsIDIxLCA5LCAwLCAtMSwgLTEsIDE3LCAyMSwgOSwgMF1dLFxuICAgIFwiV1wiOiBbMjQsIFsyLCAyMSwgNywgMCwgLTEsIC0xLCAxMiwgMjEsIDcsIDAsIC0xLCAtMSwgMTIsIDIxLCAxNywgMCwgLTEsIC0xLCAyMiwgMjEsIDE3LCAwXV0sXG4gICAgXCJYXCI6IFsyMCwgWzMsIDIxLCAxNywgMCwgLTEsIC0xLCAxNywgMjEsIDMsIDBdXSxcbiAgICBcIllcIjogWzE4LCBbMSwgMjEsIDksIDExLCA5LCAwLCAtMSwgLTEsIDE3LCAyMSwgOSwgMTFdXSxcbiAgICBcIlpcIjogWzIwLCBbMTcsIDIxLCAzLCAwLCAtMSwgLTEsIDMsIDIxLCAxNywgMjEsIC0xLCAtMSwgMywgMCwgMTcsIDBdXSxcbiAgICBcIltcIjogWzE0LCBbNCwgMjUsIDQsIC03LCAtMSwgLTEsIDUsIDI1LCA1LCAtNywgLTEsIC0xLCA0LCAyNSwgMTEsIDI1LCAtMSwgLTEsIDQsIC03LCAxMSwgLTddXSxcbiAgICBcIlxcXFxcIjogWzE0LCBbMCwgMjEsIDE0LCAtM11dLFxuICAgIFwiXVwiOiBbMTQsIFs5LCAyNSwgOSwgLTcsIC0xLCAtMSwgMTAsIDI1LCAxMCwgLTcsIC0xLCAtMSwgMywgMjUsIDEwLCAyNSwgLTEsIC0xLCAzLCAtNywgMTAsIC03XV0sXG4gICAgXCJeXCI6IFsxNiwgWzYsIDE1LCA4LCAxOCwgMTAsIDE1LCAtMSwgLTEsIDMsIDEyLCA4LCAxNywgMTMsIDEyLCAtMSwgLTEsIDgsIDE3LCA4LCAwXV0sXG4gICAgXCJfXCI6IFsxNiwgWzAsIC0yLCAxNiwgLTJdXSxcbiAgICBcImBcIjogWzEwLCBbNiwgMjEsIDUsIDIwLCA0LCAxOCwgNCwgMTYsIDUsIDE1LCA2LCAxNiwgNSwgMTddXSxcbiAgICBcImFcIjogWzE5LCBbMTUsIDE0LCAxNSwgMCwgLTEsIC0xLCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJiXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDExLCA2LCAxMywgOCwgMTQsIDExLCAxNCwgMTMsIDEzLCAxNSwgMTEsIDE2LCA4LCAxNiwgNiwgMTUsIDMsIDEzLCAxLCAxMSwgMCwgOCwgMCwgNiwgMSwgNCwgM11dLFxuICAgIFwiY1wiOiBbMTgsIFsxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJkXCI6IFsxOSwgWzE1LCAyMSwgMTUsIDAsIC0xLCAtMSwgMTUsIDExLCAxMywgMTMsIDExLCAxNCwgOCwgMTQsIDYsIDEzLCA0LCAxMSwgMywgOCwgMywgNiwgNCwgMywgNiwgMSwgOCwgMCwgMTEsIDAsIDEzLCAxLCAxNSwgM11dLFxuICAgIFwiZVwiOiBbMTgsIFszLCA4LCAxNSwgOCwgMTUsIDEwLCAxNCwgMTIsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJmXCI6IFsxMiwgWzEwLCAyMSwgOCwgMjEsIDYsIDIwLCA1LCAxNywgNSwgMCwgLTEsIC0xLCAyLCAxNCwgOSwgMTRdXSxcbiAgICBcImdcIjogWzE5LCBbMTUsIDE0LCAxNSwgLTIsIDE0LCAtNSwgMTMsIC02LCAxMSwgLTcsIDgsIC03LCA2LCAtNiwgLTEsIC0xLCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNCwgNiwgMTMsIDQsIDExLCAzLCA4LCAzLCA2LCA0LCAzLCA2LCAxLCA4LCAwLCAxMSwgMCwgMTMsIDEsIDE1LCAzXV0sXG4gICAgXCJoXCI6IFsxOSwgWzQsIDIxLCA0LCAwLCAtMSwgLTEsIDQsIDEwLCA3LCAxMywgOSwgMTQsIDEyLCAxNCwgMTQsIDEzLCAxNSwgMTAsIDE1LCAwXV0sXG4gICAgXCJpXCI6IFs4LCBbMywgMjEsIDQsIDIwLCA1LCAyMSwgNCwgMjIsIDMsIDIxLCAtMSwgLTEsIDQsIDE0LCA0LCAwXV0sXG4gICAgXCJqXCI6IFsxMCwgWzUsIDIxLCA2LCAyMCwgNywgMjEsIDYsIDIyLCA1LCAyMSwgLTEsIC0xLCA2LCAxNCwgNiwgLTMsIDUsIC02LCAzLCAtNywgMSwgLTddXSxcbiAgICBcImtcIjogWzE3LCBbNCwgMjEsIDQsIDAsIC0xLCAtMSwgMTQsIDE0LCA0LCA0LCAtMSwgLTEsIDgsIDgsIDE1LCAwXV0sXG4gICAgXCJsXCI6IFs4LCBbNCwgMjEsIDQsIDBdXSxcbiAgICBcIm1cIjogWzMwLCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgMTAsIDcsIDEzLCA5LCAxNCwgMTIsIDE0LCAxNCwgMTMsIDE1LCAxMCwgMTUsIDAsIC0xLCAtMSwgMTUsIDEwLCAxOCwgMTMsIDIwLCAxNCwgMjMsIDE0LCAyNSwgMTMsIDI2LCAxMCwgMjYsIDBdXSxcbiAgICBcIm5cIjogWzE5LCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgMTAsIDcsIDEzLCA5LCAxNCwgMTIsIDE0LCAxNCwgMTMsIDE1LCAxMCwgMTUsIDBdXSxcbiAgICBcIm9cIjogWzE5LCBbOCwgMTQsIDYsIDEzLCA0LCAxMSwgMywgOCwgMywgNiwgNCwgMywgNiwgMSwgOCwgMCwgMTEsIDAsIDEzLCAxLCAxNSwgMywgMTYsIDYsIDE2LCA4LCAxNSwgMTEsIDEzLCAxMywgMTEsIDE0LCA4LCAxNF1dLFxuICAgIFwicFwiOiBbMTksIFs0LCAxNCwgNCwgLTcsIC0xLCAtMSwgNCwgMTEsIDYsIDEzLCA4LCAxNCwgMTEsIDE0LCAxMywgMTMsIDE1LCAxMSwgMTYsIDgsIDE2LCA2LCAxNSwgMywgMTMsIDEsIDExLCAwLCA4LCAwLCA2LCAxLCA0LCAzXV0sXG4gICAgXCJxXCI6IFsxOSwgWzE1LCAxNCwgMTUsIC03LCAtMSwgLTEsIDE1LCAxMSwgMTMsIDEzLCAxMSwgMTQsIDgsIDE0LCA2LCAxMywgNCwgMTEsIDMsIDgsIDMsIDYsIDQsIDMsIDYsIDEsIDgsIDAsIDExLCAwLCAxMywgMSwgMTUsIDNdXSxcbiAgICBcInJcIjogWzEzLCBbNCwgMTQsIDQsIDAsIC0xLCAtMSwgNCwgOCwgNSwgMTEsIDcsIDEzLCA5LCAxNCwgMTIsIDE0XV0sXG4gICAgXCJzXCI6IFsxNywgWzE0LCAxMSwgMTMsIDEzLCAxMCwgMTQsIDcsIDE0LCA0LCAxMywgMywgMTEsIDQsIDksIDYsIDgsIDExLCA3LCAxMywgNiwgMTQsIDQsIDE0LCAzLCAxMywgMSwgMTAsIDAsIDcsIDAsIDQsIDEsIDMsIDNdXSxcbiAgICBcInRcIjogWzEyLCBbNSwgMjEsIDUsIDQsIDYsIDEsIDgsIDAsIDEwLCAwLCAtMSwgLTEsIDIsIDE0LCA5LCAxNF1dLFxuICAgIFwidVwiOiBbMTksIFs0LCAxNCwgNCwgNCwgNSwgMSwgNywgMCwgMTAsIDAsIDEyLCAxLCAxNSwgNCwgLTEsIC0xLCAxNSwgMTQsIDE1LCAwXV0sXG4gICAgXCJ2XCI6IFsxNiwgWzIsIDE0LCA4LCAwLCAtMSwgLTEsIDE0LCAxNCwgOCwgMF1dLFxuICAgIFwid1wiOiBbMjIsIFszLCAxNCwgNywgMCwgLTEsIC0xLCAxMSwgMTQsIDcsIDAsIC0xLCAtMSwgMTEsIDE0LCAxNSwgMCwgLTEsIC0xLCAxOSwgMTQsIDE1LCAwXV0sXG4gICAgXCJ4XCI6IFsxNywgWzMsIDE0LCAxNCwgMCwgLTEsIC0xLCAxNCwgMTQsIDMsIDBdXSxcbiAgICBcInlcIjogWzE2LCBbMiwgMTQsIDgsIDAsIC0xLCAtMSwgMTQsIDE0LCA4LCAwLCA2LCAtNCwgNCwgLTYsIDIsIC03LCAxLCAtN11dLFxuICAgIFwielwiOiBbMTcsIFsxNCwgMTQsIDMsIDAsIC0xLCAtMSwgMywgMTQsIDE0LCAxNCwgLTEsIC0xLCAzLCAwLCAxNCwgMF1dLFxuICAgIFwie1wiOiBbMTQsIFs5LCAyNSwgNywgMjQsIDYsIDIzLCA1LCAyMSwgNSwgMTksIDYsIDE3LCA3LCAxNiwgOCwgMTQsIDgsIDEyLCA2LCAxMCwgLTEsIC0xLCA3LCAyNCwgNiwgMjIsIDYsIDIwLCA3LCAxOCwgOCwgMTcsIDksIDE1LCA5LCAxMywgOCwgMTEsIDQsIDksIDgsIDcsIDksIDUsIDksIDMsIDgsIDEsIDcsIDAsIDYsIC0yLCA2LCAtNCwgNywgLTYsIC0xLCAtMSwgNiwgOCwgOCwgNiwgOCwgNCwgNywgMiwgNiwgMSwgNSwgLTEsIDUsIC0zLCA2LCAtNSwgNywgLTYsIDksIC03XV0sXG4gICAgXCJ8XCI6IFs4LCBbNCwgMjUsIDQsIC03XV0sXG4gICAgXCJ9XCI6IFsxNCwgWzUsIDI1LCA3LCAyNCwgOCwgMjMsIDksIDIxLCA5LCAxOSwgOCwgMTcsIDcsIDE2LCA2LCAxNCwgNiwgMTIsIDgsIDEwLCAtMSwgLTEsIDcsIDI0LCA4LCAyMiwgOCwgMjAsIDcsIDE4LCA2LCAxNywgNSwgMTUsIDUsIDEzLCA2LCAxMSwgMTAsIDksIDYsIDcsIDUsIDUsIDUsIDMsIDYsIDEsIDcsIDAsIDgsIC0yLCA4LCAtNCwgNywgLTYsIC0xLCAtMSwgOCwgOCwgNiwgNiwgNiwgNCwgNywgMiwgOCwgMSwgOSwgLTEsIDksIC0zLCA4LCAtNSwgNywgLTYsIDUsIC03XV0sXG4gICAgXCJ+XCI6IFsyNCwgWzMsIDYsIDMsIDgsIDQsIDExLCA2LCAxMiwgOCwgMTIsIDEwLCAxMSwgMTQsIDgsIDE2LCA3LCAxOCwgNywgMjAsIDgsIDIxLCAxMCwgLTEsIC0xLCAzLCA4LCA0LCAxMCwgNiwgMTEsIDgsIDExLCAxMCwgMTAsIDE0LCA3LCAxNiwgNiwgMTgsIDYsIDIwLCA3LCAyMSwgMTAsIDIxLCAxMl1dXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0VmVydGljZXModGV4dCwgbGVmdCwgYmFzZWxpbmUsIHNjYWxlKSB7XG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xuXG4gICAgY29uc3Qgc3Ryb2tlcyA9IFtdO1xuICAgIGxldCBpLCBsZW4sIGosIGxlbjIsIGdseXBoLCB4LCB5LCBwcmV2O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gdGV4dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBnbHlwaCA9IHNpbXBsZXhGb250W3RleHRbaV1dO1xuICAgICAgICBpZiAoIWdseXBoKSBjb250aW51ZTtcbiAgICAgICAgcHJldiA9IG51bGw7XG5cbiAgICAgICAgZm9yIChqID0gMCwgbGVuMiA9IGdseXBoWzFdLmxlbmd0aDsgaiA8IGxlbjI7IGogKz0gMikge1xuICAgICAgICAgICAgaWYgKGdseXBoWzFdW2pdID09PSAtMSAmJiBnbHlwaFsxXVtqICsgMV0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IG51bGw7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IGxlZnQgKyBnbHlwaFsxXVtqXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgIHkgPSBiYXNlbGluZSAtIGdseXBoWzFdW2ogKyAxXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZXMucHVzaChwcmV2LngsIHByZXYueSwgeCwgeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXYgPSB7eCwgeX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGVmdCArPSBnbHlwaFswXSAqIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJva2VzO1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0N1c3RvbTtcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEN1c3RvbVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuZnVuY3Rpb24gZHJhd0N1c3RvbShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBDdXN0b21TdHlsZUxheWVyKSB7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGltcGxlbWVudGF0aW9uID0gbGF5ZXIuaW1wbGVtZW50YXRpb247XG5cbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuXG4gICAgICAgIGNvbnN0IHByZXJlbmRlciA9IGltcGxlbWVudGF0aW9uLnByZXJlbmRlcjtcbiAgICAgICAgaWYgKHByZXJlbmRlcikge1xuICAgICAgICAgICAgcGFpbnRlci5zZXRDdXN0b21MYXllckRlZmF1bHRzKCk7XG4gICAgICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG5cbiAgICAgICAgICAgIHByZXJlbmRlci5jYWxsKGltcGxlbWVudGF0aW9uLCBjb250ZXh0LmdsLCBwYWludGVyLnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKTtcblxuICAgICAgICAgICAgY29udGV4dC5zZXREaXJ0eSgpO1xuICAgICAgICAgICAgcGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcblxuICAgICAgICBwYWludGVyLnNldEN1c3RvbUxheWVyRGVmYXVsdHMoKTtcblxuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG4gICAgICAgIGNvbnRleHQuc2V0U3RlbmNpbE1vZGUoU3RlbmNpbE1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IGltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGUgPT09ICczZCcgP1xuICAgICAgICAgICAgbmV3IERlcHRoTW9kZShwYWludGVyLmNvbnRleHQuZ2wuTEVRVUFMLCBEZXB0aE1vZGUuUmVhZFdyaXRlLCBwYWludGVyLmRlcHRoUmFuZ2VGb3IzRCkgOlxuICAgICAgICAgICAgcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuXG4gICAgICAgIGNvbnRleHQuc2V0RGVwdGhNb2RlKGRlcHRoTW9kZSk7XG5cbiAgICAgICAgaW1wbGVtZW50YXRpb24ucmVuZGVyKGNvbnRleHQuZ2wsIHBhaW50ZXIudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpO1xuXG4gICAgICAgIGNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgcGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcbiAgICAgICAgY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgUG9zQXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBwb3NBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcG9zX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0ICogYXMgc2hhZGVycyBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge3Byb2dyYW1Vbmlmb3Jtc30gZnJvbSAnLi9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL2RyYXdfc3ltYm9sJztcbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9kcmF3X2NpcmNsZSc7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL2RyYXdfaGVhdG1hcCc7XG5pbXBvcnQgbGluZSBmcm9tICcuL2RyYXdfbGluZSc7XG5pbXBvcnQgZmlsbCBmcm9tICcuL2RyYXdfZmlsbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL2RyYXdfZmlsbF9leHRydXNpb24nO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL2RyYXdfaGlsbHNoYWRlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9kcmF3X3Jhc3Rlcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL2RyYXdfYmFja2dyb3VuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi9kcmF3X2RlYnVnJztcbmltcG9ydCBjdXN0b20gZnJvbSAnLi9kcmF3X2N1c3RvbSc7XG5cbmNvbnN0IGRyYXcgPSB7XG4gICAgc3ltYm9sLFxuICAgIGNpcmNsZSxcbiAgICBoZWF0bWFwLFxuICAgIGxpbmUsXG4gICAgZmlsbCxcbiAgICAnZmlsbC1leHRydXNpb24nOiBmaWxsRXh0cnVzaW9uLFxuICAgIGhpbGxzaGFkZSxcbiAgICByYXN0ZXIsXG4gICAgYmFja2dyb3VuZCxcbiAgICBkZWJ1ZyxcbiAgICBjdXN0b21cbn07XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgTGluZUF0bGFzIGZyb20gJy4vbGluZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIEdseXBoTWFuYWdlciBmcm9tICcuL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtEZXB0aFJhbmdlVHlwZSwgRGVwdGhNYXNrVHlwZSwgRGVwdGhGdW5jVHlwZX0gZnJvbSAnLi4vZ2wvdHlwZXMnO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJQYXNzID0gJ29mZnNjcmVlbicgfCAnb3BhcXVlJyB8ICd0cmFuc2x1Y2VudCc7XG5cbnR5cGUgUGFpbnRlck9wdGlvbnMgPSB7XG4gICAgc2hvd092ZXJkcmF3SW5zcGVjdG9yOiBib29sZWFuLFxuICAgIHNob3dUaWxlQm91bmRhcmllczogYm9vbGVhbixcbiAgICByb3RhdGluZzogYm9vbGVhbixcbiAgICB6b29taW5nOiBib29sZWFuLFxuICAgIG1vdmluZzogYm9vbGVhbixcbiAgICBncHVUaW1pbmc6IGJvb2xlYW4sXG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXJcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IHBhaW50ZXIgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBnbCBhbiBleHBlcmltZW50YWwtd2ViZ2wgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQYWludGVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIF90aWxlVGV4dHVyZXM6IHsgW251bWJlcl06IEFycmF5PFRleHR1cmU+IH07XG4gICAgbnVtU3VibGF5ZXJzOiBudW1iZXI7XG4gICAgZGVwdGhFcHNpbG9uOiBudW1iZXI7XG4gICAgZW1wdHlQcm9ncmFtQ29uZmlndXJhdGlvbjogUHJvZ3JhbUNvbmZpZ3VyYXRpb247XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBkZXB0aFJibzogV2ViR0xSZW5kZXJidWZmZXI7XG4gICAgZGVwdGhSYm9OZWVkc0NsZWFyOiBib29sZWFuO1xuICAgIHRpbGVFeHRlbnRCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICB0aWxlRXh0ZW50U2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgZGVidWdCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICBkZWJ1Z1NlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHJhc3RlckJvdW5kc0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHJhc3RlckJvdW5kc1NlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHZpZXdwb3J0QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgdmlld3BvcnRTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBxdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG4gICAgdGlsZUJvcmRlckluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcbiAgICBfdGlsZUNsaXBwaW5nTWFza0lEczogeyBbc3RyaW5nXTogbnVtYmVyIH07XG4gICAgc3RlbmNpbENsZWFyTW9kZTogU3RlbmNpbE1vZGU7XG4gICAgc3R5bGU6IFN0eWxlO1xuICAgIG9wdGlvbnM6IFBhaW50ZXJPcHRpb25zO1xuICAgIGxpbmVBdGxhczogTGluZUF0bGFzO1xuICAgIGltYWdlTWFuYWdlcjogSW1hZ2VNYW5hZ2VyO1xuICAgIGdseXBoTWFuYWdlcjogR2x5cGhNYW5hZ2VyO1xuICAgIGRlcHRoUmFuZ2VGb3IzRDogRGVwdGhSYW5nZVR5cGU7XG4gICAgb3BhcXVlUGFzc0N1dG9mZjogbnVtYmVyO1xuICAgIHJlbmRlclBhc3M6IFJlbmRlclBhc3M7XG4gICAgY3VycmVudExheWVyOiBudW1iZXI7XG4gICAgY3VycmVudFN0ZW5jaWxTb3VyY2U6ID9zdHJpbmc7XG4gICAgbmV4dFN0ZW5jaWxJRDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgX3Nob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbjtcbiAgICBjYWNoZTogeyBbc3RyaW5nXTogUHJvZ3JhbTwqPiB9O1xuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBzeW1ib2xGYWRlQ2hhbmdlOiBudW1iZXI7XG4gICAgZ3B1VGltZXJzOiB7IFtzdHJpbmddOiBhbnkgfTtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQsIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KGdsKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHRoaXMuX3RpbGVUZXh0dXJlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2V0dXAoKTtcblxuICAgICAgICAvLyBXaXRoaW4gZWFjaCBsYXllciB0aGVyZSBhcmUgbXVsdGlwbGUgZGlzdGluY3Qgei1wbGFuZXMgdGhhdCBjYW4gYmUgZHJhd24gdG8uXG4gICAgICAgIC8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIFdlYkdMIGRlcHRoIGJ1ZmZlci5cbiAgICAgICAgdGhpcy5udW1TdWJsYXllcnMgPSBTb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgKyBTb3VyY2VDYWNoZS5tYXhPdmVyem9vbWluZyArIDE7XG4gICAgICAgIHRoaXMuZGVwdGhFcHNpbG9uID0gMSAvIE1hdGgucG93KDIsIDE2KTtcblxuICAgICAgICB0aGlzLmRlcHRoUmJvTmVlZHNDbGVhciA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBVcGRhdGUgdGhlIEdMIHZpZXdwb3J0LCBwcm9qZWN0aW9uIG1hdHJpeCwgYW5kIHRyYW5zZm9ybXMgdG8gY29tcGVuc2F0ZVxuICAgICAqIGZvciBhIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlLlxuICAgICAqL1xuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcblxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5zdHlsZS5fb3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0ucmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kZXB0aFJibykge1xuICAgICAgICAgICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuZGVwdGhSYm8pO1xuICAgICAgICAgICAgdGhpcy5kZXB0aFJibyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgICBjb25zdCB0aWxlRXh0ZW50QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRpbGVFeHRlbnRBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgZGVidWdBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5UKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuZGVidWdCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihkZWJ1Z0FycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLmRlYnVnU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgNSk7XG5cbiAgICAgICAgY29uc3QgcmFzdGVyQm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgMCwgMCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCwgRVhURU5ULCAwKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5ULCAwLCBFWFRFTlQpO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCwgRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHJhc3RlckJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAxKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZpZXdwb3J0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudmlld3BvcnRTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB0aWxlTGluZVN0cmlwSW5kaWNlcyA9IG5ldyBMaW5lU3RyaXBJbmRleEFycmF5KCk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDApO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygxKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMyk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDIpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRpbGVMaW5lU3RyaXBJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBxdWFkVHJpYW5nbGVJbmRpY2VzID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDAsIDEsIDIpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDIsIDEsIDMpO1xuICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5zdGVuY2lsQ2xlYXJNb2RlID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5BTFdBWVMsIG1hc2s6IDB9LCAweDAsIDB4RkYsIGdsLlpFUk8sIGdsLlpFUk8sIGdsLlpFUk8pO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVzZXQgdGhlIGRyYXdpbmcgY2FudmFzIGJ5IGNsZWFyaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBkcmF3XG4gICAgICogbmV3IHRpbGVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB3aGlsZSByZXRhaW5pbmcgcHJldmlvdXNseSBkcmF3biBwaXhlbHMuXG4gICAgICovXG4gICAgY2xlYXJTdGVuY2lsKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgdGhpcy5uZXh0U3RlbmNpbElEID0gMTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBBcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTQ5MCxcbiAgICAgICAgLy8gcGVuZGluZyBhbiB1cHN0cmVhbSBmaXgsIHdlIGRyYXcgYSBmdWxsc2NyZWVuIHN0ZW5jaWw9MCBjbGlwcGluZyBtYXNrIGhlcmUsXG4gICAgICAgIC8vIGVmZmVjdGl2ZWx5IGNsZWFyaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcjogb25jZSBhbiB1cHN0cmVhbSBwYXRjaCBsYW5kcywgcmVtb3ZlXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaW4gZmF2b3Igb2YgY29udGV4dC5jbGVhcih7IHN0ZW5jaWw6IDB4MCB9KVxuXG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgMCwgMCwgMSk7XG4gICAgICAgIG1hdDQuc2NhbGUobWF0cml4LCBtYXRyaXgsIFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsIDBdKTtcblxuICAgICAgICB0aGlzLnVzZVByb2dyYW0oJ2NsaXBwaW5nTWFzaycpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICAgICAgRGVwdGhNb2RlLmRpc2FibGVkLCB0aGlzLnN0ZW5jaWxDbGVhck1vZGUsIENvbG9yTW9kZS5kaXNhYmxlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyhtYXRyaXgpLFxuICAgICAgICAgICAgJyRjbGlwcGluZycsIHRoaXMudmlld3BvcnRCdWZmZXIsXG4gICAgICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCB0aGlzLnZpZXdwb3J0U2VnbWVudHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhsYXllcjogU3R5bGVMYXllciwgdGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPT09IGxheWVyLnNvdXJjZSB8fCAhbGF5ZXIuaXNUaWxlQ2xpcHBlZCgpIHx8ICF0aWxlSURzIHx8ICF0aWxlSURzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSBsYXllci5zb3VyY2U7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyB0aWxlSURzLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgICAgLy8gd2UnbGwgcnVuIG91dCBvZiBmcmVzaCBJRHMgc28gd2UgbmVlZCB0byBjbGVhciBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoQ29sb3JNb2RlLmRpc2FibGVkKTtcbiAgICAgICAgY29udGV4dC5zZXREZXB0aE1vZGUoRGVwdGhNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtID0gdGhpcy51c2VQcm9ncmFtKCdjbGlwcGluZ01hc2snKTtcblxuICAgICAgICB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgdGlsZUlEcykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3RpbGVJRC5rZXldID0gdGhpcy5uZXh0U3RlbmNpbElEKys7XG5cbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIERlcHRoTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAvLyBUZXN0cyB3aWxsIGFsd2F5cyBwYXNzLCBhbmQgcmVmIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkFMV0FZUywgbWFzazogMH0sIGlkLCAweEZGLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKSxcbiAgICAgICAgICAgICAgICBDb2xvck1vZGUuZGlzYWJsZWQsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyh0aWxlSUQucG9zTWF0cml4KSxcbiAgICAgICAgICAgICAgICAnJGNsaXBwaW5nJywgdGhpcy50aWxlRXh0ZW50QnVmZmVyLFxuICAgICAgICAgICAgICAgIHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHRoaXMudGlsZUV4dGVudFNlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0ZW5jaWxNb2RlRm9yM0QoKTogU3RlbmNpbE1vZGUge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyAxID4gMjU2KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLm5leHRTdGVuY2lsSUQrKztcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHJldHVybiBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLk5PVEVRVUFMLCBtYXNrOiAweEZGfSwgaWQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgIH1cblxuICAgIHN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogU3RlbmNpbE1vZGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuRVFVQUwsIG1hc2s6IDB4RkZ9LCB0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3RpbGVJRC5rZXldLCAweDAwLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvcnQgY29vcmRpbmF0ZXMgYnkgWiBhcyBkcmF3aW5nIHRpbGVzIGlzIGRvbmUgaW4gWi1kZXNjZW5kaW5nIG9yZGVyLlxuICAgICAqIEFsbCBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIFogd3JpdGUgdGhlIHNhbWUgc3RlbmNpbCB2YWx1ZS4gIENoaWxkcmVuXG4gICAgICogc3RlbmNpbCB2YWx1ZXMgYXJlIGdyZWF0ZXIgdGhhbiBwYXJlbnQncy4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciByYXN0ZXJcbiAgICAgKiBhbmQgcmFzdGVyLWRlbSB0aWxlcywgd2hpY2ggYXJlIGFscmVhZHkgY2xpcHBlZCB0byB0aWxlIGJvdW5kYXJpZXMsIHRvXG4gICAgICogbWFzayBhcmVhIG9mIHRpbGUgb3ZlcmxhcHBlZCBieSBjaGlsZHJlbiB0aWxlcy5cbiAgICAgKiBTdGVuY2lsIHJlZiB2YWx1ZXMgY29udGludWUgcmFuZ2UgdXNlZCBpbiBfdGlsZUNsaXBwaW5nTWFza0lEcy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgW1N0ZW5jaWxNb2RlIGZvciB0aWxlIG92ZXJzY2FsZVogbWFwLCBzb3J0ZWRDb29yZHNdLlxuICAgICAqL1xuICAgIHN0ZW5jaWxDb25maWdGb3JPdmVybGFwKHRpbGVJRHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KTogW3tbbnVtYmVyXTogJFJlYWRPbmx5PFN0ZW5jaWxNb2RlPn0sIEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+XSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBjb29yZHMgPSB0aWxlSURzLnNvcnQoKGEsIGIpID0+IGIub3ZlcnNjYWxlZFogLSBhLm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgbWluVGlsZVogPSBjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdLm92ZXJzY2FsZWRaO1xuICAgICAgICBjb25zdCBzdGVuY2lsVmFsdWVzID0gY29vcmRzWzBdLm92ZXJzY2FsZWRaIC0gbWluVGlsZVogKyAxO1xuICAgICAgICBpZiAoc3RlbmNpbFZhbHVlcyA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5uZXh0U3RlbmNpbElEICsgc3RlbmNpbFZhbHVlcyA+IDI1Nikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB6VG9TdGVuY2lsTW9kZSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVuY2lsVmFsdWVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICB6VG9TdGVuY2lsTW9kZVtpICsgbWluVGlsZVpdID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5HRVFVQUwsIG1hc2s6IDB4RkZ9LCBpICsgdGhpcy5uZXh0U3RlbmNpbElELCAweEZGLCBnbC5LRUVQLCBnbC5LRUVQLCBnbC5SRVBMQUNFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmV4dFN0ZW5jaWxJRCArPSBzdGVuY2lsVmFsdWVzO1xuICAgICAgICAgICAgcmV0dXJuIFt6VG9TdGVuY2lsTW9kZSwgY29vcmRzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3tbbWluVGlsZVpdOiBTdGVuY2lsTW9kZS5kaXNhYmxlZH0sIGNvb3Jkc107XG4gICAgfVxuXG4gICAgY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpOiAkUmVhZE9ubHk8Q29sb3JNb2RlPiB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBudW1PdmVyZHJhd1N0ZXBzID0gODtcbiAgICAgICAgICAgIGNvbnN0IGEgPSAxIC8gbnVtT3ZlcmRyYXdTdGVwcztcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvck1vZGUoW2dsLkNPTlNUQU5UX0NPTE9SLCBnbC5PTkVdLCBuZXcgQ29sb3IoYSwgYSwgYSwgMCksIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZW5kZXJQYXNzID09PSAnb3BhcXVlJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yTW9kZS51bmJsZW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLmFscGhhQmxlbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlcHRoTW9kZUZvclN1YmxheWVyKG46IG51bWJlciwgbWFzazogRGVwdGhNYXNrVHlwZSwgZnVuYzogP0RlcHRoRnVuY1R5cGUpOiAkUmVhZE9ubHk8RGVwdGhNb2RlPiB7XG4gICAgICAgIGlmICghdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpIHJldHVybiBEZXB0aE1vZGUuZGlzYWJsZWQ7XG4gICAgICAgIGNvbnN0IGRlcHRoID0gMSAtICgoMSArIHRoaXMuY3VycmVudExheWVyKSAqIHRoaXMubnVtU3VibGF5ZXJzICsgbikgKiB0aGlzLmRlcHRoRXBzaWxvbjtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXB0aE1vZGUoZnVuYyB8fCB0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLCBtYXNrLCBbZGVwdGgsIGRlcHRoXSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgb3BhcXVlIHBhc3MgYW5kIDNEIGxheWVycyBib3RoIHVzZSB0aGUgZGVwdGggYnVmZmVyLlxuICAgICAqIExheWVycyBkcmF3biBhYm92ZSAzRCBsYXllcnMgbmVlZCB0byBiZSBkcmF3biB1c2luZyB0aGVcbiAgICAgKiBwYWludGVyJ3MgYWxnb3JpdGhtIHNvIHRoYXQgdGhleSBhcHBlYXIgYWJvdmUgM0QgZmVhdHVyZXMuXG4gICAgICogVGhpcyByZXR1cm5zIHRydWUgZm9yIGxheWVycyB0aGF0IGNhbiBiZSBkcmF3biB1c2luZyB0aGVcbiAgICAgKiBvcGFxdWUgcGFzcy5cbiAgICAgKi9cbiAgICBvcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGF5ZXIgPCB0aGlzLm9wYXF1ZVBhc3NDdXRvZmY7XG4gICAgfVxuXG4gICAgcmVuZGVyKHN0eWxlOiBTdHlsZSwgb3B0aW9uczogUGFpbnRlck9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMubGluZUF0bGFzID0gc3R5bGUubGluZUF0bGFzO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IHN0eWxlLmltYWdlTWFuYWdlcjtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBzdHlsZS5nbHlwaE1hbmFnZXI7XG5cbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlQ2hhbmdlID0gc3R5bGUucGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2UoYnJvd3Nlci5ub3coKSk7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO1xuXG4gICAgICAgIGNvbnN0IGxheWVySWRzID0gdGhpcy5zdHlsZS5fb3JkZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUudXNlZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlLnByZXBhcmUodGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvb3Jkc0FzY2VuZGluZzoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcbiAgICAgICAgY29uc3QgY29vcmRzRGVzY2VuZGluZzoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcbiAgICAgICAgY29uc3QgY29vcmRzRGVzY2VuZGluZ1N5bWJvbDoge1tzdHJpbmddOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICAgICAgY29vcmRzQXNjZW5kaW5nW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcygpO1xuICAgICAgICAgICAgY29vcmRzRGVzY2VuZGluZ1tpZF0gPSBjb29yZHNBc2NlbmRpbmdbaWRdLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgY29vcmRzRGVzY2VuZGluZ1N5bWJvbFtpZF0gPSBzb3VyY2VDYWNoZS5nZXRWaXNpYmxlQ29vcmRpbmF0ZXModHJ1ZSkucmV2ZXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGFxdWVQYXNzQ3V0b2ZmID0gSW5maW5pdHk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySWQgPSBsYXllcklkc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0uaXMzRCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGFxdWVQYXNzQ3V0b2ZmID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9mZnNjcmVlbiBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFdlIGZpcnN0IGRvIGFsbCByZW5kZXJpbmcgdGhhdCByZXF1aXJlcyByZW5kZXJpbmcgdG8gYSBzZXBhcmF0ZVxuICAgICAgICAvLyBmcmFtZWJ1ZmZlciwgYW5kIHRoZW4gc2F2ZSB0aG9zZSBmb3IgcmVuZGVyaW5nIGJhY2sgdG8gdGhlIG1hcFxuICAgICAgICAvLyBsYXRlcjogaW4gZG9pbmcgdGhpcyB3ZSBhdm9pZCBkb2luZyBleHBlbnNpdmUgZnJhbWVidWZmZXIgcmVzdG9yZXMuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICdvZmZzY3JlZW4nO1xuICAgICAgICB0aGlzLmRlcHRoUmJvTmVlZHNDbGVhciA9IHRydWU7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIGxheWVySWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaGFzT2Zmc2NyZWVuUGFzcygpIHx8IGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gY29vcmRzRGVzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMYXllcih0aGlzLCBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXSwgbGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJpbmQgdGhlIG1haW4gZnJhbWVidWZmZXIgbm93IHRoYXQgYWxsIG9mZnNjcmVlbiBsYXllcnMgaGF2ZSBiZWVuIHJlbmRlcmVkOlxuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICAvLyBDbGVhciBidWZmZXJzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gQ29sb3IuYmxhY2sgOiBDb2xvci50cmFuc3BhcmVudCwgZGVwdGg6IDF9KTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcblxuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSBvcHRpb25zLnNob3dPdmVyZHJhd0luc3BlY3RvcjtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlRm9yM0QgPSBbMCwgMSAtICgoc3R5bGUuX29yZGVyLmxlbmd0aCArIDIpICogdGhpcy5udW1TdWJsYXllcnMgKiB0aGlzLmRlcHRoRXBzaWxvbildO1xuXG4gICAgICAgIC8vIE9wYXF1ZSBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIERyYXcgb3BhcXVlIGxheWVycyB0b3AtdG8tYm90dG9tIGZpcnN0LlxuICAgICAgICB0aGlzLnJlbmRlclBhc3MgPSAnb3BhcXVlJztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gbGF5ZXJJZHMubGVuZ3RoIC0gMTsgdGhpcy5jdXJyZW50TGF5ZXIgPj0gMDsgdGhpcy5jdXJyZW50TGF5ZXItLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZHNbdGhpcy5jdXJyZW50TGF5ZXJdXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zbHVjZW50IHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBhbGwgb3RoZXIgbGF5ZXJzIGJvdHRvbS10by10b3AuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAgICAgZm9yICh0aGlzLmN1cnJlbnRMYXllciA9IDA7IHRoaXMuY3VycmVudExheWVyIDwgbGF5ZXJJZHMubGVuZ3RoOyB0aGlzLmN1cnJlbnRMYXllcisrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgLy8gRm9yIHN5bWJvbCBsYXllcnMgaW4gdGhlIHRyYW5zbHVjZW50IHBhc3MsIHdlIGFkZCBleHRyYSB0aWxlcyB0byB0aGUgcmVuZGVyYWJsZSBzZXRcbiAgICAgICAgICAgIC8vIGZvciBjcm9zcy10aWxlIHN5bWJvbCBmYWRpbmcuIFN5bWJvbCBsYXllcnMgZG9uJ3QgdXNlIHRpbGUgY2xpcHBpbmcsIHNvIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjbGlwcGluZyBtYXNrc1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnID8gY29vcmRzRGVzY2VuZGluZ1N5bWJvbCA6IGNvb3Jkc0Rlc2NlbmRpbmcpW2xheWVyLnNvdXJjZV07XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyLCBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICAvL1VzZSBzb3VyY2Ugd2l0aCBoaWdoZXN0IG1heHpvb21cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFNvdXJjZTtcbiAgICAgICAgICAgIGxldCBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IHZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpO1xuICAgICAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhbGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAhPT0gKHNvdXJjZUNhY2hlICYmIHNvdXJjZUNhY2hlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGUgPSB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRTb3VyY2UgfHwgKHNlbGVjdGVkU291cmNlLmdldFNvdXJjZSgpLm1heHpvb20gPCBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTb3VyY2UgPSBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgZHJhdy5kZWJ1Zyh0aGlzLCBzZWxlY3RlZFNvdXJjZSwgc2VsZWN0ZWRTb3VyY2UuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGRlZmF1bHRzIGZvciBtb3N0IEdMIHZhbHVlcyBzbyB0aGF0IGFueW9uZSB1c2luZyB0aGUgc3RhdGUgYWZ0ZXIgdGhlIHJlbmRlclxuICAgICAgICAvLyBlbmNvdW50ZXJzIG1vcmUgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgICB0aGlzLmNvbnRleHQuc2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIC8vIEFsbCBvZiB0aGUgM0QgdGV4dHVyZXMgd2lsbCB1c2UgdGhlIHNhbWUgZGVwdGggcmVuZGVyYnVmZmVyLlxuICAgICAgICBpZiAoIXRoaXMuZGVwdGhSYm8pIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYm8gPSBjb250ZXh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcihjb250ZXh0LmdsLkRFUFRIX0NPTVBPTkVOVDE2LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJMYXllcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgICAgIGlmIChsYXllci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSkgcmV0dXJuO1xuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcblxuICAgICAgICB0aGlzLmdwdVRpbWluZ1N0YXJ0KGxheWVyKTtcbiAgICAgICAgZHJhd1tsYXllci50eXBlXShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKTtcbiAgICAgICAgdGhpcy5ncHVUaW1pbmdFbmQoKTtcbiAgICB9XG5cbiAgICBncHVUaW1pbmdTdGFydChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIC8vIFRoaXMgdHJpZXMgdG8gdGltZSB0aGUgZHJhdyBjYWxsIGl0c2VsZiwgYnV0IG5vdGUgdGhhdCB0aGUgY29zdCBmb3IgZHJhd2luZyBhIGxheWVyXG4gICAgICAgIC8vIG1heSBiZSBkb21pbmF0ZWQgYnkgdGhlIGNvc3Qgb2YgdXBsb2FkaW5nIHZlcnRpY2VzIHRvIHRoZSBHUFUuXG4gICAgICAgIC8vIFRvIGluc3RydW1lbnQgdGhhdCwgd2UnZCBuZWVkIHRvIHBhc3MgdGhlIGxheWVyVGltZXJzIG9iamVjdCBkb3duIGludG8gdGhlIGJ1Y2tldFxuICAgICAgICAvLyB1cGxvYWRpbmcgbG9naWMuXG4gICAgICAgIGxldCBsYXllclRpbWVyID0gdGhpcy5ncHVUaW1lcnNbbGF5ZXIuaWRdO1xuICAgICAgICBpZiAoIWxheWVyVGltZXIpIHtcbiAgICAgICAgICAgIGxheWVyVGltZXIgPSB0aGlzLmdwdVRpbWVyc1tsYXllci5pZF0gPSB7XG4gICAgICAgICAgICAgICAgY2FsbHM6IDAsXG4gICAgICAgICAgICAgICAgY3B1VGltZTogMCxcbiAgICAgICAgICAgICAgICBxdWVyeTogZXh0LmNyZWF0ZVF1ZXJ5RVhUKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJUaW1lci5jYWxscysrO1xuICAgICAgICBleHQuYmVnaW5RdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCwgbGF5ZXJUaW1lci5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ3B1VGltaW5nRW5kKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIGV4dC5lbmRRdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gICAgfVxuXG4gICAgY29sbGVjdEdwdVRpbWVycygpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExheWVyVGltZXJzID0gdGhpcy5ncHVUaW1lcnM7XG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgICAgIHJldHVybiBjdXJyZW50TGF5ZXJUaW1lcnM7XG4gICAgfVxuXG4gICAgcXVlcnlHcHVUaW1lcnMoZ3B1VGltZXJzOiB7W3N0cmluZ106IGFueX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiBncHVUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdwdVRpbWVyID0gZ3B1VGltZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgICAgICBjb25zdCBncHVUaW1lID0gZXh0LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLnF1ZXJ5LCBleHQuUVVFUllfUkVTVUxUX0VYVCkgLyAoMTAwMCAqIDEwMDApO1xuICAgICAgICAgICAgZXh0LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyLnF1ZXJ5KTtcbiAgICAgICAgICAgIGxheWVyc1tsYXllcklkXSA9IGdwdVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gYSBtYXRyaXggdG8gaW5jb3Jwb3JhdGUgdGhlICotdHJhbnNsYXRlIGFuZCAqLXRyYW5zbGF0ZS1hbmNob3IgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgICAqIEBwYXJhbSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzIFRydWUgd2hlbiB0aGUgdW5pdHMgYWNjZXB0ZWQgYnkgdGhlIG1hdHJpeCBhcmUgaW4gdmlld3BvcnQgcGl4ZWxzIGluc3RlYWQgb2YgdGlsZSB1bml0cy5cbiAgICAgKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBtYXRyaXhcbiAgICAgKi9cbiAgICB0cmFuc2xhdGVQb3NNYXRyaXgobWF0cml4OiBGbG9hdDMyQXJyYXksIHRpbGU6IFRpbGUsIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSwgdHJhbnNsYXRlQW5jaG9yOiAnbWFwJyB8ICd2aWV3cG9ydCcsIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHM/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdHJhbnNsYXRlWzBdICYmICF0cmFuc2xhdGVbMV0pIHJldHVybiBtYXRyaXg7XG5cbiAgICAgICAgY29uc3QgYW5nbGUgPSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID9cbiAgICAgICAgICAgICh0cmFuc2xhdGVBbmNob3IgPT09ICdtYXAnID8gdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAwKSA6XG4gICAgICAgICAgICAodHJhbnNsYXRlQW5jaG9yID09PSAndmlld3BvcnQnID8gLXRoaXMudHJhbnNmb3JtLmFuZ2xlIDogMCk7XG5cbiAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBzaW5BID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgY29zQSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgIHRyYW5zbGF0ZSA9IFtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVbMF0gKiBjb3NBIC0gdHJhbnNsYXRlWzFdICogc2luQSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVbMF0gKiBzaW5BICsgdHJhbnNsYXRlWzFdICogY29zQVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gW1xuICAgICAgICAgICAgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cyA/IHRyYW5zbGF0ZVswXSA6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIHRyYW5zbGF0ZVswXSwgdGhpcy50cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICAgICBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID8gdHJhbnNsYXRlWzFdIDogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgdHJhbnNsYXRlWzFdLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHRyYW5zbGF0ZWRNYXRyaXgsIG1hdHJpeCwgdHJhbnNsYXRpb24pO1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZE1hdHJpeDtcbiAgICB9XG5cbiAgICBzYXZlVGlsZVRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBjb25zdCB0ZXh0dXJlcyA9IHRoaXMuX3RpbGVUZXh0dXJlc1t0ZXh0dXJlLnNpemVbMF1dO1xuICAgICAgICBpZiAoIXRleHR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlVGV4dHVyZXNbdGV4dHVyZS5zaXplWzBdXSA9IFt0ZXh0dXJlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHR1cmVzLnB1c2godGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUaWxlVGV4dHVyZShzaXplOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZXMgPSB0aGlzLl90aWxlVGV4dHVyZXNbc2l6ZV07XG4gICAgICAgIHJldHVybiB0ZXh0dXJlcyAmJiB0ZXh0dXJlcy5sZW5ndGggPiAwID8gdGV4dHVyZXMucG9wKCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIGEgcGF0dGVybiBpbWFnZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCBpcywgd2hldGhlciBpdCBpcyBub3QgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5lZWRlZCBpbWFnZSBpcyBtaXNzaW5nIGFuZCByZW5kZXJpbmcgbmVlZHMgdG8gYmUgc2tpcHBlZC5cbiAgICAgKi9cbiAgICBpc1BhdHRlcm5NaXNzaW5nKGltYWdlOiA/Q3Jvc3NGYWRlZDxSZXNvbHZlZEltYWdlPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWltYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zQSA9IHRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UuZnJvbS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgaW1hZ2VQb3NCID0gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuICFpbWFnZVBvc0EgfHwgIWltYWdlUG9zQjtcbiAgICB9XG5cbiAgICB1c2VQcm9ncmFtKG5hbWU6IHN0cmluZywgcHJvZ3JhbUNvbmZpZ3VyYXRpb246ID9Qcm9ncmFtQ29uZmlndXJhdGlvbik6IFByb2dyYW08YW55PiB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlIHx8IHt9O1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtuYW1lfSR7cHJvZ3JhbUNvbmZpZ3VyYXRpb24gPyBwcm9ncmFtQ29uZmlndXJhdGlvbi5jYWNoZUtleSA6ICcnfSR7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gJy9vdmVyZHJhdycgOiAnJ31gO1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVtrZXldID0gbmV3IFByb2dyYW0odGhpcy5jb250ZXh0LCBzaGFkZXJzW25hbWVdLCBwcm9ncmFtQ29uZmlndXJhdGlvbiwgcHJvZ3JhbVVuaWZvcm1zW25hbWVdLCB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlW2tleV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXNldCBzb21lIEdMIHN0YXRlIHRvIGRlZmF1bHQgdmFsdWVzIHRvIGF2b2lkIGhhcmQtdG8tZGVidWcgYnVnc1xuICAgICAqIGluIGN1c3RvbSBsYXllcnMuXG4gICAgICovXG4gICAgc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpIHtcbiAgICAgICAgLy8gUHJldmVudCBjdXN0b20gbGF5ZXJzIGZyb20gdW5pbnRlbnRpb25hbGx5IG1vZGlmeSB0aGUgbGFzdCBWQU8gdXNlZC5cbiAgICAgICAgLy8gQWxsIG90aGVyIHN0YXRlIGlzIHN0YXRlIGlzIHJlc3RvcmVkIG9uIGl0J3Mgb3duLCBidXQgZm9yIFZBT3MgaXQnc1xuICAgICAgICAvLyBzaW1wbGVyIHRvIHVuYmluZCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIFZBT3MuXG4gICAgICAgIHRoaXMuY29udGV4dC51bmJpbmRWQU8oKTtcblxuICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoaXMgc3RhdGUgaXMgbWVhbmluZ2Z1bCBhbmQgb2Z0ZW4gZXhwZWN0ZWQuXG4gICAgICAgIC8vIExlYXZpbmcgdGhpcyBzdGF0ZSBkaXJ0eSBjb3VsZCBjYXVzZSBhIGxvdCBvZiBjb25mdXNpb24gZm9yIHVzZXJzLlxuICAgICAgICB0aGlzLmNvbnRleHQuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBTZXQgR0wgc3RhdGUgdGhhdCBpcyBzaGFyZWQgYnkgYWxsIGxheWVycy5cbiAgICAgKi9cbiAgICBzZXRCYXNlU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmNvbnRleHQuY3VsbEZhY2Uuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJsZW5kRXF1YXRpb24uc2V0KGdsLkZVTkNfQUREKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhaW50ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3ZlYzMsIHZlYzR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmNsYXNzIEZydXN0dW0ge1xuICAgIHBvaW50czogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgcGxhbmVzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcblxuICAgIGNvbnN0cnVjdG9yKHBvaW50c186IEFycmF5PEFycmF5PG51bWJlcj4+LCBwbGFuZXNfOiBBcnJheTxBcnJheTxudW1iZXI+Pikge1xuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50c187XG4gICAgICAgIHRoaXMucGxhbmVzID0gcGxhbmVzXztcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUludlByb2plY3Rpb25NYXRyaXgoaW52UHJvajogRmxvYXQ2NEFycmF5LCB3b3JsZFNpemU6IG51bWJlciwgem9vbTogbnVtYmVyKTogRnJ1c3R1bSB7XG4gICAgICAgIGNvbnN0IGNsaXBTcGFjZUNvcm5lcnMgPSBbXG4gICAgICAgICAgICBbLTEsIDEsIC0xLCAxXSxcbiAgICAgICAgICAgIFsgMSwgMSwgLTEsIDFdLFxuICAgICAgICAgICAgWyAxLCAtMSwgLTEsIDFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTEsIDFdLFxuICAgICAgICAgICAgWy0xLCAxLCAxLCAxXSxcbiAgICAgICAgICAgIFsgMSwgMSwgMSwgMV0sXG4gICAgICAgICAgICBbIDEsIC0xLCAxLCAxXSxcbiAgICAgICAgICAgIFstMSwgLTEsIDEsIDFdXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB6b29tKTtcblxuICAgICAgICAvLyBUcmFuc2Zvcm0gZnJ1c3R1bSBjb3JuZXIgcG9pbnRzIGZyb20gY2xpcCBzcGFjZSB0byB0aWxlIHNwYWNlXG4gICAgICAgIGNvbnN0IGZydXN0dW1Db29yZHMgPSBjbGlwU3BhY2VDb3JuZXJzXG4gICAgICAgICAgICAubWFwKHYgPT4gdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCB2LCBpbnZQcm9qKSlcbiAgICAgICAgICAgIC5tYXAodiA9PiB2ZWM0LnNjYWxlKFtdLCB2LCAxLjAgLyB2WzNdIC8gd29ybGRTaXplICogc2NhbGUpKTtcblxuICAgICAgICBjb25zdCBmcnVzdHVtUGxhbmVQb2ludEluZGljZXMgPSBbXG4gICAgICAgICAgICBbMCwgMSwgMl0sICAvLyBuZWFyXG4gICAgICAgICAgICBbNiwgNSwgNF0sICAvLyBmYXJcbiAgICAgICAgICAgIFswLCAzLCA3XSwgIC8vIGxlZnRcbiAgICAgICAgICAgIFsyLCAxLCA1XSwgIC8vIHJpZ2h0XG4gICAgICAgICAgICBbMywgMiwgNl0sICAvLyBib3R0b21cbiAgICAgICAgICAgIFswLCA0LCA1XSAgIC8vIHRvcFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGZydXN0dW1QbGFuZXMgPSBmcnVzdHVtUGxhbmVQb2ludEluZGljZXMubWFwKChwOiBBcnJheTxudW1iZXI+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gdmVjMy5zdWIoW10sIGZydXN0dW1Db29yZHNbcFswXV0sIGZydXN0dW1Db29yZHNbcFsxXV0pO1xuICAgICAgICAgICAgY29uc3QgYiA9IHZlYzMuc3ViKFtdLCBmcnVzdHVtQ29vcmRzW3BbMl1dLCBmcnVzdHVtQ29vcmRzW3BbMV1dKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSB2ZWMzLm5vcm1hbGl6ZShbXSwgdmVjMy5jcm9zcyhbXSwgYSwgYikpO1xuICAgICAgICAgICAgY29uc3QgZCA9IC12ZWMzLmRvdChuLCBmcnVzdHVtQ29vcmRzW3BbMV1dKTtcbiAgICAgICAgICAgIHJldHVybiBuLmNvbmNhdChkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGcnVzdHVtKGZydXN0dW1Db29yZHMsIGZydXN0dW1QbGFuZXMpO1xuICAgIH1cbn1cblxuY2xhc3MgQWFiYiB7XG4gICAgbWluOiB2ZWMzO1xuICAgIG1heDogdmVjMztcbiAgICBjZW50ZXI6IHZlYzM7XG5cbiAgICBjb25zdHJ1Y3RvcihtaW5fOiB2ZWMzLCBtYXhfOiB2ZWMzKSB7XG4gICAgICAgIHRoaXMubWluID0gbWluXztcbiAgICAgICAgdGhpcy5tYXggPSBtYXhfO1xuICAgICAgICB0aGlzLmNlbnRlciA9IHZlYzMuc2NhbGUoW10sIHZlYzMuYWRkKFtdLCB0aGlzLm1pbiwgdGhpcy5tYXgpLCAwLjUpO1xuICAgIH1cblxuICAgIHF1YWRyYW50KGluZGV4OiBudW1iZXIpOiBBYWJiIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBbKGluZGV4ICUgMikgPT09IDAsIGluZGV4IDwgMl07XG4gICAgICAgIGNvbnN0IHFNaW4gPSB2ZWMzLmNsb25lKHRoaXMubWluKTtcbiAgICAgICAgY29uc3QgcU1heCA9IHZlYzMuY2xvbmUodGhpcy5tYXgpO1xuICAgICAgICBmb3IgKGxldCBheGlzID0gMDsgYXhpcyA8IHNwbGl0Lmxlbmd0aDsgYXhpcysrKSB7XG4gICAgICAgICAgICBxTWluW2F4aXNdID0gc3BsaXRbYXhpc10gPyB0aGlzLm1pbltheGlzXSA6IHRoaXMuY2VudGVyW2F4aXNdO1xuICAgICAgICAgICAgcU1heFtheGlzXSA9IHNwbGl0W2F4aXNdID8gdGhpcy5jZW50ZXJbYXhpc10gOiB0aGlzLm1heFtheGlzXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbGV2YXRpb24gaXMgYWx3YXlzIGNvbnN0YW50LCBoZW5jZSBxdWFkcmFudC5tYXgueiA9IHRoaXMubWF4LnpcbiAgICAgICAgcU1heFsyXSA9IHRoaXMubWF4WzJdO1xuICAgICAgICByZXR1cm4gbmV3IEFhYmIocU1pbiwgcU1heCk7XG4gICAgfVxuXG4gICAgZGlzdGFuY2VYKHBvaW50OiBBcnJheTxudW1iZXI+KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcG9pbnRPbkFhYmIgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFswXSwgcG9pbnRbMF0pLCB0aGlzLm1pblswXSk7XG4gICAgICAgIHJldHVybiBwb2ludE9uQWFiYiAtIHBvaW50WzBdO1xuICAgIH1cblxuICAgIGRpc3RhbmNlWShwb2ludDogQXJyYXk8bnVtYmVyPik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBvaW50T25BYWJiID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhbMV0sIHBvaW50WzFdKSwgdGhpcy5taW5bMV0pO1xuICAgICAgICByZXR1cm4gcG9pbnRPbkFhYmIgLSBwb2ludFsxXTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtcyBhIGZydXN0dW0tYWFiYiBpbnRlcnNlY3Rpb24gdGVzdC4gUmV0dXJucyAwIGlmIHRoZXJlJ3Mgbm8gaW50ZXJzZWN0aW9uLFxuICAgIC8vIDEgaWYgc2hhcGVzIGFyZSBpbnRlcnNlY3RpbmcgYW5kIDIgaWYgdGhlIGFhYmIgaWYgZnVsbHkgaW5zaWRlIHRoZSBmcnVzdHVtLlxuICAgIGludGVyc2VjdHMoZnJ1c3R1bTogRnJ1c3R1bSk6IG51bWJlciB7XG4gICAgICAgIC8vIEV4ZWN1dGUgc2VwYXJhdGluZyBheGlzIHRlc3QgYmV0d2VlbiB0d28gY29udmV4IG9iamVjdHMgdG8gZmluZCBpbnRlcnNlY3Rpb25zXG4gICAgICAgIC8vIEVhY2ggZnJ1c3R1bSBwbGFuZSB0b2dldGhlciB3aXRoIDMgbWFqb3IgYXhlcyBkZWZpbmUgdGhlIHNlcGFyYXRpbmcgYXhlc1xuICAgICAgICAvLyBOb3RlOiB0ZXN0IG9ubHkgNCBwb2ludHMgYXMgYm90aCBtaW4gYW5kIG1heCBwb2ludHMgaGF2ZSBlcXVhbCBlbGV2YXRpb25cbiAgICAgICAgYXNzZXJ0KHRoaXMubWluWzJdID09PSAwICYmIHRoaXMubWF4WzJdID09PSAwKTtcblxuICAgICAgICBjb25zdCBhYWJiUG9pbnRzID0gW1xuICAgICAgICAgICAgW3RoaXMubWluWzBdLCB0aGlzLm1pblsxXSwgMC4wLCAxXSxcbiAgICAgICAgICAgIFt0aGlzLm1heFswXSwgdGhpcy5taW5bMV0sIDAuMCwgMV0sXG4gICAgICAgICAgICBbdGhpcy5tYXhbMF0sIHRoaXMubWF4WzFdLCAwLjAsIDFdLFxuICAgICAgICAgICAgW3RoaXMubWluWzBdLCB0aGlzLm1heFsxXSwgMC4wLCAxXVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBmdWxseUluc2lkZSA9IHRydWU7XG5cbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBmcnVzdHVtLnBsYW5lcy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcGxhbmUgPSBmcnVzdHVtLnBsYW5lc1twXTtcbiAgICAgICAgICAgIGxldCBwb2ludHNJbnNpZGUgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFhYmJQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwb2ludHNJbnNpZGUgKz0gdmVjNC5kb3QocGxhbmUsIGFhYmJQb2ludHNbaV0pID49IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwb2ludHNJbnNpZGUgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgICAgIGlmIChwb2ludHNJbnNpZGUgIT09IGFhYmJQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGZ1bGx5SW5zaWRlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVsbHlJbnNpZGUpXG4gICAgICAgICAgICByZXR1cm4gMjtcblxuICAgICAgICBmb3IgKGxldCBheGlzID0gMDsgYXhpcyA8IDM7IGF4aXMrKykge1xuICAgICAgICAgICAgbGV0IHByb2pNaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgbGV0IHByb2pNYXggPSAtTnVtYmVyLk1BWF9WQUxVRTtcblxuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBmcnVzdHVtLnBvaW50cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2plY3RlZFBvaW50ID0gZnJ1c3R1bS5wb2ludHNbcF1bYXhpc10gLSB0aGlzLm1pbltheGlzXTtcblxuICAgICAgICAgICAgICAgIHByb2pNaW4gPSBNYXRoLm1pbihwcm9qTWluLCBwcm9qZWN0ZWRQb2ludCk7XG4gICAgICAgICAgICAgICAgcHJvak1heCA9IE1hdGgubWF4KHByb2pNYXgsIHByb2plY3RlZFBvaW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHByb2pNYXggPCAwIHx8IHByb2pNaW4gPiB0aGlzLm1heFtheGlzXSAtIHRoaXMubWluW2F4aXNdKVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuZXhwb3J0IHtcbiAgICBBYWJiLFxuICAgIEZydXN0dW1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSwge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXQsIG1lcmNhdG9yWmZyb21BbHRpdHVkZX0gZnJvbSAnLi9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7d3JhcCwgY2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHt2ZWM0LCBtYXQ0LCBtYXQyLCB2ZWMyfSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHtBYWJiLCBGcnVzdHVtfSBmcm9tICcuLi91dGlsL3ByaW1pdGl2ZXMuanMnO1xuXG5pbXBvcnQge1Vud3JhcHBlZFRpbGVJRCwgT3ZlcnNjYWxlZFRpbGVJRCwgQ2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbi8qKlxuICogQSBzaW5nbGUgdHJhbnNmb3JtLCBnZW5lcmFsbHkgdXNlZCBmb3IgYSBzaW5nbGUgdGlsZSB0byBiZVxuICogc2NhbGVkLCByb3RhdGVkLCBhbmQgem9vbWVkLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNmb3JtIHtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHRpbGVab29tOiBudW1iZXI7XG4gICAgbG5nUmFuZ2U6ID9bbnVtYmVyLCBudW1iZXJdO1xuICAgIGxhdFJhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBtYXhWYWxpZExhdGl0dWRlOiBudW1iZXI7XG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgcm90YXRpb25NYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICB6b29tRnJhY3Rpb246IG51bWJlcjtcbiAgICBwaXhlbHNUb0dMVW5pdHM6IFtudW1iZXIsIG51bWJlcl07XG4gICAgY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTogbnVtYmVyO1xuICAgIG1lcmNhdG9yTWF0cml4OiBBcnJheTxudW1iZXI+O1xuICAgIHByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBpbnZQcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgYWxpZ25lZFByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBwaXhlbE1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIHBpeGVsTWF0cml4SW52ZXJzZTogRmxvYXQ2NEFycmF5O1xuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheTtcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXk7XG4gICAgX2ZvdjogbnVtYmVyO1xuICAgIF9waXRjaDogbnVtYmVyO1xuICAgIF96b29tOiBudW1iZXI7XG4gICAgX3VubW9kaWZpZWQ6IGJvb2xlYW47XG4gICAgX3JlbmRlcldvcmxkQ29waWVzOiBib29sZWFuO1xuICAgIF9taW5ab29tOiBudW1iZXI7XG4gICAgX21heFpvb206IG51bWJlcjtcbiAgICBfbWluUGl0Y2g6IG51bWJlcjtcbiAgICBfbWF4UGl0Y2g6IG51bWJlcjtcbiAgICBfY2VudGVyOiBMbmdMYXQ7XG4gICAgX2NvbnN0cmFpbmluZzogYm9vbGVhbjtcbiAgICBfcG9zTWF0cml4Q2FjaGU6IHtbc3RyaW5nXTogRmxvYXQzMkFycmF5fTtcbiAgICBfYWxpZ25lZFBvc01hdHJpeENhY2hlOiB7W3N0cmluZ106IEZsb2F0MzJBcnJheX07XG5cbiAgICBjb25zdHJ1Y3RvcihtaW5ab29tOiA/bnVtYmVyLCBtYXhab29tOiA/bnVtYmVyLCBtaW5QaXRjaDogP251bWJlciwgbWF4UGl0Y2g6ID9udW1iZXIsIHJlbmRlcldvcmxkQ29waWVzOiBib29sZWFuIHwgdm9pZCkge1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyOyAvLyBjb25zdGFudFxuICAgICAgICB0aGlzLm1heFZhbGlkTGF0aXR1ZGUgPSA4NS4wNTExMjk7IC8vIGNvbnN0YW50XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHJlbmRlcldvcmxkQ29waWVzO1xuICAgICAgICB0aGlzLl9taW5ab29tID0gbWluWm9vbSB8fCAwO1xuICAgICAgICB0aGlzLl9tYXhab29tID0gbWF4Wm9vbSB8fCAyMjtcblxuICAgICAgICB0aGlzLl9taW5QaXRjaCA9IChtaW5QaXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1pblBpdGNoID09PSBudWxsKSA/IDAgOiBtaW5QaXRjaDtcbiAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSAobWF4UGl0Y2ggPT09IHVuZGVmaW5lZCB8fCBtYXhQaXRjaCA9PT0gbnVsbCkgPyA2MCA6IG1heFBpdGNoO1xuXG4gICAgICAgIHRoaXMuc2V0TWF4Qm91bmRzKCk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gbmV3IExuZ0xhdCgwLCAwKTtcbiAgICAgICAgdGhpcy56b29tID0gMDtcbiAgICAgICAgdGhpcy5hbmdsZSA9IDA7XG4gICAgICAgIHRoaXMuX2ZvdiA9IDAuNjQzNTAxMTA4NzkzMjg0NDtcbiAgICAgICAgdGhpcy5fcGl0Y2ggPSAwO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlID0ge307XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVHJhbnNmb3JtIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVHJhbnNmb3JtKHRoaXMuX21pblpvb20sIHRoaXMuX21heFpvb20sIHRoaXMuX21pblBpdGNoLCB0aGlzLm1heFBpdGNoLCB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIGNsb25lLnRpbGVTaXplID0gdGhpcy50aWxlU2l6ZTtcbiAgICAgICAgY2xvbmUubGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5fY2VudGVyID0gdGhpcy5fY2VudGVyO1xuICAgICAgICBjbG9uZS56b29tID0gdGhpcy56b29tO1xuICAgICAgICBjbG9uZS5hbmdsZSA9IHRoaXMuYW5nbGU7XG4gICAgICAgIGNsb25lLl9mb3YgPSB0aGlzLl9mb3Y7XG4gICAgICAgIGNsb25lLl9waXRjaCA9IHRoaXMuX3BpdGNoO1xuICAgICAgICBjbG9uZS5fdW5tb2RpZmllZCA9IHRoaXMuX3VubW9kaWZpZWQ7XG4gICAgICAgIGNsb25lLl9jYWxjTWF0cmljZXMoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldCBtaW5ab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW5ab29tOyB9XG4gICAgc2V0IG1pblpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9taW5ab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtYXhab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhab29tOyB9XG4gICAgc2V0IG1heFpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21heFpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtaW5QaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWluUGl0Y2g7IH1cbiAgICBzZXQgbWluUGl0Y2gocGl0Y2g6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fbWluUGl0Y2ggPT09IHBpdGNoKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblBpdGNoID0gcGl0Y2g7XG4gICAgICAgIHRoaXMucGl0Y2ggPSBNYXRoLm1heCh0aGlzLnBpdGNoLCBwaXRjaCk7XG4gICAgfVxuXG4gICAgZ2V0IG1heFBpdGNoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhQaXRjaDsgfVxuICAgIHNldCBtYXhQaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhQaXRjaCA9PT0gcGl0Y2gpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgdGhpcy5waXRjaCA9IE1hdGgubWluKHRoaXMucGl0Y2gsIHBpdGNoKTtcbiAgICB9XG5cbiAgICBnZXQgcmVuZGVyV29ybGRDb3BpZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllczsgfVxuICAgIHNldCByZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyV29ybGRDb3BpZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyA9IHJlbmRlcldvcmxkQ29waWVzO1xuICAgIH1cblxuICAgIGdldCB3b3JsZFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZVNpemUgKiB0aGlzLnNjYWxlO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJQb2ludCgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUuX2RpdigyKTtcbiAgICB9XG5cbiAgICBnZXQgc2l6ZSgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGdldCBiZWFyaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtdGhpcy5hbmdsZSAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBiZWFyaW5nKGJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBiID0gLXdyYXAoYmVhcmluZywgLTE4MCwgMTgwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIGlmICh0aGlzLmFuZ2xlID09PSBiKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGI7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuXG4gICAgICAgIC8vIDJ4MiBtYXRyaXggZm9yIHJvdGF0aW5nIHBvaW50c1xuICAgICAgICB0aGlzLnJvdGF0aW9uTWF0cml4ID0gbWF0Mi5jcmVhdGUoKTtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5hbmdsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHBpdGNoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaCAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBwaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBjbGFtcChwaXRjaCwgdGhpcy5taW5QaXRjaCwgdGhpcy5tYXhQaXRjaCkgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2ggPT09IHApIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaCA9IHA7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBmb3YoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvdiAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBmb3YoZm92OiBudW1iZXIpIHtcbiAgICAgICAgZm92ID0gTWF0aC5tYXgoMC4wMSwgTWF0aC5taW4oNjAsIGZvdikpO1xuICAgICAgICBpZiAodGhpcy5fZm92ID09PSBmb3YpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mb3YgPSBmb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgem9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fem9vbTsgfVxuICAgIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgICAgICBjb25zdCB6ID0gTWF0aC5taW4oTWF0aC5tYXgoem9vbSwgdGhpcy5taW5ab29tKSwgdGhpcy5tYXhab29tKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb20gPT09IHopIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29tID0gejtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHRoaXMuem9vbVNjYWxlKHopO1xuICAgICAgICB0aGlzLnRpbGVab29tID0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgdGhpcy56b29tRnJhY3Rpb24gPSB6IC0gdGhpcy50aWxlWm9vbTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX2NlbnRlcjsgfVxuICAgIHNldCBjZW50ZXIoY2VudGVyOiBMbmdMYXQpIHtcbiAgICAgICAgaWYgKGNlbnRlci5sYXQgPT09IHRoaXMuX2NlbnRlci5sYXQgJiYgY2VudGVyLmxuZyA9PT0gdGhpcy5fY2VudGVyLmxuZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHpvb20gbGV2ZWwgdGhhdCB3aWxsIGNvdmVyIGFsbCB0aWxlcyB0aGUgdHJhbnNmb3JtXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yb3VuZFpvb21cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB6b29tIGxldmVsXG4gICAgICovXG4gICAgY292ZXJpbmdab29tTGV2ZWwob3B0aW9uczoge3JvdW5kWm9vbT86IGJvb2xlYW4sIHRpbGVTaXplOiBudW1iZXJ9KSB7XG4gICAgICAgIGNvbnN0IHogPSAob3B0aW9ucy5yb3VuZFpvb20gPyBNYXRoLnJvdW5kIDogTWF0aC5mbG9vcikoXG4gICAgICAgICAgICB0aGlzLnpvb20gKyB0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplIC8gb3B0aW9ucy50aWxlU2l6ZSlcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQXQgbmVnYXRpdmUgem9vbSBsZXZlbHMgbG9hZCB0aWxlcyBmcm9tIHowIGJlY2F1c2UgbmVnYXRpdmUgdGlsZSB6b29tIGxldmVscyBkb24ndCBleGlzdC5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbnkgXCJ3cmFwcGVkXCIgY29waWVzIG9mIGEgZ2l2ZW4gdGlsZSBjb29yZGluYXRlIHRoYXQgYXJlIHZpc2libGVcbiAgICAgKiBpbiB0aGUgY3VycmVudCB2aWV3LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW25ldyBVbndyYXBwZWRUaWxlSUQoMCwgdGlsZUlEKV07XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgY29uc3QgdXRsID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgICAgIGNvbnN0IHV0ciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCAwKSk7XG4gICAgICAgICAgICBjb25zdCB1YmwgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpKTtcbiAgICAgICAgICAgIGNvbnN0IHViciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCB0aGlzLmhlaWdodCkpO1xuICAgICAgICAgICAgY29uc3QgdzAgPSBNYXRoLmZsb29yKE1hdGgubWluKHV0bC54LCB1dHIueCwgdWJsLngsIHVici54KSk7XG4gICAgICAgICAgICBjb25zdCB3MSA9IE1hdGguZmxvb3IoTWF0aC5tYXgodXRsLngsIHV0ci54LCB1YmwueCwgdWJyLngpKTtcblxuICAgICAgICAgICAgLy8gQWRkIGFuIGV4dHJhIGNvcHkgb2YgdGhlIHdvcmxkIG9uIGVhY2ggc2lkZSB0byBwcm9wZXJseSByZW5kZXIgSW1hZ2VTb3VyY2VzIGFuZCBDYW52YXNTb3VyY2VzLlxuICAgICAgICAgICAgLy8gQm90aCBzb3VyY2VzIGRyYXcgb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyaWVzIG9mIHRoZSB0aWxlIHRoYXQgXCJjb250YWlucyB0aGVtXCIgc28gd2UgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYWRkIGV4dHJhIGNvcGllcyBvbiBib3RoIHNpZGVzIGluIGNhc2Ugb2Zmc2NyZWVuIHRpbGVzIG5lZWQgdG8gZHJhdyBpbnRvIG9uLXNjcmVlbiBvbmVzLlxuICAgICAgICAgICAgY29uc3QgZXh0cmFXb3JsZENvcHkgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB3ID0gdzAgLSBleHRyYVdvcmxkQ29weTsgdyA8PSB3MSArIGV4dHJhV29ybGRDb3B5OyB3KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodyA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFVud3JhcHBlZFRpbGVJRCh3LCB0aWxlSUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgY29vcmRpbmF0ZXMgdGhhdCBjb3VsZCBjb3ZlciB0aGlzIHRyYW5zZm9ybSBmb3IgYSBjb3ZlcmluZ1xuICAgICAqIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm1pbnpvb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5tYXh6b29tXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJvdW5kWm9vbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gT3ZlcnNjYWxlZFRpbGVJRHNcbiAgICAgKi9cbiAgICBjb3ZlcmluZ1RpbGVzKFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgbWluem9vbT86IG51bWJlcixcbiAgICAgICAgICAgIG1heHpvb20/OiBudW1iZXIsXG4gICAgICAgICAgICByb3VuZFpvb20/OiBib29sZWFuLFxuICAgICAgICAgICAgcmVwYXJzZU92ZXJzY2FsZWQ/OiBib29sZWFuLFxuICAgICAgICAgICAgcmVuZGVyV29ybGRDb3BpZXM/OiBib29sZWFuXG4gICAgICAgIH1cbiAgICApOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiB7XG4gICAgICAgIGxldCB6ID0gdGhpcy5jb3ZlcmluZ1pvb21MZXZlbChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgYWN0dWFsWiA9IHo7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluem9vbSAhPT0gdW5kZWZpbmVkICYmIHogPCBvcHRpb25zLm1pbnpvb20pIHJldHVybiBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMubWF4em9vbSAhPT0gdW5kZWZpbmVkICYmIHogPiBvcHRpb25zLm1heHpvb20pIHogPSBvcHRpb25zLm1heHpvb207XG5cbiAgICAgICAgY29uc3QgY2VudGVyQ29vcmQgPSBNZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCh0aGlzLmNlbnRlcik7XG4gICAgICAgIGNvbnN0IG51bVRpbGVzID0gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gW251bVRpbGVzICogY2VudGVyQ29vcmQueCwgbnVtVGlsZXMgKiBjZW50ZXJDb29yZC55LCAwXTtcbiAgICAgICAgY29uc3QgY2FtZXJhRnJ1c3R1bSA9IEZydXN0dW0uZnJvbUludlByb2plY3Rpb25NYXRyaXgodGhpcy5pbnZQcm9qTWF0cml4LCB0aGlzLndvcmxkU2l6ZSwgeik7XG5cbiAgICAgICAgLy8gTm8gY2hhbmdlIG9mIExPRCBiZWhhdmlvciBmb3IgcGl0Y2ggbG93ZXIgdGhhbiA2MDogcmV0dXJuIG9ubHkgdGlsZSBpZHMgZnJvbSB0aGUgcmVxdWVzdGVkIHpvb20gbGV2ZWxcbiAgICAgICAgbGV0IG1pblpvb20gPSBvcHRpb25zLm1pbnpvb20gfHwgMDtcbiAgICAgICAgaWYgKHRoaXMucGl0Y2ggPD0gNjAuMClcbiAgICAgICAgICAgIG1pblpvb20gPSB6O1xuXG4gICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSBjZXJ0YWluIG51bWJlciBvZiBtYXhpbXVtIHpvb20gbGV2ZWwgdGlsZXMgc3Vycm91bmRpbmcgdGhlIGNlbnRlciBsb2NhdGlvblxuICAgICAgICBjb25zdCByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgPSAzO1xuXG4gICAgICAgIGNvbnN0IG5ld1Jvb3RUaWxlID0gKHdyYXA6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vIEFsbCB0aWxlcyBhcmUgb24gemVybyBlbGV2YXRpb24gcGxhbmUgPT4geiBkaWZmZXJlbmNlIGlzIHplcm9cbiAgICAgICAgICAgICAgICBhYWJiOiBuZXcgQWFiYihbd3JhcCAqIG51bVRpbGVzLCAwLCAwXSwgWyh3cmFwICsgMSkgKiBudW1UaWxlcywgbnVtVGlsZXMsIDBdKSxcbiAgICAgICAgICAgICAgICB6b29tOiAwLFxuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3cmFwLFxuICAgICAgICAgICAgICAgIGZ1bGx5VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRG8gYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgdG8gZmluZCB2aXNpYmxlIHRpbGVzIGFuZCBwcm9wZXIgbGV2ZWxzIG9mIGRldGFpbFxuICAgICAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHo7XG4gICAgICAgIGNvbnN0IG92ZXJzY2FsZWRaID0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZCA/IGFjdHVhbFogOiB6O1xuXG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgLy8gUmVuZGVyIGNvcHkgb2YgdGhlIGdsb2JlIHRocmljZSBvbiBib3RoIHNpZGVzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKC1pKSk7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdSb290VGlsZShpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKDApKTtcblxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaXQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBpdC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IGl0Lnk7XG4gICAgICAgICAgICBsZXQgZnVsbHlWaXNpYmxlID0gaXQuZnVsbHlWaXNpYmxlO1xuXG4gICAgICAgICAgICAvLyBWaXNpYmlsaXR5IG9mIGEgdGlsZSBpcyBub3QgcmVxdWlyZWQgaWYgYW55IG9mIGl0cyBhbmNlc3RvciBpZiBmdWxseSBpbnNpZGUgdGhlIGZydXN0dW1cbiAgICAgICAgICAgIGlmICghZnVsbHlWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0UmVzdWx0ID0gaXQuYWFiYi5pbnRlcnNlY3RzKGNhbWVyYUZydXN0dW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdFJlc3VsdCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBmdWxseVZpc2libGUgPSBpbnRlcnNlY3RSZXN1bHQgPT09IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IGl0LmFhYmIuZGlzdGFuY2VYKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWSA9IGl0LmFhYmIuZGlzdGFuY2VZKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmdlc3REaW0gPSBNYXRoLm1heChNYXRoLmFicyhkaXN0YW5jZVgpLCBNYXRoLmFicyhkaXN0YW5jZVkpKTtcblxuICAgICAgICAgICAgLy8gV2UncmUgdXNpbmcgZGlzdGFuY2UgYmFzZWQgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgaWYgYSB0aWxlIHNob3VsZCBiZSBzcGxpdCBpbnRvIHF1YWRyYW50cyBvciBub3QuXG4gICAgICAgICAgICAvLyByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgZGVmaW5lcyB0aGF0IHRoZXJlJ3MgYWx3YXlzIGEgY2VydGFpbiBudW1iZXIgb2YgbWF4TGV2ZWwgdGlsZXMgbmV4dCB0byB0aGUgbWFwIGNlbnRlci5cbiAgICAgICAgICAgIC8vIFVzaW5nIHRoZSBmYWN0IHRoYXQgYSBwYXJlbnQgbm9kZSBpbiBxdWFkdHJlZSBpcyB0d2ljZSB0aGUgc2l6ZSBvZiBpdHMgY2hpbGRyZW4gKHBlciBkaW1lbnNpb24pXG4gICAgICAgICAgICAvLyB3ZSBjYW4gZGVmaW5lIGRpc3RhbmNlIHRocmVzaG9sZHMgZm9yIGVhY2ggcmVsYXRpdmUgbGV2ZWw6XG4gICAgICAgICAgICAvLyBmKGspID0gb2Zmc2V0ICsgMiArIDQgKyA4ICsgMTYgKyAuLi4gKyAyXmsuIFRoaXMgaXMgdGhlIHNhbWUgYXMgXCJvZmZzZXQrMl4oaysxKS0yXCJcbiAgICAgICAgICAgIGNvbnN0IGRpc3RUb1NwbGl0ID0gcmFkaXVzT2ZNYXhMdmxMb2RJblRpbGVzICsgKDEgPDwgKG1heFpvb20gLSBpdC56b29tKSkgLSAyO1xuXG4gICAgICAgICAgICAvLyBIYXZlIHdlIHJlYWNoZWQgdGhlIHRhcmdldCBkZXB0aCBvciBpcyB0aGUgdGlsZSB0b28gZmFyIGF3YXkgdG8gYmUgYW55IHNwbGl0IGZ1cnRoZXI/XG4gICAgICAgICAgICBpZiAoaXQuem9vbSA9PT0gbWF4Wm9vbSB8fCAobG9uZ2VzdERpbSA+IGRpc3RUb1NwbGl0ICYmIGl0Lnpvb20gPj0gbWluWm9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbGVJRDogbmV3IE92ZXJzY2FsZWRUaWxlSUQoaXQuem9vbSA9PT0gbWF4Wm9vbSA/IG92ZXJzY2FsZWRaIDogaXQuem9vbSwgaXQud3JhcCwgaXQuem9vbSwgeCwgeSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlU3E6IHZlYzIuc3FyTGVuKFtjZW50ZXJQb2ludFswXSAtIDAuNSAtIHgsIGNlbnRlclBvaW50WzFdIC0gMC41IC0geV0pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRYID0gKHggPDwgMSkgKyAoaSAlIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkWSA9ICh5IDw8IDEpICsgKGkgPj4gMSk7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHthYWJiOiBpdC5hYWJiLnF1YWRyYW50KGkpLCB6b29tOiBpdC56b29tICsgMSwgeDogY2hpbGRYLCB5OiBjaGlsZFksIHdyYXA6IGl0LndyYXAsIGZ1bGx5VmlzaWJsZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRpc3RhbmNlU3EgLSBiLmRpc3RhbmNlU3EpLm1hcChhID0+IGEudGlsZUlEKTtcbiAgICB9XG5cbiAgICByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLnBpeGVsc1RvR0xVbml0cyA9IFsyIC8gd2lkdGgsIC0yIC8gaGVpZ2h0XTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCB1bm1vZGlmaWVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdW5tb2RpZmllZDsgfVxuXG4gICAgem9vbVNjYWxlKHpvb206IG51bWJlcikgeyByZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7IH1cbiAgICBzY2FsZVpvb20oc2NhbGU6IG51bWJlcikgeyByZXR1cm4gTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5MTjI7IH1cblxuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgY29uc3QgbGF0ID0gY2xhbXAobG5nbGF0LmxhdCwgLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ2xhdC5sbmcpICogdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsYXQpICogdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMbmdMYXQge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShwb2ludC54IC8gdGhpcy53b3JsZFNpemUsIHBvaW50LnkgLyB0aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBnZXQgcG9pbnQoKTogUG9pbnQgeyByZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKTsgfVxuXG4gICAgc2V0TG9jYXRpb25BdFBvaW50KGxuZ2xhdDogTG5nTGF0LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMucG9pbnRDb29yZGluYXRlKHBvaW50KTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpO1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpO1xuICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIGxvYy54IC0gKGEueCAtIGIueCksXG4gICAgICAgICAgICAgICAgbG9jLnkgLSAoYS55IC0gYi55KSk7XG4gICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5jb29yZGluYXRlTG9jYXRpb24obmV3Q2VudGVyKTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMuY2VudGVyLndyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbG9jYXRpb24sIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKi9cbiAgICBsb2NhdGlvblBvaW50KGxuZ2xhdDogTG5nTGF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHBvaW50IG9uIHNjcmVlbiwgcmV0dXJuIGl0cyBsbmdsYXRcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHNjcmVlbiBwb2ludFxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IGxuZ2xhdCBsb2NhdGlvblxuICAgICAqL1xuICAgIHBvaW50TG9jYXRpb24ocDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGdlb2dyYXBoaWNhbCBsbmdsYXQsIHJldHVybiBhbiB1bnJvdW5kZWRcbiAgICAgKiBjb29yZGluYXRlIHRoYXQgcmVwcmVzZW50cyBpdCBhdCB0aGlzIHRyYW5zZm9ybSdzIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ2xhdFxuICAgICAqIEByZXR1cm5zIHtDb29yZGluYXRlfVxuICAgICAqL1xuICAgIGxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQobG5nbGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIENvb3JkaW5hdGUsIHJldHVybiBpdHMgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKi9cbiAgICBjb29yZGluYXRlTG9jYXRpb24oY29vcmQ6IE1lcmNhdG9yQ29vcmRpbmF0ZSkge1xuICAgICAgICByZXR1cm4gY29vcmQudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBwb2ludENvb3JkaW5hdGUocDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0WiA9IDA7XG4gICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGNvcnJlY3QgcHJvamVjdGVkIHogdmFsdWUgZm9yIHRoZSBwb2ludCxcbiAgICAgICAgLy8gdW5wcm9qZWN0IHR3byBwb2ludHMgdG8gZ2V0IGEgbGluZSBhbmQgdGhlbiBmaW5kIHRoZSBwb2ludCBvbiB0aGF0XG4gICAgICAgIC8vIGxpbmUgd2l0aCB6PTBcblxuICAgICAgICBjb25zdCBjb29yZDAgPSBbcC54LCBwLnksIDAsIDFdO1xuICAgICAgICBjb25zdCBjb29yZDEgPSBbcC54LCBwLnksIDEsIDFdO1xuXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZDAsIGNvb3JkMCwgdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQoY29vcmQxLCBjb29yZDEsIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTtcblxuICAgICAgICBjb25zdCB3MCA9IGNvb3JkMFszXTtcbiAgICAgICAgY29uc3QgdzEgPSBjb29yZDFbM107XG4gICAgICAgIGNvbnN0IHgwID0gY29vcmQwWzBdIC8gdzA7XG4gICAgICAgIGNvbnN0IHgxID0gY29vcmQxWzBdIC8gdzE7XG4gICAgICAgIGNvbnN0IHkwID0gY29vcmQwWzFdIC8gdzA7XG4gICAgICAgIGNvbnN0IHkxID0gY29vcmQxWzFdIC8gdzE7XG4gICAgICAgIGNvbnN0IHowID0gY29vcmQwWzJdIC8gdzA7XG4gICAgICAgIGNvbnN0IHoxID0gY29vcmQxWzJdIC8gdzE7XG5cbiAgICAgICAgY29uc3QgdCA9IHowID09PSB6MSA/IDAgOiAodGFyZ2V0WiAtIHowKSAvICh6MSAtIHowKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShcbiAgICAgICAgICAgIGludGVycG9sYXRlKHgwLCB4MSwgdCkgLyB0aGlzLndvcmxkU2l6ZSxcbiAgICAgICAgICAgIGludGVycG9sYXRlKHkwLCB5MSwgdCkgLyB0aGlzLndvcmxkU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBjb29yZGluYXRlLCByZXR1cm4gdGhlIHNjcmVlbiBwb2ludCB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0XG4gICAgICogQHBhcmFtIHtDb29yZGluYXRlfSBjb29yZFxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gc2NyZWVuIHBvaW50XG4gICAgICovXG4gICAgY29vcmRpbmF0ZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgcCA9IFtjb29yZC54ICogdGhpcy53b3JsZFNpemUsIGNvb3JkLnkgKiB0aGlzLndvcmxkU2l6ZSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwLCBwLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChwWzBdIC8gcFszXSwgcFsxXSAvIHBbM10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqL1xuICAgIGdldEJvdW5kcygpOiBMbmdMYXRCb3VuZHMge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcygpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQoMCwgMCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KHRoaXMud2lkdGgsIDApKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KDAsIHRoaXMuaGVpZ2h0KSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB0aGUgbWFwIGlzIGNvbnN0cmFpbmVkIHRvLCBvciBgbnVsbGAgaWYgbm9uZSBzZXQuXG4gICAgICovXG4gICAgZ2V0TWF4Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMubGF0UmFuZ2UgfHwgdGhpcy5sYXRSYW5nZS5sZW5ndGggIT09IDIgfHxcbiAgICAgICAgICAgICF0aGlzLmxuZ1JhbmdlIHx8IHRoaXMubG5nUmFuZ2UubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSwgdGhpcy5sYXRSYW5nZVswXV0sIFt0aGlzLmxuZ1JhbmdlWzFdLCB0aGlzLmxhdFJhbmdlWzFdXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBzZXRNYXhCb3VuZHMoYm91bmRzPzogTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBbYm91bmRzLmdldFdlc3QoKSwgYm91bmRzLmdldEVhc3QoKV07XG4gICAgICAgICAgICB0aGlzLmxhdFJhbmdlID0gW2JvdW5kcy5nZXRTb3V0aCgpLCBib3VuZHMuZ2V0Tm9ydGgoKV07XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFstdGhpcy5tYXhWYWxpZExhdGl0dWRlLCB0aGlzLm1heFZhbGlkTGF0aXR1ZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwb3NNYXRyaXggdGhhdCwgZ2l2ZW4gYSB0aWxlIGNvb3JkaW5hdGUsIHdvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdGlsZSBvbiBhIG1hcC5cbiAgICAgKiBAcGFyYW0ge1Vud3JhcHBlZFRpbGVJRH0gdW53cmFwcGVkVGlsZUlEO1xuICAgICAqL1xuICAgIGNhbGN1bGF0ZVBvc01hdHJpeCh1bndyYXBwZWRUaWxlSUQ6IFVud3JhcHBlZFRpbGVJRCwgYWxpZ25lZDogYm9vbGVhbiA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICAgICAgY29uc3QgcG9zTWF0cml4S2V5ID0gdW53cmFwcGVkVGlsZUlELmtleTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBhbGlnbmVkID8gdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlIDogdGhpcy5fcG9zTWF0cml4Q2FjaGU7XG4gICAgICAgIGlmIChjYWNoZVtwb3NNYXRyaXhLZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHVud3JhcHBlZFRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy53b3JsZFNpemUgLyB0aGlzLnpvb21TY2FsZShjYW5vbmljYWwueik7XG4gICAgICAgIGNvbnN0IHVud3JhcHBlZFggPSBjYW5vbmljYWwueCArIE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIHVud3JhcHBlZFRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShwb3NNYXRyaXgsIHBvc01hdHJpeCwgW3Vud3JhcHBlZFggKiBzY2FsZSwgY2Fub25pY2FsLnkgKiBzY2FsZSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKHBvc01hdHJpeCwgcG9zTWF0cml4LCBbc2NhbGUgLyBFWFRFTlQsIHNjYWxlIC8gRVhURU5ULCAxXSk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkocG9zTWF0cml4LCBhbGlnbmVkID8gdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA6IHRoaXMucHJvak1hdHJpeCwgcG9zTWF0cml4KTtcblxuICAgICAgICBjYWNoZVtwb3NNYXRyaXhLZXldID0gbmV3IEZsb2F0MzJBcnJheShwb3NNYXRyaXgpO1xuICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICB9XG5cbiAgICBjdXN0b21MYXllck1hdHJpeCgpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyY2F0b3JNYXRyaXguc2xpY2UoKTtcbiAgICB9XG5cbiAgICBfY29uc3RyYWluKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VudGVyIHx8ICF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCB8fCB0aGlzLl9jb25zdHJhaW5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxldCBtaW5ZID0gLTkwO1xuICAgICAgICBsZXQgbWF4WSA9IDkwO1xuICAgICAgICBsZXQgbWluWCA9IC0xODA7XG4gICAgICAgIGxldCBtYXhYID0gMTgwO1xuICAgICAgICBsZXQgc3ksIHN4LCB4MiwgeTI7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUsXG4gICAgICAgICAgICB1bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcblxuICAgICAgICBpZiAodGhpcy5sYXRSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICAgICAgbWluWSA9IG1lcmNhdG9yWWZyb21MYXQobGF0UmFuZ2VbMV0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBtYXhZID0gbWVyY2F0b3JZZnJvbUxhdChsYXRSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIHN5ID0gbWF4WSAtIG1pblkgPCBzaXplLnkgPyBzaXplLnkgLyAobWF4WSAtIG1pblkpIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxuZ1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBsbmdSYW5nZSA9IHRoaXMubG5nUmFuZ2U7XG4gICAgICAgICAgICBtaW5YID0gbWVyY2F0b3JYZnJvbUxuZyhsbmdSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIG1heFggPSBtZXJjYXRvclhmcm9tTG5nKGxuZ1JhbmdlWzFdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgc3ggPSBtYXhYIC0gbWluWCA8IHNpemUueCA/IHNpemUueCAvIChtYXhYIC0gbWluWCkgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuXG4gICAgICAgIC8vIGhvdyBtdWNoIHRoZSBtYXAgc2hvdWxkIHNjYWxlIHRvIGZpdCB0aGUgc2NyZWVuIGludG8gZ2l2ZW4gbGF0aXR1ZGUvbG9uZ2l0dWRlIHJhbmdlc1xuICAgICAgICBjb25zdCBzID0gTWF0aC5tYXgoc3ggfHwgMCwgc3kgfHwgMCk7XG5cbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy51bnByb2plY3QobmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIHN4ID8gKG1heFggKyBtaW5YKSAvIDIgOiBwb2ludC54LFxuICAgICAgICAgICAgICAgIHN5ID8gKG1heFkgKyBtaW5ZKSAvIDIgOiBwb2ludC55KSk7XG4gICAgICAgICAgICB0aGlzLnpvb20gKz0gdGhpcy5zY2FsZVpvb20ocyk7XG4gICAgICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF0UmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55LFxuICAgICAgICAgICAgICAgIGgyID0gc2l6ZS55IC8gMjtcblxuICAgICAgICAgICAgaWYgKHkgLSBoMiA8IG1pblkpIHkyID0gbWluWSArIGgyO1xuICAgICAgICAgICAgaWYgKHkgKyBoMiA+IG1heFkpIHkyID0gbWF4WSAtIGgyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG5nUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54LFxuICAgICAgICAgICAgICAgIHcyID0gc2l6ZS54IC8gMjtcblxuICAgICAgICAgICAgaWYgKHggLSB3MiA8IG1pblgpIHgyID0gbWluWCArIHcyO1xuICAgICAgICAgICAgaWYgKHggKyB3MiA+IG1heFgpIHgyID0gbWF4WCAtIHcyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFuIHRoZSBtYXAgaWYgdGhlIHNjcmVlbiBnb2VzIG9mZiB0aGUgcmFuZ2VcbiAgICAgICAgaWYgKHgyICE9PSB1bmRlZmluZWQgfHwgeTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLnVucHJvamVjdChuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgeDIgIT09IHVuZGVmaW5lZCA/IHgyIDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICB5MiAhPT0gdW5kZWZpbmVkID8geTIgOiBwb2ludC55KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NhbGNNYXRyaWNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhlaWdodCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSA9IDAuNSAvIE1hdGgudGFuKHRoaXMuX2ZvdiAvIDIpICogdGhpcy5oZWlnaHQ7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIHBvaW50IFt3aWR0aC8yLCBoZWlnaHQvMl0gdG8gdGhlXG4gICAgICAgIC8vIGNlbnRlciB0b3AgcG9pbnQgW3dpZHRoLzIsIDBdIGluIFogdW5pdHMsIHVzaW5nIHRoZSBsYXcgb2Ygc2luZXMuXG4gICAgICAgIC8vIDEgWiB1bml0IGlzIGVxdWl2YWxlbnQgdG8gMSBob3Jpem9udGFsIHB4IGF0IHRoZSBjZW50ZXIgb2YgdGhlIG1hcFxuICAgICAgICAvLyAodGhlIGRpc3RhbmNlIGJldHdlZW5bd2lkdGgvMiwgaGVpZ2h0LzJdIGFuZCBbd2lkdGgvMiArIDEsIGhlaWdodC8yXSlcbiAgICAgICAgY29uc3QgaGFsZkZvdiA9IHRoaXMuX2ZvdiAvIDI7XG4gICAgICAgIGNvbnN0IGdyb3VuZEFuZ2xlID0gTWF0aC5QSSAvIDIgKyB0aGlzLl9waXRjaDtcbiAgICAgICAgY29uc3QgdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSA9IE1hdGguc2luKGhhbGZGb3YpICogdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gTWF0aC5zaW4oY2xhbXAoTWF0aC5QSSAtIGdyb3VuZEFuZ2xlIC0gaGFsZkZvdiwgMC4wMSwgTWF0aC5QSSAtIDAuMDEpKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuICAgICAgICBjb25zdCB4ID0gcG9pbnQueCwgeSA9IHBvaW50Lnk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHogZGlzdGFuY2Ugb2YgdGhlIGZhcnRoZXN0IGZyYWdtZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgICAgICBjb25zdCBmdXJ0aGVzdERpc3RhbmNlID0gTWF0aC5jb3MoTWF0aC5QSSAvIDIgLSB0aGlzLl9waXRjaCkgKiB0b3BIYWxmU3VyZmFjZURpc3RhbmNlICsgdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgICAgICAvLyBBZGQgYSBiaXQgZXh0cmEgdG8gYXZvaWQgcHJlY2lzaW9uIHByb2JsZW1zIHdoZW4gYSBmcmFnbWVudCdzIGRpc3RhbmNlIGlzIGV4YWN0bHkgYGZ1cnRoZXN0RGlzdGFuY2VgXG4gICAgICAgIGNvbnN0IGZhclogPSBmdXJ0aGVzdERpc3RhbmNlICogMS4wMTtcblxuICAgICAgICAvLyBUaGUgbGFyZ2VyIHRoZSB2YWx1ZSBvZiBuZWFyWiBpc1xuICAgICAgICAvLyAtIHRoZSBtb3JlIGRlcHRoIHByZWNpc2lvbiBpcyBhdmFpbGFibGUgZm9yIGZlYXR1cmVzIChnb29kKVxuICAgICAgICAvLyAtIGNsaXBwaW5nIHN0YXJ0cyBhcHBlYXJpbmcgc29vbmVyIHdoZW4gdGhlIGNhbWVyYSBpcyBjbG9zZSB0byAzZCBmZWF0dXJlcyAoYmFkKVxuICAgICAgICAvL1xuICAgICAgICAvLyBTbWFsbGVyIHZhbHVlcyB3b3JrZWQgd2VsbCBmb3IgbWFwYm94LWdsLWpzIGJ1dCBkZWNrZ2wgd2FzIGVuY291bnRlcmluZyBwcmVjaXNpb24gaXNzdWVzXG4gICAgICAgIC8vIHdoZW4gcmVuZGVyaW5nIGl0J3MgbGF5ZXJzIHVzaW5nIGN1c3RvbSBsYXllcnMuIFRoaXMgdmFsdWUgd2FzIGV4cGVyaW1lbnRhbGx5IGNob3NlbiBhbmRcbiAgICAgICAgLy8gc2VlbXMgdG8gc29sdmUgei1maWdodGluZyBpc3N1ZXMgaW4gZGVja2dsIHdoaWxlIG5vdCBjbGlwcGluZyBidWlsZGluZ3MgdG9vIGNsb3NlIHRvIHRoZSBjYW1lcmEuXG4gICAgICAgIGNvbnN0IG5lYXJaID0gdGhpcy5oZWlnaHQgLyA1MDtcblxuICAgICAgICAvLyBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBsb2NhdGlvbiB0byBHTCBjb29yZGluYXRlcyAoLTEgLi4gMSlcbiAgICAgICAgbGV0IG0gPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZShtLCB0aGlzLl9mb3YsIHRoaXMud2lkdGggLyB0aGlzLmhlaWdodCwgbmVhclosIGZhclopO1xuXG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzEsIC0xLCAxXSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFswLCAwLCAtdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlXSk7XG4gICAgICAgIG1hdDQucm90YXRlWChtLCBtLCB0aGlzLl9waXRjaCk7XG4gICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0aGlzLmFuZ2xlKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWy14LCAteSwgMF0pO1xuXG4gICAgICAgIC8vIFRoZSBtZXJjYXRvck1hdHJpeCBjYW4gYmUgdXNlZCB0byB0cmFuc2Zvcm0gcG9pbnRzIGZyb20gbWVyY2F0b3IgY29vcmRpbmF0ZXNcbiAgICAgICAgLy8gKFswLCAwXSBudywgWzEsIDFdIHNlKSB0byBHTCBjb29yZGluYXRlcy5cbiAgICAgICAgdGhpcy5tZXJjYXRvck1hdHJpeCA9IG1hdDQuc2NhbGUoW10sIG0sIFt0aGlzLndvcmxkU2l6ZSwgdGhpcy53b3JsZFNpemUsIHRoaXMud29ybGRTaXplXSk7XG5cbiAgICAgICAgLy8gc2NhbGUgdmVydGljYWxseSB0byBtZXRlcnMgcGVyIHBpeGVsIChpbnZlcnNlIG9mIGdyb3VuZCByZXNvbHV0aW9uKTpcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgMSwgbWVyY2F0b3JaZnJvbUFsdGl0dWRlKDEsIHRoaXMuY2VudGVyLmxhdCkgKiB0aGlzLndvcmxkU2l6ZSwgMV0pO1xuXG4gICAgICAgIHRoaXMucHJvak1hdHJpeCA9IG07XG4gICAgICAgIHRoaXMuaW52UHJvak1hdHJpeCA9IG1hdDQuaW52ZXJ0KFtdLCB0aGlzLnByb2pNYXRyaXgpO1xuXG4gICAgICAgIC8vIE1ha2UgYSBzZWNvbmQgcHJvamVjdGlvbiBtYXRyaXggdGhhdCBpcyBhbGlnbmVkIHRvIGEgcGl4ZWwgZ3JpZCBmb3IgcmVuZGVyaW5nIHJhc3RlciB0aWxlcy5cbiAgICAgICAgLy8gV2UncmUgcm91bmRpbmcgdGhlIChmbG9hdGluZyBwb2ludCkgeC95IHZhbHVlcyB0byBhY2hpZXZlIHRvIGF2b2lkIHJlbmRlcmluZyByYXN0ZXIgaW1hZ2VzIHRvIGZyYWN0aW9uYWxcbiAgICAgICAgLy8gY29vcmRpbmF0ZXMuIEFkZGl0aW9uYWxseSwgd2UgYWRqdXN0IGJ5IGhhbGYgYSBwaXhlbCBpbiBlaXRoZXIgZGlyZWN0aW9uIGluIGNhc2UgdGhhdCB2aWV3cG9ydCBkaW1lbnNpb25cbiAgICAgICAgLy8gaXMgYW4gb2RkIGludGVnZXIgdG8gcHJlc2VydmUgcmVuZGVyaW5nIHRvIHRoZSBwaXhlbCBncmlkLiBXZSdyZSByb3RhdGluZyB0aGlzIHNoaWZ0IGJhc2VkIG9uIHRoZSBhbmdsZVxuICAgICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtYXRpb24gc28gdGhhdCAww4LCsCwgOTDDgsKwLCAxODDDgsKwLCBhbmQgMjcww4LCsCByYXN0ZXJzIGFyZSBjcmlzcCwgYW5kIGFkanVzdCB0aGUgc2hpZnQgc28gdGhhdFxuICAgICAgICAvLyBpdCBpcyBhbHdheXMgPD0gMC41IHBpeGVscy5cbiAgICAgICAgY29uc3QgeFNoaWZ0ID0gKHRoaXMud2lkdGggJSAyKSAvIDIsIHlTaGlmdCA9ICh0aGlzLmhlaWdodCAlIDIpIC8gMixcbiAgICAgICAgICAgIGFuZ2xlQ29zID0gTWF0aC5jb3ModGhpcy5hbmdsZSksIGFuZ2xlU2luID0gTWF0aC5zaW4odGhpcy5hbmdsZSksXG4gICAgICAgICAgICBkeCA9IHggLSBNYXRoLnJvdW5kKHgpICsgYW5nbGVDb3MgKiB4U2hpZnQgKyBhbmdsZVNpbiAqIHlTaGlmdCxcbiAgICAgICAgICAgIGR5ID0geSAtIE1hdGgucm91bmQoeSkgKyBhbmdsZUNvcyAqIHlTaGlmdCArIGFuZ2xlU2luICogeFNoaWZ0O1xuICAgICAgICBjb25zdCBhbGlnbmVkTSA9IG5ldyBGbG9hdDY0QXJyYXkobSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKGFsaWduZWRNLCBhbGlnbmVkTSwgWyBkeCA+IDAuNSA/IGR4IC0gMSA6IGR4LCBkeSA+IDAuNSA/IGR5IC0gMSA6IGR5LCAwIF0pO1xuICAgICAgICB0aGlzLmFsaWduZWRQcm9qTWF0cml4ID0gYWxpZ25lZE07XG5cbiAgICAgICAgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgW3RoaXMud2lkdGggLyAyLCAtdGhpcy5oZWlnaHQgLyAyLCAxXSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFsxLCAtMSwgMF0pO1xuICAgICAgICB0aGlzLmxhYmVsUGxhbmVNYXRyaXggPSBtO1xuXG4gICAgICAgIG0gPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAtMSwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLTEsIC0xLCAwXSk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzIgLyB0aGlzLndpZHRoLCAyIC8gdGhpcy5oZWlnaHQsIDFdKTtcbiAgICAgICAgdGhpcy5nbENvb3JkTWF0cml4ID0gbTtcblxuICAgICAgICAvLyBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBsb2NhdGlvbiB0byBzY3JlZW4gY29vcmRpbmF0ZXNcbiAgICAgICAgdGhpcy5waXhlbE1hdHJpeCA9IG1hdDQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksIHRoaXMubGFiZWxQbGFuZU1hdHJpeCwgdGhpcy5wcm9qTWF0cml4KTtcblxuICAgICAgICAvLyBpbnZlcnNlIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIHNjcmVlbiBjb29yZGluYWVzIHRvIGxvY2F0aW9uXG4gICAgICAgIG0gPSBtYXQ0LmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIGlmICghbSkgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGludmVydCBtYXRyaXhcIik7XG4gICAgICAgIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlID0gbTtcblxuICAgICAgICB0aGlzLl9wb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBtYXhQaXRjaFNjYWxlRmFjdG9yKCkge1xuICAgICAgICAvLyBjYWxjTWF0cmljZXMgaGFzbid0IHJ1biB5ZXRcbiAgICAgICAgaWYgKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSkgcmV0dXJuIDE7XG5cbiAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBwID0gW2Nvb3JkLnggKiB0aGlzLndvcmxkU2l6ZSwgY29vcmQueSAqIHRoaXMud29ybGRTaXplLCAwLCAxXTtcbiAgICAgICAgY29uc3QgdG9wUG9pbnQgPSB2ZWM0LnRyYW5zZm9ybU1hdDQocCwgcCwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIHJldHVybiB0b3BQb2ludFszXSAvIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBjYW1lcmEgbG9va3MgYXQgdGhlIG1hcCBmcm9tIGEgM0QgKGxuZywgbGF0LCBhbHRpdHVkZSkgbG9jYXRpb24uIExldCdzIHVzZSBgY2FtZXJhTG9jYXRpb25gXG4gICAgICogYXMgdGhlIG5hbWUgZm9yIHRoZSBsb2NhdGlvbiB1bmRlciB0aGUgY2FtZXJhIGFuZCBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGggKGxuZywgbGF0LCAwKS5cbiAgICAgKiBgY2FtZXJhUG9pbnRgIGlzIHRoZSBwcm9qZWN0ZWQgcG9zaXRpb24gb2YgdGhlIGBjYW1lcmFMb2NhdGlvbmAuXG4gICAgICpcbiAgICAgKiBUaGlzIHBvaW50IGlzIHVzZWZ1bCB0byB1cyBiZWNhdXNlIG9ubHkgZmlsbC1leHRydXNpb25zIHRoYXQgYXJlIGJldHdlZW4gYGNhbWVyYVBvaW50YCBhbmRcbiAgICAgKiB0aGUgcXVlcnkgcG9pbnQgb24gdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoIGNhbiBleHRlbmQgYW5kIGludGVyc2VjdCB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBXaGVuIHRoZSBtYXAgaXMgbm90IHBpdGNoZWQgdGhlIGBjYW1lcmFQb2ludGAgaXMgZXF1aXZhbGVudCB0byB0aGUgY2VudGVyIG9mIHRoZSBtYXAgYmVjYXVzZVxuICAgICAqIHRoZSBjYW1lcmEgaXMgcmlnaHQgYWJvdmUgdGhlIGNlbnRlciBvZiB0aGUgbWFwLlxuICAgICAqL1xuICAgIGdldENhbWVyYVBvaW50KCkge1xuICAgICAgICBjb25zdCBwaXRjaCA9IHRoaXMuX3BpdGNoO1xuICAgICAgICBjb25zdCB5T2Zmc2V0ID0gTWF0aC50YW4ocGl0Y2gpICogKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSB8fCAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyBQb2ludCgwLCB5T2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBXaGVuIHRoZSBtYXAgaXMgcGl0Y2hlZCwgc29tZSBvZiB0aGUgM0QgZmVhdHVyZXMgdGhhdCBpbnRlcnNlY3QgYSBxdWVyeSB3aWxsIG5vdCBpbnRlcnNlY3RcbiAgICAgKiB0aGUgcXVlcnkgYXQgdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoLiBJbnN0ZWFkIHRoZSBmZWF0dXJlIG1heSBiZSBjbG9zZXIgYW5kIG9ubHkgaW50ZXJzZWN0XG4gICAgICogdGhlIHF1ZXJ5IGJlY2F1c2UgaXQgZXh0cnVkZXMgaW50byB0aGUgYWlyLlxuICAgICAqXG4gICAgICogVGhpcyByZXR1cm5zIGEgZ2VvbWV0cnkgdGhhdCBpbmNsdWRlcyBhbGwgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IGFzIHdlbGwgYXMgYWxsIHBvc3NpYmxlIGFyZXMgb2YgdGhlXG4gICAgICogc2NyZWVuIHdoZXJlIHRoZSAqYmFzZSogb2YgYSB2aXNpYmxlIGV4dHJ1c2lvbiBjb3VsZCBiZS5cbiAgICAgKiAgLSBGb3IgcG9pbnQgcXVlcmllcywgdGhlIGxpbmUgZnJvbSB0aGUgcXVlcnkgcG9pbnQgdG8gdGhlIFwiY2FtZXJhIHBvaW50XCJcbiAgICAgKiAgLSBGb3Igb3RoZXIgZ2VvbWV0cmllcywgdGhlIGVudmVsb3BlIG9mIHRoZSBxdWVyeSBnZW9tZXRyeSBhbmQgdGhlIFwiY2FtZXJhIHBvaW50XCJcbiAgICAgKi9cbiAgICBnZXRDYW1lcmFRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pik6IEFycmF5PFBvaW50PiB7XG4gICAgICAgIGNvbnN0IGMgPSB0aGlzLmdldENhbWVyYVBvaW50KCk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW3F1ZXJ5R2VvbWV0cnlbMF0sIGNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1pblggPSBjLng7XG4gICAgICAgICAgICBsZXQgbWluWSA9IGMueTtcbiAgICAgICAgICAgIGxldCBtYXhYID0gYy54O1xuICAgICAgICAgICAgbGV0IG1heFkgPSBjLnk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcXVlcnlHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwLnkpO1xuICAgICAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwLngpO1xuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWluWSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1heFgsIG1pblkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtYXhYLCBtYXhZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWF4WSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1pblkpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2Zvcm07XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuLyoqXG4gKiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGF0IG1vc3QgZXZlcnkgYHBlcmlvZGAgbWlsbGlzZWNvbmRzLlxuIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXQgbW9zdCBldmVyeSBwZXJpb2QgbWlsbGlzZWNvbmRzLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyb3R0bGUoZm46ICgpID0+IHZvaWQsIHRpbWU6IG51bWJlcik6ICgpID0+ID9UaW1lb3V0SUQge1xuICAgIGxldCBwZW5kaW5nID0gZmFsc2U7XG4gICAgbGV0IHRpbWVySWQ6ID9UaW1lb3V0SUQgPSBudWxsO1xuXG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgICAgICBpZiAocGVuZGluZykge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KGxhdGVyLCB0aW1lKTtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aW1lcklkKSB7XG4gICAgICAgICAgICBsYXRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aW1lcklkO1xuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICcuLi91dGlsL3Rocm90dGxlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcblxuLypcbiAqIEFkZHMgdGhlIG1hcCdzIHBvc2l0aW9uIHRvIGl0cyBwYWdlJ3MgbG9jYXRpb24gaGFzaC5cbiAqIFBhc3NlZCBhcyBhbiBvcHRpb24gdG8gdGhlIG1hcCBvYmplY3QuXG4gKlxuICogQHJldHVybnMge0hhc2h9IGB0aGlzYFxuICovXG5jbGFzcyBIYXNoIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX3VwZGF0ZUhhc2g6ICgpID0+ID9UaW1lb3V0SUQ7XG4gICAgX2hhc2hOYW1lOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoaGFzaE5hbWU6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faGFzaE5hbWUgPSBoYXNoTmFtZSAmJiBlbmNvZGVVUklDb21wb25lbnQoaGFzaE5hbWUpO1xuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfZ2V0Q3VycmVudEhhc2gnLFxuICAgICAgICAgICAgJ19vbkhhc2hDaGFuZ2UnLFxuICAgICAgICAgICAgJ191cGRhdGVIYXNoJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXNuJ3QgYWxsb3cgdXBkYXRpbmcgdGhlIGhhc2ggbW9yZSB0aGFuIDEwMCB0aW1lcyBwZXIgMzAgc2Vjb25kcy5cbiAgICAgICAgdGhpcy5fdXBkYXRlSGFzaCA9IHRocm90dGxlKHRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLCAzMCAqIDEwMDAgLyAxMDApO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTWFwIGVsZW1lbnQgdG8gbGlzdGVuIGZvciBjb29yZGluYXRlIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXBcbiAgICAgKiBAcmV0dXJucyB7SGFzaH0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVIYXNoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZW1vdmVzIGhhc2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSGFzaENoYW5nZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlSGFzaCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldEhhc2hTdHJpbmcobWFwRmVlZGJhY2s/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKSxcbiAgICAgICAgICAgIHpvb20gPSBNYXRoLnJvdW5kKHRoaXMuX21hcC5nZXRab29tKCkgKiAxMDApIC8gMTAwLFxuICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9tIGVxdWF0aW9uOiA1MTJweCAqIDJeeiAvIDM2MCAvIDEwXmQgPCAwLjVweFxuICAgICAgICAgICAgcHJlY2lzaW9uID0gTWF0aC5jZWlsKCh6b29tICogTWF0aC5MTjIgKyBNYXRoLmxvZyg1MTIgLyAzNjAgLyAwLjUpKSAvIE1hdGguTE4xMCksXG4gICAgICAgICAgICBtID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiksXG4gICAgICAgICAgICBsbmcgPSBNYXRoLnJvdW5kKGNlbnRlci5sbmcgKiBtKSAvIG0sXG4gICAgICAgICAgICBsYXQgPSBNYXRoLnJvdW5kKGNlbnRlci5sYXQgKiBtKSAvIG0sXG4gICAgICAgICAgICBiZWFyaW5nID0gdGhpcy5fbWFwLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHBpdGNoID0gdGhpcy5fbWFwLmdldFBpdGNoKCk7XG4gICAgICAgIGxldCBoYXNoID0gJyc7XG4gICAgICAgIGlmIChtYXBGZWVkYmFjaykge1xuICAgICAgICAgICAgLy8gbmV3IG1hcCBmZWVkYmFjayBzaXRlIGhhcyBzb21lIGNvbnN0cmFpbnRzIHRoYXQgZG9uJ3QgYWxsb3dcbiAgICAgICAgICAgIC8vIHVzIHRvIHVzZSB0aGUgc2FtZSBoYXNoIGZvcm1hdCBhcyB3ZSBkbyBmb3IgdGhlIE1hcCBoYXNoIG9wdGlvbi5cbiAgICAgICAgICAgIGhhc2ggKz0gYC8ke2xuZ30vJHtsYXR9LyR7em9vbX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFzaCArPSBgJHt6b29tfS8ke2xhdH0vJHtsbmd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWFyaW5nIHx8IHBpdGNoKSBoYXNoICs9IChgLyR7TWF0aC5yb3VuZChiZWFyaW5nICogMTApIC8gMTB9YCk7XG4gICAgICAgIGlmIChwaXRjaCkgaGFzaCArPSAoYC8ke01hdGgucm91bmQocGl0Y2gpfWApO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNoTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzaE5hbWUgPSB0aGlzLl9oYXNoTmFtZTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgnJicpLm1hcChwYXJ0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwYXJ0LnNwbGl0KCc9JylbMF07XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gaGFzaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fT0ke2hhc2h9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICB9KS5maWx0ZXIoYSA9PiBhKTtcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKGAke2hhc2hOYW1lfT0ke2hhc2h9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMke3BhcnRzLmpvaW4oJyYnKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAjJHtoYXNofWA7XG4gICAgfVxuXG4gICAgX2dldEN1cnJlbnRIYXNoKCkge1xuICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaGFzaCBmcm9tIGxvY2F0aW9uLCBzdHJpcHBlZCBmcm9tIGl0cyBudW1iZXIgc2lnblxuICAgICAgICBjb25zdCBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTtcbiAgICAgICAgaWYgKHRoaXMuX2hhc2hOYW1lKSB7XG4gICAgICAgICAgICAvLyBTcGxpdCB0aGUgcGFyYW1ldGVyLXN0eWxlZCBoYXNoIGludG8gcGFydHMgYW5kIGZpbmQgdGhlIHZhbHVlIHdlIG5lZWRcbiAgICAgICAgICAgIGxldCBrZXl2YWw7XG4gICAgICAgICAgICBoYXNoLnNwbGl0KCcmJykubWFwKFxuICAgICAgICAgICAgICAgIHBhcnQgPT4gcGFydC5zcGxpdCgnPScpXG4gICAgICAgICAgICApLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRbMF0gPT09IHRoaXMuX2hhc2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXZhbCA9IHBhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gKGtleXZhbCA/IGtleXZhbFsxXSB8fCAnJyA6ICcnKS5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNoLnNwbGl0KCcvJyk7XG4gICAgfVxuXG4gICAgX29uSGFzaENoYW5nZSgpIHtcbiAgICAgICAgY29uc3QgbG9jID0gdGhpcy5fZ2V0Q3VycmVudEhhc2goKTtcbiAgICAgICAgaWYgKGxvYy5sZW5ndGggPj0gMyAmJiAhbG9jLnNvbWUodiA9PiBpc05hTih2KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlYXJpbmcgPSB0aGlzLl9tYXAuZHJhZ1JvdGF0ZS5pc0VuYWJsZWQoKSAmJiB0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzRW5hYmxlZCgpID8gKyhsb2NbM10gfHwgMCkgOiB0aGlzLl9tYXAuZ2V0QmVhcmluZygpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLmp1bXBUbyh7XG4gICAgICAgICAgICAgICAgY2VudGVyOiBbK2xvY1syXSwgK2xvY1sxXV0sXG4gICAgICAgICAgICAgICAgem9vbTogK2xvY1swXSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nLFxuICAgICAgICAgICAgICAgIHBpdGNoOiArKGxvY1s0XSB8fCAwKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUhhc2hVbnRocm90dGxlZCgpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0SGFzaFN0cmluZygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCAnJywgaGFzaCk7XG4gICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICAgIC8vIElFMTEgZG9lcyBub3QgYWxsb3cgdGhpcyBpZiB0aGUgcGFnZSBpcyB3aXRoaW4gYW4gaWZyYW1lIGNyZWF0ZWRcbiAgICAgICAgICAgIC8vIHdpdGggaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUoLi4uKS5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NDEwXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGFzaDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuXG4vKipcbiAqIGBNYXBNb3VzZUV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgbW91c2UtcmVsYXRlZCBtYXAgZXZlbnRzLlxuICogQGV4dGVuZHMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcE1vdXNlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHR5cGUuXG4gICAgICovXG4gICAgdHlwZTogJ21vdXNlZG93bidcbiAgICAgICAgfCAnbW91c2V1cCdcbiAgICAgICAgfCAnY2xpY2snXG4gICAgICAgIHwgJ2RibGNsaWNrJ1xuICAgICAgICB8ICdtb3VzZW1vdmUnXG4gICAgICAgIHwgJ21vdXNlb3ZlcidcbiAgICAgICAgfCAnbW91c2VlbnRlcidcbiAgICAgICAgfCAnbW91c2VsZWF2ZSdcbiAgICAgICAgfCAnbW91c2VvdXQnXG4gICAgICAgIHwgJ2NvbnRleHRtZW51JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IE1vdXNlRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGl4ZWwgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIGN1cnNvciwgcmVsYXRpdmUgdG8gdGhlIG1hcCBhbmQgbWVhc3VyZWQgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyLlxuICAgICAqL1xuICAgIHBvaW50OiBQb2ludDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBnZW9ncmFwaGljIGxvY2F0aW9uIG9uIHRoZSBtYXAgb2YgdGhlIG1vdXNlIGN1cnNvci5cbiAgICAgKi9cbiAgICBsbmdMYXQ6IExuZ0xhdDtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHN1YnNlcXVlbnQgZGVmYXVsdCBwcm9jZXNzaW5nIG9mIHRoZSBldmVudCBieSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHByZXZlbnQgdGhlIGZvbGxvd2luZyBkZWZhdWx0IG1hcCBiZWhhdmlvcnM6XG4gICAgICpcbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERyYWdQYW5IYW5kbGVyfVxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBCb3hab29tSGFuZGxlcn1cbiAgICAgKiAgICogT24gYGRibGNsaWNrYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn1cbiAgICAgKlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IERPTS5tb3VzZVBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwgZXh0ZW5kKHtwb2ludCwgbG5nTGF0LCBvcmlnaW5hbEV2ZW50fSwgZGF0YSkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbWFwO1xuICAgIH1cbn1cblxuLyoqXG4gKiBgTWFwVG91Y2hFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIHRvdWNoLXJlbGF0ZWQgbWFwIGV2ZW50cy5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBUb3VjaEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICd0b3VjaHN0YXJ0J1xuICAgICAgICB8ICd0b3VjaGVuZCdcbiAgICAgICAgfCAndG91Y2hjYW5jZWwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBNYXBgIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICB0YXJnZXQ6IE1hcDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZXZlbnQgd2hpY2ggY2F1c2VkIHRoZSBtYXAgZXZlbnQuXG4gICAgICovXG4gICAgb3JpZ2luYWxFdmVudDogVG91Y2hFdmVudDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBnZW9ncmFwaGljIGxvY2F0aW9uIG9uIHRoZSBtYXAgb2YgdGhlIGNlbnRlciBvZiB0aGUgdG91Y2ggZXZlbnQgcG9pbnRzLlxuICAgICAqL1xuICAgIGxuZ0xhdDogTG5nTGF0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cywgcmVsYXRpdmUgdG8gdGhlIG1hcCBhbmQgbWVhc3VyZWQgZnJvbSB0aGUgdG9wIGxlZnRcbiAgICAgKiBjb3JuZXIuXG4gICAgICovXG4gICAgcG9pbnQ6IFBvaW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHBpeGVsIGNvb3JkaW5hdGVzIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgICAqIFt0b3VjaCBldmVudCdzIGB0b3VjaGVzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoRXZlbnQvdG91Y2hlcykgcHJvcGVydHkuXG4gICAgICovXG4gICAgcG9pbnRzOiBBcnJheTxQb2ludD47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9ucyBvbiB0aGUgbWFwIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgICAqIFt0b3VjaCBldmVudCdzIGB0b3VjaGVzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoRXZlbnQvdG91Y2hlcykgcHJvcGVydHkuXG4gICAgICovXG4gICAgbG5nTGF0czogQXJyYXk8TG5nTGF0PjtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHN1YnNlcXVlbnQgZGVmYXVsdCBwcm9jZXNzaW5nIG9mIHRoZSBldmVudCBieSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHByZXZlbnQgdGhlIGZvbGxvd2luZyBkZWZhdWx0IG1hcCBiZWhhdmlvcnM6XG4gICAgICpcbiAgICAgKiAgICogT24gYHRvdWNoc3RhcnRgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUGFuSGFuZGxlcn1cbiAgICAgKiAgICogT24gYHRvdWNoc3RhcnRgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyfVxuICAgICAqXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBgcHJldmVudERlZmF1bHRgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuXG4gICAgX2RlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgbWFwOiBNYXAsIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gRE9NLnRvdWNoUG9zKG1hcC5nZXRDYW52YXNDb250YWluZXIoKSwgb3JpZ2luYWxFdmVudCk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdHMgPSBwb2ludHMubWFwKCh0KSA9PiBtYXAudW5wcm9qZWN0KHQpKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHMucmVkdWNlKChwcmV2LCBjdXJyLCBpLCBhcnIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2LmFkZChjdXJyLmRpdihhcnIubGVuZ3RoKSk7XG4gICAgICAgIH0sIG5ldyBQb2ludCgwLCAwKSk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IG1hcC51bnByb2plY3QocG9pbnQpO1xuICAgICAgICBzdXBlcih0eXBlLCB7cG9pbnRzLCBwb2ludCwgbG5nTGF0cywgbG5nTGF0LCBvcmlnaW5hbEV2ZW50fSk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogYE1hcFdoZWVsRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciB0aGUgYHdoZWVsYCBtYXAgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICovXG5leHBvcnQgY2xhc3MgTWFwV2hlZWxFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiAnd2hlZWwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBNYXBgIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICB0YXJnZXQ6IE1hcDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZXZlbnQgd2hpY2ggY2F1c2VkIHRoZSBtYXAgZXZlbnQuXG4gICAgICovXG4gICAgb3JpZ2luYWxFdmVudDogV2hlZWxFdmVudDtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHN1YnNlcXVlbnQgZGVmYXVsdCBwcm9jZXNzaW5nIG9mIHRoZSBldmVudCBieSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHByZXZlbnQgdGhlIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9LlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIHN1cGVyKHR5cGUsIHtvcmlnaW5hbEV2ZW50fSk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBgTWFwQm94Wm9vbUV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgYm94em9vbS1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBgb3JpZ2luYWxFdmVudGAgY2FuIGJlIGEge0BsaW5rIE1hcC5ldmVudDpjbGlja30gd2hlbiB0aGUgem9vbSBpcyB0cmlnZ2VyZWQgYnkgYSBVSSBldmVudC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXBCb3hab29tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7TW91c2VFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5leHBvcnQgdHlwZSBNYXBCb3hab29tRXZlbnQgPSB7XG4gICAgdHlwZTogJ2JveHpvb21zdGFydCdcbiAgICAgICAgfCAnYm94em9vbWVuZCdcbiAgICAgICAgfCAnYm94em9vbWNhbmNlbCcsXG4gICAgbWFwOiBNYXAsXG4gICAgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudFxufTtcblxuLyoqXG4gKiBBIGBNYXBEYXRhRXZlbnRgIG9iamVjdCBpcyBlbWl0dGVkIHdpdGggdGhlIHtAbGluayBNYXAuZXZlbnQ6ZGF0YX1cbiAqIGFuZCB7QGxpbmsgTWFwLmV2ZW50OmRhdGFsb2FkaW5nfSBldmVudHMuIFBvc3NpYmxlIHZhbHVlcyBmb3JcbiAqIGBkYXRhVHlwZWBzIGFyZTpcbiAqXG4gKiAtIGAnc291cmNlJ2A6IFRoZSBub24tdGlsZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbnkgc291cmNlXG4gKiAtIGAnc3R5bGUnYDogVGhlIFtzdHlsZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pIHVzZWQgYnkgdGhlIG1hcFxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hcERhdGFFdmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0YVR5cGUgVGhlIHR5cGUgb2YgZGF0YSB0aGF0IGhhcyBjaGFuZ2VkLiBPbmUgb2YgYCdzb3VyY2UnYCwgYCdzdHlsZSdgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNTb3VyY2VMb2FkZWRdIFRydWUgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kIHRoZSBzb3VyY2UgaGFzIG5vIG91dHN0YW5kaW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3NvdXJjZV0gVGhlIFtzdHlsZSBzcGVjIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMpIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzb3VyY2VEYXRhVHlwZV0gSW5jbHVkZWQgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kIHRoZSBldmVudCBzaWduYWxzXG4gKiB0aGF0IGludGVybmFsIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgb3IgY2hhbmdlZC4gUG9zc2libGUgdmFsdWVzIGFyZSBgbWV0YWRhdGFgIGFuZCBgY29udGVudGAuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3RpbGVdIFRoZSB0aWxlIGJlaW5nIGxvYWRlZCBvciBjaGFuZ2VkLCBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmRcbiAqIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIGxvYWRpbmcgb2YgYSB0aWxlLlxuICogQHByb3BlcnR5IHtDb29yZGluYXRlfSBbY29vcmRdIFRoZSBjb29yZGluYXRlIG9mIHRoZSB0aWxlIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZFxuICogdGhlIGV2ZW50IGlzIHJlbGF0ZWQgdG8gbG9hZGluZyBvZiBhIHRpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIE1hcERhdGFFdmVudCA9IHtcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YVR5cGU6IHN0cmluZ1xufTtcblxuZXhwb3J0IHR5cGUgTWFwQ29udGV4dEV2ZW50ID0ge1xuICAgIHR5cGU6ICd3ZWJnbGNvbnRleHRsb3N0JyB8ICd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsXG4gICAgb3JpZ2luYWxFdmVudDogV2ViR0xDb250ZXh0RXZlbnRcbn1cblxuZXhwb3J0IHR5cGUgTWFwRXZlbnQgPVxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgcHJlc3NlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWRvd25cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWRvd24nXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHJlbGVhc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNldXBcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKi9cbiAgICB8ICdtb3VzZXVwJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBtb3ZlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW92ZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbR2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21vdXNlLXBvc2l0aW9uLylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqL1xuICAgIHwgJ21vdXNlb3ZlcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgbW92ZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vtb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqL1xuICAgIHwgJ21vdXNlbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQgYXQgdGhlIHNhbWUgcG9pbnQgb24gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBjbGlja1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtNZWFzdXJlIGRpc3RhbmNlc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tZWFzdXJlLylcbiAgICAgKiBAc2VlIFtDZW50ZXIgdGhlIG1hcCBvbiBhIGNsaWNrZWQgc3ltYm9sXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NlbnRlci1vbi1zeW1ib2wvKVxuICAgICAqL1xuICAgIHwgJ2NsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBjbGlja2VkIHR3aWNlIGF0IHRoZSBzYW1lIHBvaW50IG9uIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGJsY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnZGJsY2xpY2snXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGVudGVycyBhIHZpc2libGUgcG9ydGlvbiBvZiBhIHNwZWNpZmllZCBsYXllciBmcm9tXG4gICAgICogb3V0c2lkZSB0aGF0IGxheWVyIG9yIG91dHNpZGUgdGhlIG1hcCBjYW52YXMuIFRoaXMgZXZlbnQgY2FuIG9ubHkgYmUgbGlzdGVuZWQgZm9yIHZpYSB0aGUgdGhyZWUtYXJndW1lbnRcbiAgICAgKiB2ZXJzaW9uIG9mIHtAbGluayBNYXAjb259LCB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZGVzaXJlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWVudGVyXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdXNlZW50ZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGxlYXZlcyBhIHZpc2libGUgcG9ydGlvbiBvZiBhIHNwZWNpZmllZCBsYXllciwgb3IgbGVhdmVzXG4gICAgICogdGhlIG1hcCBjYW52YXMuIFRoaXMgZXZlbnQgY2FuIG9ubHkgYmUgbGlzdGVuZWQgZm9yIHZpYSB0aGUgdGhyZWUtYXJndW1lbnQgdmVyc2lvbiBvZiB7QGxpbmsgTWFwI29ufSxcbiAgICAgKiB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZGVzaXJlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWxlYXZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqL1xuICAgIHwgJ21vdXNlbGVhdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnQgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGxlYXZlcyB0aGUgbWFwJ3MgY2FudmFzLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlb3V0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdXNlb3V0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgcmlnaHQgYnV0dG9uIG9mIHRoZSBtb3VzZSBpcyBjbGlja2VkIG9yIHRoZSBjb250ZXh0IG1lbnUga2V5IGlzIHByZXNzZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29udGV4dG1lbnVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnY29udGV4dG1lbnUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B3aGVlbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy93aGVlbCkgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IHdoZWVsXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwV2hlZWxFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3doZWVsJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgdG91Y2hzdGFydGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy90b3VjaHN0YXJ0KSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd0b3VjaHN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgdG91Y2hlbmRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2hlbmQpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB0b3VjaGVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd0b3VjaGVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNobW92ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy90b3VjaG1vdmUpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB0b3VjaG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2htb3ZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgdG91Y2hjYW5jZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2hjYW5jZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB0b3VjaGNhbmNlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd0b3VjaGNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIHRoZSBtYXAgYmVnaW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3tvcmlnaW5hbEV2ZW50OiBEcmFnRXZlbnR9fSBkYXRhXG4gICAgICovXG4gICAgfCAnbW92ZXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbiBmcm9tIG9uZSB2aWV3IHRvXG4gICAgICogYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYWZ0ZXIgdGhlIG1hcCBjb21wbGV0ZXMgYSB0cmFuc2l0aW9uIGZyb20gb25lXG4gICAgICogdmlldyB0byBhbm90aGVyLCBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2p1bXBUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW92ZWVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3tvcmlnaW5hbEV2ZW50OiBEcmFnRXZlbnR9fSBkYXRhXG4gICAgICogQHNlZSBbUGxheSBtYXAgbG9jYXRpb25zIGFzIGEgc2xpZGVzaG93XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BsYXliYWNrLWxvY2F0aW9ucy8pXG4gICAgICogQHNlZSBbRmlsdGVyIGZlYXR1cmVzIHdpdGhpbiBtYXAgdmlld10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItZmVhdHVyZXMtd2l0aGluLW1hcC12aWV3LylcbiAgICAgKi9cbiAgICB8ICdtb3ZlZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBzdGFydHMuIFNlZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGRyYWdzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3tvcmlnaW5hbEV2ZW50OiBEcmFnRXZlbnR9fSBkYXRhXG4gICAgICovXG4gICAgfCAnZHJhZ3N0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uIFNlZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGRyYWdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RyYWcnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGVuZHMuIFNlZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RyYWdlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSB0aGUgbWFwIGJlZ2lucyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21zdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnem9vbXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbiBmcm9tIG9uZSB6b29tIGxldmVsIHRvIGFub3RoZXIsXG4gICAgICogYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgem9vbVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbVXBkYXRlIGEgY2hvcm9wbGV0aCBsYXllciBieSB6b29tIGxldmVsXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VwZGF0aW5nLWNob3JvcGxldGgvKVxuICAgICAqL1xuICAgIHwgJ3pvb20nXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSB6b29tIGxldmVsIHRvIGFub3RoZXIsXG4gICAgICogYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgem9vbWVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnem9vbWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAncm90YXRlc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdyb3RhdGUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGVuZHMuIFNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJvdGF0ZWVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAncm90YXRlZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBiZWdpbnMgYSBjaGFuZ2UgYXNcbiAgICAgKiB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfSAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcEV2ZW50RGF0YX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3BpdGNoc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGNoYW5nZXMgYXMuXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgZmluaXNoZXMgY2hhbmdpbmcgYXNcbiAgICAgKiB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwaXRjaGVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcEV2ZW50RGF0YX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3BpdGNoZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBzdGFydHMuIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21zdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcEJveFpvb21FdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2JveHpvb21zdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gZW5kcy4gIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge01hcEJveFpvb21FdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2JveHpvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMgYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24sIG9yIHdoZW4gdGhlIGJvdW5kaW5nIGJveCBkb2VzIG5vdCBtZWV0IHRoZSBtaW5pbXVtIHNpemUgdGhyZXNob2xkLlxuICAgICAqIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21jYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tY2FuY2VsJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZXNpemVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHJlc2l6ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICdyZXNpemUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIGxvc3QuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgd2ViZ2xjb250ZXh0bG9zdFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRsb3N0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyByZXN0b3JlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3ZWJnbGNvbnRleHRyZXN0b3JlZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRyZXN0b3JlZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBuZWNlc3NhcnkgcmVzb3VyY2VzIGhhdmUgYmVlbiBkb3dubG9hZGVkXG4gICAgICogYW5kIHRoZSBmaXJzdCB2aXN1YWxseSBjb21wbGV0ZSByZW5kZXJpbmcgb2YgdGhlIG1hcCBoYXMgb2NjdXJyZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBzZWUgW0RyYXcgR2VvSlNPTiBwb2ludHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2VvanNvbi1tYXJrZXJzLylcbiAgICAgKiBAc2VlIFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2xpdmUtZ2VvanNvbi8pXG4gICAgICogQHNlZSBbQW5pbWF0ZSBhIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FuaW1hdGUtcG9pbnQtYWxvbmctbGluZS8pXG4gICAgICovXG4gICAgfCAnbG9hZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtYXAgaXMgZHJhd24gdG8gdGhlIHNjcmVlbiwgYXMgdGhlIHJlc3VsdCBvZlxuICAgICAqXG4gICAgICogLSBhIGNoYW5nZSB0byB0aGUgbWFwJ3MgcG9zaXRpb24sIHpvb20sIHBpdGNoLCBvciBiZWFyaW5nXG4gICAgICogLSBhIGNoYW5nZSB0byB0aGUgbWFwJ3Mgc3R5bGVcbiAgICAgKiAtIGEgY2hhbmdlIHRvIGEgR2VvSlNPTiBzb3VyY2VcbiAgICAgKiAtIHRoZSBsb2FkaW5nIG9mIGEgdmVjdG9yIHRpbGUsIEdlb0pTT04gZmlsZSwgZ2x5cGgsIG9yIHNwcml0ZVxuICAgICAqXG4gICAgICogQGV2ZW50IHJlbmRlclxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICdyZW5kZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgbGFzdCBmcmFtZSByZW5kZXJlZCBiZWZvcmUgdGhlIG1hcCBlbnRlcnMgYW5cbiAgICAgKiBcImlkbGVcIiBzdGF0ZTpcbiAgICAgKlxuICAgICAqIC0gTm8gY2FtZXJhIHRyYW5zaXRpb25zIGFyZSBpbiBwcm9ncmVzc1xuICAgICAqIC0gQWxsIGN1cnJlbnRseSByZXF1ZXN0ZWQgdGlsZXMgaGF2ZSBsb2FkZWRcbiAgICAgKiAtIEFsbCBmYWRlL3RyYW5zaXRpb24gYW5pbWF0aW9ucyBoYXZlIGNvbXBsZXRlZFxuICAgICAqXG4gICAgICogQGV2ZW50IGlkbGVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnaWRsZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVtb3ZlZCB3aXRoIHtAbGluayBNYXAuZXZlbnQ6cmVtb3ZlfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByZW1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVtb3ZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuIFRoaXMgaXMgR0wgSlMncyBwcmltYXJ5IGVycm9yIHJlcG9ydGluZ1xuICAgICAqIG1lY2hhbmlzbS4gV2UgdXNlIGFuIGV2ZW50IGluc3RlYWQgb2YgYHRocm93YCB0byBiZXR0ZXIgYWNjb21tb2RhdGVcbiAgICAgKiBhc3luY3Jvbm91cyBvcGVyYXRpb25zLiBJZiBubyBsaXN0ZW5lcnMgYXJlIGJvdW5kIHRvIHRoZSBgZXJyb3JgIGV2ZW50LCB0aGVcbiAgICAgKiBlcnJvciB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7ZXJyb3I6IHttZXNzYWdlOiBzdHJpbmd9fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2Vycm9yJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbnkgbWFwIGRhdGEgbG9hZHMgb3IgY2hhbmdlcy4gU2VlIHtAbGluayBNYXBEYXRhRXZlbnR9XG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWVcbiAgICAgKiB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdzdHlsZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvZiB0aGUgbWFwJ3Mgc291cmNlcyBsb2FkcyBvciBjaGFuZ2VzLCBpbmNsdWRpbmcgaWYgYSB0aWxlIGJlbG9uZ2luZ1xuICAgICAqIHRvIGEgc291cmNlIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzb3VyY2VkYXRhXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc291cmNlZGF0YSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIChzdHlsZSwgc291cmNlLCB0aWxlLCBldGMpIGJlZ2lucyBsb2FkaW5nIG9yXG4gICAgICogY2hhbmdpbmcgYXN5bmNyb25vdXNseS4gQWxsIGBkYXRhbG9hZGluZ2AgZXZlbnRzIGFyZSBmb2xsb3dlZCBieSBhIGBkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHN0eWxlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc3R5bGVkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gb25lIG9mIHRoZSBtYXAncyBzb3VyY2VzIGJlZ2lucyBsb2FkaW5nIG9yIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuXG4gICAgICogQWxsIGBzb3VyY2VkYXRhbG9hZGluZ2AgZXZlbnRzIGFyZSBmb2xsb3dlZCBieSBhIGBzb3VyY2VkYXRhYCBvciBgZXJyb3JgIGV2ZW50LlxuICAgICAqIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzb3VyY2VkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBpY29uIG9yIHBhdHRlcm4gbmVlZGVkIGJ5IHRoZSBzdHlsZSBpcyBtaXNzaW5nLiBUaGUgbWlzc2luZyBpbWFnZSBjYW5cbiAgICAgKiBiZSBhZGRlZCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9IHdpdGhpbiB0aGlzIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIHRvIHByZXZlbnQgdGhlIGltYWdlIGZyb21cbiAgICAgKiBiZWluZyBza2lwcGVkLiBUaGlzIGV2ZW50IGNhbiBiZSB1c2VkIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGljb25zIGFuZCBwYXR0ZXJucy5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWltYWdlbWlzc2luZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgVGhlIGlkIG9mIHRoZSBtaXNzaW5nIGltYWdlLlxuICAgICAqXG4gICAgICogQHNlZSBbR2VuZXJhdGUgYW5kIGFkZCBhIG1pc3NpbmcgaWNvbiB0byB0aGUgbWFwXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLW1pc3NpbmctZ2VuZXJhdGVkLylcbiAgICAgKi9cbiAgICB8ICdzdHlsZWltYWdlbWlzc2luZydcblxuICAgIC8qKlxuICAgICAqIEBldmVudCBzdHlsZS5sb2FkXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgfCAnc3R5bGUubG9hZCc7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtlYXNlIGFzIF9lYXNlLCBiaW5kQWxsLCBiZXppZXJ9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uLy4uL3V0aWwvdGFza19xdWV1ZSc7XG5cbi8vIGRlbHRhWSB2YWx1ZSBmb3IgbW91c2Ugc2Nyb2xsIHdoZWVsIGlkZW50aWZpY2F0aW9uXG5jb25zdCB3aGVlbFpvb21EZWx0YSA9IDQuMDAwMjQ0MTQwNjI1O1xuXG4vLyBUaGVzZSBtYWdpYyBudW1iZXJzIGNvbnRyb2wgdGhlIHJhdGUgb2Ygem9vbS4gVHJhY2twYWQgZXZlbnRzIGZpcmUgYXQgYSBncmVhdGVyXG4vLyBmcmVxdWVuY3kgdGhhbiBtb3VzZSBzY3JvbGwgd2hlZWwsIHNvIHJlZHVjZSB0aGUgem9vbSByYXRlIHBlciB3aGVlbCB0aWNrXG5jb25zdCBkZWZhdWx0Wm9vbVJhdGUgPSAxIC8gMTAwO1xuY29uc3Qgd2hlZWxab29tUmF0ZSA9IDEgLyA0NTA7XG5cbi8vIHVwcGVyIGJvdW5kIG9uIGhvdyBtdWNoIHdlIHNjYWxlIHRoZSBtYXAgaW4gYW55IHNpbmdsZSByZW5kZXIgZnJhbWU7IHRoaXNcbi8vIGlzIHVzZWQgdG8gbGltaXQgem9vbSByYXRlIGluIHRoZSBjYXNlIG9mIHZlcnkgZmFzdCBzY3JvbGxpbmdcbmNvbnN0IG1heFNjYWxlUGVyRnJhbWUgPSAyO1xuXG4vKipcbiAqIFRoZSBgU2Nyb2xsWm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgYnkgc2Nyb2xsaW5nLlxuICovXG5jbGFzcyBTY3JvbGxab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfem9vbWluZzogYm9vbGVhbjtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuICAgIF9hcm91bmQ6IFBvaW50O1xuICAgIF9hcm91bmRQb2ludDogUG9pbnQ7XG4gICAgX3R5cGU6ICd3aGVlbCcgfCAndHJhY2twYWQnIHwgbnVsbDtcbiAgICBfbGFzdFZhbHVlOiBudW1iZXI7XG4gICAgX3RpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgZm9yIGRlbGF5ZWQtaGFuZGxpbmcgb2YgYSBzaW5nbGUgd2hlZWwgbW92ZW1lbnRcbiAgICBfZmluaXNoVGltZW91dDogP1RpbWVvdXRJRDsgLy8gdXNlZCB0byBkZWxheSBmaW5hbCAne21vdmUsem9vbX1lbmQnIGV2ZW50c1xuXG4gICAgX2xhc3RXaGVlbEV2ZW50OiBhbnk7XG4gICAgX2xhc3RXaGVlbEV2ZW50VGltZTogbnVtYmVyO1xuXG4gICAgX3N0YXJ0Wm9vbTogP251bWJlcjtcbiAgICBfdGFyZ2V0Wm9vbTogP251bWJlcjtcbiAgICBfZGVsdGE6IG51bWJlcjtcbiAgICBfZWFzaW5nOiA/KChudW1iZXIpID0+IG51bWJlcik7XG4gICAgX3ByZXZFYXNlOiA/e3N0YXJ0OiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKG51bWJlcikgPT4gbnVtYmVyfTtcblxuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgX2RlZmF1bHRab29tUmF0ZTogbnVtYmVyO1xuICAgIF93aGVlbFpvb21SYXRlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG5cbiAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuXG4gICAgICAgIHRoaXMuX2RlZmF1bHRab29tUmF0ZSA9IGRlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uV2hlZWwnLFxuICAgICAgICAgICAgJ19vblRpbWVvdXQnLFxuICAgICAgICAgICAgJ19vblNjcm9sbEZyYW1lJyxcbiAgICAgICAgICAgICdfb25TY3JvbGxGaW5pc2hlZCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB6b29tIHJhdGUgb2YgYSB0cmFja3BhZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbem9vbVJhdGUgPSAxLzEwMF1cbiAgICAgKi9cbiAgICBzZXRab29tUmF0ZSh6b29tUmF0ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRab29tUmF0ZSA9IHpvb21SYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgem9vbSByYXRlIG9mIGEgbW91c2Ugd2hlZWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3doZWVsWm9vbVJhdGUgPSAxLzQ1MF1cbiAgICAgKi9cbiAgICBzZXRXaGVlbFpvb21SYXRlKHdoZWVsWm9vbVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl93aGVlbFpvb21SYXRlID0gd2hlZWxab29tUmF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBBY3RpdmUgc3RhdGUgaXMgdHVybmVkIG9uIGFuZCBvZmYgd2l0aCBldmVyeSBzY3JvbGwgd2hlZWwgZXZlbnQgYW5kIGlzIHNldCBiYWNrIHRvIGZhbHNlIGJlZm9yZSB0aGUgbWFwXG4gICAgKiByZW5kZXIgaXMgY2FsbGVkLCBzbyBfYWN0aXZlIGlzIG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZXRlcm1pbmluZyBpZiBhIHNjcm9sbCB6b29tIGFuaW1hdGlvbiBpcyBpblxuICAgICogcHJvZ3Jlc3MuXG4gICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIGlzWm9vbWluZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fem9vbWluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcm91bmRdIElmIFwiY2VudGVyXCIgaXMgcGFzc2VkLCBtYXAgd2lsbCB6b29tIGFyb3VuZCBjZW50ZXIgb2YgbWFwXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnNjcm9sbFpvb20uZW5hYmxlKCk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgbWFwLnNjcm9sbFpvb20uZW5hYmxlKHsgYXJvdW5kOiAnY2VudGVyJyB9KVxuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Fyb3VuZENlbnRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcm91bmQgPT09ICdjZW50ZXInO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25XaGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFJlbW92ZSBgYW55YCBjYXN0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4NzkgaXMgZml4ZWQuXG4gICAgICAgIGxldCB2YWx1ZSA9IGUuZGVsdGFNb2RlID09PSAod2luZG93LldoZWVsRXZlbnQ6IGFueSkuRE9NX0RFTFRBX0xJTkUgPyBlLmRlbHRhWSAqIDQwIDogZS5kZWx0YVk7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICB0aW1lRGVsdGEgPSBub3cgLSAodGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lIHx8IDApO1xuXG4gICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSA9IG5vdztcblxuICAgICAgICBpZiAodmFsdWUgIT09IDAgJiYgKHZhbHVlICUgd2hlZWxab29tRGVsdGEpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgbW91c2Ugd2hlZWwgZXZlbnQuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gJ3doZWVsJztcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSAwICYmIE1hdGguYWJzKHZhbHVlKSA8IDQpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25lIGlzIGRlZmluaXRlbHkgYSB0cmFja3BhZCBldmVudCBiZWNhdXNlIGl0IGlzIHNvIHNtYWxsLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9ICd0cmFja3BhZCc7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0aW1lRGVsdGEgPiA0MDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbGlrZWx5IGEgbmV3IHNjcm9sbCBhY3Rpb24uXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBTdGFydCBhIHRpbWVvdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHNpbmd1bGFyIGV2ZW50LCBhbmQgZGVseSBpdCBieSB1cCB0byA0MG1zLlxuICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LCA0MCwgZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlcGVhdGluZyBldmVudCwgYnV0IHdlIGRvbid0IGtub3cgdGhlIHR5cGUgb2YgZXZlbnQganVzdCB5ZXQuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVsdGEgcGVyIHRpbWUgaXMgc21hbGwsIHdlIGFzc3VtZSBpdCdzIGEgZmFzdCB0cmFja3BhZDsgb3RoZXJ3aXNlIHdlIHN3aXRjaCBpbnRvIHdoZWVsIG1vZGUuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gKE1hdGguYWJzKHRpbWVEZWx0YSAqIHZhbHVlKSA8IDIwMCkgPyAndHJhY2twYWQnIDogJ3doZWVsJztcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBkZWxheWVkIGV2ZW50IGlzbid0IGZpcmVkIGFnYWluLCBiZWNhdXNlIHdlIGFjY3VtdWxhdGVcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBldmVudCAod2hpY2ggd2FzIGxlc3MgdGhhbiA0MG1zIGFnbykgaW50byB0aGlzIGV2ZW50LlxuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fbGFzdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2xvdyBkb3duIHpvb20gaWYgc2hpZnQga2V5IGlzIGhlbGQgZm9yIG1vcmUgcHJlY2lzZSB6b29taW5nXG4gICAgICAgIGlmIChlLnNoaWZ0S2V5ICYmIHZhbHVlKSB2YWx1ZSA9IHZhbHVlIC8gNDtcblxuICAgICAgICAvLyBPbmx5IGZpcmUgdGhlIGNhbGxiYWNrIGlmIHdlIGFjdHVhbGx5IGtub3cgd2hhdCB0eXBlIG9mIHNjcm9sbGluZyBkZXZpY2UgdGhlIHVzZXIgdXNlcy5cbiAgICAgICAgaWYgKHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50ID0gZTtcbiAgICAgICAgICAgIHRoaXMuX2RlbHRhIC09IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25UaW1lb3V0KGluaXRpYWxFdmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnd2hlZWwnO1xuICAgICAgICB0aGlzLl9kZWx0YSAtPSB0aGlzLl9sYXN0VmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydChpbml0aWFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N0YXJ0KGU6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMuX2RlbHRhKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5pc1pvb21pbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5fem9vbWluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuXG4gICAgICAgIHRoaXMuX2Fyb3VuZCA9IExuZ0xhdC5jb252ZXJ0KHRoaXMuX2Fyb3VuZENlbnRlciA/IHRoaXMuX21hcC5nZXRDZW50ZXIoKSA6IHRoaXMuX21hcC51bnByb2plY3QocG9zKSk7XG4gICAgICAgIHRoaXMuX2Fyb3VuZFBvaW50ID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHRoaXMuX2Fyb3VuZCk7XG4gICAgICAgIGlmICghdGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IHRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcblxuICAgICAgICAvLyBpZiB3ZSd2ZSBoYWQgc2Nyb2xsIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCByZW5kZXIgZnJhbWUsIGNvbnN1bWUgdGhlXG4gICAgICAgIC8vIGFjY3VtdWxhdGVkIGRlbHRhLCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgem9vbSBsZXZlbCBhY2NvcmRpbmdseVxuICAgICAgICBpZiAodGhpcy5fZGVsdGEgIT09IDApIHtcbiAgICAgICAgICAgIC8vIEZvciB0cmFja3BhZCBldmVudHMgYW5kIHNpbmdsZSBtb3VzZSB3aGVlbCB0aWNrcywgdXNlIHRoZSBkZWZhdWx0IHpvb20gcmF0ZVxuICAgICAgICAgICAgY29uc3Qgem9vbVJhdGUgPSAodGhpcy5fdHlwZSA9PT0gJ3doZWVsJyAmJiBNYXRoLmFicyh0aGlzLl9kZWx0YSkgPiB3aGVlbFpvb21EZWx0YSkgPyB0aGlzLl93aGVlbFpvb21SYXRlIDogdGhpcy5fZGVmYXVsdFpvb21SYXRlO1xuICAgICAgICAgICAgLy8gU2NhbGUgYnkgc2lnbW9pZCBvZiBzY3JvbGwgd2hlZWwgZGVsdGEuXG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBtYXhTY2FsZVBlckZyYW1lIC8gKDEgKyBNYXRoLmV4cCgtTWF0aC5hYnModGhpcy5fZGVsdGEgKiB6b29tUmF0ZSkpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlbHRhIDwgMCAmJiBzY2FsZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHNjYWxlID0gMSAvIHNjYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmcm9tU2NhbGUgPSB0eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbSA9PT0gJ251bWJlcicgPyB0ci56b29tU2NhbGUodGhpcy5fdGFyZ2V0Wm9vbSkgOiB0ci5zY2FsZTtcbiAgICAgICAgICAgIHRoaXMuX3RhcmdldFpvb20gPSBNYXRoLm1pbih0ci5tYXhab29tLCBNYXRoLm1heCh0ci5taW5ab29tLCB0ci5zY2FsZVpvb20oZnJvbVNjYWxlICogc2NhbGUpKSk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBtb3VzZSB3aGVlbCwgcmVmcmVzaCB0aGUgc3RhcnRpbmcgem9vbSBhbmQgZWFzaW5nXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB3ZSdyZSB1c2luZyB0byBzbW9vdGggb3V0IHRoZSB6b29taW5nIGJldHdlZW4gd2hlZWxcbiAgICAgICAgICAgIC8vIGV2ZW50c1xuICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFpvb20gPSB0ci56b29tO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vhc2luZyA9IHRoaXMuX3Ntb290aE91dEVhc2luZygyMDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRab29tID0gdHlwZW9mIHRoaXMuX3RhcmdldFpvb20gPT09ICdudW1iZXInID9cbiAgICAgICAgICAgIHRoaXMuX3RhcmdldFpvb20gOiB0ci56b29tO1xuICAgICAgICBjb25zdCBzdGFydFpvb20gPSB0aGlzLl9zdGFydFpvb207XG4gICAgICAgIGNvbnN0IGVhc2luZyA9IHRoaXMuX2Vhc2luZztcblxuICAgICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcgJiYgc3RhcnRab29tICYmIGVhc2luZykge1xuICAgICAgICAgICAgYXNzZXJ0KGVhc2luZyAmJiB0eXBlb2Ygc3RhcnRab29tID09PSAnbnVtYmVyJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigoYnJvd3Nlci5ub3coKSAtIHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSkgLyAyMDAsIDEpO1xuICAgICAgICAgICAgY29uc3QgayA9IGVhc2luZyh0KTtcbiAgICAgICAgICAgIHRyLnpvb20gPSBpbnRlcnBvbGF0ZShzdGFydFpvb20sIHRhcmdldFpvb20sIGspO1xuICAgICAgICAgICAgaWYgKHQgPCAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyLnpvb20gPSB0YXJnZXRab29tO1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRoaXMuX2Fyb3VuZCwgdGhpcy5fYXJvdW5kUG9pbnQpO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnbW92ZScsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0V2hlZWxFdmVudH0pKTtcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCd6b29tJywge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9maW5pc2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0V2hlZWxFdmVudH0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmVlbmQnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldFpvb207XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Ntb290aE91dEVhc2luZyhkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGxldCBlYXNpbmcgPSBfZWFzZTtcblxuICAgICAgICBpZiAodGhpcy5fcHJldkVhc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGVhc2UgPSB0aGlzLl9wcmV2RWFzZSxcbiAgICAgICAgICAgICAgICB0ID0gKGJyb3dzZXIubm93KCkgLSBlYXNlLnN0YXJ0KSAvIGVhc2UuZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgc3BlZWQgPSBlYXNlLmVhc2luZyh0ICsgMC4wMSkgLSBlYXNlLmVhc2luZyh0KSxcblxuICAgICAgICAgICAgICAgIC8vIFF1aWNrIGhhY2sgdG8gbWFrZSBuZXcgYmV6aWVyIHRoYXQgaXMgY29udGludW91cyB3aXRoIGxhc3RcbiAgICAgICAgICAgICAgICB4ID0gMC4yNyAvIE1hdGguc3FydChzcGVlZCAqIHNwZWVkICsgMC4wMDAxKSAqIDAuMDEsXG4gICAgICAgICAgICAgICAgeSA9IE1hdGguc3FydCgwLjI3ICogMC4yNyAtIHggKiB4KTtcblxuICAgICAgICAgICAgZWFzaW5nID0gYmV6aWVyKHgsIHksIDAuMjUsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldkVhc2UgPSB7XG4gICAgICAgICAgICBzdGFydDogYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGVhc2luZztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFpvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbi8qKlxuICogVGhlIGBCb3hab29tSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gdGhlIG1hcCB0byBmaXQgd2l0aGluIGEgYm91bmRpbmcgYm94LlxuICogVGhlIGJvdW5kaW5nIGJveCBpcyBkZWZpbmVkIGJ5IGNsaWNraW5nIGFuZCBob2xkaW5nIGBzaGlmdGAgd2hpbGUgZHJhZ2dpbmcgdGhlIGN1cnNvci5cbiAqL1xuY2xhc3MgQm94Wm9vbUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3N0YXJ0UG9zOiBQb2ludDtcbiAgICBfbGFzdFBvczogUG9pbnQ7XG4gICAgX2JveDogSFRNTEVsZW1lbnQ7XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7XG4gICAgICAgIGNsaWNrVG9sZXJhbmNlPzogbnVtYmVyXG4gICAgfSkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBtYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbk1vdXNlTW92ZScsXG4gICAgICAgICAgICAnX29uTW91c2VVcCcsXG4gICAgICAgICAgICAnX29uS2V5RG93bidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUsIGkuZS4gY3VycmVudGx5IGJlaW5nIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLlxuICAgICAqL1xuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9hY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5ib3hab29tLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuYm94Wm9vbS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoIShlLnNoaWZ0S2V5ICYmIGUuYnV0dG9uID09PSAwKSkgcmV0dXJuO1xuXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCwgZmFsc2UpO1xuXG4gICAgICAgIERPTS5kaXNhYmxlRHJhZygpO1xuICAgICAgICB0aGlzLl9zdGFydFBvcyA9IHRoaXMuX2xhc3RQb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIF9vbk1vdXNlTW92ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2xhc3RQb3MuZXF1YWxzKHBvcykgfHwgKCF0aGlzLl9ib3ggJiYgcG9zLmRpc3QodGhpcy5fc3RhcnRQb3MpIDwgdGhpcy5fY2xpY2tUb2xlcmFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwMCA9IHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICB0aGlzLl9sYXN0UG9zID0gcG9zO1xuXG4gICAgICAgIGlmICghdGhpcy5fYm94KSB7XG4gICAgICAgICAgICB0aGlzLl9ib3ggPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtYm94em9vbScsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3Jvc3NoYWlyJyk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2JveHpvb21zdGFydCcsIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWluWCA9IE1hdGgubWluKHAwLngsIHBvcy54KSxcbiAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChwMC54LCBwb3MueCksXG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4ocDAueSwgcG9zLnkpLFxuICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KHAwLnksIHBvcy55KTtcblxuICAgICAgICBET00uc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwgYHRyYW5zbGF0ZSgke21pblh9cHgsJHttaW5ZfXB4KWApO1xuXG4gICAgICAgIHRoaXMuX2JveC5zdHlsZS53aWR0aCA9IGAke21heFggLSBtaW5YfXB4YDtcbiAgICAgICAgdGhpcy5fYm94LnN0eWxlLmhlaWdodCA9IGAke21heFkgLSBtaW5ZfXB4YDtcbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLl9zdGFydFBvcyxcbiAgICAgICAgICAgIHAxID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICB0aGlzLl9maW5pc2goKTtcblxuICAgICAgICBET00uc3VwcHJlc3NDbGljaygpO1xuXG4gICAgICAgIGlmIChwMC54ID09PSBwMS54ICYmIHAwLnkgPT09IHAxLnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbWNhbmNlbCcsIGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWFwXG4gICAgICAgICAgICAgICAgLmZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwLCBwMSwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKSwge2xpbmVhcjogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdib3h6b29tZW5kJywge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tY2FuY2VsJywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZmluaXNoKCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXAsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3Jvc3NoYWlyJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2JveCkge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9ib3gpO1xuICAgICAgICAgICAgdGhpcy5fYm94ID0gKG51bGw6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBET00uZW5hYmxlRHJhZygpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgfVxuXG4gICAgX2ZpcmVFdmVudCh0eXBlOiBzdHJpbmcsIGU6ICopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCh0eXBlLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJveFpvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmV6aWVyLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uLy4uL3V0aWwvdGFza19xdWV1ZSc7XG5cbmNvbnN0IGluZXJ0aWFMaW5lYXJpdHkgPSAwLjI1LFxuICAgIGluZXJ0aWFFYXNpbmcgPSBiZXppZXIoMCwgMCwgaW5lcnRpYUxpbmVhcml0eSwgMSksXG4gICAgaW5lcnRpYU1heFNwZWVkID0gMTgwLCAvLyBkZWcvc1xuICAgIGluZXJ0aWFEZWNlbGVyYXRpb24gPSA3MjA7IC8vIGRlZy9zXjJcblxuLyoqXG4gKiBUaGUgYERyYWdSb3RhdGVIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcm90YXRlIHRoZSBtYXAgYnkgY2xpY2tpbmcgYW5kXG4gKiBkcmFnZ2luZyB0aGUgY3Vyc29yIHdoaWxlIGhvbGRpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBvciBgY3RybGAga2V5LlxuICovXG5jbGFzcyBEcmFnUm90YXRlSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX3N0YXRlOiAnZGlzYWJsZWQnIHwgJ2VuYWJsZWQnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7XG4gICAgX2J1dHRvbjogJ3JpZ2h0JyB8ICdsZWZ0JztcbiAgICBfZXZlbnRCdXR0b246IG51bWJlcjtcbiAgICBfYmVhcmluZ1NuYXA6IG51bWJlcjtcbiAgICBfcGl0Y2hXaXRoUm90YXRlOiBib29sZWFuO1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgX3N0YXJ0UG9zOiBQb2ludDtcbiAgICBfcHJldlBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9zdGFydFRpbWU6IG51bWJlcjtcbiAgICBfbGFzdE1vdmVFdmVudDogTW91c2VFdmVudDtcbiAgICBfaW5lcnRpYTogQXJyYXk8W251bWJlciwgbnVtYmVyXT47XG4gICAgX2NlbnRlcjogUG9pbnQ7XG4gICAgX2ZyYW1lSWQ6ID9UYXNrSUQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXBib3ggR0wgSlMgbWFwIHRvIGFkZCB0aGUgaGFuZGxlciB0by5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmdTbmFwXSBUaGUgdGhyZXNob2xkLCBtZWFzdXJlZCBpbiBkZWdyZWVzLCB0aGF0IGRldGVybWluZXMgd2hlbiB0aGUgbWFwJ3NcbiAgICAgKiAgIGJlYXJpbmcgd2lsbCBzbmFwIHRvIG5vcnRoLlxuICAgICAqIEBwYXJhbSB7Ym9vbH0gW29wdGlvbnMucGl0Y2hXaXRoUm90YXRlPXRydWVdIENvbnRyb2wgdGhlIG1hcCBwaXRjaCBpbiBhZGRpdGlvbiB0byB0aGUgYmVhcmluZ1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM6IHtcbiAgICAgICAgYnV0dG9uPzogJ3JpZ2h0JyB8ICdsZWZ0JyxcbiAgICAgICAgZWxlbWVudD86IEhUTUxFbGVtZW50LFxuICAgICAgICBiZWFyaW5nU25hcD86IG51bWJlcixcbiAgICAgICAgcGl0Y2hXaXRoUm90YXRlPzogYm9vbGVhbixcbiAgICAgICAgY2xpY2tUb2xlcmFuY2U/OiBudW1iZXJcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBvcHRpb25zLmVsZW1lbnQgfHwgbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgIHRoaXMuX2J1dHRvbiA9IG9wdGlvbnMuYnV0dG9uIHx8ICdyaWdodCc7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcCB8fCAwO1xuICAgICAgICB0aGlzLl9waXRjaFdpdGhSb3RhdGUgPSBvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZSAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ29uTW91c2VEb3duJyxcbiAgICAgICAgICAgICdfb25Nb3VzZU1vdmUnLFxuICAgICAgICAgICAgJ19vbk1vdXNlVXAnLFxuICAgICAgICAgICAgJ19vbkJsdXInLFxuICAgICAgICAgICAgJ19vbkRyYWdGcmFtZSdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlICE9PSAnZGlzYWJsZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2FjdGl2ZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZHJhZ1JvdGF0ZS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZWVuZCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hlbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2Rpc2FibGVkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdlbmFibGVkJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoRXZlbnQgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcblxuICAgICAgICBpZiAodG91Y2hFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9idXR0b24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudEJ1dHRvbiA9IERPTS5tb3VzZUJ1dHRvbihlKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSB8fCBlLm1ldGFLZXkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRCdXR0b24gIT09IChlLmN0cmxLZXkgPyAwIDogMikpIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSB8fCBET00ubW91c2VCdXR0b24oZSkgIT09IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudEJ1dHRvbiA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBET00uZGlzYWJsZURyYWcoKTtcblxuICAgICAgICAvLyBCaW5kIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZm9yIG1vdmUgYW5kIHVwL2VuZCBldmVudHMuIEluIHRoZSBhYnNlbmNlIG9mXG4gICAgICAgIC8vIHRoZSBwb2ludGVyIGNhcHR1cmUgQVBJLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBuZWNlc3NhcnkgcGxhdGZvcm1zLFxuICAgICAgICAvLyB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGdpdmUgdXMgdGhlIGJlc3Qgc2hvdCBhdCBjYXB0dXJpbmcgZXZlbnRzIHRoYXRcbiAgICAgICAgLy8gZmFsbCBvdXRzaWRlIHRoZSBtYXAgY2FudmFzIGVsZW1lbnQuIFVzZSBge2NhcHR1cmU6IHRydWV9YCBmb3IgdGhlIG1vdmUgZXZlbnRcbiAgICAgICAgLy8gdG8gcHJldmVudCBtYXAgbW92ZSBldmVudHMgZnJvbSBiZWluZyBmaXJlZCBkdXJpbmcgYSBkcmFnLlxuICAgICAgICBpZiAodG91Y2hFdmVudCkge1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlYWN0aXZhdGUgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLiBPdGhlcndpc2UgaWYgYSBtb3VzZXVwIG9jY3VycyB3aGVuIHRoZSB3aW5kb3dcbiAgICAgICAgLy8gaXNuJ3QgaW4gZm9jdXMsIGRyYWdnaW5nIHdpbGwgY29udGludWUgZXZlbiB0aG91Z2ggdGhlIG1vdXNlIGlzIG5vIGxvbmdlciBwcmVzc2VkLlxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG5cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgIHRoaXMuX2luZXJ0aWEgPSBbW2Jyb3dzZXIubm93KCksIHRoaXMuX21hcC5nZXRCZWFyaW5nKCldXTtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9wcmV2UG9zID0gdGhpcy5fbGFzdFBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IHRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7ICAvLyBDZW50ZXIgb2Ygcm90YXRpb25cblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgX29uTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RQb3MuZXF1YWxzKHBvcykgfHwgKCh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSAmJiAocG9zLmRpc3QodGhpcy5fc3RhcnRQb3MpIDwgdGhpcy5fY2xpY2tUb2xlcmFuY2UpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdE1vdmVFdmVudCA9IGU7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVzdGFydCcsIGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hzdGFydCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uRHJhZ0ZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcblxuICAgICAgICBjb25zdCBwMSA9IHRoaXMuX3ByZXZQb3MsXG4gICAgICAgICAgICBwMiA9IHRoaXMuX2xhc3RQb3MsXG4gICAgICAgICAgICBiZWFyaW5nRGlmZiA9IChwMS54IC0gcDIueCkgKiAwLjgsXG4gICAgICAgICAgICBwaXRjaERpZmYgPSAocDEueSAtIHAyLnkpICogLTAuNSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSB0ci5iZWFyaW5nIC0gYmVhcmluZ0RpZmYsXG4gICAgICAgICAgICBwaXRjaCA9IHRyLnBpdGNoIC0gcGl0Y2hEaWZmLFxuICAgICAgICAgICAgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBsYXN0ID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICBpbmVydGlhLnB1c2goW2Jyb3dzZXIubm93KCksIHRoaXMuX21hcC5fbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nLCBsYXN0WzFdKV0pO1xuXG4gICAgICAgIGNvbnN0IHByZXZCZWFyaW5nID0gdHIuYmVhcmluZztcbiAgICAgICAgdHIuYmVhcmluZyA9IGJlYXJpbmc7XG4gICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZQaXRjaCA9IHRyLnBpdGNoO1xuICAgICAgICAgICAgdHIucGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgICAgIGlmICh0ci5waXRjaCAhPT0gcHJldlBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyLmJlYXJpbmcgIT09IHByZXZCZWFyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3JvdGF0ZScsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZScsIGUpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50O1xuICAgICAgICB0aGlzLl9wcmV2UG9zID0gdGhpcy5fbGFzdFBvcztcbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJztcblxuICAgICAgICBpZiAodG91Y2hFdmVudCAmJiAodGhpcy5fc3RhcnRQb3MgPT09IHRoaXMuX2xhc3RQb3MpICYmIChEYXRlLm5vdygpIC0gdGhpcy5fc3RhcnRUaW1lKSA8IDMwMCkge1xuICAgICAgICAgICAgdGhpcy5fZWwuY2xpY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdG91Y2hFdmVudCAmJiBET00ubW91c2VCdXR0b24oZSkgIT09IHRoaXMuX2V2ZW50QnV0dG9uKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5faW5lcnRpYWxSb3RhdGUoZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyKGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJywgZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdW5iaW5kKCkge1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG4gICAgICAgIERPTS5lbmFibGVEcmFnKCk7XG4gICAgfVxuXG4gICAgX2RlYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9pbmVydGlhbFJvdGF0ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJywgZSk7XG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcCxcbiAgICAgICAgICAgIG1hcEJlYXJpbmcgPSBtYXAuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWE7XG5cbiAgICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKG1hcEJlYXJpbmcpIDwgdGhpcy5fYmVhcmluZ1NuYXApIHtcbiAgICAgICAgICAgICAgICBtYXAucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6IHRydWV9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHRoaXMuX2ZpcmVFdmVudCgncGl0Y2hlbmQnLCBlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaW5lcnRpYS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGxhc3QgPSBpbmVydGlhW2luZXJ0aWEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBwcmV2aW91cyA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAyXTtcbiAgICAgICAgbGV0IGJlYXJpbmcgPSBtYXAuX25vcm1hbGl6ZUJlYXJpbmcobWFwQmVhcmluZywgcHJldmlvdXNbMV0pO1xuICAgICAgICBjb25zdCBmbGluZ0RpZmYgPSBsYXN0WzFdIC0gZmlyc3RbMV0sXG4gICAgICAgICAgICBzaWduID0gZmxpbmdEaWZmIDwgMCA/IC0xIDogMSxcbiAgICAgICAgICAgIGZsaW5nRHVyYXRpb24gPSAobGFzdFswXSAtIGZpcnN0WzBdKSAvIDEwMDA7XG5cbiAgICAgICAgaWYgKGZsaW5nRGlmZiA9PT0gMCB8fCBmbGluZ0R1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzcGVlZCA9IE1hdGguYWJzKGZsaW5nRGlmZiAqIChpbmVydGlhTGluZWFyaXR5IC8gZmxpbmdEdXJhdGlvbikpOyAgLy8gZGVnL3NcbiAgICAgICAgaWYgKHNwZWVkID4gaW5lcnRpYU1heFNwZWVkKSB7XG4gICAgICAgICAgICBzcGVlZCA9IGluZXJ0aWFNYXhTcGVlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gc3BlZWQgLyAoaW5lcnRpYURlY2VsZXJhdGlvbiAqIGluZXJ0aWFMaW5lYXJpdHkpLFxuICAgICAgICAgICAgb2Zmc2V0ID0gc2lnbiAqIHNwZWVkICogKGR1cmF0aW9uIC8gMik7XG5cbiAgICAgICAgYmVhcmluZyArPSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKG1hcC5fbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nLCAwKSkgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgYmVhcmluZyA9IG1hcC5fbm9ybWFsaXplQmVhcmluZygwLCBiZWFyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5yb3RhdGVUbyhiZWFyaW5nLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICAgICAgZWFzaW5nOiBpbmVydGlhRWFzaW5nLFxuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIGUgPyB7b3JpZ2luYWxFdmVudDogZX0gOiB7fSkpO1xuICAgIH1cblxuICAgIF9kcmFpbkluZXJ0aWFCdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGN1dG9mZiA9IDE2MDsgICAvL21zZWNcblxuICAgICAgICB3aGlsZSAoaW5lcnRpYS5sZW5ndGggPiAwICYmIG5vdyAtIGluZXJ0aWFbMF1bMF0gPiBjdXRvZmYpXG4gICAgICAgICAgICBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnUm90YXRlSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtiZXppZXIsIGJpbmRBbGwsIGV4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBkZWZhdWx0SW5lcnRpYSA9IHtcbiAgICBsaW5lYXJpdHk6IDAuMyxcbiAgICBlYXNpbmc6IGJlemllcigwLCAwLCAwLjMsIDEpLFxuICAgIG1heFNwZWVkOiAxNDAwLFxuICAgIGRlY2VsZXJhdGlvbjogMjUwMCxcbn07XG5leHBvcnQgdHlwZSBQYW5JbmVydGlhT3B0aW9ucyA9IHR5cGVvZiBkZWZhdWx0SW5lcnRpYTtcblxuZXhwb3J0IHR5cGUgRHJhZ1Bhbk9wdGlvbnMgPSBib29sZWFuIHwgUGFuSW5lcnRpYU9wdGlvbnM7XG5cbi8qKlxuICogVGhlIGBEcmFnUGFuSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHBhbiB0aGUgbWFwIGJ5IGNsaWNraW5nIGFuZCBkcmFnZ2luZ1xuICogdGhlIGN1cnNvci5cbiAqL1xuY2xhc3MgRHJhZ1BhbkhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9zdGF0ZTogJ2Rpc2FibGVkJyB8ICdlbmFibGVkJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX21vdXNlRG93blBvczogUG9pbnQ7XG4gICAgX3ByZXZQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfc3RhcnRUb3VjaDogP0FycmF5PFBvaW50PjtcbiAgICBfbGFzdFRvdWNoOiA/QXJyYXk8UG9pbnQ+O1xuICAgIF9sYXN0TW92ZUV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IHZvaWQ7XG4gICAgX2luZXJ0aWE6IEFycmF5PFtudW1iZXIsIFBvaW50XT47XG4gICAgX2ZyYW1lSWQ6ID9UYXNrSUQ7XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG4gICAgX3Nob3VsZFN0YXJ0OiA/Ym9vbGVhbjtcbiAgICBfaW5lcnRpYU9wdGlvbnM6IFBhbkluZXJ0aWFPcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBjbGlja1RvbGVyYW5jZT86IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcbiAgICAgICAgdGhpcy5faW5lcnRpYU9wdGlvbnMgPSBkZWZhdWx0SW5lcnRpYTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdfb25Nb3VzZVVwJyxcbiAgICAgICAgICAgICdfb25Ub3VjaEVuZCcsXG4gICAgICAgICAgICAnX29uQmx1cicsXG4gICAgICAgICAgICAnX29uRHJhZ0ZyYW1lJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgIT09ICdkaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxpbmVhcml0eT0wXSBmYWN0b3IgdXNlZCB0byBzY2FsZSB0aGUgZHJhZyB2ZWxvY2l0eVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZz1iZXppZXIoMCwgMCwgMC4zLCAxKV0gZWFzaW5nIGZ1bmN0aW9uIGFwcGxsZWQgdG8gYG1hcC5wYW5Ub2Agd2hlbiBhcHBseWluZyB0aGUgZHJhZy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4U3BlZWQ9MTQwMF0gdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGRyYWcgdmVsb2NpdHkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRlY2VsZXJhdGlvbj0yNTAwXSB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgc3BlZWQgcmVkdWNlcyBhZnRlciB0aGUgcGFuIGVuZHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmRyYWdQYW4uZW5hYmxlKCk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5kcmFncGFuLmVuYWJsZSh7XG4gICAgICogICAgICBsaW5lYXJpdHk6IDAuMyxcbiAgICAgKiAgICAgIGVhc2luZzogYmV6aWVyKDAsIDAsIDAuMywgMSksXG4gICAgICogICAgICBtYXhTcGVlZDogMTQwMCxcbiAgICAgKiAgICAgIGRlY2VsZXJhdGlvbjogMjUwMCxcbiAgICAgKiAgIH0pO1xuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiBEcmFnUGFuT3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10b3VjaC1kcmFnLXBhbicpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgdGhpcy5faW5lcnRpYU9wdGlvbnMgPSBleHRlbmQoZGVmYXVsdEluZXJ0aWEsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4nKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2Rpc2FibGVkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdlbmFibGVkJykgcmV0dXJuO1xuICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIEJpbmQgd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBmb3IgbW91c2Vtb3ZlL3VwIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgfVxuXG4gICAgb25Ub3VjaFN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpIHsgLy8gbXVsdGktZmluZ2VyIHRvdWNoXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBkcmFnZ2luZyAoZS5nLiB3aXRoIG9uZSBmaW5nZXIpIGFuZCBhZGQgYW5vdGhlciBmaW5nZXIsXG4gICAgICAgICAgICAvLyBrZWVwIHRoZSBoYW5kbGVyIGFjdGl2ZSBidXQgZG9uJ3QgYXR0ZW1wdCB0byAuX3N0YXJ0KCkgYWdhaW5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnIHx8IHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJykgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciB0b3VjaG1vdmUvZW5kIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge2NhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ub3VjaEVuZCk7XG5cbiAgICAgICAgdGhpcy5fc3RhcnQoZSk7XG4gICAgfVxuXG4gICAgX3N0YXJ0KGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLiBPdGhlcndpc2UgaWYgYSBtb3VzZXVwIG9jY3VycyB3aGVuIHRoZSB3aW5kb3dcbiAgICAgICAgLy8gaXNuJ3QgaW4gZm9jdXMsIGRyYWdnaW5nIHdpbGwgY29udGludWUgZXZlbiB0aG91Z2ggdGhlIG1vdXNlIGlzIG5vIGxvbmdlciBwcmVzc2VkLlxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX29uQmx1cik7XG5cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zID0gdGhpcy5fbW91c2VEb3duUG9zID0gdGhpcy5fcHJldlBvcyA9IHRoaXMuX2xhc3RQb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICB0aGlzLl9zdGFydFRvdWNoID0gdGhpcy5fbGFzdFRvdWNoID0gKHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGUgaW5zdGFuY2VvZiB3aW5kb3cuVG91Y2hFdmVudCkgPyBET00udG91Y2hQb3ModGhpcy5fZWwsIGUpIDogbnVsbDtcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtbYnJvd3Nlci5ub3coKSwgdGhpcy5fc3RhcnRQb3NdXTtcbiAgICB9XG5cbiAgICBfdG91Y2hlc01hdGNoKGxhc3RUb3VjaDogP0FycmF5PFBvaW50PiwgdGhpc1RvdWNoOiA/QXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIGlmICghbGFzdFRvdWNoIHx8ICF0aGlzVG91Y2ggfHwgbGFzdFRvdWNoLmxlbmd0aCAhPT0gdGhpc1RvdWNoLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbGFzdFRvdWNoLmV2ZXJ5KChwb3MsIGkpID0+IHRoaXNUb3VjaFtpXSA9PT0gcG9zKTtcbiAgICB9XG5cbiAgICBfb25Nb3ZlKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCB0b3VjaFBvcyA9ICh3aW5kb3cuVG91Y2hFdmVudCAmJiBlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpID8gRE9NLnRvdWNoUG9zKHRoaXMuX2VsLCBlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgY29uc3QgbWF0Y2hlc0xhc3RQb3MgPSB0b3VjaFBvcyA/IHRoaXMuX3RvdWNoZXNNYXRjaCh0aGlzLl9sYXN0VG91Y2gsIHRvdWNoUG9zKSA6IHRoaXMuX2xhc3RQb3MuZXF1YWxzKHBvcyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXNMYXN0UG9zIHx8ICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnICYmIHBvcy5kaXN0KHRoaXMuX21vdXNlRG93blBvcykgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RNb3ZlRXZlbnQgPSBlO1xuICAgICAgICB0aGlzLl9sYXN0UG9zID0gcG9zO1xuICAgICAgICB0aGlzLl9sYXN0VG91Y2ggPSB0b3VjaFBvcztcbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG4gICAgICAgIHRoaXMuX2luZXJ0aWEucHVzaChbYnJvd3Nlci5ub3coKSwgdGhpcy5fbGFzdFBvc10pO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdhY3RpdmUnO1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGluIGVhY2ggcmVuZGVyIGZyYW1lIHdoaWxlIGRyYWdnaW5nIGlzIGhhcHBlbmluZy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vbkRyYWdGcmFtZSgpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgZSA9IHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fib3J0KGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB3ZSB0cmVhdCB0aGUgZmlyc3QgZHJhZyBmcmFtZSAocmF0aGVyIHRoYW4gdGhlIG1vdXNlZG93biBldmVudClcbiAgICAgICAgICAgIC8vIGFzIHRoZSBzdGFydCBvZiB0aGUgZHJhZ1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnc3RhcnQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRTdGFydCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHJldHVybjsgLy8gSXQncyBwb3NzaWJsZSBmb3IgdGhlIGRyYWdzdGFydCBldmVudCB0byB0cmlnZ2VyIGEgZGlzYWJsZSgpIGNhbGwgKCMyNDE5KSBzbyB3ZSBtdXN0IGFjY291bnQgZm9yIHRoYXRcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5wb2ludExvY2F0aW9uKHRoaXMuX3ByZXZQb3MpLCB0aGlzLl9sYXN0UG9zKTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnJywgZSk7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZScsIGUpO1xuXG4gICAgICAgIHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIERPTS5zdXBwcmVzc0NsaWNrKCk7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2luZXJ0aWFsUGFuKGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uVG91Y2hFbmQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7IC8vIG9ubHkgc3RvcCBkcmFnIGlmIGFsbCBmaW5nZXJzIGhhdmUgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmVydGlhbFBhbihlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7ICAvLyBzb21lIGZpbmdlcihzKSBzdGlsbCB0b3VjaGluZyB0aGUgc2NyZWVuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICAgICAgLy8gd2UgYXJlIGFscmVhZHkgZHJhZ2dpbmc7IGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IGRyYWdnaW5nOyBnZXQgcmVhZHkgdG8gc3RhcnQgYSBuZXcgZHJhZ1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2Fib3J0KGU6IEZvY3VzRXZlbnQgfCBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2hvdWxkU3RhcnQpIHsgLy8gSWYgd2Ugc2NoZWR1bGVkIHRoZSBkcmFnc3RhcnQgYnV0IG5ldmVyIGZpcmVkLCBub3RoaW5nIHRvIGVuZFxuICAgICAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgc3RhcnRlZCB0aGUgZHJhZywgZW5kIGl0XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdkcmFnZW5kJywgZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIGlmICgod2luZG93LlRvdWNoRXZlbnQgJiYgZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBmaW5nZXJzIHRvdWNoaW5nLCByZWF0dGFjaCB0b3VjaGVuZCBsaXN0ZW5lciBpbiBjYXNlXG4gICAgICAgICAgICAgICAgLy8gYWxsIGJ1dCBvbmUgZmluZ2VyIGlzIHJlbW92ZWQgYW5kIHdlIG5lZWQgdG8gcmVzdGFydCBhIGRyYWcgb24gdG91Y2hlbmRcbiAgICAgICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyKGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYWJvcnQoZSk7XG4gICAgfVxuXG4gICAgX3VuYmluZCgpIHtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnYmx1cicsIHRoaXMuX29uQmx1cik7XG4gICAgfVxuXG4gICAgX2RlYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tb3VzZURvd25Qb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRUb3VjaDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RUb3VjaDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Nob3VsZFN0YXJ0O1xuICAgIH1cblxuICAgIF9pbmVydGlhbFBhbihlOiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnLCBlKTtcblxuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWE7XG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGZsaW5nT2Zmc2V0ID0gbGFzdFsxXS5zdWIoZmlyc3RbMV0pLFxuICAgICAgICAgICAgZmxpbmdEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMDtcblxuICAgICAgICBpZiAoZmxpbmdEdXJhdGlvbiA9PT0gMCB8fCBsYXN0WzFdLmVxdWFscyhmaXJzdFsxXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtsaW5lYXJpdHksIGVhc2luZywgbWF4U3BlZWQsIGRlY2VsZXJhdGlvbn0gPSB0aGlzLl9pbmVydGlhT3B0aW9ucztcblxuICAgICAgICAvLyBjYWxjdWxhdGUgcHgvcyB2ZWxvY2l0eSAmIGFkanVzdCBmb3IgaW5jcmVhc2VkIGluaXRpYWwgYW5pbWF0aW9uIHNwZWVkIHdoZW4gZWFzaW5nIG91dFxuICAgICAgICBjb25zdCB2ZWxvY2l0eSA9IGZsaW5nT2Zmc2V0Lm11bHQobGluZWFyaXR5IC8gZmxpbmdEdXJhdGlvbik7XG4gICAgICAgIGxldCBzcGVlZCA9IHZlbG9jaXR5Lm1hZygpOyAvLyBweC9zXG5cbiAgICAgICAgaWYgKHNwZWVkID4gbWF4U3BlZWQpIHtcbiAgICAgICAgICAgIHNwZWVkID0gbWF4U3BlZWQ7XG4gICAgICAgICAgICB2ZWxvY2l0eS5fdW5pdCgpLl9tdWx0KHNwZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gc3BlZWQgLyAoZGVjZWxlcmF0aW9uICogbGluZWFyaXR5KSxcbiAgICAgICAgICAgIG9mZnNldCA9IHZlbG9jaXR5Lm11bHQoLWR1cmF0aW9uIC8gMik7XG5cbiAgICAgICAgdGhpcy5fbWFwLnBhbkJ5KG9mZnNldCwge1xuICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCxcbiAgICAgICAgICAgIGVhc2luZyxcbiAgICAgICAgICAgIG5vTW92ZVN0YXJ0OiB0cnVlXG4gICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxuXG4gICAgX2ZpcmVFdmVudCh0eXBlOiBzdHJpbmcsIGU6ICopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCh0eXBlLCBlID8ge29yaWdpbmFsRXZlbnQ6IGV9IDoge30pKTtcbiAgICB9XG5cbiAgICBfZHJhaW5JbmVydGlhQnVmZmVyKCkge1xuICAgICAgICBjb25zdCBpbmVydGlhID0gdGhpcy5faW5lcnRpYSxcbiAgICAgICAgICAgIG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICBjdXRvZmYgPSAxNjA7ICAgLy8gbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXVswXSA+IGN1dG9mZikgaW5lcnRpYS5zaGlmdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhZ1BhbkhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5jb25zdCBwYW5TdGVwID0gMTAwLFxuICAgIGJlYXJpbmdTdGVwID0gMTUsXG4gICAgcGl0Y2hTdGVwID0gMTA7XG5cbi8qKlxuICogVGhlIGBLZXlib2FyZEhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tLCByb3RhdGUsIGFuZCBwYW4gdGhlIG1hcCB1c2luZ1xuICogdGhlIGZvbGxvd2luZyBrZXlib2FyZCBzaG9ydGN1dHM6XG4gKlxuICogLSBgPWAgLyBgK2A6IEluY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDEuXG4gKiAtIGBTaGlmdC09YCAvIGBTaGlmdC0rYDogSW5jcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMi5cbiAqIC0gYC1gOiBEZWNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAxLlxuICogLSBgU2hpZnQtLWA6IERlY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDIuXG4gKiAtIEFycm93IGtleXM6IFBhbiBieSAxMDAgcGl4ZWxzLlxuICogLSBgU2hpZnQrw6LCh8KiYDogSW5jcmVhc2UgdGhlIHJvdGF0aW9uIGJ5IDE1IGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqBgOiBEZWNyZWFzZSB0aGUgcm90YXRpb24gYnkgMTUgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCoWA6IEluY3JlYXNlIHRoZSBwaXRjaCBieSAxMCBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KjYDogRGVjcmVhc2UgdGhlIHBpdGNoIGJ5IDEwIGRlZ3JlZXMuXG4gKi9cbmNsYXNzIEtleWJvYXJkSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uS2V5RG93bidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGtleWJvYXJkIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGtleWJvYXJkIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5rZXlib2FyZC5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX29uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHpvb21EaXIgPSAwO1xuICAgICAgICBsZXQgYmVhcmluZ0RpciA9IDA7XG4gICAgICAgIGxldCBwaXRjaERpciA9IDA7XG4gICAgICAgIGxldCB4RGlyID0gMDtcbiAgICAgICAgbGV0IHlEaXIgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICBjYXNlIDE3MTpcbiAgICAgICAgY2FzZSAxODc6XG4gICAgICAgICAgICB6b29tRGlyID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTg5OlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgY2FzZSAxNzM6XG4gICAgICAgICAgICB6b29tRGlyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB4RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeURpciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeURpciA9IDE7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcbiAgICAgICAgY29uc3Qgem9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgICAgICAgY29uc3QgZWFzZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgZGVsYXlFbmRFdmVudHM6IDUwMCxcbiAgICAgICAgICAgIGVhc2luZzogZWFzZU91dCxcblxuICAgICAgICAgICAgem9vbTogem9vbURpciA/IE1hdGgucm91bmQoem9vbSkgKyB6b29tRGlyICogKGUuc2hpZnRLZXkgPyAyIDogMSkgOiB6b29tLFxuICAgICAgICAgICAgYmVhcmluZzogbWFwLmdldEJlYXJpbmcoKSArIGJlYXJpbmdEaXIgKiBiZWFyaW5nU3RlcCxcbiAgICAgICAgICAgIHBpdGNoOiBtYXAuZ2V0UGl0Y2goKSArIHBpdGNoRGlyICogcGl0Y2hTdGVwLFxuICAgICAgICAgICAgb2Zmc2V0OiBbLXhEaXIgKiBwYW5TdGVwLCAteURpciAqIHBhblN0ZXBdLFxuICAgICAgICAgICAgY2VudGVyOiBtYXAuZ2V0Q2VudGVyKClcbiAgICAgICAgfTtcblxuICAgICAgICBtYXAuZWFzZVRvKGVhc2VPcHRpb25zLCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZWFzZU91dCh0KSB7XG4gICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXlib2FyZEhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUge01hcE1vdXNlRXZlbnQsIE1hcFRvdWNoRXZlbnR9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLy8gbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHR3byB0YXAgUG9pbnRzIGZvciB0aGVtIHRvIHF1YWxpZnkgYXMgYSBkb3VibGUtdGFwXG5jb25zdCBtYXhEaXN0ID0gMzA7XG5cbi8qKlxuICogVGhlIGBEb3VibGVDbGlja1pvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGF0IGEgcG9pbnQgYnlcbiAqIGRvdWJsZSBjbGlja2luZyBvciBkb3VibGUgdGFwcGluZy5cbiAqL1xuY2xhc3MgRG91YmxlQ2xpY2tab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3RhcHBlZDogP1RpbWVvdXRJRDtcbiAgICBfdGFwcGVkUG9pbnQ6ID9Qb2ludDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkRibENsaWNrJyxcbiAgICAgICAgICAgICdfb25ab29tRW5kJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kb3VibGVDbGlja1pvb20uZW5hYmxlKCk7XG4gICAgICovXG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uVG91Y2hTdGFydChlOiBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoZS5wb2ludHMubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy5fdGFwcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl90YXBwZWRQb2ludCA9IGUucG9pbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5fdGFwcGVkID0gc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuX3RhcHBlZCA9IG51bGw7IHRoaXMuX3RhcHBlZFBvaW50ID0gbnVsbDsgfSwgMzAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RhcCA9IGUucG9pbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RUYXAgPSB0aGlzLl90YXBwZWRQb2ludDtcblxuICAgICAgICAgICAgaWYgKGZpcnN0VGFwICYmIGZpcnN0VGFwLmRpc3QobmV3VGFwKSA8PSBtYXhEaXN0KSB7XG4gICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgZHVwbGljYXRlIHpvb20gb24gZGJsY2xpY2tcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVG91Y2hFbmQgPSAoKSA9PiB7IC8vIGlnbm9yZSB0aGUgdG91Y2hlbmQgZXZlbnQsIGFzIGl0IGhhcyBubyBwb2ludCB3ZSBjYW4gem9vbSB0b1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFwcGVkKSB7IC8vIG1ha2Ugc3VyZSB3ZSBhcmUgc3RpbGwgd2l0aGluIHRoZSB0aW1lb3V0IHdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fem9vbShlKTsgLy8gcGFzcyB0aGUgb3JpZ2luYWwgdG91Y2hzdGFydCBldmVudCwgd2l0aCB0aGUgdGFwcGVkIHBvaW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hjYW5jZWwnLCBvblRvdWNoQ2FuY2VsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUYXBwZWQoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25Ub3VjaENhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUYXBwZWQoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoY2FuY2VsJywgb25Ub3VjaENhbmNlbCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvdWNoZXMgYXJlIHRvbyBmYXIgYXBhcnQsIGRvbid0IHpvb21cbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Jlc2V0VGFwcGVkKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGFwcGVkKTtcbiAgICAgICAgdGhpcy5fdGFwcGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdGFwcGVkUG9pbnQgPSBudWxsO1xuICAgIH1cblxuICAgIG9uRGJsQ2xpY2soZTogTWFwTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3pvb20oZSk7XG4gICAgfVxuXG4gICAgX3pvb20oZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCd6b29tZW5kJywgdGhpcy5fb25ab29tRW5kKTtcbiAgICAgICAgdGhpcy5fbWFwLnpvb21UbyhcbiAgICAgICAgICAgIHRoaXMuX21hcC5nZXRab29tKCkgKyAoZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ID8gLTEgOiAxKSxcbiAgICAgICAgICAgIHthcm91bmQ6IGUubG5nTGF0fSxcbiAgICAgICAgICAgIGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfb25ab29tRW5kKCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbWVuZCcsIHRoaXMuX29uWm9vbUVuZCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3VibGVDbGlja1pvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2JlemllciwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vLi4vdXRpbC90YXNrX3F1ZXVlJztcblxuY29uc3QgaW5lcnRpYUxpbmVhcml0eSA9IDAuMTUsXG4gICAgaW5lcnRpYUVhc2luZyA9IGJlemllcigwLCAwLCBpbmVydGlhTGluZWFyaXR5LCAxKSxcbiAgICBpbmVydGlhRGVjZWxlcmF0aW9uID0gMTIsIC8vIHNjYWxlIC8gc14yXG4gICAgaW5lcnRpYU1heFNwZWVkID0gMi41LCAvLyBzY2FsZSAvIHNcbiAgICBzaWduaWZpY2FudFNjYWxlVGhyZXNob2xkID0gMC4xNSxcbiAgICBzaWduaWZpY2FudFJvdGF0ZVRocmVzaG9sZCA9IDEwO1xuXG4vKipcbiAqIFRoZSBgVG91Y2hab29tUm90YXRlSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gYW5kIHJvdGF0ZSB0aGUgbWFwIGJ5XG4gKiBwaW5jaGluZyBvbiBhIHRvdWNoc2NyZWVuLlxuICovXG5jbGFzcyBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuICAgIF9yb3RhdGlvbkRpc2FibGVkOiBib29sZWFuO1xuICAgIF9zdGFydFZlYzogUG9pbnQ7XG4gICAgX3N0YXJ0QXJvdW5kOiBMbmdMYXQ7XG4gICAgX3N0YXJ0U2NhbGU6IG51bWJlcjtcbiAgICBfc3RhcnRCZWFyaW5nOiBudW1iZXI7XG4gICAgX2dlc3R1cmVJbnRlbnQ6ICdyb3RhdGUnIHwgJ3pvb20nIHwgdm9pZDtcbiAgICBfaW5lcnRpYTogQXJyYXk8W251bWJlciwgbnVtYmVyLCBQb2ludF0+O1xuICAgIF9sYXN0VG91Y2hFdmVudDogVG91Y2hFdmVudDtcbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdfb25FbmQnLFxuICAgICAgICAgICAgJ19vblRvdWNoRnJhbWUnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcm91bmRdIElmIFwiY2VudGVyXCIgaXMgcGFzc2VkLCBtYXAgd2lsbCB6b29tIGFyb3VuZCB0aGUgY2VudGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pO1xuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiA/e2Fyb3VuZD86ICdjZW50ZXInfSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZScpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gISFvcHRpb25zICYmIG9wdGlvbnMuYXJvdW5kID09PSAnY2VudGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUnKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLCBsZWF2aW5nIHRoZSBcInBpbmNoIHRvIHpvb21cIlxuICAgICAqIGludGVyYWN0aW9uIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5kaXNhYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlUm90YXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZW5hYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBlbmFibGVSb3RhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGFuZGxlciBpcyBlbmFibGVkIGFuZCBoYXMgZGV0ZWN0ZWQgdGhlIHN0YXJ0IG9mIGEgem9vbS9yb3RhdGUgZ2VzdHVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyXG4gICAgICovXG4gICAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZCgpICYmICEhdGhpcy5fZ2VzdHVyZUludGVudDtcbiAgICB9XG5cbiAgICBvblN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcDAgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1swXSksXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzFdKSxcbiAgICAgICAgICAgIGNlbnRlciA9IHAwLmFkZChwMSkuZGl2KDIpO1xuXG4gICAgICAgIHRoaXMuX3N0YXJ0VmVjID0gcDAuc3ViKHAxKTtcbiAgICAgICAgdGhpcy5fc3RhcnRBcm91bmQgPSB0aGlzLl9tYXAudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oY2VudGVyKTtcbiAgICAgICAgdGhpcy5fZ2VzdHVyZUludGVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtdO1xuXG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25FbmQpO1xuICAgIH1cblxuICAgIF9nZXRUb3VjaEV2ZW50RGF0YShlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHAwID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlLnRvdWNoZXNbMF0pLFxuICAgICAgICAgICAgcDEgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1sxXSk7XG5cbiAgICAgICAgY29uc3QgdmVjID0gcDAuc3ViKHAxKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZlYyxcbiAgICAgICAgICAgIGNlbnRlcjogcDAuYWRkKHAxKS5kaXYoMiksXG4gICAgICAgICAgICBzY2FsZTogdmVjLm1hZygpIC8gdGhpcy5fc3RhcnRWZWMubWFnKCksXG4gICAgICAgICAgICBiZWFyaW5nOiB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID8gMCA6IHZlYy5hbmdsZVdpdGgodGhpcy5fc3RhcnRWZWMpICogMTgwIC8gTWF0aC5QSVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCAhPT0gMikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHt2ZWMsIHNjYWxlLCBiZWFyaW5nfSA9IHRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpO1xuXG4gICAgICAgIC8vIERldGVybWluZSAnaW50ZW50JyBieSB3aGljaGV2ZXIgdGhyZXNob2xkIGlzIHN1cnBhc3NlZCBmaXJzdCxcbiAgICAgICAgLy8gdGhlbiBrZWVwIHRoYXQgc3RhdGUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGdlc3R1cmUuXG4gICAgICAgIGlmICghdGhpcy5fZ2VzdHVyZUludGVudCkge1xuICAgICAgICAgICAgLy8gd2hlbiByb3RhdGlvbiBpcyBkaXNhYmxlZCwgYW55IHNjYWxlIGNoYW5nZSB0cmlnZ2VycyB0aGUgem9vbSBnZXN0dXJlIHRvIHN0YXJ0XG4gICAgICAgICAgICBjb25zdCBzY2FsaW5nU2lnbmlmaWNhbnRseSA9ICh0aGlzLl9yb3RhdGlvbkRpc2FibGVkICYmIHNjYWxlICE9PSAxKSB8fCAoTWF0aC5hYnMoMSAtIHNjYWxlKSA+IHNpZ25pZmljYW50U2NhbGVUaHJlc2hvbGQpLFxuICAgICAgICAgICAgICAgIHJvdGF0aW5nU2lnbmlmaWNhbnRseSA9IChNYXRoLmFicyhiZWFyaW5nKSA+IHNpZ25pZmljYW50Um90YXRlVGhyZXNob2xkKTtcblxuICAgICAgICAgICAgaWYgKHJvdGF0aW5nU2lnbmlmaWNhbnRseSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlc3R1cmVJbnRlbnQgPSAncm90YXRlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NhbGluZ1NpZ25pZmljYW50bHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXN0dXJlSW50ZW50ID0gJ3pvb20nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZ2VzdHVyZUludGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChgJHt0aGlzLl9nZXN0dXJlSW50ZW50fXN0YXJ0YCwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFZlYyA9IHZlYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RUb3VjaEV2ZW50ID0gZTtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25Ub3VjaEZyYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25Ub3VjaEZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBnZXN0dXJlSW50ZW50ID0gdGhpcy5fZ2VzdHVyZUludGVudDtcbiAgICAgICAgaWYgKCFnZXN0dXJlSW50ZW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLl9tYXAudHJhbnNmb3JtO1xuXG4gICAgICAgIGlmICghdGhpcy5fc3RhcnRTY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRTY2FsZSA9IHRyLnNjYWxlO1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRCZWFyaW5nID0gdHIuYmVhcmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtjZW50ZXIsIGJlYXJpbmcsIHNjYWxlfSA9IHRoaXMuX2dldFRvdWNoRXZlbnREYXRhKHRoaXMuX2xhc3RUb3VjaEV2ZW50KTtcbiAgICAgICAgY29uc3QgYXJvdW5kID0gdHIucG9pbnRMb2NhdGlvbihjZW50ZXIpO1xuICAgICAgICBjb25zdCBhcm91bmRQb2ludCA9IHRyLmxvY2F0aW9uUG9pbnQoYXJvdW5kKTtcblxuICAgICAgICBpZiAoZ2VzdHVyZUludGVudCA9PT0gJ3JvdGF0ZScpIHtcbiAgICAgICAgICAgIHRyLmJlYXJpbmcgPSB0aGlzLl9zdGFydEJlYXJpbmcgKyBiZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgdHIuem9vbSA9IHRyLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlICogc2NhbGUpO1xuICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQodGhpcy5fc3RhcnRBcm91bmQsIGFyb3VuZFBvaW50KTtcblxuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoZ2VzdHVyZUludGVudCwge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpO1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFRvdWNoRXZlbnR9KSk7XG5cbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG4gICAgICAgIHRoaXMuX2luZXJ0aWEucHVzaChbYnJvd3Nlci5ub3coKSwgc2NhbGUsIGNlbnRlcl0pO1xuICAgIH1cblxuICAgIF9vbkVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25FbmQpO1xuXG4gICAgICAgIGNvbnN0IGdlc3R1cmVJbnRlbnQgPSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBjb25zdCBzdGFydFNjYWxlID0gdGhpcy5fc3RhcnRTY2FsZTtcblxuICAgICAgICBpZiAodGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRTY2FsZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0QmVhcmluZztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RUb3VjaEV2ZW50O1xuXG4gICAgICAgIGlmICghZ2VzdHVyZUludGVudCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChgJHtnZXN0dXJlSW50ZW50fWVuZGAsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuXG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG1hcC5zbmFwVG9Ob3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBpbmVydGlhW2luZXJ0aWEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBmaXJzdCA9IGluZXJ0aWFbMF0sXG4gICAgICAgICAgICBsYXN0U2NhbGUgPSBtYXAudHJhbnNmb3JtLnNjYWxlWm9vbShzdGFydFNjYWxlICogbGFzdFsxXSksXG4gICAgICAgICAgICBmaXJzdFNjYWxlID0gbWFwLnRyYW5zZm9ybS5zY2FsZVpvb20oc3RhcnRTY2FsZSAqIGZpcnN0WzFdKSxcbiAgICAgICAgICAgIHNjYWxlT2Zmc2V0ID0gbGFzdFNjYWxlIC0gZmlyc3RTY2FsZSxcbiAgICAgICAgICAgIHNjYWxlRHVyYXRpb24gPSAobGFzdFswXSAtIGZpcnN0WzBdKSAvIDEwMDAsXG4gICAgICAgICAgICBwID0gbGFzdFsyXTtcblxuICAgICAgICBpZiAoc2NhbGVEdXJhdGlvbiA9PT0gMCB8fCBsYXN0U2NhbGUgPT09IGZpcnN0U2NhbGUpIHtcbiAgICAgICAgICAgIG1hcC5zbmFwVG9Ob3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBzY2FsZS9zIHNwZWVkIGFuZCBhZGp1c3QgZm9yIGluY3JlYXNlZCBpbml0aWFsIGFuaW1hdGlvbiBzcGVlZCB3aGVuIGVhc2luZ1xuICAgICAgICBsZXQgc3BlZWQgPSBzY2FsZU9mZnNldCAqIGluZXJ0aWFMaW5lYXJpdHkgLyBzY2FsZUR1cmF0aW9uOyAvLyBzY2FsZS9zXG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHNwZWVkKSA+IGluZXJ0aWFNYXhTcGVlZCkge1xuICAgICAgICAgICAgaWYgKHNwZWVkID4gMCkge1xuICAgICAgICAgICAgICAgIHNwZWVkID0gaW5lcnRpYU1heFNwZWVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGVlZCA9IC1pbmVydGlhTWF4U3BlZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGguYWJzKHNwZWVkIC8gKGluZXJ0aWFEZWNlbGVyYXRpb24gKiBpbmVydGlhTGluZWFyaXR5KSkgKiAxMDAwO1xuICAgICAgICBjb25zdCB0YXJnZXRTY2FsZSA9IGxhc3RTY2FsZSArIHNwZWVkICogZHVyYXRpb24gLyAyMDAwO1xuXG4gICAgICAgIG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgem9vbTogdGFyZ2V0U2NhbGUsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIGVhc2luZzogaW5lcnRpYUVhc2luZyxcbiAgICAgICAgICAgIGFyb3VuZDogdGhpcy5fYXJvdW5kQ2VudGVyID8gbWFwLmdldENlbnRlcigpIDogbWFwLnVucHJvamVjdChwKSxcbiAgICAgICAgICAgIG5vTW92ZVN0YXJ0OiB0cnVlXG4gICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAvLyBtc2VjXG5cbiAgICAgICAgd2hpbGUgKGluZXJ0aWEubGVuZ3RoID4gMiAmJiBub3cgLSBpbmVydGlhWzBdWzBdID4gY3V0b2ZmKSBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtNYXBNb3VzZUV2ZW50LCBNYXBUb3VjaEV2ZW50LCBNYXBXaGVlbEV2ZW50fSBmcm9tICcuLi91aS9ldmVudHMnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHNjcm9sbFpvb20gZnJvbSAnLi9oYW5kbGVyL3Njcm9sbF96b29tJztcbmltcG9ydCBib3hab29tIGZyb20gJy4vaGFuZGxlci9ib3hfem9vbSc7XG5pbXBvcnQgZHJhZ1JvdGF0ZSBmcm9tICcuL2hhbmRsZXIvZHJhZ19yb3RhdGUnO1xuaW1wb3J0IGRyYWdQYW4gZnJvbSAnLi9oYW5kbGVyL2RyYWdfcGFuJztcbmltcG9ydCBrZXlib2FyZCBmcm9tICcuL2hhbmRsZXIva2V5Ym9hcmQnO1xuaW1wb3J0IGRvdWJsZUNsaWNrWm9vbSBmcm9tICcuL2hhbmRsZXIvZGJsY2xpY2tfem9vbSc7XG5pbXBvcnQgdG91Y2hab29tUm90YXRlIGZyb20gJy4vaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZSc7XG5cbmNvbnN0IGhhbmRsZXJzID0ge1xuICAgIHNjcm9sbFpvb20sXG4gICAgYm94Wm9vbSxcbiAgICBkcmFnUm90YXRlLFxuICAgIGRyYWdQYW4sXG4gICAga2V5Ym9hcmQsXG4gICAgZG91YmxlQ2xpY2tab29tLFxuICAgIHRvdWNoWm9vbVJvdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZEhhbmRsZXJzKG1hcDogTWFwLCBvcHRpb25zOiB7aW50ZXJhY3RpdmU6IGJvb2xlYW4sIGNsaWNrVG9sZXJhbmNlOiBudW1iZXJ9KSB7XG4gICAgY29uc3QgZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgbGV0IGNvbnRleHRNZW51RXZlbnQgPSBudWxsO1xuICAgIGxldCBtb3VzZURvd24gPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRQb3MgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIGhhbmRsZXJzKSB7XG4gICAgICAgIChtYXA6IGFueSlbbmFtZV0gPSBuZXcgaGFuZGxlcnNbbmFtZV0obWFwLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgb3B0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgKG1hcDogYW55KVtuYW1lXS5lbmFibGUob3B0aW9uc1tuYW1lXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlb3V0Jywgb25Nb3VzZU91dCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlb3ZlcicsIG9uTW91c2VPdmVyKTtcblxuICAgIC8vIEJpbmQgdG91Y2hzdGFydCBhbmQgdG91Y2htb3ZlIHdpdGggcGFzc2l2ZTogZmFsc2UgYmVjYXVzZSwgZXZlbiB0aG91Z2hcbiAgICAvLyB0aGV5IG9ubHkgZmlyZSBhIG1hcCBldmVudHMgYW5kIHRoZXJlZm9yZSBjb3VsZCB0aGVvcmV0aWNhbGx5IGJlXG4gICAgLy8gcGFzc2l2ZSwgYmluZGluZyB3aXRoIHBhc3NpdmU6IHRydWUgY2F1c2VzIGlPUyBub3QgdG8gcmVzcGVjdFxuICAgIC8vIGUucHJldmVudERlZmF1bHQoKSBpbiBfb3RoZXJfIGhhbmRsZXJzLCBldmVuIGlmIHRoZXkgYXJlIG5vbi1wYXNzaXZlXG4gICAgLy8gKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjUxKVxuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwge3Bhc3NpdmU6IGZhbHNlfSk7XG5cbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaGNhbmNlbCcsIG9uVG91Y2hDYW5jZWwpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCBvbkNsaWNrKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2RibGNsaWNrJywgb25EYmxDbGljayk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjb250ZXh0bWVudScsIG9uQ29udGV4dE1lbnUpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnd2hlZWwnLCBvbldoZWVsLCB7cGFzc2l2ZTogZmFsc2V9KTtcblxuICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgc3RhcnRQb3MgPSBET00ubW91c2VQb3MoZWwsIGUpO1xuXG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgIW1hcC5kb3VibGVDbGlja1pvb20uaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5ib3hab29tLm9uTW91c2VEb3duKGUpO1xuXG4gICAgICAgIGlmICghbWFwLmJveFpvb20uaXNBY3RpdmUoKSAmJiAhbWFwLmRyYWdQYW4uaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUub25Nb3VzZURvd24oZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hcC5ib3hab29tLmlzQWN0aXZlKCkgJiYgIW1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5kcmFnUGFuLm9uTW91c2VEb3duKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm90YXRpbmcgPSBtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO1xuXG4gICAgICAgIGlmIChjb250ZXh0TWVudUV2ZW50ICYmICFyb3RhdGluZykge1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBNYWNcbiAgICAgICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdjb250ZXh0bWVudScsIG1hcCwgY29udGV4dE1lbnVFdmVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dE1lbnVFdmVudCA9IG51bGw7XG4gICAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZXVwJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAobWFwLmRyYWdQYW4uaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBpZiAobWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSkgcmV0dXJuO1xuXG4gICAgICAgIGxldCB0YXJnZXQ6ID9Ob2RlID0gKGUudGFyZ2V0OiBhbnkpO1xuICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZWwpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBlbCkgcmV0dXJuO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlT3ZlcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGxldCB0YXJnZXQ6ID9Ob2RlID0gKGUudGFyZ2V0OiBhbnkpO1xuICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZWwpIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBlbCkgcmV0dXJuO1xuXG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdtb3VzZW92ZXInLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlT3V0KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlb3V0JywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwVG91Y2hFdmVudCgndG91Y2hzdGFydCcsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIG1hcC5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hcC5ib3hab29tLmlzQWN0aXZlKCkgJiYgIW1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG1hcC5kcmFnUGFuLm9uVG91Y2hTdGFydChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC50b3VjaFpvb21Sb3RhdGUub25TdGFydChlKTtcbiAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5vblRvdWNoU3RhcnQobWFwRXZlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNobW92ZScsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hFbmQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBtYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudCgndG91Y2hlbmQnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblRvdWNoQ2FuY2VsKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoJ3RvdWNoY2FuY2VsJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbGljayhlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyhlbCwgZSk7XG4gICAgICAgIGlmICghc3RhcnRQb3MgfHwgcG9zLmVxdWFscyhzdGFydFBvcykgfHwgcG9zLmRpc3Qoc3RhcnRQb3MpIDwgb3B0aW9ucy5jbGlja1RvbGVyYW5jZSkge1xuICAgICAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NsaWNrJywgbWFwLCBlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkRibENsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwTW91c2VFdmVudCgnZGJsY2xpY2snLCBtYXAsIGUpO1xuICAgICAgICBtYXAuZmlyZShtYXBFdmVudCk7XG5cbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhtYXBFdmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Db250ZXh0TWVudShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdGF0aW5nID0gbWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtcbiAgICAgICAgaWYgKCFtb3VzZURvd24gJiYgIXJvdGF0aW5nKSB7XG4gICAgICAgICAgICAvLyBXaW5kb3dzOiBjb250ZXh0bWVudSBmaXJlZCBvbiBtb3VzZXVwLCBzbyBmaXJlIGV2ZW50IG5vd1xuICAgICAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NvbnRleHRtZW51JywgbWFwLCBlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobW91c2VEb3duKSB7XG4gICAgICAgICAgICAvLyBNYWM6IGNvbnRleHRtZW51IGZpcmVkIG9uIG1vdXNlZG93bjsgd2Ugc2F2ZSBpdCB1bnRpbCBtb3VzZXVwIGZvciBjb25zaXN0ZW5jeSdzIHNha2VcbiAgICAgICAgICAgIGNvbnRleHRNZW51RXZlbnQgPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudSB3aGVuIG5lY2Vzc2FyeTsgd2UgZG9uJ3QgYWxsb3cgaXQgd2l0aCByb3RhdGlvblxuICAgICAgICAvLyBiZWNhdXNlIHdlIGNhbid0IGRpc2Nlcm4gcm90YXRpb24gZ2VzdHVyZSBzdGFydCBmcm9tIGNvbnRleHRtZW51IG9uIE1hY1xuICAgICAgICBpZiAobWFwLmRyYWdSb3RhdGUuaXNFbmFibGVkKCkgfHwgbWFwLmxpc3RlbnMoJ2NvbnRleHRtZW51JykpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uV2hlZWwoZTogV2hlZWxFdmVudCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgbWFwLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcEV2ZW50ID0gbmV3IE1hcFdoZWVsRXZlbnQoJ3doZWVsJywgbWFwLCBlKTtcbiAgICAgICAgbWFwLmZpcmUobWFwRXZlbnQpO1xuXG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuc2Nyb2xsWm9vbS5vbldoZWVsKGUpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgYmluZEFsbCxcbiAgICBleHRlbmQsXG4gICAgZGVlcEVxdWFsLFxuICAgIHdhcm5PbmNlLFxuICAgIGNsYW1wLFxuICAgIHdyYXAsXG4gICAgZWFzZSBhcyBkZWZhdWx0RWFzaW5nLFxuICAgIHBpY2tcbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vKipcbiAqIE9wdGlvbnMgY29tbW9uIHRvIHtAbGluayBNYXAjanVtcFRvfSwge0BsaW5rIE1hcCNlYXNlVG99LCBhbmQge0BsaW5rIE1hcCNmbHlUb30sIGNvbnRyb2xsaW5nIHRoZSBkZXNpcmVkIGxvY2F0aW9uLFxuICogem9vbSwgYmVhcmluZywgYW5kIHBpdGNoIG9mIHRoZSBjYW1lcmEuIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgYW5kIHdoZW4gYSBwcm9wZXJ0eSBpcyBvbWl0dGVkLCB0aGUgY3VycmVudFxuICogY2FtZXJhIHZhbHVlIGZvciB0aGF0IHByb3BlcnR5IHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW1lcmFPcHRpb25zXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGNlbnRlciBUaGUgZGVzaXJlZCBjZW50ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gem9vbSBUaGUgZGVzaXJlZCB6b29tIGxldmVsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZywgaW4gZGVncmVlcy4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXRcbiAqIGlzIFwidXBcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZyBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwaXRjaCBUaGUgZGVzaXJlZCBwaXRjaCwgaW4gZGVncmVlcy5cbiAqIEBwcm9wZXJ0eSB7TG5nTGF0TGlrZX0gYXJvdW5kIElmIGB6b29tYCBpcyBzcGVjaWZpZWQsIGBhcm91bmRgIGRldGVybWluZXMgdGhlIHBvaW50IGFyb3VuZCB3aGljaCB0aGUgem9vbSBpcyBjZW50ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FtZXJhT3B0aW9ucyA9IHtcbiAgICBjZW50ZXI/OiBMbmdMYXRMaWtlLFxuICAgIHpvb20/OiBudW1iZXIsXG4gICAgYmVhcmluZz86IG51bWJlcixcbiAgICBwaXRjaD86IG51bWJlcixcbiAgICBhcm91bmQ/OiBMbmdMYXRMaWtlXG59O1xuXG4vKipcbiAqIE9wdGlvbnMgY29tbW9uIHRvIG1hcCBtb3ZlbWVudCBtZXRob2RzIHRoYXQgaW52b2x2ZSBhbmltYXRpb24sIHN1Y2ggYXMge0BsaW5rIE1hcCNwYW5CeX0gYW5kXG4gKiB7QGxpbmsgTWFwI2Vhc2VUb30sIGNvbnRyb2xsaW5nIHRoZSBkdXJhdGlvbiBhbmQgZWFzaW5nIGZ1bmN0aW9uIG9mIHRoZSBhbmltYXRpb24uIEFsbCBwcm9wZXJ0aWVzXG4gKiBhcmUgb3B0aW9uYWwuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQW5pbWF0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGR1cmF0aW9uIFRoZSBhbmltYXRpb24ncyBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZWFzaW5nIEEgZnVuY3Rpb24gdGFraW5nIGEgdGltZSBpbiB0aGUgcmFuZ2UgMC4uMSBhbmQgcmV0dXJuaW5nIGEgbnVtYmVyIHdoZXJlIDAgaXNcbiAqICAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIDEgaXMgdGhlIGZpbmFsIHN0YXRlLlxuICogQHByb3BlcnR5IHtQb2ludExpa2V9IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGNlbnRlciByZWxhdGl2ZSB0byByZWFsIG1hcCBjb250YWluZXIgY2VudGVyIGF0IHRoZSBlbmQgb2YgYW5pbWF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbmltYXRlIElmIGBmYWxzZWAsIG5vIGFuaW1hdGlvbiB3aWxsIG9jY3VyLlxuICogQHByb3BlcnR5IHtib29sZWFufSBlc3NlbnRpYWwgSWYgYHRydWVgLCB0aGVuIHRoZSBhbmltYXRpb24gaXMgY29uc2lkZXJlZCBlc3NlbnRpYWwgYW5kIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5XG4gKiAgIFtgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9AbWVkaWEvcHJlZmVycy1yZWR1Y2VkLW1vdGlvbikuXG4gKi9cbmV4cG9ydCB0eXBlIEFuaW1hdGlvbk9wdGlvbnMgPSB7XG4gICAgZHVyYXRpb24/OiBudW1iZXIsXG4gICAgZWFzaW5nPzogKG51bWJlcikgPT4gbnVtYmVyLFxuICAgIG9mZnNldD86IFBvaW50TGlrZSxcbiAgICBhbmltYXRlPzogYm9vbGVhbixcbiAgICBlc3NlbnRpYWw/OiBib29sZWFuXG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHNldHRpbmcgcGFkZGluZyBvbiBhIGNhbGwgdG8ge0BsaW5rIE1hcCNmaXRCb3VuZHN9LiBBbGwgcHJvcGVydGllcyBvZiB0aGlzIG9iamVjdCBtdXN0IGJlXG4gKiBub24tbmVnYXRpdmUgaW50ZWdlcnMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFkZGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBtYXAgY2FudmFzLlxuICovXG5cbmNsYXNzIENhbWVyYSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIF9tb3Zpbmc6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX3JvdGF0aW5nOiBib29sZWFuO1xuICAgIF9waXRjaGluZzogYm9vbGVhbjtcblxuICAgIF9iZWFyaW5nU25hcDogbnVtYmVyO1xuICAgIF9lYXNlRW5kVGltZW91dElEOiBUaW1lb3V0SUQ7XG4gICAgX2Vhc2VTdGFydDogbnVtYmVyO1xuICAgIF9lYXNlT3B0aW9uczoge2R1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKG51bWJlcikgPT4gbnVtYmVyfTtcblxuICAgIF9vbkVhc2VGcmFtZTogKG51bWJlcikgPT4gdm9pZDtcbiAgICBfb25FYXNlRW5kOiAoKSA9PiB2b2lkO1xuICAgIF9lYXNlRnJhbWVJZDogP1Rhc2tJRDtcblxuICAgICtfcmVxdWVzdFJlbmRlckZyYW1lOiAoKCkgPT4gdm9pZCkgPT4gVGFza0lEO1xuICAgICtfY2FuY2VsUmVuZGVyRnJhbWU6IChUYXNrSUQpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgb3B0aW9uczoge2JlYXJpbmdTbmFwOiBudW1iZXJ9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl9iZWFyaW5nU25hcCA9IG9wdGlvbnMuYmVhcmluZ1NuYXA7XG5cbiAgICAgICAgYmluZEFsbChbJ19yZW5kZXJGcmFtZUNhbGxiYWNrJ10sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC5cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZywgdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCk7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC4gRXF1aXZhbGVudCB0byBganVtcFRvKHtjZW50ZXI6IGNlbnRlcn0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGNlbnRlciBUaGUgY2VudGVycG9pbnQgdG8gc2V0LlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRDZW50ZXIoWy03NCwgMzhdKTtcbiAgICAgKi9cbiAgICBzZXRDZW50ZXIoY2VudGVyOiBMbmdMYXRMaWtlLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXJ9LCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCBieSB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9mZnNldCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBieSB3aGljaCB0byBwYW4gdGhlIG1hcC5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIHBhbkJ5KG9mZnNldDogUG9pbnRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIG9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KS5tdWx0KC0xKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLCBleHRlbmQoe29mZnNldH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBsbmdsYXQgVGhlIGxvY2F0aW9uIHRvIHBhbiB0aGUgbWFwIHRvLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHBhblRvKGxuZ2xhdDogTG5nTGF0TGlrZSwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGNlbnRlcjogbG5nbGF0XG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBnZXRab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS56b29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyB6b29tIGxldmVsLiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe3pvb206IHpvb219KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB6b29tIFRoZSB6b29tIGxldmVsIHRvIHNldCAoMC0yMCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHpvb20gdGhlIG1hcCB0byA1XG4gICAgICogbWFwLnNldFpvb20oNSk7XG4gICAgICovXG4gICAgc2V0Wm9vbSh6b29tOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7em9vbX0sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFpvb21zIHRoZSBtYXAgdG8gdGhlIHNwZWNpZmllZCB6b29tIGxldmVsLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB6b29tIFRoZSB6b29tIGxldmVsIHRvIHRyYW5zaXRpb24gdG8uXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21Ubyh6b29tOiBudW1iZXIsIG9wdGlvbnM6ID8gQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgem9vbVxuICAgICAgICB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZWFzZXMgdGhlIG1hcCdzIHpvb20gbGV2ZWwgYnkgMS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21JbihvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpICsgMSwgb3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVhc2VzIHRoZSBtYXAncyB6b29tIGxldmVsIGJ5IDEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICB6b29tT3V0KG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkgLSAxLCBvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjdXJyZW50IGJlYXJpbmcuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0IGlzIFxcXCJ1cFxcXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmdcbiAgICAgKiBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIG1hcCdzIGN1cnJlbnQgYmVhcmluZy5cbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIGdldEJlYXJpbmcoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmJlYXJpbmc7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIGJlYXJpbmcgKHJvdGF0aW9uKS4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZ1xuICAgICAqIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBganVtcFRvKHtiZWFyaW5nOiBiZWFyaW5nfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHJvdGF0ZSB0aGUgbWFwIHRvIDkwIGRlZ3JlZXNcbiAgICAgKiBtYXAuc2V0QmVhcmluZyg5MCk7XG4gICAgICovXG4gICAgc2V0QmVhcmluZyhiZWFyaW5nOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7YmVhcmluZ30sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGJlYXJpbmcsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uXG4gICAgICogdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJvdGF0ZVRvKGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGJlYXJpbmdcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlc2V0Tm9ydGgob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnJvdGF0ZVRvKDAsIGV4dGVuZCh7ZHVyYXRpb246IDEwMDB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyBhbmQgcGl0Y2hlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpIGFuZCBwaXRjaCBpcyAww4LCsCwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZXNldE5vcnRoUGl0Y2gob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgYmVhcmluZzogMCxcbiAgICAgICAgICAgIHBpdGNoOiAwLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMDBcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNuYXBzIHRoZSBtYXAgc28gdGhhdCBub3J0aCBpcyB1cCAoMMOCwrAgYmVhcmluZyksIGlmIHRoZSBjdXJyZW50IGJlYXJpbmcgaXMgY2xvc2UgZW5vdWdoIHRvIGl0IChpLmUuIHdpdGhpbiB0aGVcbiAgICAgKiBgYmVhcmluZ1NuYXBgIHRocmVzaG9sZCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNuYXBUb05vcnRoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKSA8IHRoaXMuX2JlYXJpbmdTbmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNldE5vcnRoKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCBwaXRjaCAodGlsdCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBjdXJyZW50IHBpdGNoLCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbi5cbiAgICAgKi9cbiAgICBnZXRQaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHBpdGNoICh0aWx0KS4gRXF1aXZhbGVudCB0byBganVtcFRvKHtwaXRjaDogcGl0Y2h9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwaXRjaCBUaGUgcGl0Y2ggdG8gc2V0LCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbiAoMC02MCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2gocGl0Y2g6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtwaXRjaH0sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtMYXRMbmdCb3VuZHNMaWtlfSBib3VuZHMgQ2FsY3VsYXRlIHRoZSBjZW50ZXIgZm9yIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZVxuICAgICAqICAgICAgdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHNcbiAgICAgKiAgICAgIGluIHRoZSB2aWV3cG9ydC4gTGF0TG5nQm91bmRzIHJlcHJlc2VudCBhIGJveCB0aGF0IGlzIGFsd2F5cyBheGlzLWFsaWduZWQgd2l0aCBiZWFyaW5nIDAuXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIGNhbWVyYSB3b3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtDYW1lcmFPcHRpb25zIHwgdm9pZH0gSWYgbWFwIGlzIGFibGUgdG8gZml0IHRvIHByb3ZpZGVkIGJvdW5kcywgcmV0dXJucyBgQ2FtZXJhT3B0aW9uc2Agd2l0aFxuICAgICAqICAgICAgYGNlbnRlcmAsIGB6b29tYCwgYW5kIGBiZWFyaW5nYC4gSWYgbWFwIGlzIHVuYWJsZSB0byBmaXQsIG1ldGhvZCB3aWxsIHdhcm4gYW5kIHJldHVybiB1bmRlZmluZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5jYW1lcmFGb3JCb3VuZHMoYmJveCwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGNhbWVyYUZvckJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UsIG9wdGlvbnM/OiBDYW1lcmFPcHRpb25zKTogdm9pZCB8IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zIHtcbiAgICAgICAgYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQoYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcoYm91bmRzLmdldE5vcnRoV2VzdCgpLCBib3VuZHMuZ2V0U291dGhFYXN0KCksIDAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY2VudGVyIG9mIHRoZXNlIHR3byBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2VcbiAgICAgKiB0aGUgaGlnaGVzdCB6b29tIGxldmVsIHVwIHRvIGFuZCBpbmNsdWRpbmcgYE1hcCNnZXRNYXhab29tKClgIHRoYXQgZml0c1xuICAgICAqIHRoZSBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGF0IHRoZSBzcGVjaWZpZWQgYmVhcmluZy5cbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gcDAgRmlyc3QgcG9pbnRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHAxIFNlY29uZCBwb2ludFxuICAgICAqIEBwYXJhbSBiZWFyaW5nIERlc2lyZWQgbWFwIGJlYXJpbmcgYXQgZW5kIG9mIGFuaW1hdGlvbiwgaW4gZGVncmVlc1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBjYW1lcmEgd291bGQgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7Q2FtZXJhT3B0aW9ucyB8IHZvaWR9IElmIG1hcCBpcyBhYmxlIHRvIGZpdCB0byBwcm92aWRlZCBib3VuZHMsIHJldHVybnMgYENhbWVyYU9wdGlvbnNgIHdpdGhcbiAgICAgKiAgICAgIGBjZW50ZXJgLCBgem9vbWAsIGFuZCBgYmVhcmluZ2AuIElmIG1hcCBpcyB1bmFibGUgdG8gZml0LCBtZXRob2Qgd2lsbCB3YXJuIGFuZCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbLTc5LCA0M107XG4gICAgICogdmFyIHAxID0gWy03MywgNDVdO1xuICAgICAqIHZhciBiZWFyaW5nID0gOTA7XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMCwgcDEsIGJlYXJpbmcsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBfY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMDogTG5nTGF0TGlrZSwgcDE6IExuZ0xhdExpa2UsIGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IENhbWVyYU9wdGlvbnMpOiB2b2lkIHwgQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMge1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMudHJhbnNmb3JtLm1heFpvb21cbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZGRpbmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gb3B0aW9ucy5wYWRkaW5nO1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0ge1xuICAgICAgICAgICAgICAgIHRvcDogcCxcbiAgICAgICAgICAgICAgICBib3R0b206IHAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHAsXG4gICAgICAgICAgICAgICAgbGVmdDogcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlZXBFcXVhbChPYmplY3Qua2V5cyhvcHRpb25zLnBhZGRpbmcpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KSwgW1wiYm90dG9tXCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwidG9wXCJdKSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgXCJvcHRpb25zLnBhZGRpbmcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgb3IgYW4gT2JqZWN0IHdpdGgga2V5cyAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyYW5zZm9ybTtcblxuICAgICAgICAvLyBXZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgdXBwZXIgcmlnaHQgYW5kIGxvd2VyIGxlZnQgb2YgdGhlIGJveCBkZWZpbmVkIGJ5IHAwIGFuZCBwMVxuICAgICAgICAvLyBpbiBhIGNvb3JkaW5hdGUgc3lzdGVtIHJvdGF0ZSB0byBtYXRjaCB0aGUgZGVzdGluYXRpb24gYmVhcmluZy5cbiAgICAgICAgY29uc3QgcDB3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDApKTtcbiAgICAgICAgY29uc3QgcDF3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDEpKTtcbiAgICAgICAgY29uc3QgcDByb3RhdGVkID0gcDB3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgY29uc3QgcDFyb3RhdGVkID0gcDF3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcblxuICAgICAgICBjb25zdCB1cHBlclJpZ2h0ID0gbmV3IFBvaW50KE1hdGgubWF4KHAwcm90YXRlZC54LCBwMXJvdGF0ZWQueCksIE1hdGgubWF4KHAwcm90YXRlZC55LCBwMXJvdGF0ZWQueSkpO1xuICAgICAgICBjb25zdCBsb3dlckxlZnQgPSBuZXcgUG9pbnQoTWF0aC5taW4ocDByb3RhdGVkLngsIHAxcm90YXRlZC54KSwgTWF0aC5taW4ocDByb3RhdGVkLnksIHAxcm90YXRlZC55KSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHpvb206IGNvbnNpZGVyIHRoZSBvcmlnaW5hbCBiYm94IGFuZCBwYWRkaW5nLlxuICAgICAgICBjb25zdCBzaXplID0gdXBwZXJSaWdodC5zdWIobG93ZXJMZWZ0KTtcbiAgICAgICAgY29uc3Qgc2NhbGVYID0gKHRyLndpZHRoIC0gb3B0aW9ucy5wYWRkaW5nLmxlZnQgLSBvcHRpb25zLnBhZGRpbmcucmlnaHQpIC8gc2l6ZS54O1xuICAgICAgICBjb25zdCBzY2FsZVkgPSAodHIuaGVpZ2h0IC0gb3B0aW9ucy5wYWRkaW5nLnRvcCAtIG9wdGlvbnMucGFkZGluZy5ib3R0b20pIC8gc2l6ZS55O1xuXG4gICAgICAgIGlmIChzY2FsZVkgPCAwIHx8IHNjYWxlWCA8IDApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgICdNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgem9vbSA9IE1hdGgubWluKHRyLnNjYWxlWm9vbSh0ci5zY2FsZSAqIE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSksIG9wdGlvbnMubWF4Wm9vbSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGNlbnRlcjogYXBwbHkgdGhlIHpvb20sIHRoZSBjb25maWd1cmVkIG9mZnNldCwgYXMgd2VsbCBhcyBvZmZzZXQgdGhhdCBleGlzdHMgYXMgYSByZXN1bHQgb2YgcGFkZGluZy5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zLm9mZnNldCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdPZmZzZXRYID0gKG9wdGlvbnMucGFkZGluZy5sZWZ0IC0gb3B0aW9ucy5wYWRkaW5nLnJpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdPZmZzZXRZID0gKG9wdGlvbnMucGFkZGluZy50b3AgLSBvcHRpb25zLnBhZGRpbmcuYm90dG9tKSAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldEF0SW5pdGlhbFpvb20gPSBuZXcgUG9pbnQob2Zmc2V0LnggKyBwYWRkaW5nT2Zmc2V0WCwgb2Zmc2V0LnkgKyBwYWRkaW5nT2Zmc2V0WSk7XG4gICAgICAgIGNvbnN0IG9mZnNldEF0RmluYWxab29tID0gb2Zmc2V0QXRJbml0aWFsWm9vbS5tdWx0KHRyLnNjYWxlIC8gdHIuem9vbVNjYWxlKHpvb20pKTtcblxuICAgICAgICBjb25zdCBjZW50ZXIgPSAgdHIudW5wcm9qZWN0KHAwd29ybGQuYWRkKHAxd29ybGQpLmRpdigyKS5zdWIob2Zmc2V0QXRGaW5hbFpvb20pKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2VudGVyLFxuICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgIGJlYXJpbmdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYW5zIGFuZCB6b29tcyB0aGUgbWFwIHRvIGNvbnRhaW4gaXRzIHZpc2libGUgYXJlYSB3aXRoaW4gdGhlIHNwZWNpZmllZCBnZW9ncmFwaGljYWwgYm91bmRzLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHJlc2V0IHRoZSBtYXAncyBiZWFyaW5nIHRvIDAgaWYgYmVhcmluZyBpcyBub256ZXJvLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYm91bmRzIENlbnRlciB0aGVzZSBib3VuZHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2UgdGhlIGhpZ2hlc3RcbiAgICAgKiAgICAgIHpvb20gbGV2ZWwgdXAgdG8gYW5kIGluY2x1ZGluZyBgTWFwI2dldE1heFpvb20oKWAgdGhhdCBmaXRzIHRoZW0gaW4gdGhlIHZpZXdwb3J0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBzdXBwb3J0cyBhbGwgcHJvcGVydGllcyBmcm9tIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBhbmQge0BsaW5rIENhbWVyYU9wdGlvbnN9IGluIGFkZGl0aW9uIHRvIHRoZSBmaWVsZHMgYmVsb3cuXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxpbmVhcj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nXG4gICAgICogICAgIHtAbGluayBNYXAjZWFzZVRvfS4gSWYgYGZhbHNlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZyB7QGxpbmsgTWFwI2ZseVRvfS4gU2VlXG4gICAgICogICAgIHRob3NlIGZ1bmN0aW9ucyBhbmQge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGZvciBpbmZvcm1hdGlvbiBhYm91dCBvcHRpb25zIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmddIEFuIGVhc2luZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGVkIHRyYW5zaXRpb24uIFNlZSB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgbWFwIHZpZXcgdHJhbnNpdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtldmVudERhdGFdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG5cdCAqIEBleGFtcGxlXG4gICAgICogdmFyIGJib3ggPSBbWy03OSwgNDNdLCBbLTczLCA0NV1dO1xuICAgICAqIG1hcC5maXRCb3VuZHMoYmJveCwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0ZpdCBhIG1hcCB0byBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvKVxuICAgICAqL1xuICAgIGZpdEJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXRJbnRlcm5hbChcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhRm9yQm91bmRzKGJvdW5kcywgb3B0aW9ucyksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYW5zLCByb3RhdGVzIGFuZCB6b29tcyB0aGUgbWFwIHRvIHRvIGZpdCB0aGUgYm94IG1hZGUgYnkgcG9pbnRzIHAwIGFuZCBwMVxuICAgICAqIG9uY2UgdGhlIG1hcCBpcyByb3RhdGVkIHRvIHRoZSBzcGVjaWZpZWQgYmVhcmluZy4gVG8gem9vbSB3aXRob3V0IHJvdGF0aW5nLFxuICAgICAqIHBhc3MgaW4gdGhlIGN1cnJlbnQgbWFwIGJlYXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwMCBGaXJzdCBwb2ludCBvbiBzY3JlZW4sIGluIHBpeGVsIGNvb3JkaW5hdGVzXG4gICAgICogQHBhcmFtIHAxIFNlY29uZCBwb2ludCBvbiBzY3JlZW4sIGluIHBpeGVsIGNvb3JkaW5hdGVzXG4gICAgICogQHBhcmFtIGJlYXJpbmcgRGVzaXJlZCBtYXAgYmVhcmluZyBhdCBlbmQgb2YgYW5pbWF0aW9uLCBpbiBkZWdyZWVzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGluZWFyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmdcbiAgICAgKiAgICAge0BsaW5rIE1hcCNlYXNlVG99LiBJZiBgZmFsc2VgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nIHtAbGluayBNYXAjZmx5VG99LiBTZWVcbiAgICAgKiAgICAgdGhvc2UgZnVuY3Rpb25zIGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gZm9yIGluZm9ybWF0aW9uIGFib3V0IG9wdGlvbnMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ10gQW4gZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0ZWQgdHJhbnNpdGlvbi4gU2VlIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBtYXAgdmlldyB0cmFuc2l0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG5cdCAqIEBleGFtcGxlXG4gICAgICogdmFyIHAwID0gWzIyMCwgNDAwXTtcbiAgICAgKiB2YXIgcDEgPSBbNTAwLCA5MDBdO1xuICAgICAqIG1hcC5maXRTY3JlZW5Db29yZGluYXRlcyhwMCwgcDEsIG1hcC5nZXRCZWFyaW5nKCksIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtVc2VkIGJ5IEJveFpvb21IYW5kbGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvI2JveHpvb21oYW5kbGVyKVxuICAgICAqL1xuICAgIGZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwOiBQb2ludExpa2UsIHAxOiBQb2ludExpa2UsIGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKFBvaW50LmNvbnZlcnQocDApKSxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKFBvaW50LmNvbnZlcnQocDEpKSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMpLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgX2ZpdEludGVybmFsKGNhbGN1bGF0ZWRPcHRpb25zPzogQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIGNhbWVyYUZvckJvdW5kcyB3YXJucyArIHJldHVybnMgdW5kZWZpbmVkIGlmIHVuYWJsZSB0byBmaXQ6XG4gICAgICAgIGlmICghY2FsY3VsYXRlZE9wdGlvbnMpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoY2FsY3VsYXRlZE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmxpbmVhciA/XG4gICAgICAgICAgICB0aGlzLmVhc2VUbyhvcHRpb25zLCBldmVudERhdGEpIDpcbiAgICAgICAgICAgIHRoaXMuZmx5VG8ob3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgd2l0aG91dFxuICAgICAqIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uIFRoZSBtYXAgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWVzIGZvciBhbnlcbiAgICAgKiBkZXRhaWxzIG5vdCBzcGVjaWZpZWQgaW4gYG9wdGlvbnNgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAganVtcFRvKG9wdGlvbnM6IENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBsZXQgem9vbUNoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gZmFsc2UsXG4gICAgICAgICAgICBwaXRjaENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoJ3pvb20nIGluIG9wdGlvbnMgJiYgdHIuem9vbSAhPT0gK29wdGlvbnMuem9vbSkge1xuICAgICAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuem9vbSA9ICtvcHRpb25zLnpvb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jZW50ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHIuY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdiZWFyaW5nJyBpbiBvcHRpb25zICYmIHRyLmJlYXJpbmcgIT09ICtvcHRpb25zLmJlYXJpbmcpIHtcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLmJlYXJpbmcgPSArb3B0aW9ucy5iZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwaXRjaCcgaW4gb3B0aW9ucyAmJiB0ci5waXRjaCAhPT0gK29wdGlvbnMucGl0Y2gpIHtcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci5waXRjaCA9ICtvcHRpb25zLnBpdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnbW92ZScsIGV2ZW50RGF0YSkpO1xuXG4gICAgICAgIGlmICh6b29tQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmdDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGl0Y2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoJywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb25cbiAgICAgKiBiZXR3ZWVuIG9sZCBhbmQgbmV3IHZhbHVlcy4gVGhlIG1hcCB3aWxsIHJldGFpbiBpdHMgY3VycmVudCB2YWx1ZXMgZm9yIGFueVxuICAgICAqIGRldGFpbHMgbm90IHNwZWNpZmllZCBpbiBgb3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGUgdHJhbnNpdGlvbiB3aWxsIGhhcHBlbiBpbnN0YW50bHkgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWRcbiAgICAgKiB0aGUgYHJlZHVjZWQgbW90aW9uYCBhY2Nlc2liaWxpdHkgZmVhdHVyZSBlbmFibGVkIGluIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0sXG4gICAgICogdW5sZXNzICdvcHRpb25zJyBpbmNsdWRlcyBgZXNzZW50aWFsOiB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqICAgICAgICAgICAgQWNjZXB0cyB7QGxpbmsgQ2FtZXJhT3B0aW9uc30gYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIHBpdGNoXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEBmaXJlcyBwaXRjaGVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgZWFzZVRvKG9wdGlvbnM6IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zICYge2RlbGF5RW5kRXZlbnRzPzogbnVtYmVyfSwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwLFxuICAgICAgICAgICAgZWFzaW5nOiBkZWZhdWx0RWFzaW5nXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8ICghb3B0aW9ucy5lc3NlbnRpYWwgJiYgYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikpIG9wdGlvbnMuZHVyYXRpb24gPSAwO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICBzdGFydFpvb20gPSB0aGlzLmdldFpvb20oKSxcbiAgICAgICAgICAgIHN0YXJ0QmVhcmluZyA9IHRoaXMuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgc3RhcnRQaXRjaCA9IHRoaXMuZ2V0UGl0Y2goKSxcblxuICAgICAgICAgICAgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gK29wdGlvbnMuem9vbSA6IHN0YXJ0Wm9vbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2ggPSAncGl0Y2gnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5waXRjaCA6IHN0YXJ0UGl0Y2g7XG5cbiAgICAgICAgY29uc3QgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KSk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcbiAgICAgICAgY29uc3QgZmluYWxTY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcblxuICAgICAgICBsZXQgYXJvdW5kLCBhcm91bmRQb2ludDtcblxuICAgICAgICBpZiAob3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgIGFyb3VuZCA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuYXJvdW5kKTtcbiAgICAgICAgICAgIGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9ICh6b29tICE9PSBzdGFydFpvb20pO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IChzdGFydEJlYXJpbmcgIT09IGJlYXJpbmcpO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IChwaXRjaCAhPT0gc3RhcnRQaXRjaCk7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBvcHRpb25zLm5vTW92ZVN0YXJ0KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCk7XG5cbiAgICAgICAgdGhpcy5fZWFzZSgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgICAgICB0ci56b29tID0gaW50ZXJwb2xhdGUoc3RhcnRab29tLCB6b29tLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgICAgIHRyLmJlYXJpbmcgPSBpbnRlcnBvbGF0ZShzdGFydEJlYXJpbmcsIGJlYXJpbmcsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIucGl0Y2ggPSBpbnRlcnBvbGF0ZShzdGFydFBpdGNoLCBwaXRjaCwgayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhcm91bmQpIHtcbiAgICAgICAgICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQoYXJvdW5kLCBhcm91bmRQb2ludCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdHIuem9vbVNjYWxlKHRyLnpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB6b29tID4gc3RhcnRab29tID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oMiwgZmluYWxTY2FsZSkgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLjUsIGZpbmFsU2NhbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkdXAgPSBNYXRoLnBvdyhiYXNlLCAxIC0gayk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQoayAqIHNwZWVkdXApKS5tdWx0KHNjYWxlKSk7XG4gICAgICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVsYXlFbmRFdmVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNlRW5kVGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9hZnRlckVhc2UoZXZlbnREYXRhKSwgb3B0aW9ucy5kZWxheUVuZEV2ZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfcHJlcGFyZUVhc2UoZXZlbnREYXRhPzogT2JqZWN0LCBub01vdmVTdGFydDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9tb3ZpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghbm9Nb3ZlU3RhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZmlyZU1vdmVFdmVudHMoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZnRlckVhc2UoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHdhc1pvb21pbmcgPSB0aGlzLl96b29taW5nO1xuICAgICAgICBjb25zdCB3YXNSb3RhdGluZyA9IHRoaXMuX3JvdGF0aW5nO1xuICAgICAgICBjb25zdCB3YXNQaXRjaGluZyA9IHRoaXMuX3BpdGNoaW5nO1xuICAgICAgICB0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh3YXNab29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzUGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCBhbmltYXRpbmcgdGhlIHRyYW5zaXRpb24gYWxvbmcgYSBjdXJ2ZSB0aGF0XG4gICAgICogZXZva2VzIGZsaWdodC4gVGhlIGFuaW1hdGlvbiBzZWFtbGVzc2x5IGluY29ycG9yYXRlcyB6b29taW5nIGFuZCBwYW5uaW5nIHRvIGhlbHBcbiAgICAgKiB0aGUgdXNlciBtYWludGFpbiBoZXIgYmVhcmluZ3MgZXZlbiBhZnRlciB0cmF2ZXJzaW5nIGEgZ3JlYXQgZGlzdGFuY2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGUgYW5pbWF0aW9uIHdpbGwgYmUgc2tpcHBlZCwgYW5kIHRoaXMgd2lsbCBiZWhhdmUgZXF1aXZhbGVudGx5IHRvIGBqdW1wVG9gXG4gICAgICogaWYgdGhlIHVzZXIgaGFzIHRoZSBgcmVkdWNlZCBtb3Rpb25gIGFjY2VzaWJpbGl0eSBmZWF0dXJlIGVuYWJsZWQgaW4gdGhlaXIgb3BlcmF0aW5nIHN5c3RlbSxcbiAgICAgKiB1bmxlc3MgJ29wdGlvbnMnIGluY2x1ZGVzIGBlc3NlbnRpYWw6IHRydWVgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zIGRlc2NyaWJpbmcgdGhlIGRlc3RpbmF0aW9uIGFuZCBhbmltYXRpb24gb2YgdGhlIHRyYW5zaXRpb24uXG4gICAgICogICAgIEFjY2VwdHMge0BsaW5rIENhbWVyYU9wdGlvbnN9LCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30sXG4gICAgICogICAgIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY3VydmU9MS40Ml0gVGhlIHpvb21pbmcgXCJjdXJ2ZVwiIHRoYXQgd2lsbCBvY2N1ciBhbG9uZyB0aGVcbiAgICAgKiAgICAgZmxpZ2h0IHBhdGguIEEgaGlnaCB2YWx1ZSBtYXhpbWl6ZXMgem9vbWluZyBmb3IgYW4gZXhhZ2dlcmF0ZWQgYW5pbWF0aW9uLCB3aGlsZSBhIGxvd1xuICAgICAqICAgICB2YWx1ZSBtaW5pbWl6ZXMgem9vbWluZyBmb3IgYW4gZWZmZWN0IGNsb3NlciB0byB7QGxpbmsgTWFwI2Vhc2VUb30uIDEuNDIgaXMgdGhlIGF2ZXJhZ2VcbiAgICAgKiAgICAgdmFsdWUgc2VsZWN0ZWQgYnkgcGFydGljaXBhbnRzIGluIHRoZSB1c2VyIHN0dWR5IGRpc2N1c3NlZCBpblxuICAgICAqICAgICBbdmFuIFdpamsgKDIwMDMpXShodHRwczovL3d3dy53aW4udHVlLm5sL352YW53aWprL3pvb21wYW4ucGRmKS4gQSB2YWx1ZSBvZlxuICAgICAqICAgICBgTWF0aC5wb3coNiwgMC4yNSlgIHdvdWxkIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHJvb3QgbWVhbiBzcXVhcmVkIGF2ZXJhZ2UgdmVsb2NpdHkuIEFcbiAgICAgKiAgICAgdmFsdWUgb2YgMSB3b3VsZCBwcm9kdWNlIGEgY2lyY3VsYXIgbW90aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5ab29tXSBUaGUgemVyby1iYXNlZCB6b29tIGxldmVsIGF0IHRoZSBwZWFrIG9mIHRoZSBmbGlnaHQgcGF0aC4gSWZcbiAgICAgKiAgICAgYG9wdGlvbnMuY3VydmVgIGlzIHNwZWNpZmllZCwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3BlZWQ9MS4yXSBUaGUgYXZlcmFnZSBzcGVlZCBvZiB0aGUgYW5pbWF0aW9uIGRlZmluZWQgaW4gcmVsYXRpb24gdG9cbiAgICAgKiAgICAgYG9wdGlvbnMuY3VydmVgLiBBIHNwZWVkIG9mIDEuMiBtZWFucyB0aGF0IHRoZSBtYXAgYXBwZWFycyB0byBtb3ZlIGFsb25nIHRoZSBmbGlnaHQgcGF0aFxuICAgICAqICAgICBieSAxLjIgdGltZXMgYG9wdGlvbnMuY3VydmVgIHNjcmVlbmZ1bHMgZXZlcnkgc2Vjb25kLiBBIF9zY3JlZW5mdWxfIGlzIHRoZSBtYXAncyB2aXNpYmxlIHNwYW4uXG4gICAgICogICAgIEl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmaXhlZCBwaHlzaWNhbCBkaXN0YW5jZSwgYnV0IHZhcmllcyBieSB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zY3JlZW5TcGVlZF0gVGhlIGF2ZXJhZ2Ugc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiBtZWFzdXJlZCBpbiBzY3JlZW5mdWxzXG4gICAgICogICAgIHBlciBzZWNvbmQsIGFzc3VtaW5nIGEgbGluZWFyIHRpbWluZyBjdXJ2ZS4gSWYgYG9wdGlvbnMuc3BlZWRgIGlzIHNwZWNpZmllZCwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4RHVyYXRpb25dIFRoZSBhbmltYXRpb24ncyBtYXhpbXVtIGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogICAgIElmIGR1cmF0aW9uIGV4Y2VlZHMgbWF4aW11bSBkdXJhdGlvbiwgaXQgcmVzZXRzIHRvIDAuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIGZseSB3aXRoIGRlZmF1bHQgb3B0aW9ucyB0byBudWxsIGlzbGFuZFxuICAgICAqIG1hcC5mbHlUbyh7Y2VudGVyOiBbMCwgMF0sIHpvb206IDl9KTtcbiAgICAgKiAvLyB1c2luZyBmbHlUbyBvcHRpb25zXG4gICAgICogbWFwLmZseVRvKHtcbiAgICAgKiAgIGNlbnRlcjogWzAsIDBdLFxuICAgICAqICAgem9vbTogOSxcbiAgICAgKiAgIHNwZWVkOiAwLjIsXG4gICAgICogICBjdXJ2ZTogMSxcbiAgICAgKiAgIGVhc2luZyh0KSB7XG4gICAgICogICAgIHJldHVybiB0O1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZseXRvLylcbiAgICAgKiBAc2VlIFtTbG93bHkgZmx5IHRvIGEgbG9jYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmx5dG8tb3B0aW9ucy8pXG4gICAgICogQHNlZSBbRmx5IHRvIGEgbG9jYXRpb24gYmFzZWQgb24gc2Nyb2xsIHBvc2l0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3Njcm9sbC1mbHktdG8vKVxuICAgICAqL1xuICAgIGZseVRvKG9wdGlvbnM6IE9iamVjdCwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBqdW1wVG8gaWYgdXNlciBoYXMgc2V0IHByZWZlcnMtcmVkdWNlZC1tb3Rpb25cbiAgICAgICAgaWYgKCFvcHRpb25zLmVzc2VudGlhbCAmJiBicm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VyY2VkT3B0aW9ucyA9IChwaWNrKG9wdGlvbnMsIFsnY2VudGVyJywgJ3pvb20nLCAnYmVhcmluZycsICdwaXRjaCcsICdhcm91bmQnXSk6IENhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKGNvZXJjZWRPcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50cyBhbiDDosKAwpxvcHRpbWFsIHBhdGjDosKAwp0gYW5pbWF0aW9uLCBhcyBkZXRhaWxlZCBpbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVmFuIFdpamssIEphcmtlIEouOyBOdWlqLCBXaW0gQS4gQS4gw6LCgMKcU21vb3RoIGFuZCBlZmZpY2llbnQgem9vbWluZyBhbmQgcGFubmluZy7DosKAwp0gSU5GT1ZJU1xuICAgICAgICAvLyAgIMOiwoDCmTAzLiBwcC4gMTXDosKAwpMyMi4gPGh0dHBzOi8vd3d3Lndpbi50dWUubmwvfnZhbndpamsvem9vbXBhbi5wZGYjcGFnZT01Pi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlcmUgYXBwbGljYWJsZSwgbG9jYWwgdmFyaWFibGUgZG9jdW1lbnRhdGlvbiBiZWdpbnMgd2l0aCB0aGUgYXNzb2NpYXRlZCB2YXJpYWJsZSBvclxuICAgICAgICAvLyBmdW5jdGlvbiBpbiB2YW4gV2lqayAoMjAwMykuXG5cbiAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgICAgIHNwZWVkOiAxLjIsXG4gICAgICAgICAgICBjdXJ2ZTogMS40MixcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCk7XG5cbiAgICAgICAgY29uc3Qgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gY2xhbXAoK29wdGlvbnMuem9vbSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSkgOiBzdGFydFpvb207XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nO1xuICAgICAgICBjb25zdCBwaXRjaCA9ICdwaXRjaCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnBpdGNoIDogc3RhcnRQaXRjaDtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgY29uc3QgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KSk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcblxuICAgICAgICBsZXQgcmhvID0gb3B0aW9ucy5jdXJ2ZTtcblxuICAgICAgICAvLyB3w6LCgsKAOiBJbml0aWFsIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICBjb25zdCB3MCA9IE1hdGgubWF4KHRyLndpZHRoLCB0ci5oZWlnaHQpLFxuICAgICAgICAgICAgLy8gd8OiwoLCgTogRmluYWwgdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICAgICAgdzEgPSB3MCAvIHNjYWxlLFxuICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSBmbGlnaHQgcGF0aCBhcyBwcm9qZWN0ZWQgb250byB0aGUgZ3JvdW5kIHBsYW5lLCBtZWFzdXJlZCBpbiBwaXhlbHMgZnJvbVxuICAgICAgICAgICAgLy8gdGhlIHdvcmxkIGltYWdlIG9yaWdpbiBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgICAgIHUxID0gZGVsdGEubWFnKCk7XG5cbiAgICAgICAgaWYgKCdtaW5ab29tJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5ab29tID0gY2xhbXAoTWF0aC5taW4ob3B0aW9ucy5taW5ab29tLCBzdGFydFpvb20sIHpvb20pLCB0ci5taW5ab29tLCB0ci5tYXhab29tKTtcbiAgICAgICAgICAgIC8vIHc8c3ViPm08L3N1Yj46IE1heGltdW0gdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZSBpbml0aWFsXG4gICAgICAgICAgICAvLyBzY2FsZS5cbiAgICAgICAgICAgIGNvbnN0IHdNYXggPSB3MCAvIHRyLnpvb21TY2FsZShtaW5ab29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgICAgIHJobyA9IE1hdGguc3FydCh3TWF4IC8gdTEgKiAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIMOPwoHDgsKyXG4gICAgICAgIGNvbnN0IHJobzIgPSByaG8gKiByaG87XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHLDocK1wqI6IFJldHVybnMgdGhlIHpvb20tb3V0IGZhY3RvciBhdCBvbmUgZW5kIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBpIDAgZm9yIHRoZSBhc2NlbnQgb3IgMSBmb3IgdGhlIGRlc2NlbnQuXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByKGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodzEgKiB3MSAtIHcwICogdzAgKyAoaSA/IC0xIDogMSkgKiByaG8yICogcmhvMiAqIHUxICogdTEpIC8gKDIgKiAoaSA/IHcxIDogdzApICogcmhvMiAqIHUxKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoYiAqIGIgKyAxKSAtIGIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2luaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgLSBNYXRoLmV4cCgtbikpIC8gMjsgfVxuICAgICAgICBmdW5jdGlvbiBjb3NoKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSArIE1hdGguZXhwKC1uKSkgLyAyOyB9XG4gICAgICAgIGZ1bmN0aW9uIHRhbmgobikgeyByZXR1cm4gc2luaChuKSAvIGNvc2gobik7IH1cblxuICAgICAgICAvLyByw6LCgsKAOiBab29tLW91dCBmYWN0b3IgZHVyaW5nIGFzY2VudC5cbiAgICAgICAgY29uc3QgcjAgPSByKDApO1xuXG4gICAgICAgIC8vIHcocyk6IFJldHVybnMgdGhlIHZpc2libGUgc3BhbiBvbiB0aGUgZ3JvdW5kLCBtZWFzdXJlZCBpbiBwaXhlbHMgd2l0aCByZXNwZWN0IHRvIHRoZVxuICAgICAgICAvLyBpbml0aWFsIHNjYWxlLiBBc3N1bWVzIGFuIGFuZ3VsYXIgZmllbGQgb2YgdmlldyBvZiAyIGFyY3RhbiDDgsK9IMOiwonCiCA1M8OCwrAuXG4gICAgICAgIGxldCB3OiAobnVtYmVyKSA9PiBudW1iZXIgPSBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIChjb3NoKHIwKSAvIGNvc2gocjAgKyByaG8gKiBzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdShzKTogUmV0dXJucyB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIGZsaWdodCBwYXRoIGFzIHByb2plY3RlZCBvbnRvIHRoZSBncm91bmQgcGxhbmUsXG4gICAgICAgIC8vIG1lYXN1cmVkIGluIHBpeGVscyBmcm9tIHRoZSB3b3JsZCBpbWFnZSBvcmlnaW4gYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgIGxldCB1OiAobnVtYmVyKSA9PiBudW1iZXIgPSBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIHcwICogKChjb3NoKHIwKSAqIHRhbmgocjAgKyByaG8gKiBzKSAtIHNpbmgocjApKSAvIHJobzIpIC8gdTE7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUzogVG90YWwgbGVuZ3RoIG9mIHRoZSBmbGlnaHQgcGF0aCwgbWVhc3VyZWQgaW4gw4/CgS1zY3JlZW5mdWxzLlxuICAgICAgICBsZXQgUyA9IChyKDEpIC0gcjApIC8gcmhvO1xuXG4gICAgICAgIC8vIFdoZW4gdcOiwoLCgCA9IHXDosKCwoEsIHRoZSBvcHRpbWFsIHBhdGggZG9lc27DosKAwpl0IHJlcXVpcmUgYm90aCBhc2NlbnQgYW5kIGRlc2NlbnQuXG4gICAgICAgIGlmIChNYXRoLmFicyh1MSkgPCAwLjAwMDAwMSB8fCAhaXNGaW5pdGUoUykpIHtcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSBtb3JlIG9yIGxlc3MgaW5zdGFudGFuZW91cyB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHRvbyBzaG9ydC5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh3MCAtIHcxKSA8IDAuMDAwMDAxKSByZXR1cm4gdGhpcy5lYXNlVG8ob3B0aW9ucywgZXZlbnREYXRhKTtcblxuICAgICAgICAgICAgY29uc3QgayA9IHcxIDwgdzAgPyAtMSA6IDE7XG4gICAgICAgICAgICBTID0gTWF0aC5hYnMoTWF0aC5sb2codzEgLyB3MCkpIC8gcmhvO1xuXG4gICAgICAgICAgICB1ID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuICAgICAgICAgICAgdyA9IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIE1hdGguZXhwKGsgKiByaG8gKiBzKTsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZHVyYXRpb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSArb3B0aW9ucy5kdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFYgPSAnc2NyZWVuU3BlZWQnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5zY3JlZW5TcGVlZCAvIHJobyA6ICtvcHRpb25zLnNwZWVkO1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IDEwMDAgKiBTIC8gVjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm1heER1cmF0aW9uICYmIG9wdGlvbnMuZHVyYXRpb24gPiBvcHRpb25zLm1heER1cmF0aW9uKSB7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IChzdGFydEJlYXJpbmcgIT09IGJlYXJpbmcpO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IChwaXRjaCAhPT0gc3RhcnRQaXRjaCk7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5fZWFzZSgoaykgPT4ge1xuICAgICAgICAgICAgLy8gczogVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGFsb25nIHRoZSBmbGlnaHQgcGF0aCwgbWVhc3VyZWQgaW4gw4/CgS1zY3JlZW5mdWxzLlxuICAgICAgICAgICAgY29uc3QgcyA9IGsgKiBTO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gdyhzKTtcbiAgICAgICAgICAgIHRyLnpvb20gPSBrID09PSAxID8gem9vbSA6IHN0YXJ0Wm9vbSArIHRyLnNjYWxlWm9vbShzY2FsZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgICAgIHRyLmJlYXJpbmcgPSBpbnRlcnBvbGF0ZShzdGFydEJlYXJpbmcsIGJlYXJpbmcsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIucGl0Y2ggPSBpbnRlcnBvbGF0ZShzdGFydFBpdGNoLCBwaXRjaCwgayk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGsgPT09IDEgPyBjZW50ZXIgOiB0ci51bnByb2plY3QoZnJvbS5hZGQoZGVsdGEubXVsdCh1KHMpKSkubXVsdChzY2FsZSkpO1xuICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKCkgPT4gdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSksIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzRWFzaW5nKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lYXNlRnJhbWVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBhbnkgYW5pbWF0ZWQgdHJhbnNpdGlvbiB1bmRlcndheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc3RvcCgpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX2Vhc2VGcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQ7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25FYXNlRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fb25FYXNlRW5kKSB7XG4gICAgICAgICAgICAvLyBUaGUgX29uRWFzZUVuZCBmdW5jdGlvbiBtaWdodCBlbWl0IGV2ZW50cyB3aGljaCB0cmlnZ2VyIG5ld1xuICAgICAgICAgICAgLy8gYW5pbWF0aW9uLCB3aGljaCBzZXRzIGEgbmV3IF9vbkVhc2VFbmQuIEVuc3VyZSB3ZSBkb24ndCBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IHVuaW50ZW50aW9uYWxseS5cbiAgICAgICAgICAgIGNvbnN0IG9uRWFzZUVuZCA9IHRoaXMuX29uRWFzZUVuZDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbkVhc2VFbmQ7XG4gICAgICAgICAgICBvbkVhc2VFbmQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZWFzZShmcmFtZTogKG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgICBmaW5pc2g6ICgpID0+IHZvaWQsXG4gICAgICAgICAgb3B0aW9uczoge2FuaW1hdGU6IGJvb2xlYW4sIGR1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKG51bWJlcikgPT4gbnVtYmVyfSkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCBvcHRpb25zLmR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICBmcmFtZSgxKTtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWFzZVN0YXJ0ID0gYnJvd3Nlci5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuX29uRWFzZUZyYW1lID0gZnJhbWU7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VFbmQgPSBmaW5pc2g7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGxiYWNrIGZvciBtYXAuX3JlcXVlc3RSZW5kZXJGcmFtZVxuICAgIF9yZW5kZXJGcmFtZUNhbGxiYWNrKCkge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKGJyb3dzZXIubm93KCkgLSB0aGlzLl9lYXNlU3RhcnQpIC8gdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sIDEpO1xuICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcodCkpO1xuICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VGcmFtZUlkID0gdGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGJlYXJpbmcgc28gdGhhdCBpdCdzIG51bWVyaWNhbGx5IGNsb3NlIHRvIHRoZSBjdXJyZW50IG9uZSBzbyB0aGF0IGl0IGludGVycG9sYXRlcyBwcm9wZXJseVxuICAgIF9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgY3VycmVudEJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBiZWFyaW5nID0gd3JhcChiZWFyaW5nLCAtMTgwLCAxODApO1xuICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoYmVhcmluZyAtIGN1cnJlbnRCZWFyaW5nKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgLSAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nIC09IDM2MDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgKyAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nICs9IDM2MDtcbiAgICAgICAgcmV0dXJuIGJlYXJpbmc7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBwYXRoIGNyb3NzaW5nIHRoZSBhbnRpbWVyaWRpYW4gd291bGQgYmUgc2hvcnRlciwgZXh0ZW5kIHRoZSBmaW5hbCBjb29yZGluYXRlIHNvIHRoYXRcbiAgICAvLyBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdGhlIHR3byBlbmRwb2ludHMgd2lsbCBjcm9zcyBpdC5cbiAgICBfbm9ybWFsaXplQ2VudGVyKGNlbnRlcjogTG5nTGF0KSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGlmICghdHIucmVuZGVyV29ybGRDb3BpZXMgfHwgdHIubG5nUmFuZ2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGNlbnRlci5sbmcgLSB0ci5jZW50ZXIubG5nO1xuICAgICAgICBjZW50ZXIubG5nICs9XG4gICAgICAgICAgICBkZWx0YSA+IDE4MCA/IC0zNjAgOlxuICAgICAgICAgICAgZGVsdGEgPCAtMTgwID8gMzYwIDogMDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi91dGlsL2NvbmZpZyc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgY29tcGFjdD86IGJvb2xlYW4sXG4gICAgY3VzdG9tQXR0cmlidXRpb24/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+XG59O1xuXG4vKipcbiAqIEFuIGBBdHRyaWJ1dGlvbkNvbnRyb2xgIGNvbnRyb2wgcHJlc2VudHMgdGhlIG1hcCdzIFthdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2F0dHJpYnV0aW9uLykuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb21wYWN0XSBJZiBgdHJ1ZWAgZm9yY2UgYSBjb21wYWN0IGF0dHJpYnV0aW9uIHRoYXQgc2hvd3MgdGhlIGZ1bGwgYXR0cmlidXRpb24gb24gbW91c2UgaG92ZXIsIG9yIGlmIGBmYWxzZWAgZm9yY2UgdGhlIGZ1bGwgYXR0cmlidXRpb24gY29udHJvbC4gVGhlIGRlZmF1bHQgaXMgYSByZXNwb25zaXZlIGF0dHJpYnV0aW9uIHRoYXQgY29sbGFwc2VzIHdoZW4gdGhlIG1hcCBpcyBsZXNzIHRoYW4gNjQwIHBpeGVscyB3aWRlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBbb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbl0gU3RyaW5nIG9yIHN0cmluZ3MgdG8gc2hvdyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgYXR0cmlidXRpb25zLlxuICogQGV4YW1wbGVcbiAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHthdHRyaWJ1dGlvbkNvbnRyb2w6IGZhbHNlfSlcbiAqICAgICAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuQXR0cmlidXRpb25Db250cm9sKHtcbiAqICAgICAgICAgY29tcGFjdDogdHJ1ZVxuICogICAgIH0pKTtcbiAqL1xuY2xhc3MgQXR0cmlidXRpb25Db250cm9sIHtcbiAgICBvcHRpb25zOiBPcHRpb25zO1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfaW5uZXJDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9lZGl0TGluazogP0hUTUxBbmNob3JFbGVtZW50O1xuICAgIF9hdHRyaWJIVE1MOiBzdHJpbmc7XG4gICAgc3R5bGVJZDogc3RyaW5nO1xuICAgIHN0eWxlT3duZXI6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ191cGRhdGVFZGl0TGluaycsXG4gICAgICAgICAgICAnX3VwZGF0ZURhdGEnLFxuICAgICAgICAgICAgJ191cGRhdGVDb21wYWN0J1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLXJpZ2h0JztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBjb25zdCBjb21wYWN0ID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jb21wYWN0O1xuXG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWInKTtcbiAgICAgICAgdGhpcy5faW5uZXJDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXInLCB0aGlzLl9jb250YWluZXIpO1xuXG4gICAgICAgIGlmIChjb21wYWN0KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzdHlsZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKTtcblxuICAgICAgICBpZiAoY29tcGFjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29tcGFjdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3N0eWxlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVFZGl0TGluayk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuXG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIHRoaXMuX2F0dHJpYkhUTUwgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgIH1cblxuICAgIF91cGRhdGVFZGl0TGluaygpIHtcbiAgICAgICAgbGV0IGVkaXRMaW5rID0gdGhpcy5fZWRpdExpbms7XG4gICAgICAgIGlmICghZWRpdExpbmspIHtcbiAgICAgICAgICAgIGVkaXRMaW5rID0gdGhpcy5fZWRpdExpbmsgPSAodGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5tYXBib3gtaW1wcm92ZS1tYXAnKTogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgIHtrZXk6IFwib3duZXJcIiwgdmFsdWU6IHRoaXMuc3R5bGVPd25lcn0sXG4gICAgICAgICAgICB7a2V5OiBcImlkXCIsIHZhbHVlOiB0aGlzLnN0eWxlSWR9LFxuICAgICAgICAgICAge2tleTogXCJhY2Nlc3NfdG9rZW5cIiwgdmFsdWU6IHRoaXMuX21hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU59XG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGVkaXRMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHBhcmFtcy5yZWR1Y2UoKGFjYywgbmV4dCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBgJHtuZXh0LmtleX09JHtuZXh0LnZhbHVlfSR7aSA8IHBhcmFtcy5sZW5ndGggLSAxID8gJyYnIDogJyd9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGA/YCk7XG4gICAgICAgICAgICBlZGl0TGluay5ocmVmID0gYCR7Y29uZmlnLkZFRURCQUNLX1VSTH0vJHtwYXJhbVN0cmluZ30ke3RoaXMuX21hcC5faGFzaCA/IHRoaXMuX21hcC5faGFzaC5nZXRIYXNoU3RyaW5nKHRydWUpIDogJyd9YDtcbiAgICAgICAgICAgIGVkaXRMaW5rLnJlbCA9IFwibm9vcGVuZXIgbm9mb2xsb3dcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVEYXRhKGU6IGFueSkge1xuICAgICAgICBpZiAoZSAmJiAoZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJyB8fCBlLmRhdGFUeXBlID09PSAnc3R5bGUnKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0TGluaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXAuc3R5bGUpIHJldHVybjtcbiAgICAgICAgbGV0IGF0dHJpYnV0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb25zID0gYXR0cmlidXRpb25zLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uLm1hcChhdHRyaWJ1dGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0aW9uICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb25zLnB1c2godGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldDogYW55ID0gdGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7XG4gICAgICAgICAgICB0aGlzLnN0eWxlT3duZXIgPSBzdHlsZXNoZWV0Lm93bmVyO1xuICAgICAgICAgICAgdGhpcy5zdHlsZUlkID0gc3R5bGVzaGVldC5pZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUudXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuYXR0cmlidXRpb24gJiYgYXR0cmlidXRpb25zLmluZGV4T2Yoc291cmNlLmF0dHJpYnV0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb25zLnB1c2goc291cmNlLmF0dHJpYnV0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1vdmUgYW55IGVudHJpZXMgdGhhdCBhcmUgc3Vic3RyaW5ncyBvZiBhbm90aGVyIGVudHJ5LlxuICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGxlbmd0aCBzbyB0aGF0IHN1YnN0cmluZ3MgY29tZSBmaXJzdFxuICAgICAgICBhdHRyaWJ1dGlvbnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGggLSBiLmxlbmd0aCk7XG4gICAgICAgIGF0dHJpYnV0aW9ucyA9IGF0dHJpYnV0aW9ucy5maWx0ZXIoKGF0dHJpYiwgaSkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgYXR0cmlidXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0aW9uc1tqXS5pbmRleE9mKGF0dHJpYikgPj0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGVjayBpZiBhdHRyaWJ1dGlvbiBzdHJpbmcgaXMgZGlmZmVyZW50IHRvIG1pbmltaXplIERPTSBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IGF0dHJpYkhUTUwgPSBhdHRyaWJ1dGlvbnMuam9pbignIHwgJyk7XG4gICAgICAgIGlmIChhdHRyaWJIVE1MID09PSB0aGlzLl9hdHRyaWJIVE1MKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fYXR0cmliSFRNTCA9IGF0dHJpYkhUTUw7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubmVyQ29udGFpbmVyLmlubmVySFRNTCA9IGF0dHJpYkhUTUw7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtYXR0cmliLWVtcHR5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtYXR0cmliLWVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlIG9sZCBET00gbm9kZSBmcm9tIF9lZGl0TGlua1xuICAgICAgICB0aGlzLl9lZGl0TGluayA9IG51bGw7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbXBhY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGggPD0gNjQwKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRyaWJ1dGlvbkNvbnRyb2w7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuLyoqXG4gKiBBIGBMb2dvQ29udHJvbGAgaXMgYSBjb250cm9sIHRoYXQgYWRkcyB0aGUgTWFwYm94IHdhdGVybWFya1xuICogdG8gdGhlIG1hcCBhcyByZXF1aXJlZCBieSB0aGUgW3Rlcm1zIG9mIHNlcnZpY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vdG9zLykgZm9yIE1hcGJveFxuICogdmVjdG9yIHRpbGVzIGFuZCBjb3JlIHN0eWxlcy5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcHJpdmF0ZVxuKiovXG5cbmNsYXNzIExvZ29Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGVMb2dvJ10sIHRoaXMpO1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZUNvbXBhY3QnXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCcpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBET00uY3JlYXRlKCdhJywgJ21hcGJveGdsLWN0cmwtbG9nbycpO1xuICAgICAgICBhbmNob3IudGFyZ2V0ID0gXCJfYmxhbmtcIjtcbiAgICAgICAgYW5jaG9yLnJlbCA9IFwibm9vcGVuZXIgbm9mb2xsb3dcIjtcbiAgICAgICAgYW5jaG9yLmhyZWYgPSBcImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCI7XG4gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0xvZ29Db250cm9sLlRpdGxlJykpO1xuICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwibm9vcGVuZXIgbm9mb2xsb3dcIik7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChhbmNob3IpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCB0aGlzLl91cGRhdGVMb2dvKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTG9nbygpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbigncmVzaXplJywgdGhpcy5fdXBkYXRlQ29tcGFjdCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbXBhY3QoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3NvdXJjZWRhdGEnLCB0aGlzLl91cGRhdGVMb2dvKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZigncmVzaXplJywgdGhpcy5fdXBkYXRlQ29tcGFjdCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1sZWZ0JztcbiAgICB9XG5cbiAgICBfdXBkYXRlTG9nbyhlOiBhbnkpIHtcbiAgICAgICAgaWYgKCFlIHx8IGUuc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fbG9nb1JlcXVpcmVkKCkgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xvZ29SZXF1aXJlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXAuc3R5bGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZXMgPSB0aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGVzW2lkXS5nZXRTb3VyY2UoKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UubWFwYm94X2xvZ28pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ29tcGFjdCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQ2hpbGRyZW4gPSB0aGlzLl9jb250YWluZXIuY2hpbGRyZW47XG4gICAgICAgIGlmIChjb250YWluZXJDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGNvbnRhaW5lckNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aCA8IDI1MCkge1xuICAgICAgICAgICAgICAgIGFuY2hvci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nb0NvbnRyb2w7XG4iLCIvLyBAZmxvdyBzdHJpY3RcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZXhwb3J0IHR5cGUgVGFza0lEID0gbnVtYmVyOyAvLyBjYW4ndCBtYXJrIG9wYXF1ZSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb3d0eXBlL2Zsb3ctcmVtb3ZlLXR5cGVzL3B1bGwvNjFcbnR5cGUgVGFzayA9IHtcbiAgICBjYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgICBpZDogVGFza0lEO1xuICAgIGNhbmNlbGxlZDogYm9vbGVhbjtcbn07XG5cbmNsYXNzIFRhc2tRdWV1ZSB7XG4gICAgX3F1ZXVlOiBBcnJheTxUYXNrPjtcbiAgICBfaWQ6IFRhc2tJRDtcbiAgICBfY2xlYXJlZDogYm9vbGVhbjtcbiAgICBfY3VycmVudGx5UnVubmluZzogQXJyYXk8VGFzaz4gfCBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkgIHtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5faWQgPSAwO1xuICAgICAgICB0aGlzLl9jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhZGQoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBUYXNrSUQge1xuICAgICAgICBjb25zdCBpZCA9ICsrdGhpcy5faWQ7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgICAgIHF1ZXVlLnB1c2goe2NhbGxiYWNrLCBpZCwgY2FuY2VsbGVkOiBmYWxzZX0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGlkOiBUYXNrSUQpIHtcbiAgICAgICAgY29uc3QgcnVubmluZyA9IHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gcnVubmluZyA/IHRoaXMuX3F1ZXVlLmNvbmNhdChydW5uaW5nKSA6IHRoaXMuX3F1ZXVlO1xuICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgcXVldWUpIHtcbiAgICAgICAgICAgIGlmICh0YXNrLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHRhc2suY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBydW4oKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5fY3VycmVudGx5UnVubmluZyk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fY3VycmVudGx5UnVubmluZyA9IHRoaXMuX3F1ZXVlO1xuXG4gICAgICAgIC8vIFRhc2tzIHF1ZXVlZCBieSBjYWxsYmFja3MgaW4gdGhlIGN1cnJlbnQgcXVldWUgc2hvdWxkIGJlIGV4ZWN1dGVkXG4gICAgICAgIC8vIG9uIHRoZSBuZXh0IHJ1biwgbm90IHRoZSBjdXJyZW50IHJ1bi5cbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgcXVldWUpIHtcbiAgICAgICAgICAgIGlmICh0YXNrLmNhbmNlbGxlZCkgY29udGludWU7XG4gICAgICAgICAgICB0YXNrLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xlYXJlZCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUYXNrUXVldWU7XG4iLCIvLyBAZmxvd1xuXG5jb25zdCBkZWZhdWx0TG9jYWxlID0ge1xuICAgICdGdWxsc2NyZWVuQ29udHJvbC5FbnRlcic6ICdFbnRlciBmdWxsc2NyZWVuJyxcbiAgICAnRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCc6ICdFeGl0IGZ1bGxzY3JlZW4nLFxuICAgICdHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uJzogJ0ZpbmQgbXkgbG9jYXRpb24nLFxuICAgICdHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlJzogJ0xvY2F0aW9uIG5vdCBhdmFpbGFibGUnLFxuICAgICdMb2dvQ29udHJvbC5UaXRsZSc6ICdNYXBib3ggbG9nbycsXG4gICAgJ05hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyc6ICdSZXNldCBiZWFyaW5nIHRvIG5vcnRoJyxcbiAgICAnTmF2aWdhdGlvbkNvbnRyb2wuWm9vbUluJzogJ1pvb20gaW4nLFxuICAgICdOYXZpZ2F0aW9uQ29udHJvbC5ab29tT3V0JzogJ1pvb20gb3V0JyxcbiAgICAnU2NhbGVDb250cm9sLkZlZXQnOiAnZnQnLFxuICAgICdTY2FsZUNvbnRyb2wuTWV0ZXJzJzogJ20nLFxuICAgICdTY2FsZUNvbnRyb2wuS2lsb21ldGVycyc6ICdrbScsXG4gICAgJ1NjYWxlQ29udHJvbC5NaWxlcyc6ICdtaScsXG4gICAgJ1NjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzJzogJ25tJ1xuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGwsIHdhcm5PbmNlLCB1bmlxdWVJZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmNvbnN0IHtIVE1MSW1hZ2VFbGVtZW50LCBIVE1MRWxlbWVudCwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQge2dldEltYWdlLCBnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IEhhc2ggZnJvbSAnLi9oYXNoJztcbmltcG9ydCBiaW5kSGFuZGxlcnMgZnJvbSAnLi9iaW5kX2hhbmRsZXJzJztcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9jYW1lcmEnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgQXR0cmlidXRpb25Db250cm9sIGZyb20gJy4vY29udHJvbC9hdHRyaWJ1dGlvbl9jb250cm9sJztcbmltcG9ydCBMb2dvQ29udHJvbCBmcm9tICcuL2NvbnRyb2wvbG9nb19jb250cm9sJztcbmltcG9ydCBpc1N1cHBvcnRlZCBmcm9tICdAbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TWFwTW91c2VFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFRhc2tRdWV1ZSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHdlYnBTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC93ZWJwX3N1cHBvcnRlZCc7XG5pbXBvcnQge1BlcmZvcm1hbmNlTWFya2VycywgUGVyZm9ybWFuY2VVdGlsc30gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmltcG9ydCB7c2V0Q2FjaGVMaW1pdHN9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9ufSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgdHlwZSB7U3R5bGVPcHRpb25zLCBTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIHtNYXBFdmVudCwgTWFwRGF0YUV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZUludGVyZmFjZSwgU3R5bGVJbWFnZU1ldGFkYXRhfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIFNjcm9sbFpvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zY3JvbGxfem9vbSc7XG5pbXBvcnQgdHlwZSBCb3hab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvYm94X3pvb20nO1xuaW1wb3J0IHR5cGUgRHJhZ1JvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2RyYWdfcm90YXRlJztcbmltcG9ydCB0eXBlIERyYWdQYW5IYW5kbGVyLCB7RHJhZ1Bhbk9wdGlvbnN9IGZyb20gJy4vaGFuZGxlci9kcmFnX3Bhbic7XG5pbXBvcnQgdHlwZSBLZXlib2FyZEhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2tleWJvYXJkJztcbmltcG9ydCB0eXBlIERvdWJsZUNsaWNrWm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2RibGNsaWNrX3pvb20nO1xuaW1wb3J0IHR5cGUgVG91Y2hab29tUm90YXRlSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSAnLi9kZWZhdWx0X2xvY2FsZSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIExheWVyU3BlY2lmaWNhdGlvbixcbiAgICBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgIFN0eWxlU3BlY2lmaWNhdGlvbixcbiAgICBMaWdodFNwZWNpZmljYXRpb24sXG4gICAgU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBDb250cm9sUG9zaXRpb24gPSAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xudHlwZSBJQ29udHJvbCA9IHtcbiAgICBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50O1xuICAgIG9uUmVtb3ZlKG1hcDogTWFwKTogdm9pZDtcblxuICAgICtnZXREZWZhdWx0UG9zaXRpb24/OiAoKSA9PiBDb250cm9sUG9zaXRpb247XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5cbnR5cGUgTWFwT3B0aW9ucyA9IHtcbiAgICBoYXNoPzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBpbnRlcmFjdGl2ZT86IGJvb2xlYW4sXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IHN0cmluZyxcbiAgICBiZWFyaW5nU25hcD86IG51bWJlcixcbiAgICBhdHRyaWJ1dGlvbkNvbnRyb2w/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICBsb2dvUG9zaXRpb24/OiBDb250cm9sUG9zaXRpb24sXG4gICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD86IGJvb2xlYW4sXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyPzogYm9vbGVhbixcbiAgICBhbnRpYWxpYXM/OiBib29sZWFuLFxuICAgIHJlZnJlc2hFeHBpcmVkVGlsZXM/OiBib29sZWFuLFxuICAgIG1heEJvdW5kcz86IExuZ0xhdEJvdW5kc0xpa2UsXG4gICAgc2Nyb2xsWm9vbT86IGJvb2xlYW4sXG4gICAgbWluWm9vbT86ID9udW1iZXIsXG4gICAgbWF4Wm9vbT86ID9udW1iZXIsXG4gICAgbWluUGl0Y2g/OiA/bnVtYmVyLFxuICAgIG1heFBpdGNoPzogP251bWJlcixcbiAgICBib3hab29tPzogYm9vbGVhbixcbiAgICBkcmFnUm90YXRlPzogYm9vbGVhbixcbiAgICBkcmFnUGFuPzogRHJhZ1Bhbk9wdGlvbnMsXG4gICAga2V5Ym9hcmQ/OiBib29sZWFuLFxuICAgIGRvdWJsZUNsaWNrWm9vbT86IGJvb2xlYW4sXG4gICAgdG91Y2hab29tUm90YXRlPzogYm9vbGVhbixcbiAgICB0cmFja1Jlc2l6ZT86IGJvb2xlYW4sXG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgcmVuZGVyV29ybGRDb3BpZXM/OiBib29sZWFuLFxuICAgIG1heFRpbGVDYWNoZVNpemU/OiBudW1iZXIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdD86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbixcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuICAgIGxvY2FsZT86IE9iamVjdFxufTtcblxuY29uc3QgZGVmYXVsdE1pblpvb20gPSAtMjtcbmNvbnN0IGRlZmF1bHRNYXhab29tID0gMjI7XG5cbi8vIHRoZSBkZWZhdWx0IHZhbHVlcywgYnV0IGFsc28gdGhlIHZhbGlkIHJhbmdlXG5jb25zdCBkZWZhdWx0TWluUGl0Y2ggPSAwO1xuY29uc3QgZGVmYXVsdE1heFBpdGNoID0gNjA7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGNlbnRlcjogWzAsIDBdLFxuICAgIHpvb206IDAsXG4gICAgYmVhcmluZzogMCxcbiAgICBwaXRjaDogMCxcblxuICAgIG1pblpvb206IGRlZmF1bHRNaW5ab29tLFxuICAgIG1heFpvb206IGRlZmF1bHRNYXhab29tLFxuXG4gICAgbWluUGl0Y2g6IGRlZmF1bHRNaW5QaXRjaCxcbiAgICBtYXhQaXRjaDogZGVmYXVsdE1heFBpdGNoLFxuXG4gICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgc2Nyb2xsWm9vbTogdHJ1ZSxcbiAgICBib3hab29tOiB0cnVlLFxuICAgIGRyYWdSb3RhdGU6IHRydWUsXG4gICAgZHJhZ1BhbjogdHJ1ZSxcbiAgICBrZXlib2FyZDogdHJ1ZSxcbiAgICBkb3VibGVDbGlja1pvb206IHRydWUsXG4gICAgdG91Y2hab29tUm90YXRlOiB0cnVlLFxuXG4gICAgYmVhcmluZ1NuYXA6IDcsXG4gICAgY2xpY2tUb2xlcmFuY2U6IDMsXG5cbiAgICBoYXNoOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGlvbkNvbnRyb2w6IHRydWUsXG5cbiAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBmYWxzZSxcbiAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgIHRyYWNrUmVzaXplOiB0cnVlLFxuICAgIHJlbmRlcldvcmxkQ29waWVzOiB0cnVlLFxuICAgIHJlZnJlc2hFeHBpcmVkVGlsZXM6IHRydWUsXG4gICAgbWF4VGlsZUNhY2hlU2l6ZTogbnVsbCxcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJyxcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBudWxsLFxuICAgIGFjY2Vzc1Rva2VuOiBudWxsLFxuICAgIGZhZGVEdXJhdGlvbjogMzAwLFxuICAgIGNyb3NzU291cmNlQ29sbGlzaW9uczogdHJ1ZVxufTtcblxuLyoqXG4gKiBUaGUgYE1hcGAgb2JqZWN0IHJlcHJlc2VudHMgdGhlIG1hcCBvbiB5b3VyIHBhZ2UuIEl0IGV4cG9zZXMgbWV0aG9kc1xuICogYW5kIHByb3BlcnRpZXMgdGhhdCBlbmFibGUgeW91IHRvIHByb2dyYW1tYXRpY2FsbHkgY2hhbmdlIHRoZSBtYXAsXG4gKiBhbmQgZmlyZXMgZXZlbnRzIGFzIHVzZXJzIGludGVyYWN0IHdpdGggaXQuXG4gKlxuICogWW91IGNyZWF0ZSBhIGBNYXBgIGJ5IHNwZWNpZnlpbmcgYSBgY29udGFpbmVyYCBhbmQgb3RoZXIgb3B0aW9ucy5cbiAqIFRoZW4gTWFwYm94IEdMIEpTIGluaXRpYWxpemVzIHRoZSBtYXAgb24gdGhlIHBhZ2UgYW5kIHJldHVybnMgeW91ciBgTWFwYFxuICogb2JqZWN0LlxuICpcbiAqIEBleHRlbmRzIEV2ZW50ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gb3B0aW9ucy5jb250YWluZXIgVGhlIEhUTUwgZWxlbWVudCBpbiB3aGljaCBNYXBib3ggR0wgSlMgd2lsbCByZW5kZXIgdGhlIG1hcCwgb3IgdGhlIGVsZW1lbnQncyBzdHJpbmcgYGlkYC4gVGhlIHNwZWNpZmllZCBlbGVtZW50IG11c3QgaGF2ZSBubyBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5ab29tPTBdIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoMC0yNCkuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbT0yMl0gVGhlIG1heGltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwICgwLTI0KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5QaXRjaD0wXSBUaGUgbWluaW11bSBwaXRjaCBvZiB0aGUgbWFwICgwLTYwKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhQaXRjaD02MF0gVGhlIG1heGltdW0gcGl0Y2ggb2YgdGhlIG1hcCAoMC02MCkuXG4gKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IFtvcHRpb25zLnN0eWxlXSBUaGUgbWFwJ3MgTWFwYm94IHN0eWxlLiBUaGlzIG11c3QgYmUgYW4gYSBKU09OIG9iamVjdCBjb25mb3JtaW5nIHRvXG4gKiB0aGUgc2NoZW1hIGRlc2NyaWJlZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSwgb3IgYSBVUkwgdG9cbiAqIHN1Y2ggSlNPTi5cbiAqXG4gKiBUbyBsb2FkIGEgc3R5bGUgZnJvbSB0aGUgTWFwYm94IEFQSSwgeW91IGNhbiB1c2UgYSBVUkwgb2YgdGhlIGZvcm0gYG1hcGJveDovL3N0eWxlcy86b3duZXIvOnN0eWxlYCxcbiAqIHdoZXJlIGA6b3duZXJgIGlzIHlvdXIgTWFwYm94IGFjY291bnQgbmFtZSBhbmQgYDpzdHlsZWAgaXMgdGhlIHN0eWxlIElELiBPciB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogW3RoZSBwcmVkZWZpbmVkIE1hcGJveCBzdHlsZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwcy8pOlxuICpcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12MTBgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjlgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTFgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLXByZXZpZXctZGF5LXY0YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1wcmV2aWV3LW5pZ2h0LXY0YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1ndWlkYW5jZS1kYXktdjRgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWd1aWRhbmNlLW5pZ2h0LXY0YFxuICpcbiAqIFRpbGVzZXRzIGhvc3RlZCB3aXRoIE1hcGJveCBjYW4gYmUgc3R5bGUtb3B0aW1pemVkIGlmIHlvdSBhcHBlbmQgYD9vcHRpbWl6ZT10cnVlYCB0byB0aGUgZW5kIG9mIHlvdXIgc3R5bGUgVVJMLCBsaWtlIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExP29wdGltaXplPXRydWVgLlxuICogTGVhcm4gbW9yZSBhYm91dCBzdHlsZS1vcHRpbWl6ZWQgdmVjdG9yIHRpbGVzIGluIG91ciBbQVBJIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vbWFwcy8jcmV0cmlldmUtdGlsZXMpLlxuICpcbiAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW29wdGlvbnMuaGFzaD1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwJ3MgcG9zaXRpb24gKHpvb20sIGNlbnRlciBsYXRpdHVkZSwgY2VudGVyIGxvbmdpdHVkZSwgYmVhcmluZywgYW5kIHBpdGNoKSB3aWxsIGJlIHN5bmNlZCB3aXRoIHRoZSBoYXNoIGZyYWdtZW50IG9mIHRoZSBwYWdlJ3MgVVJMLlxuICogICBGb3IgZXhhbXBsZSwgYGh0dHA6Ly9wYXRoL3RvL215L3BhZ2UuaHRtbCMyLjU5LzM5LjI2LzUzLjA3Ly0yNC4xLzYwYC5cbiAqICAgQW4gYWRkaXRpb25hbCBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgdG8gaW5kaWNhdGUgYSBwYXJhbWV0ZXItc3R5bGVkIGhhc2gsXG4gKiAgIGUuZy4gaHR0cDovL3BhdGgvdG8vbXkvcGFnZS5odG1sI21hcD0yLjU5LzM5LjI2LzUzLjA3Ly0yNC4xLzYwJmZvbz1iYXIsIHdoZXJlIGZvb1xuICogICBpcyBhIGN1c3RvbSBwYXJhbWV0ZXIgYW5kIGJhciBpcyBhbiBhcmJpdHJhcnkgaGFzaCBkaXN0aW5jdCBmcm9tIHRoZSBtYXAgaGFzaC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaW50ZXJhY3RpdmU9dHJ1ZV0gSWYgYGZhbHNlYCwgbm8gbW91c2UsIHRvdWNoLCBvciBrZXlib2FyZCBsaXN0ZW5lcnMgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgbWFwLCBzbyBpdCB3aWxsIG5vdCByZXNwb25kIHRvIGludGVyYWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmdTbmFwPTddIFRoZSB0aHJlc2hvbGQsIG1lYXN1cmVkIGluIGRlZ3JlZXMsIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBtYXAnc1xuICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC4gRm9yIGV4YW1wbGUsIHdpdGggYSBgYmVhcmluZ1NuYXBgIG9mIDcsIGlmIHRoZSB1c2VyIHJvdGF0ZXNcbiAqICAgdGhlIG1hcCB3aXRoaW4gNyBkZWdyZWVzIG9mIG5vcnRoLCB0aGUgbWFwIHdpbGwgYXV0b21hdGljYWxseSBzbmFwIHRvIGV4YWN0IG5vcnRoLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjb250cm9sIHdpdGggXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY2xpY2tUb2xlcmFuY2U9M10gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2sgZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2w9dHJ1ZV0gSWYgYHRydWVgLCBhbiB7QGxpbmsgQXR0cmlidXRpb25Db250cm9sfSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZz59IFtvcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uXSBTdHJpbmcgb3Igc3RyaW5ncyB0byBzaG93IGluIGFuIHtAbGluayBBdHRyaWJ1dGlvbkNvbnRyb2x9LiBPbmx5IGFwcGxpY2FibGUgaWYgYG9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sYCBpcyBgdHJ1ZWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9nb1Bvc2l0aW9uPSdib3R0b20tbGVmdCddIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIE1hcGJveCB3b3JkbWFyayBvbiB0aGUgbWFwLiBWYWxpZCBvcHRpb25zIGFyZSBgdG9wLWxlZnRgLGB0b3AtcmlnaHRgLCBgYm90dG9tLWxlZnRgLCBgYm90dG9tLXJpZ2h0YC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1mYWxzZV0gSWYgYHRydWVgLCBtYXAgY3JlYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3hcbiAqICAgR0wgSlMgd291bGQgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW4gZXhwZWN0ZWQgKGkuZS4gYSBzb2Z0d2FyZSByZW5kZXJlciB3b3VsZCBiZSB1c2VkKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAncyBjYW52YXMgY2FuIGJlIGV4cG9ydGVkIHRvIGEgUE5HIHVzaW5nIGBtYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKClgLiBUaGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYW50aWFsaWFzXSBJZiBgdHJ1ZWAsIHRoZSBnbCBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCB3aXRoIE1TQUEgYW50aWFsaWFzaW5nLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBhbnRpYWxpYXNpbmcgY3VzdG9tIGxheWVycy4gdGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJlZnJlc2hFeHBpcmVkVGlsZXM9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCB3b24ndCBhdHRlbXB0IHRvIHJlLXJlcXVlc3QgdGlsZXMgb25jZSB0aGV5IGV4cGlyZSBwZXIgdGhlaXIgSFRUUCBgY2FjaGVDb250cm9sYC9gZXhwaXJlc2AgaGVhZGVycy5cbiAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gW29wdGlvbnMubWF4Qm91bmRzXSBJZiBzZXQsIHRoZSBtYXAgd2lsbCBiZSBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMuc2Nyb2xsWm9vbT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmJveFpvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ1JvdGF0ZT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMuZHJhZ1Bhbj10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIERyYWdQYW5IYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmtleWJvYXJkPXRydWVdIElmIGB0cnVlYCwga2V5Ym9hcmQgc2hvcnRjdXRzIGFyZSBlbmFibGVkIChzZWUge0BsaW5rIEtleWJvYXJkSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kb3VibGVDbGlja1pvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMudG91Y2hab29tUm90YXRlPXRydWVdIElmIGB0cnVlYCwgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhY2tSZXNpemU9dHJ1ZV0gIElmIGB0cnVlYCwgdGhlIG1hcCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaXplIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93IHJlc2l6ZXMuXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtvcHRpb25zLmNlbnRlcj1bMCwgMF1dIFRoZSBpbml0YWwgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50IG9mIHRoZSBtYXAuIElmIGBjZW50ZXJgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgWzAsIDBdYCBOb3RlOiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggR2VvSlNPTi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy56b29tPTBdIFRoZSBpbml0aWFsIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC4gSWYgYHpvb21gIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZz0wXSBUaGUgaW5pdGlhbCBiZWFyaW5nIChyb3RhdGlvbikgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIG5vcnRoLiBJZiBgYmVhcmluZ2AgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucywgTWFwYm94IEdMIEpTIHdpbGwgbG9vayBmb3IgaXQgaW4gdGhlIG1hcCdzIHN0eWxlIG9iamVjdC4gSWYgaXQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgc3R5bGUsIGVpdGhlciwgaXQgd2lsbCBkZWZhdWx0IHRvIGAwYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5waXRjaD0wXSBUaGUgaW5pdGlhbCBwaXRjaCAodGlsdCkgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4gKDAtNjApLiBJZiBgcGl0Y2hgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IFtvcHRpb25zLmJvdW5kc10gVGhlIGluaXRpYWwgYm91bmRzIG9mIHRoZSBtYXAuIElmIGBib3VuZHNgIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGBjZW50ZXJgIGFuZCBgem9vbWAgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zXSBBIFtgZml0Qm91bmRzYF0oI21hcCNmaXRib3VuZHMpIG9wdGlvbnMgb2JqZWN0IHRvIHVzZSBfb25seV8gd2hlbiBmaXR0aW5nIHRoZSBpbml0aWFsIGBib3VuZHNgIHByb3ZpZGVkIGFib3ZlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcz10cnVlXSAgSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplPW51bGxdICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGlsZXMgc3RvcmVkIGluIHRoZSB0aWxlIGNhY2hlIGZvciBhIGdpdmVuIHNvdXJjZS4gSWYgb21pdHRlZCwgdGhlIGNhY2hlIHdpbGwgYmUgZHluYW1pY2FsbHkgc2l6ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld3BvcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PSdzYW5zLXNlcmlmJ10gRGVmaW5lcyBhIENTU1xuICogICBmb250LWZhbWlseSBmb3IgbG9jYWxseSBvdmVycmlkaW5nIGdlbmVyYXRpb24gb2YgZ2x5cGhzIGluIHRoZSAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocycsICdIaXJhZ2FuYScsICdLYXRha2FuYScgYW5kICdIYW5ndWwgU3lsbGFibGVzJyByYW5nZXMuXG4gKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICogICBTZXQgdG8gYGZhbHNlYCwgdG8gZW5hYmxlIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHRoZXNlIGdseXBoIHJhbmdlcy4gIE5vdGUgdGhhdCBbTWFwYm94IFN0dWRpb10oaHR0cHM6Ly9zdHVkaW8ubWFwYm94LmNvbS8pIHNldHMgdGhpcyB2YWx1ZSB0byBgZmFsc2VgIGJ5IGRlZmF1bHQuXG4gKiAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGF2b2lkIGJhbmR3aWR0aC1pbnRlbnNpdmUgZ2x5cGggc2VydmVyIHJlcXVlc3RzLiAoU2VlIFtVc2UgbG9jYWxseSBnZW5lcmF0ZWQgaWRlb2dyYXBoc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhbC1pZGVvZ3JhcGhzKS4pXG4gKiBAcGFyYW0ge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gW29wdGlvbnMudHJhbnNmb3JtUmVxdWVzdD1udWxsXSBBIGNhbGxiYWNrIHJ1biBiZWZvcmUgdGhlIE1hcCBtYWtlcyBhIHJlcXVlc3QgZm9yIGFuIGV4dGVybmFsIFVSTC4gVGhlIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgdXJsLCBzZXQgaGVhZGVycywgb3Igc2V0IHRoZSBjcmVkZW50aWFscyBwcm9wZXJ0eSBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLlxuICogICBFeHBlY3RlZCB0byByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBgdXJsYCBwcm9wZXJ0eSBhbmQgb3B0aW9uYWxseSBgaGVhZGVyc2AgYW5kIGBjcmVkZW50aWFsc2AgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nPWZhbHNlXSBJZiBgdHJ1ZWAsIFJlc291cmNlIFRpbWluZyBBUEkgaW5mb3JtYXRpb24gd2lsbCBiZSBjb2xsZWN0ZWQgZm9yIHJlcXVlc3RzIG1hZGUgYnkgR2VvSlNPTiBhbmQgVmVjdG9yIFRpbGUgd2ViIHdvcmtlcnMgKHRoaXMgaW5mb3JtYXRpb24gaXMgbm9ybWFsbHkgaW5hY2Nlc3NpYmxlIGZyb20gdGhlIG1haW4gSmF2YXNjcmlwdCB0aHJlYWQpLiBJbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVkIGluIGEgYHJlc291cmNlVGltaW5nYCBwcm9wZXJ0eSBvZiByZWxldmFudCBgZGF0YWAgZXZlbnRzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZhZGVEdXJhdGlvbj0zMDBdIENvbnRyb2xzIHRoZSBkdXJhdGlvbiBvZiB0aGUgZmFkZS1pbi9mYWRlLW91dCBhbmltYXRpb24gZm9yIGxhYmVsIGNvbGxpc2lvbnMsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBzZXR0aW5nIGFmZmVjdHMgYWxsIHN5bWJvbCBsYXllcnMuIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIGR1cmF0aW9uIG9mIHJ1bnRpbWUgc3R5bGluZyB0cmFuc2l0aW9ucyBvciByYXN0ZXIgdGlsZSBjcm9zcy1mYWRpbmcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNyb3NzU291cmNlQ29sbGlzaW9ucz10cnVlXSBJZiBgdHJ1ZWAsIHN5bWJvbHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzIGNhbiBjb2xsaWRlIHdpdGggZWFjaCBvdGhlciBkdXJpbmcgY29sbGlzaW9uIGRldGVjdGlvbi4gSWYgYGZhbHNlYCwgY29sbGlzaW9uIGRldGVjdGlvbiBpcyBydW4gc2VwYXJhdGVseSBmb3IgdGhlIHN5bWJvbHMgaW4gZWFjaCBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYWNjZXNzVG9rZW49bnVsbF0gSWYgc3BlY2lmaWVkLCBtYXAgd2lsbCB1c2UgdGhpcyB0b2tlbiBpbnN0ZWFkIG9mIHRoZSBvbmUgZGVmaW5lZCBpbiBtYXBib3hnbC5hY2Nlc3NUb2tlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGU9bnVsbF0gQSBwYXRjaCB0byBhcHBseSB0byB0aGUgZGVmYXVsdCBsb2NhbGl6YXRpb24gdGFibGUgZm9yIFVJIHN0cmluZ3MsIGUuZy4gY29udHJvbCB0b29sdGlwcy4gVGhlIGBsb2NhbGVgIG9iamVjdCBtYXBzIG5hbWVzcGFjZWQgVUkgc3RyaW5nIElEcyB0byB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIHRhcmdldCBsYW5ndWFnZTsgc2VlIGBzcmMvdWkvZGVmYXVsdF9sb2NhbGUuanNgIGZvciBhbiBleGFtcGxlIHdpdGggYWxsIHN1cHBvcnRlZCBzdHJpbmcgSURzLiBUaGUgb2JqZWN0IG1heSBzcGVjaWZ5IGFsbCBVSSBzdHJpbmdzICh0aGVyZWJ5IGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB0cmFuc2xhdGlvbikgb3Igb25seSBhIHN1YnNldCBvZiBzdHJpbmdzICh0aGVyZWJ5IHBhdGNoaW5nIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uIHRhYmxlKS5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7XG4gKiAgIGNvbnRhaW5lcjogJ21hcCcsXG4gKiAgIGNlbnRlcjogWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddLFxuICogICB6b29tOiAxMyxcbiAqICAgc3R5bGU6IHN0eWxlX29iamVjdCxcbiAqICAgaGFzaDogdHJ1ZSxcbiAqICAgdHJhbnNmb3JtUmVxdWVzdDogKHVybCwgcmVzb3VyY2VUeXBlKT0+IHtcbiAqICAgICBpZihyZXNvdXJjZVR5cGUgPT09ICdTb3VyY2UnICYmIHVybC5zdGFydHNXaXRoKCdodHRwOi8vbXlIb3N0JykpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgdXJsOiB1cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpLFxuICogICAgICAgIGhlYWRlcnM6IHsgJ215LWN1c3RvbS1oZWFkZXInOiB0cnVlfSxcbiAqICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnICAvLyBJbmNsdWRlIGNvb2tpZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0c1xuICogICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGVzLylcbiAqL1xuY2xhc3MgTWFwIGV4dGVuZHMgQ2FtZXJhIHtcbiAgICBzdHlsZTogU3R5bGU7XG4gICAgcGFpbnRlcjogUGFpbnRlcjtcblxuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9taXNzaW5nQ1NTQ2FuYXJ5OiBIVE1MRWxlbWVudDtcbiAgICBfY2FudmFzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY29udHJvbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRyb2xQb3NpdGlvbnM6IHtbc3RyaW5nXTogSFRNTEVsZW1lbnR9O1xuICAgIF9pbnRlcmFjdGl2ZTogP2Jvb2xlYW47XG4gICAgX3Nob3dUaWxlQm91bmRhcmllczogP2Jvb2xlYW47XG4gICAgX3Nob3dDb2xsaXNpb25Cb3hlczogP2Jvb2xlYW47XG4gICAgX3Nob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbjtcbiAgICBfcmVwYWludDogP2Jvb2xlYW47XG4gICAgX3ZlcnRpY2VzOiA/Ym9vbGVhbjtcbiAgICBfY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBfbWF4VGlsZUNhY2hlU2l6ZTogbnVtYmVyO1xuICAgIF9mcmFtZTogP0NhbmNlbGFibGU7XG4gICAgX3N0eWxlRGlydHk6ID9ib29sZWFuO1xuICAgIF9zb3VyY2VzRGlydHk6ID9ib29sZWFuO1xuICAgIF9wbGFjZW1lbnREaXJ0eTogP2Jvb2xlYW47XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICAvLyBhY2NvdW50cyBmb3IgcGxhY2VtZW50IGZpbmlzaGluZyBhcyB3ZWxsXG4gICAgX2Z1bGx5TG9hZGVkOiBib29sZWFuO1xuICAgIF90cmFja1Jlc2l6ZTogYm9vbGVhbjtcbiAgICBfcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBib29sZWFuO1xuICAgIF9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBib29sZWFuO1xuICAgIF9hbnRpYWxpYXM6IGJvb2xlYW47XG4gICAgX3JlZnJlc2hFeHBpcmVkVGlsZXM6IGJvb2xlYW47XG4gICAgX2hhc2g6IEhhc2g7XG4gICAgX2RlbGVnYXRlZExpc3RlbmVyczogYW55O1xuICAgIF9mYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICBfY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuO1xuICAgIF9jcm9zc0ZhZGluZ0ZhY3RvcjogbnVtYmVyO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgX3JlbmRlclRhc2tRdWV1ZTogVGFza1F1ZXVlO1xuICAgIF9jb250cm9sczogQXJyYXk8SUNvbnRyb2w+O1xuICAgIF9tYXBJZDogbnVtYmVyO1xuICAgIF9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBfcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuICAgIF9sb2NhbGU6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgaW4gYW5kIG91dCB3aXRoIGEgc2Nyb2xsIHdoZWVsIG9yIHRyYWNrcGFkLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgc2Nyb2xsWm9vbWAgaW4gdGhlIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBzY3JvbGxab29tOiBTY3JvbGxab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgdXNpbmcgYSBkcmFnIGdlc3R1cmUgd2l0aCB0aGUgU2hpZnQga2V5IHByZXNzZWQuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBib3hab29tYCBpbiB0aGUge0BsaW5rIEJveFpvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGJveFpvb206IEJveFpvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgcm90YXRpbmcgdGhlIG1hcCB3aGlsZSBkcmFnZ2luZyB3aXRoIHRoZSByaWdodFxuICAgICAqIG1vdXNlIGJ1dHRvbiBvciB3aXRoIHRoZSBDb250cm9sIGtleSBwcmVzc2VkLiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRyYWdSb3RhdGVgXG4gICAgICogaW4gdGhlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkcmFnUm90YXRlOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIGRyYWdnaW5nIHRoZSBtYXAgd2l0aCBhIG1vdXNlIG9yIHRvdWNoIGdlc3R1cmUuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkcmFnUGFuYCBpbiB0aGUge0BsaW5rIERyYWdQYW5IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRyYWdQYW46IERyYWdQYW5IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmcga2V5Ym9hcmRcbiAgICAgKiBzaG9ydGN1dHMuIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBga2V5Ym9hcmRgIGluIHRoZSB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGtleWJvYXJkOiBLZXlib2FyZEhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBieSBkb3VibGUgY2xpY2tpbmcuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkb3VibGVDbGlja1pvb21gIGluIHRoZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkb3VibGVDbGlja1pvb206IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBvciByb3RhdGUgdGhlIG1hcCB3aXRoIHRvdWNoIGdlc3R1cmVzLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgdG91Y2hab29tUm90YXRlYCBpbiB0aGUge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgdG91Y2hab29tUm90YXRlOiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWFwT3B0aW9ucykge1xuICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLm1hcmsoUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pblpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1heFpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1pblpvb20gPiBvcHRpb25zLm1heFpvb20pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5ab29tYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5taW5QaXRjaCAhPSBudWxsICYmIG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoID4gb3B0aW9ucy5tYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5QaXRjaGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluUGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoIDwgZGVmYXVsdE1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1pblBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1heFBpdGNoID4gZGVmYXVsdE1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1heFBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybShvcHRpb25zLm1pblpvb20sIG9wdGlvbnMubWF4Wm9vbSwgb3B0aW9ucy5taW5QaXRjaCwgb3B0aW9ucy5tYXhQaXRjaCwgb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIHN1cGVyKHRyYW5zZm9ybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5faW50ZXJhY3RpdmUgPSBvcHRpb25zLmludGVyYWN0aXZlO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplO1xuICAgICAgICB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuICAgICAgICB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcbiAgICAgICAgdGhpcy5fYW50aWFsaWFzID0gb3B0aW9ucy5hbnRpYWxpYXM7XG4gICAgICAgIHRoaXMuX3RyYWNrUmVzaXplID0gb3B0aW9ucy50cmFja1Jlc2l6ZTtcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwO1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXhwaXJlZFRpbGVzID0gb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzO1xuICAgICAgICB0aGlzLl9mYWRlRHVyYXRpb24gPSBvcHRpb25zLmZhZGVEdXJhdGlvbjtcbiAgICAgICAgdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zID0gb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gMTtcbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZSA9IG5ldyBUYXNrUXVldWUoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFwSWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBleHRlbmQoe30sIGRlZmF1bHRMb2NhbGUsIG9wdGlvbnMubG9jYWxlKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0TWFuYWdlciA9IG5ldyBSZXF1ZXN0TWFuYWdlcihvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3QsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRhaW5lciAnJHtvcHRpb25zLmNvbnRhaW5lcn0nIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4Qm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEJvdW5kcyhvcHRpb25zLm1heEJvdW5kcyk7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaW5kb3dPbmxpbmUnLFxuICAgICAgICAgICAgJ19vbldpbmRvd1Jlc2l6ZScsXG4gICAgICAgICAgICAnX2NvbnRleHRMb3N0JyxcbiAgICAgICAgICAgICdfY29udGV4dFJlc3RvcmVkJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9zZXR1cENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbignbW92ZScsICgpID0+IHRoaXMuX3VwZGF0ZShmYWxzZSkpO1xuICAgICAgICB0aGlzLm9uKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fdXBkYXRlKGZhbHNlKSk7XG4gICAgICAgIHRoaXMub24oJ3pvb20nLCAoKSA9PiB0aGlzLl91cGRhdGUodHJ1ZSkpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMuX29uV2luZG93T25saW5lLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRIYW5kbGVycyh0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBoYXNoTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5oYXNoID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmhhc2gpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faGFzaCA9IG9wdGlvbnMuaGFzaCAmJiAobmV3IEhhc2goaGFzaE5hbWUpKS5hZGRUbyh0aGlzKTtcbiAgICAgICAgLy8gZG9uJ3Qgc2V0IHBvc2l0aW9uIGZyb20gb3B0aW9ucyBpZiBzZXQgdGhyb3VnaCBoYXNoXG4gICAgICAgIGlmICghdGhpcy5faGFzaCB8fCAhdGhpcy5faGFzaC5fb25IYXNoQ2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvKHtcbiAgICAgICAgICAgICAgICBjZW50ZXI6IG9wdGlvbnMuY2VudGVyLFxuICAgICAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nOiBvcHRpb25zLmJlYXJpbmcsXG4gICAgICAgICAgICAgICAgcGl0Y2g6IG9wdGlvbnMucGl0Y2hcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZml0Qm91bmRzKG9wdGlvbnMuYm91bmRzLCBleHRlbmQoe30sIG9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucywge2R1cmF0aW9uOiAwfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNpemUoKTtcblxuICAgICAgICB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3R5bGUpIHRoaXMuc2V0U3R5bGUob3B0aW9ucy5zdHlsZSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpXG4gICAgICAgICAgICB0aGlzLmFkZENvbnRyb2wobmV3IEF0dHJpYnV0aW9uQ29udHJvbCh7Y3VzdG9tQXR0cmlidXRpb246IG9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb259KSk7XG5cbiAgICAgICAgdGhpcy5hZGRDb250cm9sKG5ldyBMb2dvQ29udHJvbCgpLCBvcHRpb25zLmxvZ29Qb3NpdGlvbik7XG5cbiAgICAgICAgdGhpcy5vbignc3R5bGUubG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG8oKHRoaXMuc3R5bGUuc3R5bGVzaGVldDogYW55KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50OiBNYXBEYXRhRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5kYXRhVHlwZSA9PT0gJ3N0eWxlJyk7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KGAke2V2ZW50LmRhdGFUeXBlfWRhdGFgLCBldmVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZGF0YWxvYWRpbmcnLCAoZXZlbnQ6IE1hcERhdGFFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudChgJHtldmVudC5kYXRhVHlwZX1kYXRhbG9hZGluZ2AsIGV2ZW50KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBSZXR1cm5zIGEgdW5pcXVlIG51bWJlciBmb3IgdGhpcyBtYXAgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCBmb3IgdGhlIE1hcExvYWRFdmVudFxuICAgICogdG8gbWFrZSBzdXJlIHdlIG9ubHkgZmlyZSBvbmUgZXZlbnQgcGVyIGluc3RhbnRpYXRlZCBtYXAgb2JqZWN0LlxuICAgICogQHByaXZhdGVcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgKi9cbiAgICBfZ2V0TWFwSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXBJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIHtAbGluayBJQ29udHJvbH0gdG8gdGhlIG1hcCwgY2FsbGluZyBgY29udHJvbC5vbkFkZCh0aGlzKWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0lDb250cm9sfSBjb250cm9sIFRoZSB7QGxpbmsgSUNvbnRyb2x9IHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bvc2l0aW9uXSBwb3NpdGlvbiBvbiB0aGUgbWFwIHRvIHdoaWNoIHRoZSBjb250cm9sIHdpbGwgYmUgYWRkZWQuXG4gICAgICogVmFsaWQgdmFsdWVzIGFyZSBgJ3RvcC1sZWZ0J2AsIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIERlZmF1bHRzIHRvIGAndG9wLXJpZ2h0J2AuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBBZGQgem9vbSBhbmQgcm90YXRpb24gY29udHJvbHMgdG8gdGhlIG1hcC5cbiAgICAgKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuTmF2aWdhdGlvbkNvbnRyb2woKSk7XG4gICAgICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAgICAgKi9cbiAgICBhZGRDb250cm9sKGNvbnRyb2w6IElDb250cm9sLCBwb3NpdGlvbj86IENvbnRyb2xQb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCAmJiBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24gPSBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9ICd0b3AtcmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vbkFkZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2xFbGVtZW50ID0gY29udHJvbC5vbkFkZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMucHVzaChjb250cm9sKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbkNvbnRhaW5lciA9IHRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbcG9zaXRpb25dO1xuICAgICAgICBpZiAocG9zaXRpb24uaW5kZXhPZignYm90dG9tJykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3NpdGlvbkNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY29udHJvbEVsZW1lbnQsIHBvc2l0aW9uQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25Db250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgZnJvbSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJQ29udHJvbH0gY29udHJvbCBUaGUge0BsaW5rIElDb250cm9sfSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBEZWZpbmUgYSBuZXcgbmF2aWdhdGlvbiBjb250cm9sLlxuICAgICAqIHZhciBuYXZpZ2F0aW9uID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gICAgICogLy8gQWRkIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIHRvIHRoZSBtYXAuXG4gICAgICogbWFwLmFkZENvbnRyb2wobmF2aWdhdGlvbik7XG4gICAgICogLy8gUmVtb3ZlIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIGZyb20gdGhlIG1hcC5cbiAgICAgKiBtYXAucmVtb3ZlQ29udHJvbChuYXZpZ2F0aW9uKTtcbiAgICAgKi9cbiAgICByZW1vdmVDb250cm9sKGNvbnRyb2w6IElDb250cm9sKSB7XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vblJlbW92ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLnJlbW92ZUNvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNpID0gdGhpcy5fY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgaWYgKGNpID4gLTEpIHRoaXMuX2NvbnRyb2xzLnNwbGljZShjaSwgMSk7XG4gICAgICAgIGNvbnRyb2wub25SZW1vdmUodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIG1hcCBhY2NvcmRpbmcgdG8gdGhlIGRpbWVuc2lvbnMgb2YgaXRzXG4gICAgICogYGNvbnRhaW5lcmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAgaXMgcmVzaXplZCBwcm9ncmFtbWF0aWNhbGx5XG4gICAgICogb3Igd2hlbiB0aGUgbWFwIGlzIHNob3duIGFmdGVyIGJlaW5nIGluaXRpYWxseSBoaWRkZW4gd2l0aCBDU1MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBwYXNzZWQgdG8gYG1vdmVzdGFydGAsIGBtb3ZlYCwgYHJlc2l6ZWAsIGFuZCBgbW92ZWVuZGBcbiAgICAgKiAgIGV2ZW50cyB0aGF0IGdldCB0cmlnZ2VyZWQgYXMgYSByZXN1bHQgb2YgcmVzaXplLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRpZmZlcmVudGlhdGluZyB0aGVcbiAgICAgKiAgIHNvdXJjZSBvZiBhbiBldmVudCAoZm9yIGV4YW1wbGUsIHVzZXItaW5pdGlhdGVkIG9yIHByb2dyYW1tYXRpY2FsbHktdHJpZ2dlcmVkIGV2ZW50cykuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBSZXNpemUgdGhlIG1hcCB3aGVuIHRoZSBtYXAgY29udGFpbmVyIGlzIHNob3duXG4gICAgICogLy8gYWZ0ZXIgYmVpbmcgaW5pdGlhbGx5IGhpZGRlbiB3aXRoIENTUy5cbiAgICAgKiB2YXIgbWFwRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpO1xuICAgICAqIGlmIChtYXBEaXYuc3R5bGUudmlzaWJpbGl0eSA9PT0gdHJ1ZSkgbWFwLnJlc2l6ZSgpO1xuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBkaW1lbnNpb25zWzFdO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyZXNpemUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGJvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTtcbiAgICAgKi9cbiAgICBnZXRCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldEJvdW5kcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB0aGUgbWFwIGlzIGNvbnN0cmFpbmVkIHRvLCBvciBgbnVsbGAgaWYgbm9uZSBzZXQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWF4Qm91bmRzID0gbWFwLmdldE1heEJvdW5kcygpO1xuICAgICAqL1xuICAgIGdldE1heEJvdW5kcygpOiBMbmdMYXRCb3VuZHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLlxuICAgICAqXG4gICAgICogUGFuIGFuZCB6b29tIG9wZXJhdGlvbnMgYXJlIGNvbnN0cmFpbmVkIHdpdGhpbiB0aGVzZSBib3VuZHMuXG4gICAgICogSWYgYSBwYW4gb3Igem9vbSBpcyBwZXJmb3JtZWQgdGhhdCB3b3VsZFxuICAgICAqIGRpc3BsYXkgcmVnaW9ucyBvdXRzaWRlIHRoZXNlIGJvdW5kcywgdGhlIG1hcCB3aWxsXG4gICAgICogaW5zdGVhZCBkaXNwbGF5IGEgcG9zaXRpb24gYW5kIHpvb20gbGV2ZWxcbiAgICAgKiBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgb3BlcmF0aW9uJ3MgcmVxdWVzdCB3aGlsZSBzdGlsbFxuICAgICAqIHJlbWFpbmluZyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IGJvdW5kcyBUaGUgbWF4aW11bSBib3VuZHMgdG8gc2V0LiBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBtYXAncyBtYXhpbXVtIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIERlZmluZSBib3VuZHMgdGhhdCBjb25mb3JtIHRvIHRoZSBgTG5nTGF0Qm91bmRzTGlrZWAgb2JqZWN0LlxuICAgICAqIHZhciBib3VuZHMgPSBbXG4gICAgICogICBbLTc0LjA0NzI4LCA0MC42ODM5Ml0sIC8vIFt3ZXN0LCBzb3V0aF1cbiAgICAgKiAgIFstNzMuOTEwNTgsIDQwLjg3NzY0XSAgLy8gW2Vhc3QsIG5vcnRoXVxuICAgICAqIF07XG4gICAgICogLy8gU2V0IHRoZSBtYXAncyBtYXggYm91bmRzLlxuICAgICAqIG1hcC5zZXRNYXhCb3VuZHMoYm91bmRzKTtcbiAgICAgKi9cbiAgICBzZXRNYXhCb3VuZHMoYm91bmRzOiBMbmdMYXRCb3VuZHNMaWtlKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyhMbmdMYXRCb3VuZHMuY29udmVydChib3VuZHMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtaW5pbXVtIHpvb20gbGV2ZWwuXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbWluaW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgem9vbSB0byB0aGUgbmV3IG1pbmltdW0uXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIHpvb20gb3V0IGFuZCByZWFjaCB0aGUgc2V0IGBtaW5ab29tYC5cbiAgICAgKiBPdGhlciBmYWN0b3JzIHN1Y2ggYXMgbWFwIGhlaWdodCBtYXkgcmVzdHJpY3Qgem9vbWluZy4gRm9yIGV4YW1wbGUsXG4gICAgICogaWYgdGhlIG1hcCBpcyA1MTJweCB0YWxsIGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIHpvb20gYmVsb3cgem9vbSAwXG4gICAgICogbm8gbWF0dGVyIHdoYXQgdGhlIGBtaW5ab29tYCBpcyBzZXQgdG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1pblpvb20gVGhlIG1pbmltdW0gem9vbSBsZXZlbCB0byBzZXQgKC0yIC0gMjQpLlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtaW5pbXVtIHpvb20gKGkuZS4gc2V0cyBpdCB0byAtMikuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TWluWm9vbSgxMi4yNSk7XG4gICAgICovXG4gICAgc2V0TWluWm9vbShtaW5ab29tPzogP251bWJlcikge1xuXG4gICAgICAgIG1pblpvb20gPSBtaW5ab29tID09PSBudWxsIHx8IG1pblpvb20gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNaW5ab29tIDogbWluWm9vbTtcblxuICAgICAgICBpZiAobWluWm9vbSA+PSBkZWZhdWx0TWluWm9vbSAmJiBtaW5ab29tIDw9IHRoaXMudHJhbnNmb3JtLm1heFpvb20pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLm1pblpvb20gPSBtaW5ab29tO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFpvb20oKSA8IG1pblpvb20pIHRoaXMuc2V0Wm9vbShtaW5ab29tKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgbWluWm9vbSBtdXN0IGJlIGJldHdlZW4gJHtkZWZhdWx0TWluWm9vbX0gYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1pbmltdW0gYWxsb3dhYmxlIHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtaW5ab29tXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWluWm9vbSA9IG1hcC5nZXRNaW5ab29tKCk7XG4gICAgICovXG4gICAgZ2V0TWluWm9vbSgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtYXhpbXVtIHpvb20gbGV2ZWwuXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyBoaWdoZXIgdGhhbiB0aGUgbmV3IG1heGltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHpvb20gdG8gdGhlIG5ldyBtYXhpbXVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtYXhab29tIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2V0LlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtYXhpbXVtIHpvb20gKHNldHMgaXQgdG8gMjIpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldE1heFpvb20oMTguNzUpO1xuICAgICAqL1xuICAgIHNldE1heFpvb20obWF4Wm9vbT86ID9udW1iZXIpIHtcblxuICAgICAgICBtYXhab29tID0gbWF4Wm9vbSA9PT0gbnVsbCB8fCBtYXhab29tID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWF4Wm9vbSA6IG1heFpvb207XG5cbiAgICAgICAgaWYgKG1heFpvb20gPj0gdGhpcy50cmFuc2Zvcm0ubWluWm9vbSkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSA9IG1heFpvb207XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Wm9vbSgpID4gbWF4Wm9vbSkgdGhpcy5zZXRab29tKG1heFpvb20pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb21gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtYXhpbXVtIGFsbG93YWJsZSB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gbWF4Wm9vbVxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1heFpvb20gPSBtYXAuZ2V0TWF4Wm9vbSgpO1xuICAgICAqL1xuICAgIGdldE1heFpvb20oKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgbWluaW11bSBwaXRjaC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCBwaXRjaCBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbWluaW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgcGl0Y2ggdG8gdGhlIG5ldyBtaW5pbXVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtaW5QaXRjaCBUaGUgbWluaW11bSBwaXRjaCB0byBzZXQgKDAtNjApLlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtaW5pbXVtIHBpdGNoIChpLmUuIHNldHMgaXQgdG8gMCkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TWluUGl0Y2gobWluUGl0Y2g/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWluUGl0Y2ggPSBtaW5QaXRjaCA9PT0gbnVsbCB8fCBtaW5QaXRjaCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1pblBpdGNoIDogbWluUGl0Y2g7XG5cbiAgICAgICAgaWYgKG1pblBpdGNoIDwgZGVmYXVsdE1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1pblBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblBpdGNoID49IGRlZmF1bHRNaW5QaXRjaCAmJiBtaW5QaXRjaCA8PSB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWluUGl0Y2ggPSBtaW5QaXRjaDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRQaXRjaCgpIDwgbWluUGl0Y2gpIHRoaXMuc2V0UGl0Y2gobWluUGl0Y2gpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtaW5QaXRjaCBtdXN0IGJlIGJldHdlZW4gJHtkZWZhdWx0TWluUGl0Y2h9IGFuZCB0aGUgY3VycmVudCBtYXhQaXRjaCwgaW5jbHVzaXZlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWluaW11bSBhbGxvd2FibGUgcGl0Y2guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtaW5QaXRjaFxuICAgICAqL1xuICAgIGdldE1pblBpdGNoKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluUGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtYXhpbXVtIHBpdGNoLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHBpdGNoIGlzIGhpZ2hlciB0aGFuIHRoZSBuZXcgbWF4aW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgcGl0Y2ggdG8gdGhlIG5ldyBtYXhpbXVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtYXhQaXRjaCBUaGUgbWF4aW11bSBwaXRjaCB0byBzZXQuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1heGltdW0gcGl0Y2ggKHNldHMgaXQgdG8gNjApLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE1heFBpdGNoKG1heFBpdGNoPzogP251bWJlcikge1xuXG4gICAgICAgIG1heFBpdGNoID0gbWF4UGl0Y2ggPT09IG51bGwgfHwgbWF4UGl0Y2ggPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXhQaXRjaCA6IG1heFBpdGNoO1xuXG4gICAgICAgIGlmIChtYXhQaXRjaCA+IGRlZmF1bHRNYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke2RlZmF1bHRNYXhQaXRjaH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhQaXRjaCA+PSB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaCkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2ggPSBtYXhQaXRjaDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRQaXRjaCgpID4gbWF4UGl0Y2gpIHRoaXMuc2V0UGl0Y2gobWF4UGl0Y2gpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5QaXRjaGApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1heGltdW0gYWxsb3dhYmxlIHBpdGNoLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gbWF4UGl0Y2hcbiAgICAgKi9cbiAgICBnZXRNYXhQaXRjaCgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFBpdGNoOyB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiBgcmVuZGVyV29ybGRDb3BpZXNgLiBJZiBgdHJ1ZWAsIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgd29ybGQgd2lsbCBiZSByZW5kZXJlZCBzaWRlIGJ5IHNpZGUgYmV5b25kIC0xODAgYW5kIDE4MCBkZWdyZWVzIGxvbmdpdHVkZS4gSWYgc2V0IHRvIGBmYWxzZWA6XG4gICAgICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICAgICAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICAgICAqIC0gRmVhdHVyZXMgdGhhdCBjcm9zcyAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUgd2lsbCBiZSBjdXQgaW4gdHdvICh3aXRoIG9uZSBwb3J0aW9uIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZVxuICAgICAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmVuZGVyV29ybGRDb3BpZXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciB3b3JsZENvcGllc1JlbmRlcmVkID0gbWFwLmdldFJlbmRlcldvcmxkQ29waWVzKCk7XG4gICAgICogQHNlZSBbUmVuZGVyIHdvcmxkIGNvcGllc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcmVuZGVyLXdvcmxkLWNvcGllcy8pXG4gICAgICovXG4gICAgZ2V0UmVuZGVyV29ybGRDb3BpZXMoKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllczsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGUgb2YgYHJlbmRlcldvcmxkQ29waWVzYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVuZGVyV29ybGRDb3BpZXMgSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICAgICAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAgICAgKiBjb250YWluZXIsIHRoZXJlIHdpbGwgYmUgYmxhbmsgc3BhY2UgYmV5b25kIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZS5cbiAgICAgKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAgICAgKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBgdW5kZWZpbmVkYCBpcyB0cmVhdGVkIGFzIGB0cnVlYCwgYG51bGxgIGlzIHRyZWF0ZWQgYXMgYGZhbHNlYC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRSZW5kZXJXb3JsZENvcGllcyh0cnVlKTtcbiAgICAgKiBAc2VlIFtSZW5kZXIgd29ybGQgY29waWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9yZW5kZXItd29ybGQtY29waWVzLylcbiAgICAgKi9cbiAgICBzZXRSZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXM7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIFBvaW50fSByZXByZXNlbnRpbmcgcGl4ZWwgY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBgY29udGFpbmVyYCxcbiAgICAgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHNwZWNpZmllZCBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGxuZ2xhdCBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIHRvIHByb2plY3QuXG4gICAgICogQHJldHVybnMge1BvaW50fSBUaGUge0BsaW5rIFBvaW50fSBjb3JyZXNwb25kaW5nIHRvIGBsbmdsYXRgLCByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmRpbmF0ZSA9IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XTtcbiAgICAgKiB2YXIgcG9pbnQgPSBtYXAucHJvamVjdChjb29yZGluYXRlKTtcbiAgICAgKi9cbiAgICBwcm9qZWN0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChMbmdMYXQuY29udmVydChsbmdsYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIExuZ0xhdH0gcmVwcmVzZW50aW5nIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyB0aGF0IGNvcnJlc3BvbmRcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIHBpeGVsIGNvb3JkaW5hdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IHBvaW50IFRoZSBwaXhlbCBjb29yZGluYXRlcyB0byB1bnByb2plY3QuXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHtAbGluayBMbmdMYXR9IGNvcnJlc3BvbmRpbmcgdG8gYHBvaW50YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICogICAvLyBXaGVuIHRoZSBtYXAgaXMgY2xpY2tlZCwgZ2V0IHRoZSBnZW9ncmFwaGljIGNvb3JkaW5hdGUuXG4gICAgICogICB2YXIgY29vcmRpbmF0ZSA9IG1hcC51bnByb2plY3QoZS5wb2ludCk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgdW5wcm9qZWN0KHBvaW50OiBQb2ludExpa2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwb2ludCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHBhbm5pbmcsIHpvb21pbmcsIHJvdGF0aW5nLCBvciBwaXRjaGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBpc01vdmluZyA9IG1hcC5pc01vdmluZygpO1xuICAgICAqL1xuICAgIGlzTW92aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW92aW5nIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdQYW4uaXNBY3RpdmUoKSB8fFxuICAgICAgICAgICAgdGhpcy5kcmFnUm90YXRlLmlzQWN0aXZlKCkgfHxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHpvb21pbmcgZHVlIHRvIGEgY2FtZXJhIGFuaW1hdGlvbiBvciB1c2VyIGdlc3R1cmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgaXNab29taW5nID0gbWFwLmlzWm9vbWluZygpO1xuICAgICAqL1xuICAgIGlzWm9vbWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvb21pbmcgfHxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcCBpcyByb3RhdGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5pc1JvdGF0aW5nKCk7XG4gICAgICovXG4gICAgaXNSb3RhdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW5nIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT09ICdtb3VzZW92ZXInKSB7XG4gICAgICAgICAgICBsZXQgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbW91c2Vtb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCwge2ZlYXR1cmVzfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBtb3VzZW91dCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtsYXllcjogbGF5ZXJJZCwgbGlzdGVuZXIsIGRlbGVnYXRlczoge21vdXNlbW92ZSwgbW91c2VvdXR9fTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbW91c2VsZWF2ZScgfHwgdHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICAgICAgbGV0IG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldExheWVyKGxheWVySWQpID8gdGhpcy5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge2xheWVyczogW2xheWVySWRdfSkgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW91c2Vpbikge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW91c2Vpbikge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHttb3VzZW1vdmUsIG1vdXNlb3V0fX07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkZWxlZ2F0ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldExheWVyKGxheWVySWQpID8gdGhpcy5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge2xheWVyczogW2xheWVySWRdfSkgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBtdXRhdGUgdGhlIG9yaWdpbmFsIGV2ZW50LCBzbyB0aGF0IHByZXZlbnREZWZhdWx0IHdvcmtzIGFzIGV4cGVjdGVkLlxuICAgICAgICAgICAgICAgICAgICBlLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlLmZlYXR1cmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7W3R5cGVdOiBkZWxlZ2F0ZX19O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciBldmVudHMgb2YgYSBzcGVjaWZpZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbmFtZSBvblxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBhZGQgYSBsaXN0ZW4gZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3IgZXZlbnRzIG9mIGEgc3BlY2lmaWVkIHR5cGUgb2NjdXJyaW5nIG9uIGZlYXR1cmVzIGluIGEgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvcjsgb25lIG9mIGAnbW91c2Vkb3duJ2AsIGAnbW91c2V1cCdgLCBgJ2NsaWNrJ2AsIGAnZGJsY2xpY2snYCxcbiAgICAgKiBgJ21vdXNlbW92ZSdgLCBgJ21vdXNlZW50ZXInYCwgYCdtb3VzZWxlYXZlJ2AsIGAnbW91c2VvdmVyJ2AsIGAnbW91c2VvdXQnYCwgYCdjb250ZXh0bWVudSdgLCBgJ3RvdWNoc3RhcnQnYCxcbiAgICAgKiBgJ3RvdWNoZW5kJ2AsIG9yIGAndG91Y2hjYW5jZWwnYC4gYG1vdXNlZW50ZXJgIGFuZCBgbW91c2VvdmVyYCBldmVudHMgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgZW50ZXJzXG4gICAgICogYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciBmcm9tIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLiBgbW91c2VsZWF2ZWBcbiAgICAgKiBhbmQgYG1vdXNlb3V0YCBldmVudHMgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgbGVhdmVzIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIsIG9yIGxlYXZlc1xuICAgICAqIHRoZSBtYXAgY2FudmFzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiBhIHN0eWxlIGxheWVyLiBPbmx5IGV2ZW50cyB3aG9zZSBsb2NhdGlvbiBpcyB3aXRoaW4gYSB2aXNpYmxlXG4gICAgICogZmVhdHVyZSBpbiB0aGlzIGxheWVyIHdpbGwgdHJpZ2dlciB0aGUgbGlzdGVuZXIuIFRoZSBldmVudCB3aWxsIGhhdmUgYSBgZmVhdHVyZXNgIHByb3BlcnR5IGNvbnRhaW5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgbWF0Y2hpbmcgZmVhdHVyZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBvbih0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIub24odHlwZSwgbGF5ZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxlZ2F0ZWRMaXN0ZW5lciA9IHRoaXMuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHR5cGUsIGxheWVySWQsIGxpc3RlbmVyKTtcblxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMgPSB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMgfHwge307XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXSA9IHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXSB8fCBbXTtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdLnB1c2goZGVsZWdhdGVkTGlzdGVuZXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLm9uKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgdG8gYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbmFtZSBvbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGFkZCBhIGxpc3RlbmVyIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqICAgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gYGZpcmVgLFxuICAgICAqICAgZXh0ZW5kZWQgd2l0aCBgdGFyZ2V0YCBhbmQgYHR5cGVgIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgdG8gYSBzcGVjaWZpZWQgZXZlbnQgdHlwZSBvY2N1cnJpbmcgb24gZmVhdHVyZXMgaW4gYSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yOyBvbmUgb2YgYCdtb3VzZWRvd24nYCwgYCdtb3VzZXVwJ2AsIGAnY2xpY2snYCwgYCdkYmxjbGljaydgLFxuICAgICAqIGAnbW91c2Vtb3ZlJ2AsIGAnbW91c2VlbnRlcidgLCBgJ21vdXNlbGVhdmUnYCwgYCdtb3VzZW92ZXInYCwgYCdtb3VzZW91dCdgLCBgJ2NvbnRleHRtZW51J2AsIGAndG91Y2hzdGFydCdgLFxuICAgICAqIGAndG91Y2hlbmQnYCwgb3IgYCd0b3VjaGNhbmNlbCdgLiBgbW91c2VlbnRlcmAgYW5kIGBtb3VzZW92ZXJgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBlbnRlcnNcbiAgICAgKiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gb3V0c2lkZSB0aGF0IGxheWVyIG9yIG91dHNpZGUgdGhlIG1hcCBjYW52YXMuIGBtb3VzZWxlYXZlYFxuICAgICAqIGFuZCBgbW91c2VvdXRgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciwgb3IgbGVhdmVzXG4gICAgICogdGhlIG1hcCBjYW52YXMuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIGEgc3R5bGUgbGF5ZXIuIE9ubHkgZXZlbnRzIHdob3NlIGxvY2F0aW9uIGlzIHdpdGhpbiBhIHZpc2libGVcbiAgICAgKiBmZWF0dXJlIGluIHRoaXMgbGF5ZXIgd2lsbCB0cmlnZ2VyIHRoZSBsaXN0ZW5lci4gVGhlIGV2ZW50IHdpbGwgaGF2ZSBhIGBmZWF0dXJlc2AgcHJvcGVydHkgY29udGFpbmluZ1xuICAgICAqIGFuIGFycmF5IG9mIHRoZSBtYXRjaGluZyBmZWF0dXJlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgb25jZSh0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vbmNlKHR5cGUsIGxheWVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZWdhdGVkTGlzdGVuZXIgPSB0aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0eXBlLCBsYXllcklkLCBsaXN0ZW5lcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMub25jZSgoZXZlbnQ6IGFueSksIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlc1tldmVudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBwcmV2aW91c2x5IGFkZGVkIHdpdGggYE1hcCNvbmAuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG5hbWUgb2ZmXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gcHJldmlvdXNseSBpbnN0YWxsZWQgYXMgYSBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGxheWVyLXNwZWNpZmljIGV2ZW50cyBwcmV2aW91c2x5IGFkZGVkIHdpdGggYE1hcCNvbmAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIGxheWVyIElEIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gcHJldmlvdXNseSBpbnN0YWxsZWQgYXMgYSBsaXN0ZW5lci5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBvZmYodHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9mZih0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZURlbGVnYXRlZExpc3RlbmVyID0gKGRlbGVnYXRlZExpc3RlbmVycykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxlZ2F0ZWRMaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVkTGlzdGVuZXIubGF5ZXIgPT09IGxheWVySWQgJiYgZGVsZWdhdGVkTGlzdGVuZXIubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZigoZXZlbnQ6IGFueSksIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlc1tldmVudF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzICYmIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICAgICAgcmVtb3ZlRGVsZWdhdGVkTGlzdGVuZXIodGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpXG4gICAgICogcmVwcmVzZW50aW5nIHZpc2libGUgZmVhdHVyZXMgdGhhdCBzYXRpc2Z5IHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V8QXJyYXk8UG9pbnRMaWtlPn0gW2dlb21ldHJ5XSAtIFRoZSBnZW9tZXRyeSBvZiB0aGUgcXVlcnkgcmVnaW9uOlxuICAgICAqIGVpdGhlciBhIHNpbmdsZSBwb2ludCBvciBzb3V0aHdlc3QgYW5kIG5vcnRoZWFzdCBwb2ludHMgZGVzY3JpYmluZyBhIGJvdW5kaW5nIGJveC5cbiAgICAgKiBPbWl0dGluZyB0aGlzIHBhcmFtZXRlciAoaS5lLiBjYWxsaW5nIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSB3aXRoIHplcm8gYXJndW1lbnRzLFxuICAgICAqIG9yIHdpdGggb25seSBhIGBvcHRpb25zYCBhcmd1bWVudCkgaXMgZXF1aXZhbGVudCB0byBwYXNzaW5nIGEgYm91bmRpbmcgYm94IGVuY29tcGFzc2luZyB0aGUgZW50aXJlXG4gICAgICogbWFwIHZpZXdwb3J0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtvcHRpb25zLmxheWVyc10gQW4gYXJyYXkgb2YgW3N0eWxlIGxheWVyIElEc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLWlkKSBmb3IgdGhlIHF1ZXJ5IHRvIGluc3BlY3QuXG4gICAgICogICBPbmx5IGZlYXR1cmVzIHdpdGhpbiB0aGVzZSBsYXllcnMgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgbGF5ZXJzIHdpbGwgYmUgY2hlY2tlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5maWx0ZXJdIEEgW2ZpbHRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jb3RoZXItZmlsdGVyKVxuICAgICAqICAgdG8gbGltaXQgcXVlcnkgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIFtvcHRpb25zLmZpbHRlcl0gY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW2ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpLlxuICAgICAqXG4gICAgICogVGhlIGBwcm9wZXJ0aWVzYCB2YWx1ZSBvZiBlYWNoIHJldHVybmVkIGZlYXR1cmUgb2JqZWN0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIG9mIGl0cyBzb3VyY2UgZmVhdHVyZS4gRm9yIEdlb0pTT04gc291cmNlcywgb25seVxuICAgICAqIHN0cmluZyBhbmQgbnVtZXJpYyBwcm9wZXJ0eSB2YWx1ZXMgYXJlIHN1cHBvcnRlZCAoaS5lLiBgbnVsbGAsIGBBcnJheWAsIGFuZCBgT2JqZWN0YCB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQpLlxuICAgICAqXG4gICAgICogRWFjaCBmZWF0dXJlIGluY2x1ZGVzIHRvcC1sZXZlbCBgbGF5ZXJgLCBgc291cmNlYCwgYW5kIGBzb3VyY2VMYXllcmAgcHJvcGVydGllcy4gVGhlIGBsYXllcmAgcHJvcGVydHkgaXMgYW4gb2JqZWN0XG4gICAgICogcmVwcmVzZW50aW5nIHRoZSBzdHlsZSBsYXllciB0byAgd2hpY2ggdGhlIGZlYXR1cmUgYmVsb25ncy4gTGF5b3V0IGFuZCBwYWludCBwcm9wZXJ0aWVzIGluIHRoaXMgb2JqZWN0IGNvbnRhaW4gdmFsdWVzXG4gICAgICogd2hpY2ggYXJlIGZ1bGx5IGV2YWx1YXRlZCBmb3IgdGhlIGdpdmVuIHpvb20gbGV2ZWwgYW5kIGZlYXR1cmUuXG4gICAgICpcbiAgICAgKiBPbmx5IGZlYXR1cmVzIHRoYXQgYXJlIGN1cnJlbnRseSByZW5kZXJlZCBhcmUgaW5jbHVkZWQuIFNvbWUgZmVhdHVyZXMgd2lsbCAqKm5vdCoqIGJlIGluY2x1ZGVkLCBsaWtlOlxuICAgICAqXG4gICAgICogLSBGZWF0dXJlcyBmcm9tIGxheWVycyB3aG9zZSBgdmlzaWJpbGl0eWAgcHJvcGVydHkgaXMgYFwibm9uZVwiYC5cbiAgICAgKiAtIEZlYXR1cmVzIGZyb20gbGF5ZXJzIHdob3NlIHpvb20gcmFuZ2UgZXhjbHVkZXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbC5cbiAgICAgKiAtIFN5bWJvbCBmZWF0dXJlcyB0aGF0IGhhdmUgYmVlbiBoaWRkZW4gZHVlIHRvIHRleHQgb3IgaWNvbiBjb2xsaXNpb24uXG4gICAgICpcbiAgICAgKiBGZWF0dXJlcyBmcm9tIGFsbCBvdGhlciBsYXllcnMgYXJlIGluY2x1ZGVkLCBpbmNsdWRpbmcgZmVhdHVyZXMgdGhhdCBtYXkgaGF2ZSBubyB2aXNpYmxlXG4gICAgICogY29udHJpYnV0aW9uIHRvIHRoZSByZW5kZXJlZCByZXN1bHQ7IGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSBsYXllcidzIG9wYWNpdHkgb3IgY29sb3IgYWxwaGEgY29tcG9uZW50IGlzIHNldCB0b1xuICAgICAqIDAuXG4gICAgICpcbiAgICAgKiBUaGUgdG9wbW9zdCByZW5kZXJlZCBmZWF0dXJlIGFwcGVhcnMgZmlyc3QgaW4gdGhlIHJldHVybmVkIGFycmF5LCBhbmQgc3Vic2VxdWVudCBmZWF0dXJlcyBhcmUgc29ydGVkIGJ5XG4gICAgICogZGVzY2VuZGluZyB6LW9yZGVyLiBGZWF0dXJlcyB0aGF0IGFyZSByZW5kZXJlZCBtdWx0aXBsZSB0aW1lcyAoZHVlIHRvIHdyYXBwaW5nIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIGF0IGxvd1xuICAgICAqIHpvb20gbGV2ZWxzKSBhcmUgcmV0dXJuZWQgb25seSBvbmNlICh0aG91Z2ggc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNhdmVhdCkuXG4gICAgICpcbiAgICAgKiBCZWNhdXNlIGZlYXR1cmVzIGNvbWUgZnJvbSB0aWxlZCB2ZWN0b3IgZGF0YSBvciBHZW9KU09OIGRhdGEgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gdGlsZXMgaW50ZXJuYWxseSwgZmVhdHVyZVxuICAgICAqIGdlb21ldHJpZXMgbWF5IGJlIHNwbGl0IG9yIGR1cGxpY2F0ZWQgYWNyb3NzIHRpbGUgYm91bmRhcmllcyBhbmQsIGFzIGEgcmVzdWx0LCBmZWF0dXJlcyBtYXkgYXBwZWFyIG11bHRpcGxlXG4gICAgICogdGltZXMgaW4gcXVlcnkgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgaXMgYSBoaWdod2F5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIGEgcXVlcnkuXG4gICAgICogVGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHdpbGwgYmUgdGhvc2UgcGFydHMgb2YgdGhlIGhpZ2h3YXkgdGhhdCBsaWUgd2l0aGluIHRoZSBtYXAgdGlsZXMgY292ZXJpbmcgdGhlIGJvdW5kaW5nXG4gICAgICogcmVjdGFuZ2xlLCBldmVuIGlmIHRoZSBoaWdod2F5IGV4dGVuZHMgaW50byBvdGhlciB0aWxlcywgYW5kIHRoZSBwb3J0aW9uIG9mIHRoZSBoaWdod2F5IHdpdGhpbiBlYWNoIG1hcCB0aWxlXG4gICAgICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIGZlYXR1cmUuIFNpbWlsYXJseSwgYSBwb2ludCBmZWF0dXJlIG5lYXIgYSB0aWxlIGJvdW5kYXJ5IG1heSBhcHBlYXIgaW4gbXVsdGlwbGVcbiAgICAgKiB0aWxlcyBkdWUgdG8gdGlsZSBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIGF0IGEgcG9pbnRcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAqICAgWzIwLCAzNV0sXG4gICAgICogICB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIHdpdGhpbiBhIHN0YXRpYyBib3VuZGluZyBib3hcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFxuICAgICAqICAgW1sxMCwgMjBdLCBbMzAsIDUwXV0sXG4gICAgICogICB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveCBhcm91bmQgYSBwb2ludFxuICAgICAqIHZhciB3aWR0aCA9IDEwO1xuICAgICAqIHZhciBoZWlnaHQgPSAyMDtcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKFtcbiAgICAgKiAgIFtwb2ludC54IC0gd2lkdGggLyAyLCBwb2ludC55IC0gaGVpZ2h0IC8gMl0sXG4gICAgICogICBbcG9pbnQueCArIHdpZHRoIC8gMiwgcG9pbnQueSArIGhlaWdodCAvIDJdXG4gICAgICogXSwgeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBRdWVyeSBhbGwgcmVuZGVyZWQgZmVhdHVyZXMgZnJvbSBhIHNpbmdsZSBsYXllclxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH0pO1xuICAgICAqIEBzZWUgW0dldCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbRmlsdGVyIGZlYXR1cmVzIHdpdGhpbiBtYXAgdmlld10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItZmVhdHVyZXMtd2l0aGluLW1hcC12aWV3LylcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoZ2VvbWV0cnk/OiBQb2ludExpa2UgfCBbUG9pbnRMaWtlLCBQb2ludExpa2VdLCBvcHRpb25zPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJhbWV0ZXIgY2FuIGJlIG9taXR0ZWQgZW50aXJlbHksIG1ha2luZyB0aGlzIGVmZmVjdGl2ZWx5IGFuIG92ZXJsb2FkZWQgbWV0aG9kXG4gICAgICAgIC8vIHdpdGggdHdvIHNpZ25hdHVyZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoZ2VvbWV0cnk6IFBvaW50TGlrZSB8IFtQb2ludExpa2UsIFBvaW50TGlrZV0sIG9wdGlvbnM/OiBPYmplY3QpXG4gICAgICAgIC8vICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMob3B0aW9ucz86IE9iamVjdClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlcmUgbm8gd2F5IHRvIGV4cHJlc3MgdGhhdCBpbiBhIHdheSB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIGJvdGggZmxvdyBhbmQgZG9jdW1lbnRhdGlvbi5qcy5cbiAgICAgICAgLy8gUmVsYXRlZDogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE1NTZcblxuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCAmJiAhKGdlb21ldHJ5IGluc3RhbmNlb2YgUG9pbnQpICYmICFBcnJheS5pc0FycmF5KGdlb21ldHJ5KSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IChnZW9tZXRyeTogT2JqZWN0KTtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvbWV0cnkgfHwgW1swLCAwXSwgW3RoaXMudHJhbnNmb3JtLndpZHRoLCB0aGlzLnRyYW5zZm9ybS5oZWlnaHRdXTtcblxuICAgICAgICBsZXQgcXVlcnlHZW9tZXRyeTtcbiAgICAgICAgaWYgKGdlb21ldHJ5IGluc3RhbmNlb2YgUG9pbnQgfHwgdHlwZW9mIGdlb21ldHJ5WzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSA9IFtQb2ludC5jb252ZXJ0KGdlb21ldHJ5KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0bCA9IFBvaW50LmNvbnZlcnQoZ2VvbWV0cnlbMF0pO1xuICAgICAgICAgICAgY29uc3QgYnIgPSBQb2ludC5jb252ZXJ0KGdlb21ldHJ5WzFdKTtcbiAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnkgPSBbdGwsIG5ldyBQb2ludChici54LCB0bC55KSwgYnIsIG5ldyBQb2ludCh0bC54LCBici55KSwgdGxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHF1ZXJ5R2VvbWV0cnksIG9wdGlvbnMsIHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKVxuICAgICAqIHJlcHJlc2VudGluZyBmZWF0dXJlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCB2ZWN0b3IgdGlsZSBvciBHZW9KU09OIHNvdXJjZSB0aGF0IHNhdGlzZnkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlSWQgVGhlIElEIG9mIHRoZSB2ZWN0b3IgdGlsZSBvciBHZW9KU09OIHNvdXJjZSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtZXRlcnNdXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbWV0ZXJzLnNvdXJjZUxheWVyXSBUaGUgbmFtZSBvZiB0aGUgW3NvdXJjZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zb3VyY2UtbGF5ZXIvKVxuICAgICAqICAgdG8gcXVlcnkuICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuKiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbWV0ZXJzLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNvdGhlci1maWx0ZXIpXG4gICAgICogICB0byBsaW1pdCBxdWVyeSByZXN1bHRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhcmFtZXRlcnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgW3BhcmFtZXRlcnMuZmlsdGVyXSBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMikuXG4gICAgICpcbiAgICAgKiBJbiBjb250cmFzdCB0byB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbGwgZmVhdHVyZXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMsXG4gICAgICogd2hldGhlciBvciBub3QgdGhleSBhcmUgcmVuZGVyZWQgYnkgdGhlIGN1cnJlbnQgc3R5bGUgKGkuZS4gdmlzaWJsZSkuIFRoZSBkb21haW4gb2YgdGhlIHF1ZXJ5IGluY2x1ZGVzIGFsbCBjdXJyZW50bHktbG9hZGVkXG4gICAgICogdmVjdG9yIHRpbGVzIGFuZCBHZW9KU09OIHNvdXJjZSB0aWxlczogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aWxlcyBvdXRzaWRlIHRoZSBjdXJyZW50bHlcbiAgICAgKiB2aXNpYmxlIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogQmVjYXVzZSBmZWF0dXJlcyBjb21lIGZyb20gdGlsZWQgdmVjdG9yIGRhdGEgb3IgR2VvSlNPTiBkYXRhIHRoYXQgaXMgY29udmVydGVkIHRvIHRpbGVzIGludGVybmFsbHksIGZlYXR1cmVcbiAgICAgKiBnZW9tZXRyaWVzIG1heSBiZSBzcGxpdCBvciBkdXBsaWNhdGVkIGFjcm9zcyB0aWxlIGJvdW5kYXJpZXMgYW5kLCBhcyBhIHJlc3VsdCwgZmVhdHVyZXMgbWF5IGFwcGVhciBtdWx0aXBsZVxuICAgICAqIHRpbWVzIGluIHF1ZXJ5IHJlc3VsdHMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZXJlIGlzIGEgaGlnaHdheSBydW5uaW5nIHRocm91Z2ggdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiBhIHF1ZXJ5LlxuICAgICAqIFRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeSB3aWxsIGJlIHRob3NlIHBhcnRzIG9mIHRoZSBoaWdod2F5IHRoYXQgbGllIHdpdGhpbiB0aGUgbWFwIHRpbGVzIGNvdmVyaW5nIHRoZSBib3VuZGluZ1xuICAgICAqIHJlY3RhbmdsZSwgZXZlbiBpZiB0aGUgaGlnaHdheSBleHRlbmRzIGludG8gb3RoZXIgdGlsZXMsIGFuZCB0aGUgcG9ydGlvbiBvZiB0aGUgaGlnaHdheSB3aXRoaW4gZWFjaCBtYXAgdGlsZVxuICAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSBmZWF0dXJlLiBTaW1pbGFybHksIGEgcG9pbnQgZmVhdHVyZSBuZWFyIGEgdGlsZSBib3VuZGFyeSBtYXkgYXBwZWFyIGluIG11bHRpcGxlXG4gICAgICogdGlsZXMgZHVlIHRvIHRpbGUgYnVmZmVyaW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBGaW5kIGFsbCBmZWF0dXJlcyBpbiBvbmUgc291cmNlIGxheWVyIGluIGEgdmVjdG9yIHNvdXJjZVxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVNvdXJjZUZlYXR1cmVzKCd5b3VyLXNvdXJjZS1pZCcsIHtcbiAgICAgKiAgIHNvdXJjZUxheWVyOiAneW91ci1zb3VyY2UtbGF5ZXInXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgY29udGFpbmluZyBzaW1pbGFyIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcXVlcnktc2ltaWxhci1mZWF0dXJlcy8pXG4gICAgICovXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJZDogc3RyaW5nLCBwYXJhbWV0ZXJzOiA/e3NvdXJjZUxheWVyOiA/c3RyaW5nLCBmaWx0ZXI6ID9BcnJheTxhbnk+LCB2YWxpZGF0ZT86IGJvb2xlYW59KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXMoc291cmNlSWQsIHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1hcCdzIE1hcGJveCBzdHlsZSBvYmplY3Qgd2l0aCBhIG5ldyB2YWx1ZS5cbiAgICAgKlxuICAgICAqIElmIGEgc3R5bGUgaXMgYWxyZWFkeSBzZXQgd2hlbiB0aGlzIGlzIHVzZWQgYW5kIG9wdGlvbnMuZGlmZiBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1hcCByZW5kZXJlciB3aWxsIGF0dGVtcHQgdG8gY29tcGFyZSB0aGUgZ2l2ZW4gc3R5bGVcbiAgICAgKiBhZ2FpbnN0IHRoZSBtYXAncyBjdXJyZW50IHN0YXRlIGFuZCBwZXJmb3JtIG9ubHkgdGhlIGNoYW5nZXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIG1hcCBzdHlsZSBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gQ2hhbmdlcyBpbiBzcHJpdGVzXG4gICAgICogKGltYWdlcyB1c2VkIGZvciBpY29ucyBhbmQgcGF0dGVybnMpIGFuZCBnbHlwaHMgKGZvbnRzIGZvciBsYWJlbCB0ZXh0KSAqKmNhbm5vdCoqIGJlIGRpZmZlZC4gSWYgdGhlIHNwcml0ZXMgb3IgZm9udHMgdXNlZCBpbiB0aGUgY3VycmVudFxuICAgICAqIHN0eWxlIGFuZCB0aGUgZ2l2ZW4gc3R5bGUgYXJlIGRpZmZlcmVudCBpbiBhbnkgd2F5LCB0aGUgbWFwIHJlbmRlcmVyIHdpbGwgZm9yY2UgYSBmdWxsIHVwZGF0ZSwgcmVtb3ZpbmcgdGhlIGN1cnJlbnQgc3R5bGUgYW5kIGJ1aWxkaW5nXG4gICAgICogdGhlIGdpdmVuIG9uZSBmcm9tIHNjcmF0Y2guXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHlsZSBBIEpTT04gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIHNjaGVtYSBkZXNjcmliZWQgaW4gdGhlXG4gICAgICogICBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vbWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLCBvciBhIFVSTCB0byBzdWNoIEpTT04uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlmZj10cnVlXSBJZiBmYWxzZSwgZm9yY2UgYSAnZnVsbCcgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZVxuICAgICAqICAgYW5kIGJ1aWxkaW5nIHRoZSBnaXZlbiBvbmUgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGEgZGlmZi1iYXNlZCB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAgICAgKiAgIGZvbnQtZmFtaWx5IGZvciBsb2NhbGx5IG92ZXJyaWRpbmcgZ2VuZXJhdGlvbiBvZiBnbHlwaHMgaW4gdGhlICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywgJ0hpcmFnYW5hJywgJ0thdGFrYW5hJyBhbmQgJ0hhbmd1bCBTeWxsYWJsZXMnIHJhbmdlcy5cbiAgICAgKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICAgICAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuXG4gICAgICogICBGb3JjZXMgYSBmdWxsIHVwZGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFN0eWxlKFwibWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMVwiKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NoYW5nZSBhIG1hcCdzIHN0eWxlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldHN0eWxlLylcbiAgICAgKi9cbiAgICBzZXRTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKChvcHRpb25zLmRpZmYgIT09IGZhbHNlICYmIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID09PSB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpICYmIHRoaXMuc3R5bGUgJiYgc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZmZTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRVSVN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLl9sb2NhbGVba2V5XTtcbiAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgVUkgc3RyaW5nICcke2tleX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIF91cGRhdGVTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gbmV3IFN0eWxlKHRoaXMsIG9wdGlvbnMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRVUkwoc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkSlNPTihzdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfbGF6eUluaXRFbXB0eVN0eWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgU3R5bGUodGhpcywge30pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkRW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9kaWZmU3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZywgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChzdHlsZSk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5TdHlsZSk7XG4gICAgICAgICAgICBnZXRKU09OKHJlcXVlc3QsIChlcnJvcjogP0Vycm9yLCBqc29uOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWZmKGpzb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURpZmYoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHlsZS5zZXRTdGF0ZShzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAke2UubWVzc2FnZSB8fCBlLmVycm9yIHx8IGV9LiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBNYXBib3ggc3R5bGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWNyZWF0ZSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVKc29uID0gbWFwLmdldFN0eWxlKCk7XG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRTdHlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAncyBzdHlsZSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3R5bGUgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVMb2FkU3RhdHVzID0gbWFwLmlzU3R5bGVMb2FkZWQoKTtcbiAgICAgKi9cbiAgICBpc1N0eWxlTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB3YXJuT25jZSgnVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNvdXJjZSB0byB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYWRkLiBNdXN0IG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCwgY29uZm9ybWluZyB0byB0aGVcbiAgICAgKiBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzIFtzb3VyY2UgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgb3JcbiAgICAgKiB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30uXG4gICAgICogQGZpcmVzIHNvdXJjZS5hZGRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICB0eXBlOiAndmVjdG9yJyxcbiAgICAgKiAgIHVybDogJ21hcGJveDovL215dXNlcm5hbWUudGlsZXNldGlkJ1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmFkZFNvdXJjZSgnbXktZGF0YScsIHtcbiAgICAgKiAgIFwidHlwZVwiOiBcImdlb2pzb25cIixcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAgICAgKiAgICAgXCJnZW9tZXRyeVwiOiB7XG4gICAgICogICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAgICAgKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFstNzcuMDMyMywgMzguOTEzMV1cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgKiAgICAgICBcInRpdGxlXCI6IFwiTWFwYm94IERDXCIsXG4gICAgICogICAgICAgXCJtYXJrZXItc3ltYm9sXCI6IFwibW9udW1lbnRcIlxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBWZWN0b3Igc291cmNlOiBbU2hvdyBhbmQgaGlkZSBsYXllcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RvZ2dsZS1sYXllcnMvKVxuICAgICAqIEBzZWUgR2VvSlNPTiBzb3VyY2U6IFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgUmFzdGVyIERFTSBzb3VyY2U6IFtBZGQgaGlsbHNoYWRpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hpbGxzaGFkZS8pXG4gICAgICovXG4gICAgYWRkU291cmNlKGlkOiBzdHJpbmcsIHNvdXJjZTogU291cmNlU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZS5hZGRTb3VyY2UoaWQsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb3VyY2UgaXMgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvdXJjZSBpcyBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc291cmNlTG9hZGVkID0gbWFwLmlzU291cmNlTG9hZGVkKCdiYXRoeW1ldHJ5LWRhdGEnKTtcbiAgICAgKi9cbiAgICBpc1NvdXJjZUxvYWRlZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICcke2lkfSdgKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFsbCB0aWxlcyBpbiB0aGUgdmlld3BvcnQgZnJvbSBhbGwgc291cmNlcyBvblxuICAgICAqIHRoZSBzdHlsZSBhcmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIHRpbGVzIGFyZSBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgdGlsZXNMb2FkZWQgPSBtYXAuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICAgKi9cblxuICAgIGFyZVRpbGVzTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVzID0gc291cmNlLl90aWxlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBpbiB0aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1t0XTtcbiAgICAgICAgICAgICAgICBpZiAoISh0aWxlLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aWxlLnN0YXRlID09PSAnZXJyb3JlZCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtjdXN0b20gc291cmNlIHR5cGVdKCNDdXN0b20gU291cmNlcyksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoXG4gICAgICoge0BsaW5rIE1hcCNhZGRTb3VyY2V9LlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSB0eXBlOyBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3RzIHVzZSB0aGlzIG5hbWUgaW4gdGhlIGB7dHlwZTogLi4ufWAgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gU291cmNlVHlwZSBBIHtAbGluayBTb3VyY2V9IGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aGVuIHRoZSBzb3VyY2UgdHlwZSBpcyByZWFkeSBvciB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGFkZFNvdXJjZVR5cGUobmFtZTogc3RyaW5nLCBTb3VyY2VUeXBlOiBhbnksIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZShuYW1lLCBTb3VyY2VUeXBlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHNvdXJjZSBmcm9tIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIHNvdXJjZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAucmVtb3ZlU291cmNlKCdiYXRoeW1ldHJ5LWRhdGEnKTtcbiAgICAgKi9cbiAgICByZW1vdmVTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZShpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCBpbiB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgc3R5bGUgc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgYHVuZGVmaW5lZGBcbiAgICAgKiAgIGlmIHRoZSBJRCBjb3JyZXNwb25kcyB0byBubyBleGlzdGluZyBzb3VyY2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHNvdXJjZU9iamVjdCA9IG1hcC5nZXRTb3VyY2UoJ3BvaW50cycpO1xuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqIEBzZWUgW0FkZCBsaXZlIHJlYWx0aW1lIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS1nZW9qc29uLylcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhbiBpbWFnZSB0byB0aGUgc3R5bGUuIFRoaXMgaW1hZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbWFwIGxpa2UgYW55IG90aGVyIGljb24gaW4gdGhlIHN0eWxlJ3NcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIHVzaW5nIHRoZSBpbWFnZSdzIElEIHdpdGhcbiAgICAgKiBbYGljb24taW1hZ2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5b3V0LXN5bWJvbC1pY29uLWltYWdlKSxcbiAgICAgKiBbYGJhY2tncm91bmQtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtcGF0dGVybiksXG4gICAgICogW2BmaWxsLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtZmlsbC1maWxsLXBhdHRlcm4pLFxuICAgICAqIG9yIFtgbGluZS1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWxpbmUtbGluZS1wYXR0ZXJuKS5cbiAgICAgKiBBIHtAbGluayBNYXAjZXJyb3J9IGV2ZW50IHdpbGwgYmUgZmlyZWQgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3ByaXRlIHRvIGFkZCB0aGlzIGltYWdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBhcyBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgXG4gICAgICogcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYC5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zLnBpeGVsUmF0aW8gVGhlIHJhdGlvIG9mIHBpeGVscyBpbiB0aGUgaW1hZ2UgdG8gcGh5c2ljYWwgcGl4ZWxzIG9uIHRoZSBzY3JlZW5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zZGYgV2hldGhlciB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIFNERiBpbWFnZVxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgIGBbeDEsIHkxLCB4MiwgeTJdYCAgSWYgYGljb24tdGV4dC1maXRgIGlzIHVzZWQgaW4gYSBsYXllciB3aXRoIHRoaXMgaW1hZ2UsIHRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHBhcnQgb2YgdGhlIGltYWdlIHRoYXQgY2FuIGJlIGNvdmVyZWQgYnkgdGhlIGNvbnRlbnQgaW4gYHRleHQtZmllbGRgLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnN0cmV0Y2hYICBgW1t4MSwgeDJdLCAuLi5dYCBJZiBgaWNvbi10ZXh0LWZpdGAgaXMgdXNlZCBpbiBhIGxheWVyIHdpdGggdGhpcyBpbWFnZSwgdGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcGFydChzKSBvZiB0aGUgaW1hZ2UgdGhhdCBjYW4gYmUgc3RyZXRjaGVkIGhvcml6b250YWxseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zdHJldGNoWSAgYFtbeTEsIHkyXSwgLi4uXWAgSWYgYGljb24tdGV4dC1maXRgIGlzIHVzZWQgaW4gYSBsYXllciB3aXRoIHRoaXMgaW1hZ2UsIHRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHBhcnQocykgb2YgdGhlIGltYWdlIHRoYXQgY2FuIGJlIHN0cmV0Y2hlZCB2ZXJ0aWNhbGx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiB0aGUgc3R5bGUncyBzcHJpdGUgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIGltYWdlIHdpdGggSUQgJ2NhdCcsXG4gICAgICogLy8gYWRkIHRoZSBpbWFnZSAnY2F0LWljb24ucG5nJyB0byB0aGUgc3R5bGUncyBzcHJpdGUgd2l0aCB0aGUgSUQgJ2NhdCcuXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi82LzYwL0NhdF9zaWxob3VldHRlLnN2Zy80MDBweC1DYXRfc2lsaG91ZXR0ZS5zdmcucG5nJywgZnVuY3Rpb24oZXJyb3IsIGltYWdlKSB7XG4gICAgICogICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgICBpZiAoIW1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5hZGRJbWFnZSgnY2F0JywgaW1hZ2UpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAvLyBBZGQgYSBzdHJldGNoYWJsZSBpbWFnZSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYGljb24tdGV4dC1maXRgXG4gICAgICogLy8gSW4gdGhpcyBleGFtcGxlLCB0aGUgaW1hZ2UgaXMgNjAwcHggd2lkZSBieSA0MDBweCBoaWdoLlxuICAgICAqIG1hcC5sb2FkSW1hZ2UoJ2h0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvOC84OS9CbGFja19hbmRfV2hpdGVfQm94ZWRfJTI4Ym9yZGVyZWQlMjkucG5nJywgZnVuY3Rpb24oZXJyb3IsIGltYWdlKSB7XG4gICAgICogICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgICBpZiAoIW1hcC5oYXNJbWFnZSgnYm9yZGVyLWltYWdlJykpIHtcbiAgICAgKiAgICAgIG1hcC5hZGRJbWFnZSgnYm9yZGVyLWltYWdlJywgaW1hZ2UsIHtcbiAgICAgKiAgICAgICAgICBjb250ZW50OiBbMTYsIDE2LCAzMDAsIDM4NF0sIC8vIHBsYWNlIHRleHQgb3ZlciBsZWZ0IGhhbGYgb2YgaW1hZ2UsIGF2b2lkaW5nIHRoZSAxNnB4IGJvcmRlclxuICAgICAqICAgICAgICAgIHN0cmV0Y2hYOiBbWzE2LCA1ODRdXSwgLy8gc3RyZXRjaCBldmVyeXRoaW5nIGhvcml6b250YWxseSBleGNlcHQgdGhlIDE2cHggYm9yZGVyXG4gICAgICogICAgICAgICAgc3RyZXRjaFk6IFtbMTYsIDM4NF1dLCAvLyBzdHJldGNoIGV2ZXJ5dGhpbmcgdmVydGljYWxseSBleGNlcHQgdGhlIDE2cHggYm9yZGVyXG4gICAgICogICAgICB9KTtcbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBzZWUgVXNlIGBIVE1MSW1hZ2VFbGVtZW50YDogW0FkZCBhbiBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLylcbiAgICAgKiBAc2VlIFVzZSBgSW1hZ2VEYXRhYDogW0FkZCBhIGdlbmVyYXRlZCBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLWdlbmVyYXRlZC8pXG4gICAgICovXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwIHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSxcbiAgICAgICAgICAgICB7cGl4ZWxSYXRpbyA9IDEsIHNkZiA9IGZhbHNlLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9OiAkU2hhcGU8U3R5bGVJbWFnZU1ldGFkYXRhPiA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gMDtcblxuICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGRhdGF9ID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5hZGRJbWFnZShpZCwge2RhdGE6IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9LCBkYXRhKSwgcGl4ZWxSYXRpbywgc3RyZXRjaFgsIHN0cmV0Y2hZLCBjb250ZW50LCBzZGYsIHZlcnNpb259KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZS53aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCAnICtcbiAgICAgICAgICAgICAgICAnb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCcpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBpbWFnZTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbWFnZSA9ICgoaW1hZ2U6IGFueSk6IFN0eWxlSW1hZ2VJbnRlcmZhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLnN0eWxlLmFkZEltYWdlKGlkLCB7XG4gICAgICAgICAgICAgICAgZGF0YTogbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0sIG5ldyBVaW50OEFycmF5KGRhdGEpKSxcbiAgICAgICAgICAgICAgICBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2hYLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2hZLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgc2RmLFxuICAgICAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXNlckltYWdlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHVzZXJJbWFnZS5vbkFkZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJbWFnZS5vbkFkZCh0aGlzLCBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgaW1hZ2UgaW4gYSBzdHlsZS4gVGhpcyBpbWFnZSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBtYXAgbGlrZSBhbnkgb3RoZXIgaWNvbiBpbiB0aGUgc3R5bGUnc1xuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgdXNpbmcgdGhlIGltYWdlJ3MgSUQgd2l0aFxuICAgICAqIFtgaWNvbi1pbWFnZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXlvdXQtc3ltYm9sLWljb24taW1hZ2UpLFxuICAgICAqIFtgYmFja2dyb3VuZC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWJhY2tncm91bmQtYmFja2dyb3VuZC1wYXR0ZXJuKSxcbiAgICAgKiBbYGZpbGwtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1maWxsLWZpbGwtcGF0dGVybiksXG4gICAgICogb3IgW2BsaW5lLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtbGluZS1saW5lLXBhdHRlcm4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBhcyBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgXG4gICAgICogcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHN0eWxlJ3Mgc3ByaXRlLFxuICAgICAqIC8vIHJlcGxhY2UgdGhhdCBpbWFnZSB3aXRoIGEgbmV3IGltYWdlLCAnb3RoZXItY2F0LWljb24ucG5nJy5cbiAgICAgKiBpZiAobWFwLmhhc0ltYWdlKCdjYXQnKSkgbWFwLnVwZGF0ZUltYWdlKCdjYXQnLCAnLi9vdGhlci1jYXQtaWNvbi5wbmcnKTtcbiAgICAgKi9cbiAgICB1cGRhdGVJbWFnZShpZDogc3RyaW5nLFxuICAgICAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwIHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSkge1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW1hZ2UgPSB0aGlzLnN0eWxlLmdldEltYWdlKGlkKTtcbiAgICAgICAgaWYgKCFleGlzdGluZ0ltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpID8gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpIDogaW1hZ2U7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGltYWdlRGF0YTtcblxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCB8fCBoZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHRvIG1hcC51cGRhdGVJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgJyArXG4gICAgICAgICAgICAgICAgJ29yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICE9PSBleGlzdGluZ0ltYWdlLmRhdGEud2lkdGggfHwgaGVpZ2h0ICE9PSBleGlzdGluZ0ltYWdlLmRhdGEuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvcHkgPSAhKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpO1xuICAgICAgICBleGlzdGluZ0ltYWdlLmRhdGEucmVwbGFjZShkYXRhLCBjb3B5KTtcblxuICAgICAgICB0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGlkLCBleGlzdGluZ0ltYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBhbiBpbWFnZSB3aXRoIGEgc3BlY2lmaWMgSUQgZXhpc3RzIGluIHRoZSBzdHlsZS4gVGhpcyBjaGVja3MgYm90aCBpbWFnZXNcbiAgICAgKiBpbiB0aGUgc3R5bGUncyBvcmlnaW5hbCBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIGFuZCBhbnkgaW1hZ2VzXG4gICAgICogdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgYWRkSW1hZ2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGltYWdlIGV4aXN0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIENoZWNrIGlmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGV4aXN0cyBpblxuICAgICAqIC8vIHRoZSBzdHlsZSdzIHNwcml0ZS5cbiAgICAgKiB2YXIgY2F0SWNvbkV4aXN0cyA9IG1hcC5oYXNJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgaGFzSW1hZ2UoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkJykpKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhIXRoaXMuc3R5bGUuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBpbWFnZSBmcm9tIGEgc3R5bGUuIFRoaXMgY2FuIGJlIGFuIGltYWdlIGZyb20gdGhlIHN0eWxlJ3Mgb3JpZ2luYWxcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIG9yIGFueSBpbWFnZXNcbiAgICAgKiB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBhZGRJbWFnZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgZXhpc3RzIGluXG4gICAgICogLy8gdGhlIHN0eWxlJ3Mgc3ByaXRlLCByZW1vdmUgaXQuXG4gICAgICogaWYgKG1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5yZW1vdmVJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUltYWdlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFuIGltYWdlIGZyb20gYW4gZXh0ZXJuYWwgVVJMIHRvIGJlIHVzZWQgd2l0aCBgTWFwI2FkZEltYWdlYC4gRXh0ZXJuYWxcbiAgICAgKiBkb21haW5zIG11c3Qgc3VwcG9ydCBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9BY2Nlc3NfY29udHJvbF9DT1JTKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCBvZiB0aGUgaW1hZ2UgZmlsZS4gSW1hZ2UgZmlsZSBtdXN0IGJlIGluIHBuZywgd2VicCwgb3IganBnIGZvcm1hdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBFeHBlY3RpbmcgYGNhbGxiYWNrKGVycm9yLCBkYXRhKWAuIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkIG9yIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExvYWQgYW4gaW1hZ2UgZnJvbSBhbiBleHRlcm5hbCBVUkwuXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cDovL3BsYWNla2l0dGVuLmNvbS81MC81MCcsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkge1xuICAgICAqICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgIC8vIEFkZCB0aGUgbG9hZGVkIGltYWdlIHRvIHRoZSBzdHlsZSdzIHNwcml0ZSB3aXRoIHRoZSBJRCAna2l0dGVuJy5cbiAgICAgKiAgIG1hcC5hZGRJbWFnZSgna2l0dGVuJywgaW1hZ2UpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQHNlZSBbQWRkIGFuIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UvKVxuICAgICAqL1xuICAgIGxvYWRJbWFnZSh1cmw6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIGdldEltYWdlKHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGFuIEFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgSURzIG9mIGFsbCBpbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICogVGhpcyBpbmNsdWRlcyBib3RoIGltYWdlcyBmcm9tIHRoZSBzdHlsZSdzIG9yaWdpbmFsIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLylcbiAgICAqIGFuZCBhbnkgaW1hZ2VzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIGFkZEltYWdlfS5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gQXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgc3ByaXRlcy9pbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICpcbiAgICAqIEBleGFtcGxlXG4gICAgKiB2YXIgYWxsSW1hZ2VzID0gbWFwLmxpc3RJbWFnZXMoKTtcbiAgICAqXG4gICAgKi9cbiAgICBsaXN0SW1hZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5saXN0SW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtNYXBib3ggc3R5bGUgbGF5ZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllcnMpXG4gICAgICogdG8gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQSBsYXllciBkZWZpbmVzIGhvdyBkYXRhIGZyb20gYSBzcGVjaWZpZWQgc291cmNlIHdpbGwgYmUgc3R5bGVkLiBSZWFkIG1vcmUgYWJvdXQgbGF5ZXIgdHlwZXNcbiAgICAgKiBhbmQgYXZhaWxhYmxlIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydGllcyBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyIFRoZSBzdHlsZSBsYXllciB0byBhZGQsIGNvbmZvcm1pbmcgdG8gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiAgIFtsYXllciBkZWZpbml0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIGEgY2lyY2xlIGxheWVyIHdpdGggYSB2ZWN0b3Igc291cmNlLlxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3BvaW50cy1vZi1pbnRlcmVzdCcsXG4gICAgICogICBzb3VyY2U6IHtcbiAgICAgKiAgICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICAgIHVybDogJ21hcGJveDovL21hcGJveC5tYXBib3gtc3RyZWV0cy12OCdcbiAgICAgKiAgIH0sXG4gICAgICogICAnc291cmNlLWxheWVyJzogJ3BvaV9sYWJlbCcsXG4gICAgICogICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgKiAgIHBhaW50OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIHBhaW50IHByb3BlcnRpZXNcbiAgICAgKiAgIH0sXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gbGF5b3V0IHByb3BlcnRpZXNcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhbmQgc3R5bGUgY2x1c3RlcnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2x1c3Rlci8pXG4gICAgICogQHNlZSBbQWRkIGEgdmVjdG9yIHRpbGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZlY3Rvci1zb3VyY2UvKVxuICAgICAqIEBzZWUgW0FkZCBhIFdNUyBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvd21zLylcbiAgICAgKi9cbiAgICBhZGRMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICB0aGlzLnN0eWxlLmFkZExheWVyKGxheWVyLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBsYXllciB0byBhIGRpZmZlcmVudCB6LXBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIE1vdmUgYSBsYXllciB3aXRoIElEICdsYWJlbCcgYmVmb3JlIHRoZSBsYXllciB3aXRoIElEICd3YXRlcndheXMnLlxuICAgICAqIG1hcC5tb3ZlTGF5ZXIoJ2xhYmVsJywgJ3dhdGVyd2F5cycpO1xuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLm1vdmVMYXllcihpZCwgYmVmb3JlSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIElEIGZyb20gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogSWYgbm8gc3VjaCBsYXllciBleGlzdHMsIGFuIGBlcnJvcmAgZXZlbnQgaXMgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIGxheWVyIHRvIHJlbW92ZVxuICAgICAqIEBmaXJlcyBlcnJvclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhIGxheWVyIHdpdGggSUQgJ3N0YXRlLWRhdGEnIGV4aXN0cywgcmVtb3ZlIGl0LlxuICAgICAqIGlmIChtYXAuZ2V0TGF5ZXIoJ3N0YXRlLWRhdGEnKSkgbWFwLnJlbW92ZUxheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaW4gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgbGF5ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBgdW5kZWZpbmVkYFxuICAgICAqICAgaWYgdGhlIElEIGNvcnJlc3BvbmRzIHRvIG5vIGV4aXN0aW5nIGxheWVycy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHN0YXRlRGF0YUxheWVyID0gbWFwLmdldExheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtGaWx0ZXIgc3ltYm9scyBieSB0b2dnbGluZyBhIGxpc3RdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBzeW1ib2xzIGJ5IHRleHQgaW5wdXRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMtYnktaW5wdXQvKVxuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHpvb20gZXh0ZW50IGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLiBUaGUgem9vbSBleHRlbnQgaW5jbHVkZXMgdGhlXG4gICAgICogW21pbmltdW0gem9vbSBsZXZlbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLW1pbnpvb20pXG4gICAgICogYW5kIFttYXhpbXVtIHpvb20gbGV2ZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllci1tYXh6b29tKSlcbiAgICAgKiBhdCB3aGljaCB0aGUgbGF5ZXIgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIE5vdGU6IEZvciBzdHlsZSBsYXllcnMgdXNpbmcgdmVjdG9yIHNvdXJjZXMsIHN0eWxlIGxheWVycyBjYW5ub3QgYmUgcmVuZGVyZWQgYXQgem9vbSBsZXZlbHMgbG93ZXIgdGhhbiB0aGVcbiAgICAgKiBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIF9zb3VyY2UgbGF5ZXJfIGJlY2F1c2UgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3QgYXQgdGhvc2Ugem9vbSBsZXZlbHMuIElmIHRoZSBtaW5pbXVtXG4gICAgICogem9vbSBsZXZlbCBvZiB0aGUgc291cmNlIGxheWVyIGlzIGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZGVmaW5lZCBpbiB0aGUgc3R5bGUgbGF5ZXIsIHRoZSBzdHlsZVxuICAgICAqIGxheWVyIHdpbGwgbm90IGJlIHJlbmRlcmVkIGF0IGFsbCB6b29tIGxldmVscyBpbiB0aGUgem9vbSByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gd2hpY2ggdGhlIHpvb20gZXh0ZW50IHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluem9vbSBUaGUgbWluaW11bSB6b29tIHRvIHNldCAoMC0yNCkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heHpvb20gVGhlIG1heGltdW0gem9vbSB0byBzZXQgKDAtMjQpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TGF5ZXJab29tUmFuZ2UoJ215LWxheWVyJywgMiwgNSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206IG51bWJlciwgbWF4em9vbTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZCwgbWluem9vbSwgbWF4em9vbSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVyIGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byB3aGljaCB0aGUgZmlsdGVyIHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5IHwgbnVsbCB8IHVuZGVmaW5lZH0gZmlsdGVyIFRoZSBmaWx0ZXIsIGNvbmZvcm1pbmcgdG8gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiAgIFtmaWx0ZXIgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jb3RoZXItZmlsdGVyKS4gIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYW55IGV4aXN0aW5nIGZpbHRlciBmcm9tIHRoZSBsYXllci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBmaWx0ZXIgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRGaWx0ZXIoJ215LWxheWVyJywgWyc9PScsICduYW1lJywgJ1VTQSddKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIGNvbnRhaW5pbmcgc2ltaWxhciBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5LXNpbWlsYXItZmVhdHVyZXMvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIHRpbWVsaW5lIGFuaW1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aW1lbGluZS1hbmltYXRpb24vKVxuICAgICAqL1xuICAgIHNldEZpbHRlcihsYXllcklkOiBzdHJpbmcsIGZpbHRlcjogP0ZpbHRlclNwZWNpZmljYXRpb24sICBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldEZpbHRlcihsYXllcklkLCBmaWx0ZXIsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlciBhcHBsaWVkIHRvIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIHN0eWxlIGxheWVyIHdob3NlIGZpbHRlciB0byBnZXQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBUaGUgbGF5ZXIncyBmaWx0ZXIuXG4gICAgICovXG4gICAgZ2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIobGF5ZXJJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwYWludCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBzZXQgdGhlIHBhaW50IHByb3BlcnR5IGluLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWludCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhaW50IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiAgIE11c3QgYmUgb2YgYSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHksIGFzIGRlZmluZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgYHZhbHVlYCBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRQYWludFByb3BlcnR5KCdteS1sYXllcicsICdmaWxsLWNvbG9yJywgJyNmYWFmZWUnKTtcbiAgICAgKiBAc2VlIFtDaGFuZ2UgYSBsYXllcidzIGNvbG9yIHdpdGggYnV0dG9uc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jb2xvci1zd2l0Y2hlci8pXG4gICAgICogQHNlZSBbQWRqdXN0IGEgbGF5ZXIncyBvcGFjaXR5XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkanVzdC1sYXllci1vcGFjaXR5LylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKi9cbiAgICBzZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFpbnQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBwYWludCBwcm9wZXJ0eSBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIGEgcGFpbnQgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwYWludCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBnZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gc2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgaW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eS4gTXVzdCBiZSBvZiBhIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eSwgYXMgZGVmaW5lZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiBgdmFsdWVgIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldExheW91dFByb3BlcnR5KCdteS1sYXllcicsICd2aXNpYmlsaXR5JywgJ25vbmUnKTtcbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFueSBjb21iaW5hdGlvbiBvZiBsaWdodCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGlnaHQgTGlnaHQgcHJvcGVydGllcyB0byBzZXQuIE11c3QgY29uZm9ybSB0byB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNsaWdodCkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZmlsdGVyIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldExpZ2h0KGxpZ2h0OiBMaWdodFNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICB0aGlzLnN0eWxlLnNldExpZ2h0KGxpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbGlnaHQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH0gbGlnaHQgTGlnaHQgcHJvcGVydGllcyBvZiB0aGUgc3R5bGUuXG4gICAgICovXG4gICAgZ2V0TGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGUgb2YgYSBmZWF0dXJlLiBUaGUgYHN0YXRlYCBvYmplY3QgaXMgbWVyZ2VkIGluIHdpdGggdGhlIGV4aXN0aW5nIHN0YXRlIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBpZGAgYXR0cmlidXRlLCB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmVcbiAgICAgKiBjYXN0IHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZSBGZWF0dXJlIGlkZW50aWZpZXIuIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tXG4gICAgICoge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZlYXR1cmUuaWQgVW5pcXVlIGlkIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlLnNvdXJjZSBUaGUgSWQgb2YgdGhlIHZlY3RvciBzb3VyY2Ugb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZS5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGUgc291cmNlTGF5ZXIgaXNcbiAgICAgKiAgcmVxdWlyZWQuKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMuIFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHZhbGlkIEpTT04gdHlwZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZSBvbiBkYXRhIHNldHMuIEZvciBHZW9KU09OIHNvdXJjZXMgd2l0aG91dFxuICAgICAqIGZlYXR1cmUgaWRzLCBzZXQgdGhlIGBnZW5lcmF0ZUlkYCBvcHRpb24gaW4gdGhlIGBHZW9KU09OU291cmNlU3BlY2lmaWNhdGlvbmAgdG8gYXV0by1hc3NpZ24gdGhlbS4gVGhpc1xuICAgICAqIG9wdGlvbiBhc3NpZ25zIGlkcyBiYXNlZCBvbiBhIGZlYXR1cmUncyBpbmRleCBpbiB0aGUgc291cmNlIGRhdGEuIElmIHlvdSBjaGFuZ2UgZmVhdHVyZSBkYXRhIHVzaW5nXG4gICAgICogYG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKS5zZXREYXRhKC4uKWAsIHlvdSBtYXkgbmVlZCB0byByZS1hcHBseSBzdGF0ZSB0YWtpbmcgaW50byBhY2NvdW50IHVwZGF0ZWQgYGlkYCB2YWx1ZXMuXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUsIHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmVhdHVyZSBzdGF0ZSwgc2V0dGluZyBpdCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJZiBvbmx5XG4gICAgICogc291cmNlIGlzIHNwZWNpZmllZCwgcmVtb3ZlcyBhbGwgc3RhdGVzIG9mIHRoYXQgc291cmNlLiBJZlxuICAgICAqIHRhcmdldC5pZCBpcyBhbHNvIHNwZWNpZmllZCwgcmVtb3ZlcyBhbGwga2V5cyBmb3IgdGhhdCBmZWF0dXJlJ3Mgc3RhdGUuXG4gICAgICogSWYga2V5IGlzIGFsc28gc3BlY2lmaWVkLCByZW1vdmVzIHRoYXQga2V5IGZyb20gdGhhdCBmZWF0dXJlJ3Mgc3RhdGUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGlkYCBhdHRyaWJ1dGUsIHdoaWNoIG11c3QgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyB0aGF0IGNhbiBiZVxuICAgICAqIGNhc3QgdG8gYW4gaW50ZWdlci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IElkZW50aWZpZXIgb2Ygd2hlcmUgdG8gc2V0IHN0YXRlOiBjYW4gYmUgYSBzb3VyY2UsIGEgZmVhdHVyZSwgb3IgYSBzcGVjaWZpYyBrZXkgb2YgZmVhdHVyZS5cbiAgICAgKiBGZWF0dXJlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gb3IgZXZlbnQgaGFuZGxlcnMgY2FuIGJlIHVzZWQgYXMgZmVhdHVyZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gdGFyZ2V0LmlkIChvcHRpb25hbCkgVW5pcXVlIGlkIG9mIHRoZSBmZWF0dXJlLiBPcHRpb25hbCBpZiBrZXkgaXMgbm90IHNwZWNpZmllZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0LnNvdXJjZSBUaGUgSWQgb2YgdGhlIHZlY3RvciBzb3VyY2Ugb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0LnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIHRoZSBzb3VyY2VMYXllciBpc1xuICAgICAqICByZXF1aXJlZC4qXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAob3B0aW9uYWwpIFRoZSBrZXkgaW4gdGhlIGZlYXR1cmUgc3RhdGUgdG8gcmVzZXQuXG4gICAgKi9cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0OiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IH0sIGtleT86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0YXJnZXQsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGlkYCBhdHRyaWJ1dGUsIHdoaWNoIG11c3QgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyB0aGF0IGNhbiBiZVxuICAgICAqIGNhc3QgdG8gYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlIEZlYXR1cmUgaWRlbnRpZmllci4gRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb21cbiAgICAgKiB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gb3IgZXZlbnQgaGFuZGxlcnMgY2FuIGJlIHVzZWQgYXMgZmVhdHVyZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gZmVhdHVyZS5pZCBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmUuc291cmNlIFRoZSBJZCBvZiB0aGUgdmVjdG9yIHNvdXJjZSBvciBHZW9KU09OIHNvdXJjZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmZWF0dXJlLnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIHRoZSBzb3VyY2VMYXllciBpc1xuICAgICAqICByZXF1aXJlZC4qXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAgICovXG4gICAgZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGNvbnRhaW5pbmcgSFRNTCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgbWFwJ3MgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldENvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBIVE1MIGVsZW1lbnQgY29udGFpbmluZyB0aGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gYWRkIG5vbi1HTCBvdmVybGF5cyB0byB0aGUgbWFwLCB5b3Ugc2hvdWxkIGFwcGVuZCB0aGVtIHRvIHRoaXMgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggZXZlbnQgYmluZGluZ3MgZm9yIG1hcCBpbnRlcmFjdGl2aXR5IChzdWNoIGFzIHBhbm5pbmcgYW5kIHpvb21pbmcpIGFyZVxuICAgICAqIGF0dGFjaGVkLiBJdCB3aWxsIHJlY2VpdmUgYnViYmxlZCBldmVudHMgZnJvbSBjaGlsZCBlbGVtZW50cyBzdWNoIGFzIHRoZSBgPGNhbnZhcz5gLCBidXQgbm90IGZyb21cbiAgICAgKiBtYXAgY29udHJvbHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBjb250YWluZXIgb2YgdGhlIG1hcCdzIGA8Y2FudmFzPmAuXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKi9cbiAgICBnZXRDYW52YXNDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqIEBzZWUgW01lYXN1cmUgZGlzdGFuY2VzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21lYXN1cmUvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICBnZXRDYW52YXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXM7XG4gICAgfVxuXG4gICAgX2NvbnRhaW5lckRpbWVuc2lvbnMoKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IDQwMDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgMzAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcbiAgICB9XG5cbiAgICBfZGV0ZWN0TWlzc2luZ0NTUygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRDb2xvciA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICAgICAgaWYgKGNvbXB1dGVkQ29sb3IgIT09ICdyZ2IoMjUwLCAxMjgsIDExNCknKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnVGhpcyBwYWdlIGFwcGVhcnMgdG8gYmUgbWlzc2luZyBDU1MgZGVjbGFyYXRpb25zIGZvciAnICtcbiAgICAgICAgICAgICAgICAnTWFwYm94IEdMIEpTLCB3aGljaCBtYXkgY2F1c2UgdGhlIG1hcCB0byBkaXNwbGF5IGluY29ycmVjdGx5LiAnICtcbiAgICAgICAgICAgICAgICAnUGxlYXNlIGVuc3VyZSB5b3VyIHBhZ2UgaW5jbHVkZXMgbWFwYm94LWdsLmNzcywgYXMgZGVzY3JpYmVkICcgK1xuICAgICAgICAgICAgICAgICdpbiBodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NldHVwQ29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1tYXAnKTtcblxuICAgICAgICBjb25zdCBtaXNzaW5nQ1NTQ2FuYXJ5ID0gdGhpcy5fbWlzc2luZ0NTU0NhbmFyeSA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jYW5hcnknLCBjb250YWluZXIpO1xuICAgICAgICBtaXNzaW5nQ1NTQ2FuYXJ5LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy5fZGV0ZWN0TWlzc2luZ0NTUygpO1xuXG4gICAgICAgIGNvbnN0IGNhbnZhc0NvbnRhaW5lciA9IHRoaXMuX2NhbnZhc0NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jYW52YXMtY29udGFpbmVyJywgY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtaW50ZXJhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbnZhcyA9IERPTS5jcmVhdGUoJ2NhbnZhcycsICdtYXBib3hnbC1jYW52YXMnLCBjYW52YXNDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuX2NvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuX2NvbnRleHRSZXN0b3JlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTWFwJyk7XG5cbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fcmVzaXplQ2FudmFzKGRpbWVuc2lvbnNbMF0sIGRpbWVuc2lvbnNbMV0pO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xDb250YWluZXIgPSB0aGlzLl9jb250cm9sQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNvbnRyb2wtY29udGFpbmVyJywgY29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5fY29udHJvbFBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBbJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCcsICdib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnXS5mb3JFYWNoKChwb3NpdGlvbk5hbWUpID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uc1twb3NpdGlvbk5hbWVdID0gRE9NLmNyZWF0ZSgnZGl2JywgYG1hcGJveGdsLWN0cmwtJHtwb3NpdGlvbk5hbWV9YCwgY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZXNpemVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgICAgIC8vIFJlcXVlc3QgdGhlIHJlcXVpcmVkIGNhbnZhcyBzaXplIHRha2luZyB0aGUgcGl4ZWxyYXRpbyBpbnRvIGFjY291bnQuXG4gICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3aWR0aDtcbiAgICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoZWlnaHQ7XG5cbiAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNhbWUgY2FudmFzIHNpemUsIHBvdGVudGlhbGx5IGRvd25zY2FsaW5nIGl0IGZvciBIaURQSSBkaXNwbGF5c1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIF9zZXR1cFBhaW50ZXIoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBleHRlbmQoe30sIGlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6IHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixcbiAgICAgICAgICAgIGFudGlhbGlhczogdGhpcy5fYW50aWFsaWFzIHx8IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKTtcblxuICAgICAgICBpZiAoIWdsKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTCcpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhaW50ZXIgPSBuZXcgUGFpbnRlcihnbCwgdGhpcy50cmFuc2Zvcm0pO1xuXG4gICAgICAgIHdlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQoZ2wpO1xuICAgIH1cblxuICAgIF9jb250ZXh0TG9zdChldmVudDogKikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dGxvc3QnLCB7b3JpZ2luYWxFdmVudDogZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgX2NvbnRleHRSZXN0b3JlZChldmVudDogKikge1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywge29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgc3R5bGUgaXMgbm90IHlldCBmdWxseSBsb2FkZWQsXG4gICAgICogb3IgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgdG8gdGhlIHNvdXJjZXMgb3Igc3R5bGUgdGhhdFxuICAgICAqIGhhcyBub3QgeWV0IGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqL1xuICAgIGxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9zdHlsZURpcnR5ICYmICF0aGlzLl9zb3VyY2VzRGlydHkgJiYgISF0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgbWFwJ3Mgc3R5bGUgYW5kIHNvdXJjZXMsIGFuZCByZS1yZW5kZXIgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU3R5bGUgbWFyayB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHJlcHJvY2Vzc2luZyBhc1xuICAgICAqIHdlbGwgYXMgaXRzIHNvdXJjZXNcbiAgICAgKiBAcmV0dXJucyB7TWFwfSB0aGlzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlKHVwZGF0ZVN0eWxlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSB0aGlzLl9zdHlsZURpcnR5IHx8IHVwZGF0ZVN0eWxlO1xuICAgICAgICB0aGlzLl9zb3VyY2VzRGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdCB0aGF0IHRoZSBnaXZlbiBjYWxsYmFjayBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIG5leHQgcmVuZGVyXG4gICAgICogZnJhbWUuICBTY2hlZHVsZSBhIHJlbmRlciBmcmFtZSBpZiBvbmUgaXMgbm90IGFscmVhZHkgc2NoZWR1bGVkLlxuICAgICAqIEByZXR1cm5zIEFuIGlkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsYmFja1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlcXVlc3RSZW5kZXJGcmFtZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IFRhc2tJRCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZChjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX2NhbmNlbFJlbmRlckZyYW1lKGlkOiBUYXNrSUQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbCB3aGVuIGEgKHJlLSlyZW5kZXIgb2YgdGhlIG1hcCBpcyByZXF1aXJlZDpcbiAgICAgKiAtIFRoZSBzdHlsZSBoYXMgY2hhbmdlZCAoYHNldFBhaW50UHJvcGVydHkoKWAsIGV0Yy4pXG4gICAgICogLSBTb3VyY2UgZGF0YSBoYXMgY2hhbmdlZCAoZS5nLiB0aWxlcyBoYXZlIGZpbmlzaGVkIGxvYWRpbmcpXG4gICAgICogLSBUaGUgbWFwIGhhcyBpcyBtb3ZpbmcgKG9yIGp1c3QgZmluaXNoZWQgbW92aW5nKVxuICAgICAqIC0gQSB0cmFuc2l0aW9uIGlzIGluIHByb2dyZXNzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSB0aGlzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVyKCkge1xuICAgICAgICBsZXQgZ3B1VGltZXIsIGZyYW1lU3RhcnRUaW1lID0gMDtcbiAgICAgICAgY29uc3QgZXh0VGltZXJRdWVyeSA9IHRoaXMucGFpbnRlci5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctZnJhbWUnKSkge1xuICAgICAgICAgICAgZ3B1VGltZXIgPSBleHRUaW1lclF1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKCk7XG4gICAgICAgICAgICBleHRUaW1lclF1ZXJ5LmJlZ2luUXVlcnlFWFQoZXh0VGltZXJRdWVyeS5USU1FX0VMQVBTRURfRVhULCBncHVUaW1lcik7XG4gICAgICAgICAgICBmcmFtZVN0YXJ0VGltZSA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBIGN1c3RvbSBsYXllciBtYXkgaGF2ZSB1c2VkIHRoZSBjb250ZXh0IGFzeW5jaHJvbm91c2x5LiBNYXJrIHRoZSBzdGF0ZSBhcyBkaXJ0eS5cbiAgICAgICAgdGhpcy5wYWludGVyLmNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgdGhpcy5wYWludGVyLnNldEJhc2VTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oKTtcblxuICAgICAgICBsZXQgY3Jvc3NGYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAvLyBJZiB0aGUgc3R5bGUgaGFzIGNoYW5nZWQsIHRoZSBtYXAgaXMgYmVpbmcgem9vbWVkLCBvciBhIHRyYW5zaXRpb24gb3IgZmFkZSBpcyBpbiBwcm9ncmVzczpcbiAgICAgICAgLy8gIC0gQXBwbHkgc3R5bGUgY2hhbmdlcyAoaW4gYSBiYXRjaClcbiAgICAgICAgLy8gIC0gUmVjYWxjdWxhdGUgcGFpbnQgcHJvcGVydGllcy5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgdGhpcy5fc3R5bGVEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZSh6b29tLCBub3cpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHpvb20sIHtcbiAgICAgICAgICAgICAgICBub3csXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiB0aGlzLl9mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICAgICAgem9vbUhpc3Rvcnk6IHRoaXMuc3R5bGUuem9vbUhpc3RvcnksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSBwYXJhbWV0ZXJzLmNyb3NzRmFkaW5nRmFjdG9yKCk7XG4gICAgICAgICAgICBpZiAoZmFjdG9yICE9PSAxIHx8IGZhY3RvciAhPT0gdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IpIHtcbiAgICAgICAgICAgICAgICBjcm9zc0ZhZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IgPSBmYWN0b3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUudXBkYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIF9yZW5kZXIgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBpbi1wcm9ncmVzcyBwYWludFxuICAgICAgICAvLyB0cmFuc2l0aW9uLCB1cGRhdGUgc291cmNlIGNhY2hlcyB0byBjaGVjayBmb3IgYW5kIGxvYWQgYW55IHRpbGVzIHdlXG4gICAgICAgIC8vIG5lZWQgZm9yIHRoZSBjdXJyZW50IHRyYW5zZm9ybVxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiB0aGlzLl9zb3VyY2VzRGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wbGFjZW1lbnREaXJ0eSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLCB0aGlzLl9mYWRlRHVyYXRpb24sIHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyk7XG5cbiAgICAgICAgLy8gQWN0dWFsbHkgZHJhd1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUsIHtcbiAgICAgICAgICAgIHNob3dUaWxlQm91bmRhcmllczogdGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsXG4gICAgICAgICAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcixcbiAgICAgICAgICAgIHJvdGF0aW5nOiB0aGlzLmlzUm90YXRpbmcoKSxcbiAgICAgICAgICAgIHpvb21pbmc6IHRoaXMuaXNab29taW5nKCksXG4gICAgICAgICAgICBtb3Zpbmc6IHRoaXMuaXNNb3ZpbmcoKSxcbiAgICAgICAgICAgIGdwdVRpbWluZzogISF0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctbGF5ZXInKSxcbiAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogdGhpcy5fZmFkZUR1cmF0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JlbmRlcicpKTtcblxuICAgICAgICBpZiAodGhpcy5sb2FkZWQoKSAmJiAhdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5tYXJrKFBlcmZvcm1hbmNlTWFya2Vycy5sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpIHx8IGNyb3NzRmFkaW5nKSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAhdGhpcy5fcGxhY2VtZW50RGlydHkpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIG5vIGZhZGUgb3BlcmF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MsIHdlIGNhbiByZWxlYXNlXG4gICAgICAgICAgICAvLyBhbGwgdGlsZXMgaGVsZCBmb3IgZmFkaW5nLiBJZiB3ZSBkaWRuJ3QgZG8gdGhpcywgdGhlIHRpbGVzXG4gICAgICAgICAgICAvLyB3b3VsZCBqdXN0IHNpdCBpbiB0aGUgU291cmNlQ2FjaGVzIHVudGlsIHRoZSBuZXh0IHJlbmRlclxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fcmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdGVucygnZ3B1LXRpbWluZy1mcmFtZScpKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDUFVUaW1lID0gYnJvd3Nlci5ub3coKSAtIGZyYW1lU3RhcnRUaW1lO1xuICAgICAgICAgICAgZXh0VGltZXJRdWVyeS5lbmRRdWVyeUVYVChleHRUaW1lclF1ZXJ5LlRJTUVfRUxBUFNFRF9FWFQsIGdwdVRpbWVyKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlckdQVVRpbWUgPSBleHRUaW1lclF1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLCBleHRUaW1lclF1ZXJ5LlFVRVJZX1JFU1VMVF9FWFQpIC8gKDEwMDAgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICBleHRUaW1lclF1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdncHUtdGltaW5nLWZyYW1lJywge1xuICAgICAgICAgICAgICAgICAgICBjcHVUaW1lOiByZW5kZXJDUFVUaW1lLFxuICAgICAgICAgICAgICAgICAgICBncHVUaW1lOiByZW5kZXJHUFVUaW1lXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSwgNTApOyAvLyBXYWl0IDUwbXMgdG8gZ2l2ZSB0aW1lIGZvciBhbGwgR1BVIGNhbGxzIHRvIGZpbmlzaCBiZWZvcmUgcXVlcnlpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctbGF5ZXInKSkge1xuICAgICAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBQYWludGVyJ3MgcGVyLWxheWVyIHRpbWluZyBxdWVyaWVzIGhlcmUgYWxsb3dzIHVzIHRvIGlzb2xhdGVcbiAgICAgICAgICAgIC8vIHRoZSBxdWVyaWVzIHRvIGluZGl2aWR1YWwgZnJhbWVzLlxuICAgICAgICAgICAgY29uc3QgZnJhbWVMYXllclF1ZXJpZXMgPSB0aGlzLnBhaW50ZXIuY29sbGVjdEdwdVRpbWVycygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlZExheWVyVGltZXMgPSB0aGlzLnBhaW50ZXIucXVlcnlHcHVUaW1lcnMoZnJhbWVMYXllclF1ZXJpZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZ3B1LXRpbWluZy1sYXllcicsIHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUaW1lczogcmVuZGVyZWRMYXllclRpbWVzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSwgNTApOyAvLyBXYWl0IDUwbXMgdG8gZ2l2ZSB0aW1lIGZvciBhbGwgR1BVIGNhbGxzIHRvIGZpbmlzaCBiZWZvcmUgcXVlcnlpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjaGVkdWxlIGFub3RoZXIgcmVuZGVyIGZyYW1lIGlmIGl0J3MgbmVlZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBFdmVuIHRob3VnaCBgX3N0eWxlRGlydHlgIGFuZCBgX3NvdXJjZXNEaXJ0eWAgYXJlIHJlc2V0IGluIHRoaXNcbiAgICAgICAgLy8gbWV0aG9kLCBzeW5jaHJvbm91cyBldmVudHMgZmlyZWQgZHVyaW5nIFN0eWxlI3VwZGF0ZSBvclxuICAgICAgICAvLyBTdHlsZSNfdXBkYXRlU291cmNlcyBjb3VsZCBoYXZlIGNhdXNlZCB0aGVtIHRvIGJlIHNldCBhZ2Fpbi5cbiAgICAgICAgY29uc3Qgc29tZXRoaW5nRGlydHkgPSB0aGlzLl9zb3VyY2VzRGlydHkgfHwgdGhpcy5fc3R5bGVEaXJ0eSB8fCB0aGlzLl9wbGFjZW1lbnREaXJ0eTtcbiAgICAgICAgaWYgKHNvbWV0aGluZ0RpcnR5IHx8IHRoaXMuX3JlcGFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc01vdmluZygpICYmIHRoaXMubG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZnVsbHlMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxseUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5tYXJrKFBlcmZvcm1hbmNlTWFya2Vycy5mdWxsTG9hZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdpZGxlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW4gdXAgYW5kIHJlbGVhc2UgYWxsIGludGVybmFsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXAuXG4gICAgICpcbiAgICAgKiBUaGlzIGluY2x1ZGVzIERPTSBlbGVtZW50cywgZXZlbnQgYmluZGluZ3MsIHdlYiB3b3JrZXJzLCBhbmQgV2ViR0wgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHdoZW4geW91IGFyZSBkb25lIHVzaW5nIHRoZSBtYXAgYW5kIHdpc2ggdG8gZW5zdXJlIHRoYXQgaXQgbm9cbiAgICAgKiBsb25nZXIgY29uc3VtZXMgYnJvd3NlciByZXNvdXJjZXMuIEFmdGVyd2FyZHMsIHlvdSBtdXN0IG5vdCBjYWxsIGFueSBvdGhlclxuICAgICAqIG1ldGhvZHMgb24gdGhlIG1hcC5cbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXNoKSB0aGlzLl9oYXNoLnJlbW92ZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLl9jb250cm9scykgY29udHJvbC5vblJlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnNldFN0eWxlKG51bGwpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZSwgZmFsc2UpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMuX29uV2luZG93T25saW5lLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2xvc2VfY29udGV4dCcpO1xuICAgICAgICBpZiAoZXh0ZW5zaW9uKSBleHRlbnNpb24ubG9zZUNvbnRleHQoKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9jYW52YXNDb250YWluZXIpO1xuICAgICAgICByZW1vdmVOb2RlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICByZW1vdmVOb2RlKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtbWFwJyk7XG5cbiAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5jbGVhck1ldHJpY3MoKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncmVtb3ZlJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgdGhlIHJlbmRlcmluZyBvZiBhIHNpbmdsZSBmcmFtZS4gVXNlIHRoaXMgbWV0aG9kIHdpdGggY3VzdG9tIGxheWVycyB0b1xuICAgICAqIHJlcGFpbnQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciBjaGFuZ2VzLiBDYWxsaW5nIHRoaXMgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZVxuICAgICAqIG5leHQgZnJhbWUgaXMgcmVuZGVyZWQgd2lsbCBzdGlsbCByZXN1bHQgaW4gb25seSBhIHNpbmdsZSBmcmFtZSBiZWluZyByZW5kZXJlZC5cbiAgICAgKi9cbiAgICB0cmlnZ2VyUmVwYWludCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgIXRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGJyb3dzZXIuZnJhbWUoKHBhaW50U3RhcnRUaW1lc3RhbXA6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlVXRpbHMuZnJhbWUocGFpbnRTdGFydFRpbWVzdGFtcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25XaW5kb3dPbmxpbmUoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIF9vbldpbmRvd1Jlc2l6ZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSh7b3JpZ2luYWxFdmVudDogZXZlbnR9KS5fdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsIHJlbmRlciBhbiBvdXRsaW5lXG4gICAgICogYXJvdW5kIGVhY2ggdGlsZSBhbmQgdGhlIHRpbGUgSUQuIFRoZXNlIHRpbGUgYm91bmRhcmllcyBhcmUgdXNlZnVsIGZvclxuICAgICAqIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIFRoZSB1bmNvbXByZXNzZWQgZmlsZSBzaXplIG9mIHRoZSBmaXJzdCB2ZWN0b3Igc291cmNlIGlzIGRyYXduIGluIHRoZSB0b3AgbGVmdFxuICAgICAqIGNvcm5lciBvZiBlYWNoIHRpbGUsIG5leHQgdG8gdGhlIHRpbGUgSUQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93VGlsZUJvdW5kYXJpZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dUaWxlQm91bmRhcmllcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzOyB9XG4gICAgc2V0IHNob3dUaWxlQm91bmRhcmllcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYm94ZXNcbiAgICAgKiBhcm91bmQgYWxsIHN5bWJvbHMgaW4gdGhlIGRhdGEgc291cmNlLCByZXZlYWxpbmcgd2hpY2ggc3ltYm9sc1xuICAgICAqIHdlcmUgcmVuZGVyZWQgb3Igd2hpY2ggd2VyZSBoaWRkZW4gZHVlIHRvIGNvbGxpc2lvbnMuXG4gICAgICogVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNob3dDb2xsaXNpb25Cb3hlc1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0NvbGxpc2lvbkJveGVzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM7IH1cbiAgICBzZXQgc2hvd0NvbGxpc2lvbkJveGVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgdHVybiBjb2xsaXNpb24gYm94ZXMgb24gd2UgaGF2ZSB0byBnZW5lcmF0ZSB0aGVtIGZvciBleGlzdGluZyB0aWxlc1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSB0dXJuIHRoZW0gb2ZmLCB0aGVyZSdzIG5vIGNvc3QgdG8gbGVhdmluZyBleGlzdGluZyBib3hlcyBpbiBwbGFjZVxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjYWxsIGFuIHVwZGF0ZSB0byByZW1vdmUgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgc2hvdWxkIGNvbG9yLWNvZGVcbiAgICAgKiBlYWNoIGZyYWdtZW50IHRvIHNob3cgaG93IG1hbnkgdGltZXMgaXQgaGFzIGJlZW4gc2hhZGVkLlxuICAgICAqIFdoaXRlIGZyYWdtZW50cyBoYXZlIGJlZW4gc2hhZGVkIDggb3IgbW9yZSB0aW1lcy5cbiAgICAgKiBCbGFjayBmcmFnbWVudHMgaGF2ZSBiZWVuIHNoYWRlZCAwIHRpbWVzLlxuICAgICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93T3ZlcmRyYXdcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dPdmVyZHJhd0luc3BlY3RvcigpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yOyB9XG4gICAgc2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbFxuICAgICAqIGNvbnRpbnVvdXNseSByZXBhaW50LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgYW5hbHl6aW5nIHBlcmZvcm1hbmNlLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVwYWludFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgcmVwYWludCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fcmVwYWludDsgfVxuICAgIHNldCByZXBhaW50KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXBhaW50ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVwYWludCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNob3cgdmVydGljZXNcbiAgICBnZXQgdmVydGljZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3ZlcnRpY2VzOyB9XG4gICAgc2V0IHZlcnRpY2VzKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX3ZlcnRpY2VzID0gdmFsdWU7IHRoaXMuX3VwZGF0ZSgpOyB9XG5cbiAgICAvLyBmb3IgY2FjaGUgYnJvd3NlciB0ZXN0c1xuICAgIF9zZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHNldENhY2hlTGltaXRzKGxpbWl0LCBjaGVja1RocmVzaG9sZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gcGFja2FnZS5qc29uLCBDSEFOR0VMT0cubWQsIGFuZCB0aGUgR2l0SHViIHJlbGVhc2UuXG4gICAgICpcbiAgICAgKiBAbmFtZSB2ZXJzaW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEB2YXIge3N0cmluZ30gdmVyc2lvblxuICAgICAqL1xuXG4gICAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHsgcmV0dXJuIHZlcnNpb247IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuXG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBpbnRlcmFjdGl2ZSBjb250cm9scyBhZGRlZCB0byB0aGUgbWFwLiBUaGlzIGlzIGFcbiAqIHNwZWNpZmljYXRpb24gZm9yIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90XG4gKiBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ29udHJvbHMgbXVzdCBpbXBsZW1lbnQgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYCwgYW5kIG11c3Qgb3duIGFuXG4gKiBlbGVtZW50LCB3aGljaCBpcyBvZnRlbiBhIGBkaXZgIGVsZW1lbnQuIFRvIHVzZSBNYXBib3ggR0wgSlMnc1xuICogZGVmYXVsdCBjb250cm9sIHN0eWxpbmcsIGFkZCB0aGUgYG1hcGJveGdsLWN0cmxgIGNsYXNzIHRvIHlvdXIgY29udHJvbCdzXG4gKiBub2RlLlxuICpcbiAqIEBpbnRlcmZhY2UgSUNvbnRyb2xcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250cm9sIGltcGxlbWVudGVkIGFzIEVTNiBjbGFzc1xuICogY2xhc3MgSGVsbG9Xb3JsZENvbnRyb2wge1xuICogICAgIG9uQWRkKG1hcCkge1xuICogICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gJ21hcGJveGdsLWN0cmwnO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAqICAgICB9XG4gKlxuICogICAgIG9uUmVtb3ZlKCkge1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICogICAgICAgICB0aGlzLl9tYXAgPSB1bmRlZmluZWQ7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIC8vIENvbnRyb2wgaW1wbGVtZW50ZWQgYXMgRVM1IHByb3RvdHlwaWNhbCBjbGFzc1xuICogZnVuY3Rpb24gSGVsbG9Xb3JsZENvbnRyb2woKSB7IH1cbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbihtYXApIHtcbiAqICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcbiAqICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICogfTtcbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25SZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gKiAgICAgIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gKiAgICAgIHRoaXMuX21hcCA9IHVuZGVmaW5lZDtcbiAqIH07XG4gKi9cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byByZWdpc3RlciBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCByZXNvdXJjZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB7QGxpbmsgTWFwI2FkZENvbnRyb2x9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIHRoZSBNYXAgdGhpcyBjb250cm9sIHdpbGwgYmUgYWRkZWQgdG9cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGNvbnRyb2wncyBjb250YWluZXIgZWxlbWVudC4gVGhpcyBzaG91bGRcbiAqIGJlIGNyZWF0ZWQgYnkgdGhlIGNvbnRyb2wgYW5kIHJldHVybmVkIGJ5IG9uQWRkIHdpdGhvdXQgYmVpbmcgYXR0YWNoZWRcbiAqIHRvIHRoZSBET006IHRoZSBtYXAgd2lsbCBpbnNlcnQgdGhlIGNvbnRyb2wncyBlbGVtZW50IGludG8gdGhlIERPTVxuICogYXMgbmVjZXNzYXJ5LlxuICovXG5cbi8qKlxuICogVW5yZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZXRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gKiBhbmQgcmVzb3VyY2VzLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkge0BsaW5rIE1hcCNyZW1vdmVDb250cm9sfVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCB0aGUgTWFwIHRoaXMgY29udHJvbCB3aWxsIGJlIHJlbW92ZWQgZnJvbVxuICogQHJldHVybnMge3VuZGVmaW5lZH0gdGhlcmUgaXMgbm8gcmVxdWlyZWQgcmV0dXJuIHZhbHVlIGZvciB0aGlzIG1ldGhvZFxuICovXG5cbi8qKlxuICogT3B0aW9uYWxseSBwcm92aWRlIGEgZGVmYXVsdCBwb3NpdGlvbiBmb3IgdGhpcyBjb250cm9sLiBJZiB0aGlzIG1ldGhvZFxuICogaXMgaW1wbGVtZW50ZWQgYW5kIHtAbGluayBNYXAjYWRkQ29udHJvbH0gaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGBwb3NpdGlvbmBcbiAqIHBhcmFtZXRlciwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldERlZmF1bHRQb3NpdGlvbiB3aWxsIGJlIHVzZWQgYXMgdGhlXG4gKiBjb250cm9sJ3MgcG9zaXRpb24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgZ2V0RGVmYXVsdFBvc2l0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBhIGNvbnRyb2wgcG9zaXRpb24sIG9uZSBvZiB0aGUgdmFsdWVzIHZhbGlkIGluIGFkZENvbnRyb2wuXG4gKi9cblxuLyoqXG4gKiBBIFtgUG9pbnRgIGdlb21ldHJ5XShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3BvaW50LWdlb21ldHJ5KSBvYmplY3QsIHdoaWNoIGhhc1xuICogYHhgIGFuZCBgeWAgcHJvcGVydGllcyByZXByZXNlbnRpbmcgc2NyZWVuIGNvb3JkaW5hdGVzIGluIHBpeGVscy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQb2ludFxuICovXG5cbi8qKlxuICogQSB7QGxpbmsgUG9pbnR9IG9yIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyBgeGAgYW5kIGB5YCBzY3JlZW4gY29vcmRpbmF0ZXMgaW4gcGl4ZWxzLlxuICpcbiAqIEB0eXBlZGVmIHsoUG9pbnQgfCBBcnJheTxudW1iZXI+KX0gUG9pbnRMaWtlXG4gKi9cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRHJhZ1JvdGF0ZUhhbmRsZXIgZnJvbSAnLi4vaGFuZGxlci9kcmFnX3JvdGF0ZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgc2hvd0NvbXBhc3M/OiBib29sZWFuLFxuICAgIHNob3dab29tPzogYm9vbGVhbixcbiAgICB2aXN1YWxpemVQaXRjaD86IGJvb2xlYW5cbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIHNob3dDb21wYXNzOiB0cnVlLFxuICAgIHNob3dab29tOiB0cnVlLFxuICAgIHZpc3VhbGl6ZVBpdGNoOiBmYWxzZVxufTtcblxuLyoqXG4gKiBBIGBOYXZpZ2F0aW9uQ29udHJvbGAgY29udHJvbCBjb250YWlucyB6b29tIGJ1dHRvbnMgYW5kIGEgY29tcGFzcy5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNob3dDb21wYXNzPXRydWVdIElmIGB0cnVlYCB0aGUgY29tcGFzcyBidXR0b24gaXMgaW5jbHVkZWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNob3dab29tPXRydWVdIElmIGB0cnVlYCB0aGUgem9vbS1pbiBhbmQgem9vbS1vdXQgYnV0dG9ucyBhcmUgaW5jbHVkZWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnZpc3VhbGl6ZVBpdGNoPWZhbHNlXSBJZiBgdHJ1ZWAgdGhlIHBpdGNoIGlzIHZpc3VhbGl6ZWQgYnkgcm90YXRpbmcgWC1heGlzIG9mIGNvbXBhc3MuXG4gKiBAZXhhbXBsZVxuICogdmFyIG5hdiA9IG5ldyBtYXBib3hnbC5OYXZpZ2F0aW9uQ29udHJvbCgpO1xuICogbWFwLmFkZENvbnRyb2wobmF2LCAndG9wLWxlZnQnKTtcbiAqIEBzZWUgW0Rpc3BsYXkgbWFwIG5hdmlnYXRpb24gY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbmF2aWdhdGlvbi8pXG4gKiBAc2VlIFtBZGQgYSB0aGlyZCBwYXJ0eSB2ZWN0b3IgdGlsZSBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGhpcmQtcGFydHkvKVxuICovXG5jbGFzcyBOYXZpZ2F0aW9uQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX3pvb21JbkJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgX3pvb21PdXRCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9jb21wYXNzOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfY29tcGFzc0ljb246IEhUTUxFbGVtZW50O1xuICAgIF9oYW5kbGVyOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCcpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dab29tKSB7XG4gICAgICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICAgICAnX3NldEJ1dHRvblRpdGxlJyxcbiAgICAgICAgICAgICAgICAnX3VwZGF0ZVpvb21CdXR0b25zJ1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl96b29tSW5CdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtem9vbS1pbicsIChlKSA9PiB0aGlzLl9tYXAuem9vbUluKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fem9vbUluQnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl96b29tT3V0QnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLXpvb20tb3V0JywgKGUpID0+IHRoaXMuX21hcC56b29tT3V0KHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fem9vbU91dEJ1dHRvbikuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MpIHtcbiAgICAgICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgICAgICdfcm90YXRlQ29tcGFzc0Fycm93J1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9jb21wYXNzID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLWNvbXBhc3MnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnJlc2V0Tm9ydGhQaXRjaCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAucmVzZXROb3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3NJY29uID0gRE9NLmNyZWF0ZSgnc3BhbicsICdtYXBib3hnbC1jdHJsLWljb24nLCB0aGlzLl9jb21wYXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3NJY29uLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVab29tQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuX21hcC5nZXRab29tKCk7XG4gICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbi5kaXNhYmxlZCA9IHpvb20gPT09IHRoaXMuX21hcC5nZXRNYXhab29tKCk7XG4gICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24uZGlzYWJsZWQgPSB6b29tID09PSB0aGlzLl9tYXAuZ2V0TWluWm9vbSgpO1xuICAgIH1cblxuICAgIF9yb3RhdGVDb21wYXNzQXJyb3coKSB7XG4gICAgICAgIGNvbnN0IHJvdGF0ZSA9IHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCA/XG4gICAgICAgICAgICBgc2NhbGUoJHsxIC8gTWF0aC5wb3coTWF0aC5jb3ModGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCAqIChNYXRoLlBJIC8gMTgwKSksIDAuNSl9KSByb3RhdGVYKCR7dGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaH1kZWcpIHJvdGF0ZVooJHt0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlICogKDE4MCAvIE1hdGguUEkpfWRlZylgIDpcbiAgICAgICAgICAgIGByb3RhdGUoJHt0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlICogKDE4MCAvIE1hdGguUEkpfWRlZylgO1xuXG4gICAgICAgIHRoaXMuX2NvbXBhc3NJY29uLnN0eWxlLnRyYW5zZm9ybSA9IHJvdGF0ZTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX3pvb21JbkJ1dHRvbiwgJ1pvb21JbicpO1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbU91dEJ1dHRvbiwgJ1pvb21PdXQnKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignem9vbScsIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fY29tcGFzcywgJ1Jlc2V0QmVhcmluZycpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigncGl0Y2gnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyb3RhdGUnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCk7XG4gICAgICAgICAgICAvLyBUZW1wb3JhcnkgZml4IHdpdGggY2xpY2tUb2xlcmFuY2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvOTAxNSlcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIgPSBuZXcgRHJhZ1JvdGF0ZUhhbmRsZXIobWFwLCB7YnV0dG9uOiAnbGVmdCcsIGVsZW1lbnQ6IHRoaXMuX2NvbXBhc3MsIGNsaWNrVG9sZXJhbmNlOiBtYXAuZHJhZ1JvdGF0ZS5fY2xpY2tUb2xlcmFuY2V9KTtcbiAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93biwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbScsIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncGl0Y2gnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncm90YXRlJywgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KTtcbiAgICAgICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2NvbXBhc3MsICd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlci5vbk1vdXNlRG93biwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyLmRpc2FibGUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oYW5kbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICB9XG5cbiAgICBfY3JlYXRlQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nLCBmbjogKCkgPT4gbWl4ZWQpIHtcbiAgICAgICAgY29uc3QgYSA9IERPTS5jcmVhdGUoJ2J1dHRvbicsIGNsYXNzTmFtZSwgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgYS50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmbik7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIF9zZXRCdXR0b25UaXRsZShidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB0aXRsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoYE5hdmlnYXRpb25Db250cm9sLiR7dGl0bGV9YCk7XG4gICAgICAgIGJ1dHRvbi50aXRsZSA9IHN0cjtcbiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN0cik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcblxuLyoqXG4gKiBHaXZlbiBhIExuZ0xhdCwgcHJpb3IgcHJvamVjdGVkIHBvc2l0aW9uLCBhbmQgYSB0cmFuc2Zvcm0sIHJldHVybiBhIG5ldyBMbmdMYXQgc2hpZnRlZFxuICogbiDDg8KXIDM2MMOCwrAgZWFzdCBvciB3ZXN0IGZvciBzb21lIG4gw6LCicKlIDAgc3VjaCB0aGF0OlxuICpcbiAqICogdGhlIHByb2plY3RlZCBsb2NhdGlvbiBvZiB0aGUgcmVzdWx0IGlzIG9uIHNjcmVlbiwgaWYgcG9zc2libGUsIGFuZCBzZWNvbmRhcmlseTpcbiAqICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJvamVjdGVkIGxvY2F0aW9uIG9mIHRoZSByZXN1bHQgYW5kIHRoZSBwcmlvciBwb3NpdGlvblxuICogICBpcyBtaW5pbWl6ZWQuXG4gKlxuICogVGhlIG9iamVjdCBpcyB0byBwcmVzZXJ2ZSBwZXJjZWl2ZWQgb2JqZWN0IGNvbnN0YW5jeSBmb3IgUG9wdXBzIGFuZCBNYXJrZXJzIGFzIG11Y2ggYXNcbiAqIHBvc3NpYmxlOyB0aGV5IHNob3VsZCBhdm9pZCBzaGlmdGluZyBsYXJnZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzY3JlZW4sIGV2ZW4gd2hlbiB0aGVcbiAqIG1hcCBjZW50ZXIgY2hhbmdlcyBieSDDgsKxMzYww4LCsCBkdWUgdG8gYXV0b21hdGljIHdyYXBwaW5nLCBhbmQgd2hlbiBhYm91dCB0byBnbyBvZmYgc2NyZWVuLFxuICogc2hvdWxkIHdyYXAganVzdCBlbm91Z2ggdG8gYXZvaWQgZG9pbmcgc28uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG5nTGF0OiBMbmdMYXQsIHByaW9yUG9zOiA/UG9pbnQsIHRyYW5zZm9ybTogVHJhbnNmb3JtKTogTG5nTGF0IHtcbiAgICBsbmdMYXQgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcsIGxuZ0xhdC5sYXQpO1xuXG4gICAgLy8gRmlyc3QsIHRyeSBzaGlmdGluZyBvbmUgd29ybGQgaW4gZWl0aGVyIGRpcmVjdGlvbiwgYW5kIHNlZSBpZiBlaXRoZXIgaXMgY2xvc2VyIHRvIHRoZVxuICAgIC8vIHByaW9yIHBvc2l0aW9uLiBUaGlzIHByZXNlcnZlcyBvYmplY3QgY29uc3RhbmN5IHdoZW4gdGhlIG1hcCBjZW50ZXIgaXMgYXV0by13cmFwcGVkXG4gICAgLy8gZHVyaW5nIGFuaW1hdGlvbnMuXG4gICAgaWYgKHByaW9yUG9zKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgID0gbmV3IExuZ0xhdChsbmdMYXQubG5nIC0gMzYwLCBsbmdMYXQubGF0KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcgKyAzNjAsIGxuZ0xhdC5sYXQpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxuZ0xhdCkuZGlzdFNxcihwcmlvclBvcyk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsZWZ0KS5kaXN0U3FyKHByaW9yUG9zKSA8IGRlbHRhKSB7XG4gICAgICAgICAgICBsbmdMYXQgPSBsZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHJpZ2h0KS5kaXN0U3FyKHByaW9yUG9zKSA8IGRlbHRhKSB7XG4gICAgICAgICAgICBsbmdMYXQgPSByaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY29uZCwgd3JhcCB0b3dhcmQgdGhlIGNlbnRlciB1bnRpbCB0aGUgbmV3IHBvc2l0aW9uIGlzIG9uIHNjcmVlbiwgb3Igd2UgY2FuJ3QgZ2V0XG4gICAgLy8gYW55IGNsb3Nlci5cbiAgICB3aGlsZSAoTWF0aC5hYnMobG5nTGF0LmxuZyAtIHRyYW5zZm9ybS5jZW50ZXIubG5nKSA+IDE4MCkge1xuICAgICAgICBjb25zdCBwb3MgPSB0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsbmdMYXQpO1xuICAgICAgICBpZiAocG9zLnggPj0gMCAmJiBwb3MueSA+PSAwICYmIHBvcy54IDw9IHRyYW5zZm9ybS53aWR0aCAmJiBwb3MueSA8PSB0cmFuc2Zvcm0uaGVpZ2h0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAobG5nTGF0LmxuZyA+IHRyYW5zZm9ybS5jZW50ZXIubG5nKSB7XG4gICAgICAgICAgICBsbmdMYXQubG5nIC09IDM2MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxuZ0xhdC5sbmcgKz0gMzYwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxuZ0xhdDtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIEFuY2hvciA9XG4gICAgfCAnY2VudGVyJ1xuICAgIHwgJ3RvcCdcbiAgICB8ICdib3R0b20nXG4gICAgfCAnbGVmdCdcbiAgICB8ICdyaWdodCdcbiAgICB8ICd0b3AtbGVmdCdcbiAgICB8ICd0b3AtcmlnaHQnXG4gICAgfCAnYm90dG9tLWxlZnQnXG4gICAgfCAnYm90dG9tLXJpZ2h0JztcblxuZXhwb3J0IGNvbnN0IGFuY2hvclRyYW5zbGF0ZToge1tBbmNob3JdOiBzdHJpbmd9ID0ge1xuICAgICdjZW50ZXInOiAndHJhbnNsYXRlKC01MCUsLTUwJSknLFxuICAgICd0b3AnOiAndHJhbnNsYXRlKC01MCUsMCknLFxuICAgICd0b3AtbGVmdCc6ICd0cmFuc2xhdGUoMCwwKScsXG4gICAgJ3RvcC1yaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsMCknLFxuICAgICdib3R0b20nOiAndHJhbnNsYXRlKC01MCUsLTEwMCUpJyxcbiAgICAnYm90dG9tLWxlZnQnOiAndHJhbnNsYXRlKDAsLTEwMCUpJyxcbiAgICAnYm90dG9tLXJpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwtMTAwJSknLFxuICAgICdsZWZ0JzogJ3RyYW5zbGF0ZSgwLC01MCUpJyxcbiAgICAncmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLC01MCUpJ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QW5jaG9yQ2xhc3MoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFuY2hvcjogQW5jaG9yLCBwcmVmaXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTGlzdCA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGFuY2hvclRyYW5zbGF0ZSkge1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGBtYXBib3hnbC0ke3ByZWZpeH0tYW5jaG9yLSR7a2V5fWApO1xuICAgIH1cbiAgICBjbGFzc0xpc3QuYWRkKGBtYXBib3hnbC0ke3ByZWZpeH0tYW5jaG9yLSR7YW5jaG9yfWApO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHNtYXJ0V3JhcCBmcm9tICcuLi91dGlsL3NtYXJ0X3dyYXAnO1xuaW1wb3J0IHtiaW5kQWxsLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge3R5cGUgQW5jaG9yLCBhbmNob3JUcmFuc2xhdGUsIGFwcGx5QW5jaG9yQ2xhc3N9IGZyb20gJy4vYW5jaG9yJztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9wdXAgZnJvbSAnLi9wb3B1cCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSBcIi4uL2dlby9sbmdfbGF0XCI7XG5pbXBvcnQgdHlwZSB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBlbGVtZW50PzogSFRNTEVsZW1lbnQsXG4gICAgb2Zmc2V0PzogUG9pbnRMaWtlLFxuICAgIGFuY2hvcj86IEFuY2hvcixcbiAgICBjb2xvcj86IHN0cmluZyxcbiAgICBkcmFnZ2FibGU/OiBib29sZWFuLFxuICAgIHJvdGF0aW9uPzogbnVtYmVyLFxuICAgIHJvdGF0aW9uQWxpZ25tZW50Pzogc3RyaW5nLFxuICAgIHBpdGNoQWxpZ25tZW50Pzogc3RyaW5nXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXJrZXIgY29tcG9uZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbb3B0aW9ucy5lbGVtZW50XSBET00gZWxlbWVudCB0byB1c2UgYXMgYSBtYXJrZXIuIFRoZSBkZWZhdWx0IGlzIGEgbGlnaHQgYmx1ZSwgZHJvcGxldC1zaGFwZWQgU1ZHIG1hcmtlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmNob3I9J2NlbnRlciddIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHBhcnQgb2YgdGhlIE1hcmtlciB0aGF0IHNob3VsZCBiZSBwb3NpdGlvbmVkIGNsb3Nlc3QgdG8gdGhlIGNvb3JkaW5hdGUgc2V0IHZpYSB7QGxpbmsgTWFya2VyI3NldExuZ0xhdH0uXG4gKiAgIE9wdGlvbnMgYXJlIGAnY2VudGVyJ2AsIGAndG9wJ2AsIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBgJ3JpZ2h0J2AsIGAndG9wLWxlZnQnYCwgYCd0b3AtcmlnaHQnYCwgYCdib3R0b20tbGVmdCdgLCBhbmQgYCdib3R0b20tcmlnaHQnYC5cbiAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXRdIFRoZSBvZmZzZXQgaW4gcGl4ZWxzIGFzIGEge0BsaW5rIFBvaW50TGlrZX0gb2JqZWN0IHRvIGFwcGx5IHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgY2VudGVyLiBOZWdhdGl2ZXMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sb3I9JyMzRkIxQ0UnXSBUaGUgY29sb3IgdG8gdXNlIGZvciB0aGUgZGVmYXVsdCBtYXJrZXIgaWYgb3B0aW9ucy5lbGVtZW50IGlzIG5vdCBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaXMgbGlnaHQgYmx1ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ2dhYmxlPWZhbHNlXSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhIG1hcmtlciBpcyBhYmxlIHRvIGJlIGRyYWdnZWQgdG8gYSBuZXcgcG9zaXRpb24gb24gdGhlIG1hcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5yb3RhdGlvbj0wXSBUaGUgcm90YXRpb24gYW5nbGUgb2YgdGhlIG1hcmtlciBpbiBkZWdyZWVzLCByZWxhdGl2ZSB0byBpdHMgcmVzcGVjdGl2ZSBgcm90YXRpb25BbGlnbm1lbnRgIHNldHRpbmcuIEEgcG9zaXRpdmUgdmFsdWUgd2lsbCByb3RhdGUgdGhlIG1hcmtlciBjbG9ja3dpc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucGl0Y2hBbGlnbm1lbnQ9J2F1dG8nXSBgbWFwYCBhbGlnbnMgdGhlIGBNYXJrZXJgIHRvIHRoZSBwbGFuZSBvZiB0aGUgbWFwLiBgdmlld3BvcnRgIGFsaWducyB0aGUgYE1hcmtlcmAgdG8gdGhlIHBsYW5lIG9mIHRoZSB2aWV3cG9ydC4gYGF1dG9gIGF1dG9tYXRpY2FsbHkgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYHJvdGF0aW9uQWxpZ25tZW50YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yb3RhdGlvbkFsaWdubWVudD0nYXV0byddIGBtYXBgIGFsaWducyB0aGUgYE1hcmtlcmAncyByb3RhdGlvbiByZWxhdGl2ZSB0byB0aGUgbWFwLCBtYWludGFpbmluZyBhIGJlYXJpbmcgYXMgdGhlIG1hcCByb3RhdGVzLiBgdmlld3BvcnRgIGFsaWducyB0aGUgYE1hcmtlcmAncyByb3RhdGlvbiByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQsIGFnbm9zdGljIHRvIG1hcCByb3RhdGlvbnMuIGBhdXRvYCBpcyBlcXVpdmFsZW50IHRvIGB2aWV3cG9ydGAuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICogICAuc2V0TG5nTGF0KFszMC41LCA1MC41XSlcbiAqICAgLmFkZFRvKG1hcCk7XG4gKiBAc2VlIFtBZGQgY3VzdG9tIGljb25zIHdpdGggTWFya2Vyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tbWFya2VyLWljb25zLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBNYXJrZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmtlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfYW5jaG9yOiBBbmNob3I7XG4gICAgX29mZnNldDogUG9pbnQ7XG4gICAgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9wb3B1cDogP1BvcHVwO1xuICAgIF9sbmdMYXQ6IExuZ0xhdDtcbiAgICBfcG9zOiA/UG9pbnQ7XG4gICAgX2NvbG9yOiA/c3RyaW5nO1xuICAgIF9kZWZhdWx0TWFya2VyOiBib29sZWFuO1xuICAgIF9kcmFnZ2FibGU6IGJvb2xlYW47XG4gICAgX3N0YXRlOiAnaW5hY3RpdmUnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7IC8vIHVzZWQgZm9yIGhhbmRsaW5nIGRyYWcgZXZlbnRzXG4gICAgX3Bvc2l0aW9uRGVsdGE6ID9udW1iZXI7XG4gICAgX3JvdGF0aW9uOiBudW1iZXI7XG4gICAgX3BpdGNoQWxpZ25tZW50OiBzdHJpbmc7XG4gICAgX3JvdGF0aW9uQWxpZ25tZW50OiBzdHJpbmc7XG4gICAgX29yaWdpbmFsVGFiSW5kZXg6ID9zdHJpbmc7IC8vIG9yaWdpbmFsIHRhYmluZGV4IG9mIF9lbGVtZW50XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogT3B0aW9ucywgbGVnYWN5T3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgLS0gdGhlIGNvbnN0cnVjdG9yIHVzZWQgdG8gYWNjZXB0IHRoZSBlbGVtZW50IGFzIGFcbiAgICAgICAgLy8gcmVxdWlyZWQgZmlyc3QgYXJndW1lbnQsIGJlZm9yZSBpdCB3YXMgbWFkZSBvcHRpb25hbC5cbiAgICAgICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgfHwgbGVnYWN5T3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7ZWxlbWVudDogb3B0aW9uc30sIGxlZ2FjeU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX3VwZGF0ZScsXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnX29uVXAnLFxuICAgICAgICAgICAgJ19hZGREcmFnSGFuZGxlcicsXG4gICAgICAgICAgICAnX29uTWFwQ2xpY2snLFxuICAgICAgICAgICAgJ19vbktleVByZXNzJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9hbmNob3IgPSBvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yIHx8ICdjZW50ZXInO1xuICAgICAgICB0aGlzLl9jb2xvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciB8fCAnIzNGQjFDRSc7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kcmFnZ2FibGUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2luYWN0aXZlJztcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucm90YXRpb24gfHwgMDtcbiAgICAgICAgdGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPSBvcHRpb25zICYmIG9wdGlvbnMucm90YXRpb25BbGlnbm1lbnQgfHwgJ2F1dG8nO1xuICAgICAgICB0aGlzLl9waXRjaEFsaWdubWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5waXRjaEFsaWdubWVudCAmJiBvcHRpb25zLnBpdGNoQWxpZ25tZW50ICE9PSAnYXV0bycgPyAgb3B0aW9ucy5waXRjaEFsaWdubWVudCA6IHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50O1xuXG4gICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0TWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBET00uY3JlYXRlKCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ01hcCBtYXJrZXInKTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQgbWFwIG1hcmtlciBTVkdcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgJzQxcHgnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCAnMjdweCcpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICd2aWV3Qm94JywgJzAgMCAyNyA0MScpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXJMYXJnZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZScsICdub25lJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLXJ1bGUnLCAnZXZlbm9kZCcpO1xuXG4gICAgICAgICAgICBjb25zdCBwYWdlMSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgcGFnZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdub256ZXJvJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYWRvdyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgc2hhZG93LnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDMuMCwgMjkuMCknKTtcbiAgICAgICAgICAgIHNoYWRvdy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsbGlwc2VzID0gW1xuICAgICAgICAgICAgICAgIHsncngnOiAnMTAuNScsICdyeSc6ICc1LjI1MDAyMjczJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICcxMC41JywgJ3J5JzogJzUuMjUwMDIyNzMnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzkuNScsICdyeSc6ICc0Ljc3Mjc1MDA3J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc4LjUnLCAncnknOiAnNC4yOTU0OTkzNid9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNy41JywgJ3J5JzogJzMuODE4MjIzMDgnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzYuNScsICdyeSc6ICczLjM0MDk0Njc5J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc1LjUnLCAncnknOiAnMi44NjM2NzA1MSd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNC41JywgJ3J5JzogJzIuMzg2MzY4NjQnfVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIGVsbGlwc2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxsaXBzZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZWxsaXBzZScpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4wNCcpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzEwLjUnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjgwMDI5MDA4Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncngnLCBkYXRhWydyeCddKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyeScsIGRhdGFbJ3J5J10pO1xuICAgICAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChlbGxpcHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsIHRoaXMuX2NvbG9yKTtcblxuICAgICAgICAgICAgY29uc3QgYmdQYXRoID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XG4gICAgICAgICAgICBiZ1BhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWicpO1xuXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLmFwcGVuZENoaWxkKGJnUGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYm9yZGVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMjUnKTtcbiAgICAgICAgICAgIGJvcmRlci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlclBhdGggPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGJvcmRlclBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFonKTtcblxuICAgICAgICAgICAgYm9yZGVyLmFwcGVuZENoaWxkKGJvcmRlclBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYWtpID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBtYWtpLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDYuMCwgNy4wKScpO1xuICAgICAgICAgICAgbWFraS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjRkZGRkZGJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZUNvbnRhaW5lciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDguMCwgOC4wKScpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUxID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjI1Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc1LjQ5OTk5NjInKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlMiA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnY2lyY2xlJyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyNGRkZGRkYnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyJywgJzUuNDk5OTk2MicpO1xuXG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMSk7XG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMik7XG5cbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKHNoYWRvdyk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChiYWNrZ3JvdW5kKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGJvcmRlcik7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChtYWtpKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGNpcmNsZUNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYWdlMSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICAgICAgICAgICAgLy8gaWYgbm8gZWxlbWVudCBhbmQgbm8gb2Zmc2V0IG9wdGlvbiBnaXZlbiBhcHBseSBhbiBvZmZzZXQgZm9yIHRoZSBkZWZhdWx0IG1hcmtlclxuICAgICAgICAgICAgLy8gdGhlIC0xNCBhcyB0aGUgeSB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBtYXJrZXIgb2Zmc2V0IHdhcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3NcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGUgbWFya2VyIHRpcCBpcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBzaGFkb3cgZWxsaXBzZSBmcm9tIHRoZSBkZWZhdWx0IHN2Z1xuICAgICAgICAgICAgLy8gdGhlIHkgdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgc2hhZG93IGVsbGlwc2UgcmVsYXRpdmUgdG8gdGhlIHN2ZyB0b3AgbGVmdCBpcyBcInNoYWRvdyB0cmFuc2Zvcm0gdHJhbnNsYXRlLXkgKDI5LjApICsgZWxsaXBzZSBjeSAoNS44MDAyOTAwOClcIlxuICAgICAgICAgICAgLy8gb2Zmc2V0IHRvIHRoZSBzdmcgY2VudGVyIFwiaGVpZ2h0ICg0MSAvIDIpXCIgZ2l2ZXMgKDI5LjAgKyA1LjgwMDI5MDA4KSAtICg0MSAvIDIpIGFuZCByb3VuZGVkIGZvciBhbiBpbnRlZ2VyIHBpeGVsIG9mZnNldCBnaXZlcyAxNFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgaXMgdXNlZCB0byBtb3ZlIHRoZSBtYXJrZXIgdXAgZnJvbSB0aGUgY2VudGVyIHNvIHRoZSB0aXAgaXMgYXQgdGhlIE1hcmtlciBsbmdMYXRcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucyAmJiBvcHRpb25zLm9mZnNldCB8fCBbMCwgLTE0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zICYmIG9wdGlvbnMub2Zmc2V0IHx8IFswLCAwXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLW1hcmtlcicpO1xuICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZm9jdXNpbmcgb24gY2xpY2tcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyByZXZlcnQgdGhlIGRlZmF1bHQgc2Nyb2xsaW5nIGFjdGlvbiBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuX21hcC5nZXRDb250YWluZXIoKTtcbiAgICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IDA7XG4gICAgICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5QW5jaG9yQ2xhc3ModGhpcy5fZWxlbWVudCwgdGhpcy5fYW5jaG9yLCAnbWFya2VyJyk7XG5cbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIHRoZSBtYXJrZXIgdG8gYSBtYXBcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIG1hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIG1hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIHRoaXMuc2V0RHJhZ2dhYmxlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIC8vIElmIHdlIGF0dGFjaGVkIHRoZSBgY2xpY2tgIGxpc3RlbmVyIHRvIHRoZSBtYXJrZXIgZWxlbWVudCwgdGhlIHBvcHVwXG4gICAgICAgIC8vIHdvdWxkIGNsb3NlIG9uY2UgdGhlIGV2ZW50IHByb3BvZ2F0ZWQgdG8gYG1hcGAgZHVlIHRvIHRoZVxuICAgICAgICAvLyBgUG9wdXAjX29uQ2xpY2tDbG9zZWAgbGlzdGVuZXIuXG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLl9vbk1hcENsaWNrKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBtYXJrZXIgZnJvbSBhIG1hcFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKS5hZGRUbyhtYXApO1xuICAgICAqIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fb25NYXBDbGljayk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNldXAnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB0aGlzLl9wb3B1cC5yZW1vdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgbG9uZ2l0dWRlIG9mIHRoZSByZXN1bHQgbWF5IGRpZmZlciBieSBhIG11bHRpcGxlIG9mIDM2MCBkZWdyZWVzIGZyb20gdGhlIGxvbmdpdHVkZSBwcmV2aW91c2x5XG4gICAgICogc2V0IGJ5IGBzZXRMbmdMYXRgIGJlY2F1c2UgYE1hcmtlcmAgd3JhcHMgdGhlIGFuY2hvciBsb25naXR1ZGUgYWNyb3NzIGNvcGllcyBvZiB0aGUgd29ybGQgdG8ga2VlcFxuICAgICAqIHRoZSBtYXJrZXIgb24gc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH1cbiAgICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgcG9zaXRpb24gYW5kIG1vdmUgaXQuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TG5nTGF0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYE1hcmtlcmAncyBIVE1MIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmluZHMgYSBQb3B1cCB0byB0aGUgTWFya2VyXG4gICAgICogQHBhcmFtIHBvcHVwIGFuIGluc3RhbmNlIG9mIHRoZSBgUG9wdXBgIGNsYXNzLiBJZiB1bmRlZmluZWQgb3IgbnVsbCwgYW55IHBvcHVwXG4gICAgICogc2V0IG9uIHRoaXMgYE1hcmtlcmAgaW5zdGFuY2UgaXMgdW5zZXRcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRQb3B1cChwb3B1cDogP1BvcHVwKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlQcmVzcyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxUYWJJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvcHVwKSB7XG4gICAgICAgICAgICBpZiAoISgnb2Zmc2V0JyBpbiBwb3B1cC5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IDQxIC0gKDUuOCAvIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlclJhZGl1cyA9IDEzLjU7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZWFyT2Zmc2V0ID0gTWF0aC5zcXJ0KE1hdGgucG93KG1hcmtlclJhZGl1cywgMikgLyAyKTtcbiAgICAgICAgICAgICAgICBwb3B1cC5vcHRpb25zLm9mZnNldCA9IHRoaXMuX2RlZmF1bHRNYXJrZXIgPyB7XG4gICAgICAgICAgICAgICAgICAgICd0b3AnOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICd0b3AtbGVmdCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbSc6IFswLCAtbWFya2VySGVpZ2h0XSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBbLWxpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogW21hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICAgICAgICAgICAgICAgIH0gOiB0aGlzLl9vZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IHBvcHVwO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xuZ0xhdCkgdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVGFiSW5kZXggPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxUYWJJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlQcmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25LZXlQcmVzcyhlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBlLmNvZGU7XG4gICAgICAgIGNvbnN0IGxlZ2FjeUNvZGUgPSBlLmNoYXJDb2RlIHx8IGUua2V5Q29kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29kZSA9PT0gJ1NwYWNlJykgfHwgKGNvZGUgPT09ICdFbnRlcicpIHx8XG4gICAgICAgICAgICAobGVnYWN5Q29kZSA9PT0gMzIpIHx8IChsZWdhY3lDb2RlID09PSAxMykgLy8gc3BhY2Ugb3IgZW50ZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25NYXBDbGljayhlOiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgKHRhcmdldEVsZW1lbnQgPT09IGVsZW1lbnQgfHwgZWxlbWVudC5jb250YWlucygodGFyZ2V0RWxlbWVudDogYW55KSkpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBQb3B1cCBpbnN0YW5jZSB0aGF0IGlzIGJvdW5kIHRvIHRoZSBNYXJrZXJcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IHBvcHVwXG4gICAgICovXG4gICAgZ2V0UG9wdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBvciBjbG9zZXMgdGhlIGJvdW5kIHBvcHVwLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICB0b2dnbGVQb3B1cCgpIHtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLl9wb3B1cDtcblxuICAgICAgICBpZiAoIXBvcHVwKSByZXR1cm4gdGhpcztcbiAgICAgICAgZWxzZSBpZiAocG9wdXAuaXNPcGVuKCkpIHBvcHVwLnJlbW92ZSgpO1xuICAgICAgICBlbHNlIHBvcHVwLmFkZFRvKHRoaXMuX21hcCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF91cGRhdGUoZT86IHt0eXBlOiAnbW92ZScgfCAnbW92ZWVuZCd9KSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xuZ0xhdCA9IHNtYXJ0V3JhcCh0aGlzLl9sbmdMYXQsIHRoaXMuX3BvcywgdGhpcy5fbWFwLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wb3MgPSB0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLl9hZGQodGhpcy5fb2Zmc2V0KTtcblxuICAgICAgICBsZXQgcm90YXRpb24gPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPT09IFwidmlld3BvcnRcIiB8fCB0aGlzLl9yb3RhdGlvbkFsaWdubWVudCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgIHJvdGF0aW9uID0gYHJvdGF0ZVooJHt0aGlzLl9yb3RhdGlvbn1kZWcpYDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yb3RhdGlvbkFsaWdubWVudCA9PT0gXCJtYXBcIikge1xuICAgICAgICAgICAgcm90YXRpb24gPSBgcm90YXRlWigke3RoaXMuX3JvdGF0aW9uIC0gdGhpcy5fbWFwLmdldEJlYXJpbmcoKX1kZWcpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwaXRjaCA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLl9waXRjaEFsaWdubWVudCA9PT0gXCJ2aWV3cG9ydFwiIHx8IHRoaXMuX3BpdGNoQWxpZ25tZW50ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgcGl0Y2ggPSBcInJvdGF0ZVgoMGRlZylcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9waXRjaEFsaWdubWVudCA9PT0gXCJtYXBcIikge1xuICAgICAgICAgICAgcGl0Y2ggPSBgcm90YXRlWCgke3RoaXMuX21hcC5nZXRQaXRjaCgpfWRlZylgO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVjYXVzZSByb3VuZGluZyB0aGUgY29vcmRpbmF0ZXMgYXQgZXZlcnkgYG1vdmVgIGV2ZW50IGNhdXNlcyBzdHV0dGVyZWQgem9vbWluZ1xuICAgICAgICAvLyB3ZSBvbmx5IHJvdW5kIHRoZW0gd2hlbiBfdXBkYXRlIGlzIGNhbGxlZCB3aXRoIGBtb3ZlZW5kYCBvciB3aGVuIGl0cyBjYWxsZWQgd2l0aFxuICAgICAgICAvLyBubyBhcmd1bWVudHMgKHdoZW4gdGhlIE1hcmtlciBpcyBpbml0aWFsaXplZCBvciBNYXJrZXIjc2V0TG5nTGF0IGlzIGludm9rZWQpLlxuICAgICAgICBpZiAoIWUgfHwgZS50eXBlID09PSBcIm1vdmVlbmRcIikge1xuICAgICAgICAgICAgdGhpcy5fcG9zID0gdGhpcy5fcG9zLnJvdW5kKCk7XG4gICAgICAgIH1cblxuICAgICAgICBET00uc2V0VHJhbnNmb3JtKHRoaXMuX2VsZW1lbnQsIGAke2FuY2hvclRyYW5zbGF0ZVt0aGlzLl9hbmNob3JdfSB0cmFuc2xhdGUoJHt0aGlzLl9wb3MueH1weCwgJHt0aGlzLl9wb3MueX1weCkgJHtwaXRjaH0gJHtyb3RhdGlvbn1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG1hcmtlcidzIG9mZnNldC5cbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9XG4gICAgICovXG4gICAgZ2V0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG9mZnNldCBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IG9mZnNldCBUaGUgb2Zmc2V0IGluIHBpeGVscyBhcyBhIHtAbGluayBQb2ludExpa2V9IG9iamVjdCB0byBhcHBseSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCdzIGNlbnRlci4gTmVnYXRpdmVzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE9mZnNldChvZmZzZXQ6IFBvaW50TGlrZSkge1xuICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9mZnNldCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3BvcyA9IGUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpO1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSB0aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3Bvcyk7XG4gICAgICAgIHRoaXMuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIC8vIHN1cHByZXNzIGNsaWNrIGV2ZW50IHNvIHRoYXQgcG9wdXBzIGRvbid0IHRvZ2dsZSBvbiBkcmFnXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblxuICAgICAgICAvLyBtYWtlIHN1cmUgZHJhZ3N0YXJ0IG9ubHkgZmlyZXMgb24gdGhlIGZpcnN0IG1vdmUgZXZlbnQgYWZ0ZXIgbW91c2Vkb3duLlxuICAgICAgICAvLyB0aGlzIGNhbid0IGJlIG9uIG1vdXNlZG93biBiZWNhdXNlIHRoYXQgZXZlbnQgZG9lc24ndCBuZWNlc3NhcmlseVxuICAgICAgICAvLyBpbXBseSB0aGF0IGEgZHJhZyBpcyBhYm91dCB0byBoYXBwZW4uXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdhY3RpdmUnO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV2ZW50IGRyYWdzdGFydFxuICAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCBpcyBiZWluZyBkcmFnZ2VkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdzdGFydCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGlsZSBkcmFnZ2luZ1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgZHJhZ1xuICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWcnKSk7XG4gICAgfVxuXG4gICAgX29uVXAoKSB7XG4gICAgICAgIC8vIHJldmVydCB0byBub3JtYWwgcG9pbnRlciBldmVudCBoYW5kbGluZ1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uRGVsdGEgPSBudWxsO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuXG4gICAgICAgIC8vIG9ubHkgZmlyZSBkcmFnZW5kIGlmIGl0IHdhcyBwcmVjZWRlZCBieSBhdCBsZWFzdCBvbmUgZHJhZyBldmVudFxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIGZpbmlzaGVkIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgICpcbiAgICAgICAgICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCB3YXMgZHJhZ2dlZFxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdlbmQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdpbmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgX2FkZERyYWdIYW5kbGVyKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNvbnRhaW5zKChlLm9yaWdpbmFsRXZlbnQudGFyZ2V0OiBhbnkpKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2xpY2sgcG9pbnRcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbWFya2VyIHBvc2l0aW9uLCB3aXRoIHRoZSBvZmZzZXQgYWNjb3VudGVkIGZvci4gVGhlbiB3ZVxuICAgICAgICAgICAgLy8gY2FuIHN1YnRyYWN0IHRoaXMgZGlzdGFuY2UgZnJvbSB0aGUgbW91c2Vtb3ZlIGV2ZW50J3MgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IG1hcmtlciBwb3NpdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBtYXJrZXIgJ2p1bXBzJyB0byB0aGUgY2xpY2sgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIGEgamFycmluZyBVWCBlZmZlY3QuXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkRlbHRhID0gZS5wb2ludC5zdWIodGhpcy5fcG9zKS5hZGQodGhpcy5fb2Zmc2V0KTtcblxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub25jZSgnbW91c2V1cCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgZHJhZ2dhYmxlYCBwcm9wZXJ0eSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkQmVEcmFnZ2FibGU9ZmFsc2VdIFR1cm5zIGRyYWcgZnVuY3Rpb25hbGl0eSBvbi9vZmZcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXREcmFnZ2FibGUoc2hvdWxkQmVEcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gISFzaG91bGRCZURyYWdnYWJsZTsgLy8gY29udmVydCBwb3NzaWJsZSB1bmRlZmluZWQgdmFsdWUgdG8gZmFsc2VcblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBtYXAgbWF5IG5vdCBleGlzdCB5ZXRcbiAgICAgICAgLy8gZS5nLiB3aGVuIHNldERyYWdnYWJsZSBpcyBjYWxsZWQgYmVmb3JlIGFkZFRvXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRCZURyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcmtlciBjYW4gYmUgZHJhZ2dlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdGF0aW9uPTBdIFRoZSByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChjbG9ja3dpc2UsIGluIGRlZ3JlZXMpLCByZWxhdGl2ZSB0byBpdHMgcmVzcGVjdGl2ZSB7QGxpbmsgTWFya2VyI3JvdGF0aW9uQWxpZ25tZW50fSBzZXR0aW5nLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChpbiBkZWdyZWVzKS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJvdGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpZ25tZW50PSdhdXRvJ10gU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uQWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID0gYWxpZ25tZW50IHx8ICdhdXRvJztcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0Um90YXRpb25BbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcGl0Y2hBbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbm1lbnRdIFNldHMgdGhlIGBwaXRjaEFsaWdubWVudGAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci4gSWYgYWxpZ25tZW50IGlzICdhdXRvJywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IG1hdGNoIGByb3RhdGlvbkFsaWdubWVudGAuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2hBbGlnbm1lbnQoYWxpZ25tZW50OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPSBhbGlnbm1lbnQgJiYgYWxpZ25tZW50ICE9PSAnYXV0bycgPyBhbGlnbm1lbnQgOiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHBpdGNoQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UGl0Y2hBbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaEFsaWdubWVudDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuLi9tYXJrZXInO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25PcHRpb25zLCBDYW1lcmFPcHRpb25zfSBmcm9tICcuLi9jYW1lcmEnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zPzogUG9zaXRpb25PcHRpb25zLFxuICAgIGZpdEJvdW5kc09wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucyxcbiAgICB0cmFja1VzZXJMb2NhdGlvbj86IGJvb2xlYW4sXG4gICAgc2hvd0FjY3VyYWN5Q2lyY2xlPzogYm9vbGVhbixcbiAgICBzaG93VXNlckxvY2F0aW9uPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2UsXG4gICAgICAgIG1heGltdW1BZ2U6IDAsXG4gICAgICAgIHRpbWVvdXQ6IDYwMDAgLyogNiBzZWMgKi9cbiAgICB9LFxuICAgIGZpdEJvdW5kc09wdGlvbnM6IHtcbiAgICAgICAgbWF4Wm9vbTogMTVcbiAgICB9LFxuICAgIHRyYWNrVXNlckxvY2F0aW9uOiBmYWxzZSxcbiAgICBzaG93QWNjdXJhY3lDaXJjbGU6IHRydWUsXG4gICAgc2hvd1VzZXJMb2NhdGlvbjogdHJ1ZVxufTtcblxubGV0IHN1cHBvcnRzR2VvbG9jYXRpb247XG5cbmZ1bmN0aW9uIGNoZWNrR2VvbG9jYXRpb25TdXBwb3J0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHN1cHBvcnRzR2VvbG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcblxuICAgIH0gZWxzZSBpZiAod2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5hdmlnYXRvci5wZXJtaXNzaW9ucyBoYXMgaW5jb21wbGV0ZSBicm93c2VyIHN1cHBvcnRcbiAgICAgICAgLy8gaHR0cDovL2Nhbml1c2UuY29tLyNmZWF0PXBlcm1pc3Npb25zLWFwaVxuICAgICAgICAvLyBUZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIGJyb3dzZXIgZGlzYWJsZXMgR2VvbG9jYXRpb24gYmVjYXVzZSBvZiBhblxuICAgICAgICAvLyBpbnNlY3VyZSBvcmlnaW5cbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTogJ2dlb2xvY2F0aW9uJ30pLnRoZW4oKHApID0+IHtcbiAgICAgICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSBwLnN0YXRlICE9PSAnZGVuaWVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSAhIXdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb247XG4gICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgIH1cbn1cblxubGV0IG51bWJlck9mV2F0Y2hlcyA9IDA7XG5sZXQgbm9UaW1lb3V0ID0gZmFsc2U7XG5cbi8qKlxuICogQSBgR2VvbG9jYXRlQ29udHJvbGAgY29udHJvbCBwcm92aWRlcyBhIGJ1dHRvbiB0aGF0IHVzZXMgdGhlIGJyb3dzZXIncyBnZW9sb2NhdGlvblxuICogQVBJIHRvIGxvY2F0ZSB0aGUgdXNlciBvbiB0aGUgbWFwLlxuICpcbiAqIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBnZW9sb2NhdGlvbixcbiAqIGFuZCBzb21lIHVzZXJzIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlLiBHZW9sb2NhdGlvbiBzdXBwb3J0IGZvciBtb2Rlcm5cbiAqIGJyb3dzZXJzIGluY2x1ZGluZyBDaHJvbWUgcmVxdWlyZXMgc2l0ZXMgdG8gYmUgc2VydmVkIG92ZXIgSFRUUFMuIElmXG4gKiBnZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgbm90XG4gKiBiZSB2aXNpYmxlLlxuICpcbiAqIFRoZSB6b29tIGxldmVsIGFwcGxpZWQgd2lsbCBkZXBlbmQgb24gdGhlIGFjY3VyYWN5IG9mIHRoZSBnZW9sb2NhdGlvbiBwcm92aWRlZCBieSB0aGUgZGV2aWNlLlxuICpcbiAqIFRoZSBHZW9sb2NhdGVDb250cm9sIGhhcyB0d28gbW9kZXMuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYGZhbHNlYCAoZGVmYXVsdCkgdGhlIGNvbnRyb2wgYWN0cyBhcyBhIGJ1dHRvbiwgd2hpY2ggd2hlbiBwcmVzc2VkIHdpbGwgc2V0IHRoZSBtYXAncyBjYW1lcmEgdG8gdGFyZ2V0IHRoZSB1c2VyIGxvY2F0aW9uLiBJZiB0aGUgdXNlciBtb3ZlcywgdGhlIG1hcCB3b24ndCB1cGRhdGUuIFRoaXMgaXMgbW9zdCBzdWl0ZWQgZm9yIHRoZSBkZXNrdG9wLiBJZiBgdHJhY2tVc2VyTG9jYXRpb25gIGlzIGB0cnVlYCB0aGUgY29udHJvbCBhY3RzIGFzIGEgdG9nZ2xlIGJ1dHRvbiB0aGF0IHdoZW4gYWN0aXZlIHRoZSB1c2VyJ3MgbG9jYXRpb24gaXMgYWN0aXZlbHkgbW9uaXRvcmVkIGZvciBjaGFuZ2VzLiBJbiB0aGlzIG1vZGUgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHRocmVlIHN0YXRlczpcbiAqICogYWN0aXZlIC0gdGhlIG1hcCdzIGNhbWVyYSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgYXMgdGhlIHVzZXIncyBsb2NhdGlvbiBjaGFuZ2VzLCBrZWVwaW5nIHRoZSBsb2NhdGlvbiBkb3QgaW4gdGhlIGNlbnRlci5cbiAqICogcGFzc2l2ZSAtIHRoZSB1c2VyJ3MgbG9jYXRpb24gZG90IGF1dG9tYXRpY2FsbHkgdXBkYXRlcywgYnV0IHRoZSBtYXAncyBjYW1lcmEgZG9lcyBub3QuXG4gKiAqIGRpc2FibGVkXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnBvc2l0aW9uT3B0aW9ucz17ZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSwgdGltZW91dDogNjAwMH1dIEEgR2VvbG9jYXRpb24gQVBJIFtQb3NpdGlvbk9wdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbk9wdGlvbnMpIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zPXttYXhab29tOiAxNX1dIEEgW2BmaXRCb3VuZHNgXSgjbWFwI2ZpdGJvdW5kcykgb3B0aW9ucyBvYmplY3QgdG8gdXNlIHdoZW4gdGhlIG1hcCBpcyBwYW5uZWQgYW5kIHpvb21lZCB0byB0aGUgdXNlcidzIGxvY2F0aW9uLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBgbWF4Wm9vbWAgb2YgMTUgdG8gbGltaXQgaG93IGZhciB0aGUgbWFwIHdpbGwgem9vbSBpbiBmb3IgdmVyeSBhY2N1cmF0ZSBsb2NhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudHJhY2tVc2VyTG9jYXRpb249ZmFsc2VdIElmIGB0cnVlYCB0aGUgR2VvbG9jYXRlIENvbnRyb2wgYmVjb21lcyBhIHRvZ2dsZSBidXR0b24gYW5kIHdoZW4gYWN0aXZlIHRoZSBtYXAgd2lsbCByZWNlaXZlIHVwZGF0ZXMgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZT10cnVlXSBCeSBkZWZhdWx0LCBpZiBzaG93VXNlckxvY2F0aW9uIGlzIGB0cnVlYCwgYSB0cmFuc3BhcmVudCBjaXJjbGUgd2lsbCBiZSBkcmF3biBhcm91bmQgdGhlIHVzZXIgbG9jYXRpb24gaW5kaWNhdGluZyB0aGUgYWNjdXJhY3kgKDk1JSBjb25maWRlbmNlIGxldmVsKSBvZiB0aGUgdXNlcidzIGxvY2F0aW9uLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlLiBBbHdheXMgZGlzYWJsZWQgd2hlbiBzaG93VXNlckxvY2F0aW9uIGlzIGBmYWxzZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbj10cnVlXSBCeSBkZWZhdWx0IGEgZG90IHdpbGwgYmUgc2hvd24gb24gdGhlIG1hcCBhdCB0aGUgdXNlcidzIGxvY2F0aW9uLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgICAgcG9zaXRpb25PcHRpb25zOiB7XG4gKiAgICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAgdHJhY2tVc2VyTG9jYXRpb246IHRydWVcbiAqIH0pKTtcbiAqIEBzZWUgW0xvY2F0ZSB0aGUgdXNlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhdGUtdXNlci8pXG4gKi9cbmNsYXNzIEdlb2xvY2F0ZUNvbnRyb2wgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZG90RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2NpcmNsZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9nZW9sb2NhdGVCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9nZW9sb2NhdGlvbldhdGNoSUQ6IG51bWJlcjtcbiAgICBfdGltZW91dElkOiA/VGltZW91dElEO1xuICAgIF93YXRjaFN0YXRlOiAnT0ZGJyB8ICdBQ1RJVkVfTE9DSycgfCAnV0FJVElOR19BQ1RJVkUnIHwgJ0FDVElWRV9FUlJPUicgfCAnQkFDS0dST1VORCcgfCAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgX2xhc3RLbm93blBvc2l0aW9uOiBhbnk7XG4gICAgX3VzZXJMb2NhdGlvbkRvdE1hcmtlcjogTWFya2VyO1xuICAgIF9hY2N1cmFjeUNpcmNsZU1hcmtlcjogTWFya2VyO1xuICAgIF9hY2N1cmFjeTogbnVtYmVyO1xuICAgIF9zZXR1cDogYm9vbGVhbjsgLy8gc2V0IHRvIHRydWUgb25jZSB0aGUgY29udHJvbCBoYXMgYmVlbiBzZXR1cFxuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25TdWNjZXNzJyxcbiAgICAgICAgICAgICdfb25FcnJvcicsXG4gICAgICAgICAgICAnX29uWm9vbScsXG4gICAgICAgICAgICAnX2ZpbmlzaCcsXG4gICAgICAgICAgICAnX3NldHVwVUknLFxuICAgICAgICAgICAgJ191cGRhdGVDYW1lcmEnLFxuICAgICAgICAgICAgJ191cGRhdGVNYXJrZXInXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgYG1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cGApO1xuICAgICAgICBjaGVja0dlb2xvY2F0aW9uU3VwcG9ydCh0aGlzLl9zZXR1cFVJKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgLy8gY2xlYXIgdGhlIGdlb2xvY2F0aW9uIHdhdGNoIGlmIGV4aXN0c1xuICAgICAgICBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBtYXJrZXJzIGZyb20gdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUgJiYgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tJywgdGhpcy5fb25ab29tKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgbnVtYmVyT2ZXYXRjaGVzID0gMDtcbiAgICAgICAgbm9UaW1lb3V0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2lzT3V0T2ZNYXBNYXhCb3VuZHMocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX21hcC5nZXRNYXhCb3VuZHMoKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBwb3NpdGlvbi5jb29yZHM7XG5cbiAgICAgICAgcmV0dXJuIGJvdW5kcyAmJiAoXG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPCBib3VuZHMuZ2V0V2VzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPiBib3VuZHMuZ2V0RWFzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA8IGJvdW5kcy5nZXRTb3V0aCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA+IGJvdW5kcy5nZXROb3J0aCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldEVycm9yU3RhdGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0FDVElWRV9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIHR1cm4gbWFya2VyIGdyZXlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyB0dXJuIG1hcmtlciBncmV5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0VSUk9SJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vblN1Y2Nlc3MocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAvLyBjb250cm9sIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc091dE9mTWFwTWF4Qm91bmRzKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3JTdGF0ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdvdXRvZm1heGJvdW5kcycsIHBvc2l0aW9uKSk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNYXJrZXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBwb3NpdGlvbiBzbyB0aGF0IGlmIHRoZSBzdGF0ZSBpcyBCQUNLR1JPVU5EIGFuZCB0aGUgdXNlclxuICAgICAgICAgICAgLy8gY2xpY2tzIHRoZSBidXR0b24sIHdlIGNhbiBtb3ZlIHRvIEFDVElWRV9MT0NLIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3JcbiAgICAgICAgICAgIC8vIHdhdGNoUG9zaXRpb24gdG8gdHJpZ2dlciBfb25TdWNjZXNzXG4gICAgICAgICAgICB0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfTE9DSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgc2hvd1VzZXJMb2NhdGlvbiBhbmQgdGhlIHdhdGNoIHN0YXRlIGlzbid0IG9mZiB0aGVuIHVwZGF0ZSB0aGUgbWFya2VyIGxvY2F0aW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLl93YXRjaFN0YXRlICE9PSAnT0ZGJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGluIG5vcm1hbCBtb2RlIChub3Qgd2F0Y2ggbW9kZSksIG9yIGlmIGluIHdhdGNoIG1vZGUgYW5kIHRoZSBzdGF0ZSBpcyBhY3RpdmUgd2F0Y2hcbiAgICAgICAgLy8gdGhlbiB1cGRhdGUgdGhlIGNhbWVyYVxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiB8fCB0aGlzLl93YXRjaFN0YXRlID09PSAnQUNUSVZFX0xPQ0snKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDYW1lcmEocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdnZW9sb2NhdGUnLCBwb3NpdGlvbikpO1xuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2FtZXJhKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgTG5nTGF0KHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeTtcbiAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe2JlYXJpbmd9LCB0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpdEJvdW5kcyhjZW50ZXIudG9Cb3VuZHMocmFkaXVzKSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZ2VvbG9jYXRlU291cmNlOiB0cnVlIC8vIHRhZyB0aGlzIGNhbWVyYSBjaGFuZ2Ugc28gaXQgd29uJ3QgY2F1c2UgdGhlIGNvbnRyb2wgdG8gY2hhbmdlIHRvIGJhY2tncm91bmQgc3RhdGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcmtlcihwb3NpdGlvbjogP1Bvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IExuZ0xhdChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIuc2V0TG5nTGF0KGNlbnRlcikuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQoY2VudGVyKS5hZGRUbyh0aGlzLl9tYXApO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3kgPSBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3k7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNpcmNsZVJhZGl1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQ2lyY2xlUmFkaXVzKCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fY2lyY2xlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLl9tYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBhID0gdGhpcy5fbWFwLnVucHJvamVjdChbMCwgeV0pO1xuICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLnVucHJvamVjdChbMSwgeV0pO1xuICAgICAgICBjb25zdCBtZXRlcnNQZXJQaXhlbCA9IGEuZGlzdGFuY2VUbyhiKTtcbiAgICAgICAgY29uc3QgY2lyY2xlRGlhbWV0ZXIgPSBNYXRoLmNlaWwoMi4wICogdGhpcy5fYWNjdXJhY3kgLyBtZXRlcnNQZXJQaXhlbCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjaXJjbGVEaWFtZXRlcn1weGA7XG4gICAgICAgIHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y2lyY2xlRGlhbWV0ZXJ9cHhgO1xuICAgIH1cblxuICAgIF9vblpvb20oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkVycm9yKGVycm9yOiBQb3NpdGlvbkVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAvLyBjb250cm9sIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gUEVSTUlTU0lPTl9ERU5JRURcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuY29kZSA9PT0gMyAmJiBub1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHJlcHJlc2VudHMgYSBmb3JjZWQgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdhcyB0cmlnZ2VyZWQgdG8gZm9yY2UgaW1tZWRpYXRlIGdlb2xvY2F0aW9uIHdoZW4gYSB3YXRjaCBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzgyMTRcbiAgICAgICAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dlb2xvY2F0aW9uLWFwaS8jZXhhbXBsZS01LWZvcmNpbmctdGhlLXVzZXItYWdlbnQtdG8tcmV0dXJuLWEtZnJlc2gtY2FjaGVkLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvclN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSAhPT0gJ09GRicgJiYgdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfZmluaXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZW91dElkKSB7IGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpOyB9XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBfc2V0dXBVSShzdXBwb3J0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGU6IE1vdXNlRXZlbnQpID0+IGUucHJldmVudERlZmF1bHQoKSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsIGBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZWAsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgc28gdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBiZSBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNob3dVc2VyTG9jYXRpb24gaXMgZW5hYmxlZCwga2VlcCB0aGUgR2VvbG9jYXRlIGJ1dHRvbiBkaXNhYmxlZCB1bnRpbCB0aGUgZGV2aWNlIGxvY2F0aW9uIG1hcmtlciBpcyBzZXR1cCBvbiB0aGUgbWFwXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIgPSBuZXcgTWFya2VyKHRoaXMuX2RvdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXVzZXItbG9jYXRpb24tYWNjdXJhY3ktY2lyY2xlJyk7XG4gICAgICAgICAgICB0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlciA9IG5ldyBNYXJrZXIoe2VsZW1lbnQ6IHRoaXMuX2NpcmNsZUVsZW1lbnQsIHBpdGNoQWxpZ25tZW50OiAnbWFwJ30pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG5cbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignem9vbScsIHRoaXMuX29uWm9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgY2hhbmdlZCAoYW5kIGl0J3Mgbm90IGFzIGEgcmVzdWx0IG9mIHRoZSBHZW9sb2NhdGlvbiBDb250cm9sKSBjaGFuZ2VcbiAgICAgICAgLy8gdGhlIHdhdGNoIG1vZGUgdG8gYmFja2dyb3VuZCB3YXRjaCwgc28gdGhhdCB0aGUgbWFya2VyIGlzIHVwZGF0ZWQgYnV0IG5vdCB0aGUgY2FtZXJhLlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb21SZXNpemUgPSBldmVudC5vcmlnaW5hbEV2ZW50ICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSA9PT0gJ3Jlc2l6ZSc7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5nZW9sb2NhdGVTb3VyY2UgJiYgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJyAmJiAhZnJvbVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25lbmQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGEgZ2VvbG9jYXRpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAgaWYgY2FsbGVkIGJlZm9yZSBjb250cm9sIHdhcyBhZGRlZCB0byBhIG1hcCwgb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgLlxuICAgICAqL1xuICAgIHRyaWdnZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dXApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHdhdGNoU3RhdGUgYW5kIGRvIGFueSBvdXRnb2luZyBzdGF0ZSBjbGVhbnVwXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ09GRic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvbiB0aGUgR2VvbG9jYXRlIENvbnRyb2xcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ1dBSVRJTkdfQUNUSVZFJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgdGhlIEdlb2xvY2F0ZSBDb250cm9sXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZXYXRjaGVzLS07XG4gICAgICAgICAgICAgICAgbm9UaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbmVuZCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGNhbWVyYSB0byBsYXN0IGtub3duIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSB0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25zdGFydCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW5jb21pbmcgc3RhdGUgc2V0dXBcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnT0ZGJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWFuYWdlIGdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24gLyBnZW9sb2NhdGlvbi5jbGVhcldhdGNoXG4gICAgICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ09GRicgJiYgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciB3YXRjaFBvc2l0aW9uIGFzIHdlJ3ZlIGNoYW5nZWQgdG8gYW4gT0ZGIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB3YXRjaFBvc2l0aW9uIHNpbmNlIHdhdGNoU3RhdGUgaXMgbm90IE9GRiBhbmQgdGhlcmUgaXMgbm8gd2F0Y2hQb3NpdGlvbiBhbHJlYWR5IHJ1bm5pbmdcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIG51bWJlck9mV2F0Y2hlcysrO1xuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbk9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlck9mV2F0Y2hlcyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25PcHRpb25zID0ge21heGltdW1BZ2U6NjAwMDAwLCB0aW1lb3V0OjB9O1xuICAgICAgICAgICAgICAgICAgICBub1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIG5vVGltZW91dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9IHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCBwb3NpdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCB0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgLy8gVGhpcyB0aW1lb3V0IGVuc3VyZXMgdGhhdCB3ZSBzdGlsbCBjYWxsIGZpbmlzaCgpIGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGRlY2xpbmVzIHRvIHNoYXJlIHRoZWlyIGxvY2F0aW9uIGluIEZpcmVmb3hcbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5fZmluaXNoLCAxMDAwMCAvKiAxMHNlYyAqLyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2xlYXJXYXRjaCgpIHtcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCk7XG5cbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNYXJrZXIobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2xvY2F0ZUNvbnRyb2w7XG5cbi8qIEdlb2xvY2F0ZSBDb250cm9sIFdhdGNoIFN0YXRlc1xuICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBzdGF0ZSBvZiB0aGUgY29udHJvbC5cbiAqXG4gKiBPRkZcbiAqICAgIG9mZi9pbmFjdGl2ZVxuICogV0FJVElOR19BQ1RJVkVcbiAqICAgIEdlb2xvY2F0ZSBDb250cm9sIHdhcyBjbGlja2VkIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciBHZW9sb2NhdGlvbiBBUEkgcmVzcG9uc2Ugd2l0aCB1c2VyIGxvY2F0aW9uXG4gKiBBQ1RJVkVfTE9DS1xuICogICAgU2hvd2luZyB0aGUgdXNlciBsb2NhdGlvbiBhcyBhIGRvdCBBTkQgdHJhY2tpbmcgdGhlIGNhbWVyYSB0byBiZSBmaXhlZCB0byB0aGVpciBsb2NhdGlvbi4gSWYgdGhlaXIgbG9jYXRpb24gY2hhbmdlcyB0aGUgbWFwIG1vdmVzIHRvIGZvbGxvdy5cbiAqIEFDVElWRV9FUlJPUlxuICogICAgVGhlcmUgd2FzIGVuIGVycm9yIGZyb20gdGhlIEdlb2xvY2F0aW9uIEFQSSB3aGlsZSB0cnlpbmcgdG8gc2hvdyBhbmQgdHJhY2sgdGhlIHVzZXIgbG9jYXRpb24uXG4gKiBCQUNLR1JPVU5EXG4gKiAgICBTaG93aW5nIHRoZSB1c2VyIGxvY2F0aW9uIGFzIGEgZG90IGJ1dCB0aGUgY2FtZXJhIGRvZXNuJ3QgZm9sbG93IHRoZWlyIGxvY2F0aW9uIGFzIGl0IGNoYW5nZXMuXG4gKiBCQUNLR1JPVU5EX0VSUk9SXG4gKiAgICBUaGVyZSB3YXMgYW4gZXJyb3IgZnJvbSB0aGUgR2VvbG9jYXRpb24gQVBJIHdoaWxlIHRyeWluZyB0byBzaG93IChidXQgbm90IHRyYWNrKSB0aGUgdXNlciBsb2NhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBzdWNjZXNzLlxuICpcbiAqIEBldmVudCBnZW9sb2NhdGVcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb259IGRhdGEgVGhlIHJldHVybmVkIFtQb3NpdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgb24gZWFjaCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gdXBkYXRlIHdoaWNoIHJldHVybmVkIGFzIGFuIGVycm9yLlxuICpcbiAqIEBldmVudCBlcnJvclxuICogQG1lbWJlcm9mIEdlb2xvY2F0ZUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtQb3NpdGlvbkVycm9yfSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25FcnJvcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uRXJyb3IpIG9iamVjdCBmcm9tIHRoZSBjYWxsYmFjayBpbiBbR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi9nZXRDdXJyZW50UG9zaXRpb24pIG9yIFtHZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi93YXRjaFBvc2l0aW9uKS5cbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgc3VjY2VzcyBidXQgdXNlciBwb3NpdGlvbiBpcyBvdXQgb2YgbWFwIG1heEJvdW5kcy5cbiAqXG4gKiBAZXZlbnQgb3V0b2ZtYXhib3VuZHNcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb259IGRhdGEgVGhlIHJldHVybmVkIFtQb3NpdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgR2VvbG9jYXRlIENvbnRyb2wgY2hhbmdlcyB0byB0aGUgYWN0aXZlIGxvY2sgc3RhdGUsIHdoaWNoIGhhcHBlbnMgZWl0aGVyIHVwb24gZmlyc3Qgb2J0YWluaW5nIGEgc3VjY2Vzc2Z1bCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gZm9yIHRoZSB1c2VyIChhIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyksIG9yIHRoZSB1c2VyIGNsaWNrcyB0aGUgZ2VvbG9jYXRlIGJ1dHRvbiB3aGVuIGluIHRoZSBiYWNrZ3JvdW5kIHN0YXRlIHdoaWNoIHVzZXMgdGhlIGxhc3Qga25vd24gcG9zaXRpb24gdG8gcmVjZW50ZXIgdGhlIG1hcCBhbmQgZW50ZXIgYWN0aXZlIGxvY2sgc3RhdGUgKG5vIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyB1bmxlc3MgdGhlIHVzZXJzJ3MgbG9jYXRpb24gY2hhbmdlcykuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBHZW9sb2NhdGUgQ29udHJvbCBjaGFuZ2VzIHRvIHRoZSBiYWNrZ3JvdW5kIHN0YXRlLCB3aGljaCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlIGNhbWVyYSBkdXJpbmcgYW4gYWN0aXZlIHBvc2l0aW9uIGxvY2suIFRoaXMgb25seSBhcHBsaWVzIHdoZW4gdHJhY2tVc2VyTG9jYXRpb24gaXMgdHJ1ZS4gSW4gdGhlIGJhY2tncm91bmQgc3RhdGUsIHRoZSBkb3Qgb24gdGhlIG1hcCB3aWxsIHVwZGF0ZSB3aXRoIGxvY2F0aW9uIHVwZGF0ZXMgYnV0IHRoZSBjYW1lcmEgd2lsbCBub3QuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uZW5kXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKlxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBVbml0ID0gJ2ltcGVyaWFsJyB8ICdtZXRyaWMnIHwgJ25hdXRpY2FsJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIG1heFdpZHRoPzogbnVtYmVyLFxuICAgIHVuaXQ/OiBVbml0O1xufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgbWF4V2lkdGg6IDEwMCxcbiAgICB1bml0OiAnbWV0cmljJ1xufTtcblxuLyoqXG4gKiBBIGBTY2FsZUNvbnRyb2xgIGNvbnRyb2wgZGlzcGxheXMgdGhlIHJhdGlvIG9mIGEgZGlzdGFuY2Ugb24gdGhlIG1hcCB0byB0aGUgY29ycmVzcG9uZGluZyBkaXN0YW5jZSBvbiB0aGUgZ3JvdW5kLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXaWR0aD0nMTAwJ10gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBzY2FsZSBjb250cm9sIGluIHBpeGVscy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0PSdtZXRyaWMnXSBVbml0IG9mIHRoZSBkaXN0YW5jZSAoYCdpbXBlcmlhbCdgLCBgJ21ldHJpYydgIG9yIGAnbmF1dGljYWwnYCkuXG4gKiBAZXhhbXBsZVxuICogdmFyIHNjYWxlID0gbmV3IG1hcGJveGdsLlNjYWxlQ29udHJvbCh7XG4gKiAgICAgbWF4V2lkdGg6IDgwLFxuICogICAgIHVuaXQ6ICdpbXBlcmlhbCdcbiAqIH0pO1xuICogbWFwLmFkZENvbnRyb2woc2NhbGUpO1xuICpcbiAqIHNjYWxlLnNldFVuaXQoJ21ldHJpYycpO1xuICovXG5jbGFzcyBTY2FsZUNvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBvcHRpb25zOiBPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdzZXRVbml0J1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgIH1cblxuICAgIF9vbk1vdmUoKSB7XG4gICAgICAgIHVwZGF0ZVNjYWxlKHRoaXMuX21hcCwgdGhpcy5fY29udGFpbmVyLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZScsIG1hcC5nZXRDb250YWluZXIoKSk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgdGhpcy5fb25Nb3ZlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNjYWxlJ3MgdW5pdCBvZiB0aGUgZGlzdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB1bml0IFVuaXQgb2YgdGhlIGRpc3RhbmNlIChgJ2ltcGVyaWFsJ2AsIGAnbWV0cmljJ2Agb3IgYCduYXV0aWNhbCdgKS5cbiAgICAgKi9cbiAgICBzZXRVbml0KHVuaXQ6IFVuaXQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVuaXQgPSB1bml0O1xuICAgICAgICB1cGRhdGVTY2FsZSh0aGlzLl9tYXAsIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjYWxlQ29udHJvbDtcblxuZnVuY3Rpb24gdXBkYXRlU2NhbGUobWFwLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICAvLyBBIGhvcml6b250YWwgc2NhbGUgaXMgaW1hZ2luZWQgdG8gYmUgcHJlc2VudCBhdCBjZW50ZXIgb2YgdGhlIG1hcFxuICAgIC8vIGNvbnRhaW5lciB3aXRoIG1heGltdW0gbGVuZ3RoIChEZWZhdWx0KSBhcyAxMDBweC5cbiAgICAvLyBVc2luZyBzcGhlcmljYWwgbGF3IG9mIGNvc2luZXMgYXBwcm94aW1hdGlvbiwgdGhlIHJlYWwgZGlzdGFuY2UgaXNcbiAgICAvLyBmb3VuZCBiZXR3ZWVuIHRoZSB0d28gY29vcmRpbmF0ZXMuXG4gICAgY29uc3QgbWF4V2lkdGggPSBvcHRpb25zICYmIG9wdGlvbnMubWF4V2lkdGggfHwgMTAwO1xuXG4gICAgY29uc3QgeSA9IG1hcC5fY29udGFpbmVyLmNsaWVudEhlaWdodCAvIDI7XG4gICAgY29uc3QgbGVmdCA9IG1hcC51bnByb2plY3QoWzAsIHldKTtcbiAgICBjb25zdCByaWdodCA9IG1hcC51bnByb2plY3QoW21heFdpZHRoLCB5XSk7XG4gICAgY29uc3QgbWF4TWV0ZXJzID0gbGVmdC5kaXN0YW5jZVRvKHJpZ2h0KTtcbiAgICAvLyBUaGUgcmVhbCBkaXN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIDEwMHB4IHNjYWxlIGxlbmd0aCBpcyByb3VuZGVkIG9mZiB0b1xuICAgIC8vIG5lYXIgcHJldHR5IG51bWJlciBhbmQgdGhlIHNjYWxlIGxlbmd0aCBmb3IgdGhlIHNhbWUgaXMgZm91bmQgb3V0LlxuICAgIC8vIERlZmF1bHQgdW5pdCBvZiB0aGUgc2NhbGUgaXMgYmFzZWQgb24gVXNlcidzIGxvY2FsZS5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuaXQgPT09ICdpbXBlcmlhbCcpIHtcbiAgICAgICAgY29uc3QgbWF4RmVldCA9IDMuMjgwOCAqIG1heE1ldGVycztcbiAgICAgICAgaWYgKG1heEZlZXQgPiA1MjgwKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhNaWxlcyA9IG1heEZlZXQgLyA1MjgwO1xuICAgICAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TWlsZXMsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5NaWxlcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heEZlZXQsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5GZWV0JykpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5pdCA9PT0gJ25hdXRpY2FsJykge1xuICAgICAgICBjb25zdCBtYXhOYXV0aWNhbHMgPSBtYXhNZXRlcnMgLyAxODUyO1xuICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhOYXV0aWNhbHMsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzJykpO1xuICAgIH0gZWxzZSBpZiAobWF4TWV0ZXJzID49IDEwMDApIHtcbiAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TWV0ZXJzIC8gMTAwMCwgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLktpbG9tZXRlcnMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TWV0ZXJzLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuTWV0ZXJzJykpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4RGlzdGFuY2UsIHVuaXQpIHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGdldFJvdW5kTnVtKG1heERpc3RhbmNlKTtcbiAgICBjb25zdCByYXRpbyA9IGRpc3RhbmNlIC8gbWF4RGlzdGFuY2U7XG4gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7bWF4V2lkdGggKiByYXRpb31weGA7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGAke2Rpc3RhbmNlfSZuYnNwOyR7dW5pdH1gO1xufVxuXG5mdW5jdGlvbiBnZXREZWNpbWFsUm91bmROdW0oZCkge1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKC1NYXRoLmxvZyhkKSAvIE1hdGguTE4xMCkpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGQgKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59XG5cbmZ1bmN0aW9uIGdldFJvdW5kTnVtKG51bSkge1xuICAgIGNvbnN0IHBvdzEwID0gTWF0aC5wb3coMTAsIChgJHtNYXRoLmZsb29yKG51bSl9YCkubGVuZ3RoIC0gMSk7XG4gICAgbGV0IGQgPSBudW0gLyBwb3cxMDtcblxuICAgIGQgPSBkID49IDEwID8gMTAgOlxuICAgICAgICBkID49IDUgPyA1IDpcbiAgICAgICAgZCA+PSAzID8gMyA6XG4gICAgICAgIGQgPj0gMiA/IDIgOlxuICAgICAgICBkID49IDEgPyAxIDogZ2V0RGVjaW1hbFJvdW5kTnVtKGQpO1xuXG4gICAgcmV0dXJuIHBvdzEwICogZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGwsIHdhcm5PbmNlfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgY29udGFpbmVyPzogSFRNTEVsZW1lbnRcbn07XG5cbi8qKlxuICogQSBgRnVsbHNjcmVlbkNvbnRyb2xgIGNvbnRyb2wgY29udGFpbnMgYSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBtYXAgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIG1vZGUuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW29wdGlvbnMuY29udGFpbmVyXSBgY29udGFpbmVyYCBpcyB0aGUgW2NvbXBhdGlibGUgRE9NIGVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlcXVlc3RGdWxsU2NyZWVuI0NvbXBhdGlibGVfZWxlbWVudHMpIHdoaWNoIHNob3VsZCBiZSBtYWRlIGZ1bGwgc2NyZWVuLiBCeSBkZWZhdWx0LCB0aGUgbWFwIGNvbnRhaW5lciBlbGVtZW50IHdpbGwgYmUgbWFkZSBmdWxsIHNjcmVlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkZ1bGxzY3JlZW5Db250cm9sKHtjb250YWluZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKX0pKTtcbiAqIEBzZWUgW1ZpZXcgYSBmdWxsc2NyZWVuIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mdWxsc2NyZWVuLylcbiAqL1xuXG5jbGFzcyBGdWxsc2NyZWVuQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250cm9sQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZnVsbHNjcmVlbjogYm9vbGVhbjtcbiAgICBfZnVsbHNjcmVlbmNoYW5nZTogc3RyaW5nO1xuICAgIF9mdWxsc2NyZWVuQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdGdWxsIHNjcmVlbiBjb250cm9sIFxcJ2NvbnRhaW5lclxcJyBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uQ2xpY2tGdWxsc2NyZWVuJyxcbiAgICAgICAgICAgICdfY2hhbmdlSWNvbidcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIGlmICgnb25mdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ubW96ZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ21vemZ1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb25tc2Z1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdNU0Z1bGxzY3JlZW5DaGFuZ2UnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikgdGhpcy5fY29udGFpbmVyID0gdGhpcy5fbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jb250cm9sQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgYG1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cGApO1xuICAgICAgICBpZiAodGhpcy5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cFVJKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB3YXJuT25jZSgnVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBmdWxsc2NyZWVuIG1vZGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xDb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX21hcCA9IChudWxsOiBhbnkpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLCB0aGlzLl9jaGFuZ2VJY29uKTtcbiAgICB9XG5cbiAgICBfY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpIHtcbiAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkIHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1vekZ1bGxTY3JlZW5FbmFibGVkIHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1zRnVsbHNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkud2Via2l0RnVsbHNjcmVlbkVuYWJsZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfc2V0dXBVSSgpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsIChgbWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuYCksIHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICBET00uY3JlYXRlKCdzcGFuJywgYG1hcGJveGdsLWN0cmwtaWNvbmAsIGJ1dHRvbikuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICBidXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLl91cGRhdGVUaXRsZSgpO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLCB0aGlzLl9jaGFuZ2VJY29uKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlVGl0bGUoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZ2V0VGl0bGUoKTtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgIH1cblxuICAgIF9nZXRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcodGhpcy5faXNGdWxsc2NyZWVuKCkgPyAnRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCcgOiAnRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXInKTtcbiAgICB9XG5cbiAgICBfaXNGdWxsc2NyZWVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbHNjcmVlbjtcbiAgICB9XG5cbiAgICBfY2hhbmdlSWNvbigpIHtcbiAgICAgICAgY29uc3QgZnVsbHNjcmVlbkVsZW1lbnQgPVxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1zRnVsbHNjcmVlbkVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKChmdWxsc2NyZWVuRWxlbWVudCA9PT0gdGhpcy5fY29udGFpbmVyKSAhPT0gdGhpcy5fZnVsbHNjcmVlbikge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbiA9ICF0aGlzLl9mdWxsc2NyZWVuO1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKGBtYXBib3hnbC1jdHJsLXNocmlua2ApO1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKGBtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW5gKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25DbGlja0Z1bGxzY3JlZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0Z1bGxzY3JlZW4oKSkge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9jb250YWluZXI6IGFueSkubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgICAgICh0aGlzLl9jb250YWluZXI6IGFueSkubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICh0aGlzLl9jb250YWluZXI6IGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9jb250YWluZXI6IGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICh0aGlzLl9jb250YWluZXI6IGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnVsbHNjcmVlbkNvbnRyb2w7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgc21hcnRXcmFwIGZyb20gJy4uL3V0aWwvc21hcnRfd3JhcCc7XG5pbXBvcnQge3R5cGUgQW5jaG9yLCBhbmNob3JUcmFuc2xhdGUsIGFwcGx5QW5jaG9yQ2xhc3N9IGZyb20gJy4vYW5jaG9yJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7UG9pbnRMaWtlfSBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgbWF4V2lkdGg6IFwiMjQwcHhcIlxufTtcblxuZXhwb3J0IHR5cGUgT2Zmc2V0ID0gbnVtYmVyIHwgUG9pbnRMaWtlIHwge1tBbmNob3JdOiBQb2ludExpa2V9O1xuXG5leHBvcnQgdHlwZSBQb3B1cE9wdGlvbnMgPSB7XG4gICAgY2xvc2VCdXR0b24/OiBib29sZWFuLFxuICAgIGNsb3NlT25DbGljaz86IGJvb2xlYW4sXG4gICAgY2xvc2VPbk1vdmU/OiBib29sZWFuLFxuICAgIGFuY2hvcj86IEFuY2hvcixcbiAgICBvZmZzZXQ/OiBPZmZzZXQsXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICAgIG1heFdpZHRoPzogc3RyaW5nXG59O1xuXG4vKipcbiAqIEEgcG9wdXAgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2xvc2VCdXR0b249dHJ1ZV0gSWYgYHRydWVgLCBhIGNsb3NlIGJ1dHRvbiB3aWxsIGFwcGVhciBpbiB0aGVcbiAqICAgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgcG9wdXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlT25DbGljaz10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBwb3B1cCB3aWxsIGNsb3NlZCB3aGVuIHRoZVxuICogICBtYXAgaXMgY2xpY2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2xvc2VPbk1vdmU9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIHBvcHVwIHdpbGwgY2xvc2VkIHdoZW4gdGhlXG4gKiAgIG1hcCBtb3Zlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmNob3JdIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgcGFydCBvZiB0aGUgUG9wdXAgdGhhdCBzaG91bGRcbiAqICAgYmUgcG9zaXRpb25lZCBjbG9zZXN0IHRvIHRoZSBjb29yZGluYXRlIHNldCB2aWEge0BsaW5rIFBvcHVwI3NldExuZ0xhdH0uXG4gKiAgIE9wdGlvbnMgYXJlIGAnY2VudGVyJ2AsIGAndG9wJ2AsIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBgJ3JpZ2h0J2AsIGAndG9wLWxlZnQnYCxcbiAqICAgYCd0b3AtcmlnaHQnYCwgYCdib3R0b20tbGVmdCdgLCBhbmQgYCdib3R0b20tcmlnaHQnYC4gSWYgdW5zZXQgdGhlIGFuY2hvciB3aWxsIGJlXG4gKiAgIGR5bmFtaWNhbGx5IHNldCB0byBlbnN1cmUgdGhlIHBvcHVwIGZhbGxzIHdpdGhpbiB0aGUgbWFwIGNvbnRhaW5lciB3aXRoIGEgcHJlZmVyZW5jZVxuICogICBmb3IgYCdib3R0b20nYC5cbiAqIEBwYXJhbSB7bnVtYmVyfFBvaW50TGlrZXxPYmplY3R9IFtvcHRpb25zLm9mZnNldF0gLVxuICogIEEgcGl4ZWwgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIHBvcHVwJ3MgbG9jYXRpb24gc3BlY2lmaWVkIGFzOlxuICogICAtIGEgc2luZ2xlIG51bWJlciBzcGVjaWZ5aW5nIGEgZGlzdGFuY2UgZnJvbSB0aGUgcG9wdXAncyBsb2NhdGlvblxuICogICAtIGEge0BsaW5rIFBvaW50TGlrZX0gc3BlY2lmeWluZyBhIGNvbnN0YW50IG9mZnNldFxuICogICAtIGFuIG9iamVjdCBvZiB7QGxpbmsgUG9pbnR9cyBzcGVjaWZpbmcgYW4gb2Zmc2V0IGZvciBlYWNoIGFuY2hvciBwb3NpdGlvblxuICogIE5lZ2F0aXZlIG9mZnNldHMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2xhc3NOYW1lXSBTcGFjZS1zZXBhcmF0ZWQgQ1NTIGNsYXNzIG5hbWVzIHRvIGFkZCB0byBwb3B1cCBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5tYXhXaWR0aD0nMjQwcHgnXSAtXG4gKiAgQSBzdHJpbmcgdGhhdCBzZXRzIHRoZSBDU1MgcHJvcGVydHkgb2YgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aCwgZWcgYCczMDBweCdgLlxuICogIFRvIGVuc3VyZSB0aGUgcG9wdXAgcmVzaXplcyB0byBmaXQgaXRzIGNvbnRlbnQsIHNldCB0aGlzIHByb3BlcnR5IHRvIGAnbm9uZSdgLlxuICogIEF2YWlsYWJsZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXgtd2lkdGhcbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFya2VySGVpZ2h0ID0gNTAsIG1hcmtlclJhZGl1cyA9IDEwLCBsaW5lYXJPZmZzZXQgPSAyNTtcbiAqIHZhciBwb3B1cE9mZnNldHMgPSB7XG4gKiAgJ3RvcCc6IFswLCAwXSxcbiAqICAndG9wLWxlZnQnOiBbMCwwXSxcbiAqICAndG9wLXJpZ2h0JzogWzAsMF0sXG4gKiAgJ2JvdHRvbSc6IFswLCAtbWFya2VySGVpZ2h0XSxcbiAqICAnYm90dG9tLWxlZnQnOiBbbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAqICAnYm90dG9tLXJpZ2h0JzogWy1saW5lYXJPZmZzZXQsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMgKyBsaW5lYXJPZmZzZXQpICogLTFdLFxuICogICdsZWZ0JzogW21hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV0sXG4gKiAgJ3JpZ2h0JzogWy1tYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdXG4gKiAgfTtcbiAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCh7b2Zmc2V0OiBwb3B1cE9mZnNldHMsIGNsYXNzTmFtZTogJ215LWNsYXNzJ30pXG4gKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gKiAgIC5zZXRIVE1MKFwiPGgxPkhlbGxvIFdvcmxkITwvaDE+XCIpXG4gKiAgIC5zZXRNYXhXaWR0aChcIjMwMHB4XCIpXG4gKiAgIC5hZGRUbyhtYXApO1xuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLylcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gY2xpY2tdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24tY2xpY2svKVxuICogQHNlZSBbQXR0YWNoIGEgcG9wdXAgdG8gYSBtYXJrZXIgaW5zdGFuY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0LXBvcHVwLylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogUG9wdXBPcHRpb25zO1xuICAgIF9jb250ZW50OiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY2xvc2VCdXR0b246IEhUTUxFbGVtZW50O1xuICAgIF90aXA6IEhUTUxFbGVtZW50O1xuICAgIF9sbmdMYXQ6IExuZ0xhdDtcbiAgICBfdHJhY2tQb2ludGVyOiBib29sZWFuO1xuICAgIF9wb3M6ID9Qb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBvcHVwT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZScsICdfb25DbG9zZScsICdyZW1vdmUnXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgcG9wdXAgdG8gYSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXBib3ggR0wgSlMgbWFwIHRvIGFkZCB0aGUgcG9wdXAgdG8uXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBhZGRUbyhtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25Nb3ZlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hcC5vbigncmVtb3ZlJywgdGhpcy5yZW1vdmUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNldXAnLCAoZSkgPT4geyB0aGlzLl91cGRhdGUoZS5wb2ludCk7IH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvcHVwIGlzIG9wZW5lZCBtYW51YWxseSBvciBwcm9ncmFtYXRpY2FsbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBvcGVuXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIG9wZW5lZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnb3BlbicpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwb3B1cCBpcyBvcGVuLCBgZmFsc2VgIGlmIGl0IGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX21hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBwb3B1cCBmcm9tIHRoZSBtYXAgaXQgaGFzIGJlZW4gYWRkZWQgdG8uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpLmFkZFRvKG1hcCk7XG4gICAgICogcG9wdXAucmVtb3ZlKCk7XG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRhaW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignY2xpY2snLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3JlbW92ZScsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBwb3B1cCBpcyBjbG9zZWQgbWFudWFsbHkgb3IgcHJvZ3JhbWF0aWNhbGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgY2xvc2VcbiAgICAgICAgICogQG1lbWJlcm9mIFBvcHVwXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge1BvcHVwfSBwb3B1cCBvYmplY3QgdGhhdCB3YXMgY2xvc2VkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdjbG9zZScpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqXG4gICAgICogVGhlIGxvbmdpdHVkZSBvZiB0aGUgcmVzdWx0IG1heSBkaWZmZXIgYnkgYSBtdWx0aXBsZSBvZiAzNjAgZGVncmVlcyBmcm9tIHRoZSBsb25naXR1ZGUgcHJldmlvdXNseVxuICAgICAqIHNldCBieSBgc2V0TG5nTGF0YCBiZWNhdXNlIGBQb3B1cGAgd3JhcHMgdGhlIGFuY2hvciBsb25naXR1ZGUgYWNyb3NzIGNvcGllcyBvZiB0aGUgd29ybGQgdG8ga2VlcFxuICAgICAqIHRoZSBwb3B1cCBvbiBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvciwgYW5kIG1vdmVzIHRoZSBwb3B1cCB0byBpdC4gUmVwbGFjZXMgdHJhY2tQb2ludGVyKCkgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG5nbGF0IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gdG8gc2V0IGFzIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldExuZ0xhdChsbmdsYXQ6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbG5nTGF0ID0gTG5nTGF0LmNvbnZlcnQobG5nbGF0KTtcbiAgICAgICAgdGhpcy5fcG9zID0gbnVsbDtcblxuICAgICAgICB0aGlzLl90cmFja1BvaW50ZXIgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgcG9wdXAgYW5jaG9yIHRvIHRoZSBjdXJzb3IgcG9zaXRpb24sIG9uIHNjcmVlbnMgd2l0aCBhIHBvaW50ZXIgZGV2aWNlICh3aWxsIGJlIGhpZGRlbiBvbiB0b3VjaHNjcmVlbnMpLiBSZXBsYWNlcyB0aGUgc2V0TG5nTGF0IGJlaGF2aW9yLlxuICAgICAqIEZvciBtb3N0IHVzZSBjYXNlcywgYGNsb3NlT25DbGlja2AgYW5kIGBjbG9zZUJ1dHRvbmAgc2hvdWxkIGFsc28gYmUgc2V0IHRvIGBmYWxzZWAgaGVyZS5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHRyYWNrUG9pbnRlcigpIHtcbiAgICAgICAgdGhpcy5fdHJhY2tQb2ludGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcG9zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZW1vdmUnLCAoZSkgPT4geyB0aGlzLl91cGRhdGUoZS5wb2ludCk7IH0pO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdkcmFnJywgKGUpID0+IHsgdGhpcy5fdXBkYXRlKGUucG9pbnQpOyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUG9wdXBgJ3MgSFRNTCBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgICAqL1xuICAgIGdldEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIGEgc3RyaW5nIG9mIHRleHQuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBbVGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHQpIG5vZGUgaW4gdGhlIERPTSxcbiAgICAgKiBzbyBpdCBjYW5ub3QgaW5zZXJ0IHJhdyBIVE1MLiBVc2UgdGhpcyBtZXRob2QgZm9yIHNlY3VyaXR5IGFnYWluc3QgWFNTXG4gICAgICogaWYgdGhlIHBvcHVwIGNvbnRlbnQgaXMgdXNlci1wcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IFRleHR1YWwgY29udGVudCBmb3IgdGhlIHBvcHVwLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAgICAgKiAgIC5zZXRUZXh0KCdIZWxsbywgd29ybGQhJylcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqL1xuICAgIHNldFRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERPTUNvbnRlbnQod2luZG93LmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIGNvbnRlbnQgdG8gdGhlIEhUTUwgcHJvdmlkZWQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIEhUTUwgZmlsdGVyaW5nIG9yIHNhbml0aXphdGlvbiwgYW5kIG11c3QgYmVcbiAgICAgKiB1c2VkIG9ubHkgd2l0aCB0cnVzdGVkIGNvbnRlbnQuIENvbnNpZGVyIHtAbGluayBQb3B1cCNzZXRUZXh0fSBpZlxuICAgICAqIHRoZSBjb250ZW50IGlzIGFuIHVudHJ1c3RlZCB0ZXh0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sIEEgc3RyaW5nIHJlcHJlc2VudGluZyBIVE1MIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldEhUTUwoaHRtbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZyYWcgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCB0ZW1wID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTtcbiAgICAgICAgbGV0IGNoaWxkO1xuICAgICAgICB0ZW1wLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHRlbXAuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmICghY2hpbGQpIGJyZWFrO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXRET01Db250ZW50KGZyYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBnZXRNYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGguIFRoaXMgaXMgc2V0dGluZyB0aGUgQ1NTIHByb3BlcnR5IGBtYXgtd2lkdGhgLlxuICAgICAqIEF2YWlsYWJsZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXgtd2lkdGhcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXhXaWR0aCBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIGZvciB0aGUgbWF4aW11bSB3aWR0aC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE1heFdpZHRoKG1heFdpZHRoOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIGNvbnRlbnQgdG8gdGhlIGVsZW1lbnQgcHJvdmlkZWQgYXMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sTm9kZSBBIERPTSBub2RlIHRvIGJlIHVzZWQgYXMgY29udGVudCBmb3IgdGhlIHBvcHVwLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBjcmVhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSBwb3B1cCBjb250ZW50XG4gICAgICogdmFyIGRpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgKiBkaXYuaW5uZXJIVE1MID0gJ0hlbGxvLCB3b3JsZCEnO1xuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICAgICAqICAgLnNldERPTUNvbnRlbnQoZGl2KVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICovXG4gICAgc2V0RE9NQ29udGVudChodG1sTm9kZTogTm9kZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVDb250ZW50KCk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQoaHRtbE5vZGUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIENTUyBjbGFzcyB0byB0aGUgcG9wdXAgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIE5vbi1lbXB0eSBzdHJpbmcgd2l0aCBDU1MgY2xhc3MgbmFtZSB0byBhZGQgdG8gcG9wdXAgY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAuYWRkQ2xhc3NOYW1lKCdzb21lLWNsYXNzJylcbiAgICAgKi9cbiAgICBhZGRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gdGhlIHBvcHVwIGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBOb24tZW1wdHkgc3RyaW5nIHdpdGggQ1NTIGNsYXNzIG5hbWUgdG8gcmVtb3ZlIGZyb20gcG9wdXAgY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAucmVtb3ZlQ2xhc3NOYW1lKCdzb21lLWNsYXNzJylcbiAgICAgKi9cbiAgICByZW1vdmVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgb3IgcmVtb3ZlIHRoZSBnaXZlbiBDU1MgY2xhc3Mgb24gdGhlIHBvcHVwIGNvbnRhaW5lciwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBjdXJyZW50bHkgaGFzIHRoYXQgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIE5vbi1lbXB0eSBzdHJpbmcgd2l0aCBDU1MgY2xhc3MgbmFtZSB0byBhZGQvcmVtb3ZlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgdGhlIGNsYXNzIHdhcyByZW1vdmVkIHJldHVybiBmYWxzZSwgaWYgY2xhc3Mgd2FzIGFkZGVkLCB0aGVuIHJldHVybiB0cnVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAudG9nZ2xlQ2xhc3NOYW1lKCd0b2dnbGVDbGFzcycpXG4gICAgICovXG4gICAgdG9nZ2xlQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUpO1xuICAgIH1cblxuICAgIF9jcmVhdGVDb250ZW50KCkge1xuICAgICAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAtY29udGVudCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgJ21hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbicsIHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlIHBvcHVwJyk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnJiMyMTU7JztcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIF91cGRhdGUoY3Vyc29yOiBQb2ludExpa2UpIHtcbiAgICAgICAgY29uc3QgaGFzUG9zaXRpb24gPSB0aGlzLl9sbmdMYXQgfHwgdGhpcy5fdHJhY2tQb2ludGVyO1xuXG4gICAgICAgIGlmICghdGhpcy5fbWFwIHx8ICFoYXNQb3NpdGlvbiB8fCAhdGhpcy5fY29udGVudCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwJywgdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgICAgIHRoaXMuX3RpcCAgICAgICA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1wb3B1cC10aXAnLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaChuYW1lID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKG5hbWUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1heFdpZHRoICYmIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCAhPT0gdGhpcy5vcHRpb25zLm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGggPSB0aGlzLm9wdGlvbnMubWF4V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyAmJiAhdGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9sbmdMYXQgPSBzbWFydFdyYXAodGhpcy5fbG5nTGF0LCB0aGlzLl9wb3MsIHRoaXMuX21hcC50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlciAmJiAhY3Vyc29yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fcG9zID0gdGhpcy5fdHJhY2tQb2ludGVyICYmIGN1cnNvciA/IGN1cnNvciA6IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCk7XG5cbiAgICAgICAgbGV0IGFuY2hvcjogP0FuY2hvciA9IHRoaXMub3B0aW9ucy5hbmNob3I7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0aGlzLm9wdGlvbnMub2Zmc2V0KTtcblxuICAgICAgICBpZiAoIWFuY2hvcikge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgbGV0IGFuY2hvckNvbXBvbmVudHM7XG5cbiAgICAgICAgICAgIGlmIChwb3MueSArIG9mZnNldC5ib3R0b20ueSA8IGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbJ3RvcCddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MueSA+IHRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0IC0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFsnYm90dG9tJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvcy54IDwgd2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cy5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy54ID4gdGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aCAtIHdpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMucHVzaCgncmlnaHQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuY2hvckNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IChhbmNob3JDb21wb25lbnRzLmpvaW4oJy0nKTogYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldGVkUG9zID0gcG9zLmFkZChvZmZzZXRbYW5jaG9yXSkucm91bmQoKTtcbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIGAke2FuY2hvclRyYW5zbGF0ZVthbmNob3JdfSB0cmFuc2xhdGUoJHtvZmZzZXRlZFBvcy54fXB4LCR7b2Zmc2V0ZWRQb3MueX1weClgKTtcbiAgICAgICAgYXBwbHlBbmNob3JDbGFzcyh0aGlzLl9jb250YWluZXIsIGFuY2hvciwgJ3BvcHVwJyk7XG4gICAgfVxuXG4gICAgX29uQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQob2Zmc2V0OiA/T2Zmc2V0KSB7XG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU9mZnNldChuZXcgUG9pbnQoMCwgMCkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBpbnB1dCBzcGVjaWZpZXMgYSByYWRpdXMgZnJvbSB3aGljaCB0byBjYWxjdWxhdGUgb2Zmc2V0cyBhdCBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvcm5lck9mZnNldCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KDAuNSAqIE1hdGgucG93KG9mZnNldCwgMikpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBuZXcgUG9pbnQoMCwgMCksXG4gICAgICAgICAgICAndG9wJzogbmV3IFBvaW50KDAsIG9mZnNldCksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBuZXcgUG9pbnQoY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IG5ldyBQb2ludCgwLCAtb2Zmc2V0KSxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCAtY29ybmVyT2Zmc2V0KSxcbiAgICAgICAgICAgICdsZWZ0JzogbmV3IFBvaW50KG9mZnNldCwgMCksXG4gICAgICAgICAgICAncmlnaHQnOiBuZXcgUG9pbnQoLW9mZnNldCwgMClcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSBpZiAob2Zmc2V0IGluc3RhbmNlb2YgUG9pbnQgfHwgQXJyYXkuaXNBcnJheShvZmZzZXQpKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHNpbmdsZSBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wJzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1sZWZ0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20nOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2xlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAncmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXRcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhbiBvZmZzZXQgcGVyIHBvc2l0aW9uXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY2VudGVyJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2NlbnRlciddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wJzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20nXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbS1sZWZ0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLXJpZ2h0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdsZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2xlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3JpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3JpZ2h0J10gfHwgWzAsIDBdKVxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgcHJpdmF0ZSBuYW1lc3BhY2UgZm9yIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgd2lsbCBnZXQgYXV0b21hdGljYWxseSBzdHJpcHBlZFxuICogb3V0IGluIHByb2R1Y3Rpb24gYnVpbGRzLlxuICovXG5leHBvcnQgY29uc3QgRGVidWcgPSB7XG4gICAgZXh0ZW5kKGRlc3Q6IE9iamVjdCwgLi4uc291cmNlczogQXJyYXk8P09iamVjdD4pOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKGRlc3QsIC4uLnNvdXJjZXMpO1xuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc3VwcG9ydGVkIGZyb20gJ0BtYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZCc7XG5cbmltcG9ydCB7dmVyc2lvbn0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCBNYXAgZnJvbSAnLi91aS9tYXAnO1xuaW1wb3J0IE5hdmlnYXRpb25Db250cm9sIGZyb20gJy4vdWkvY29udHJvbC9uYXZpZ2F0aW9uX2NvbnRyb2wnO1xuaW1wb3J0IEdlb2xvY2F0ZUNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sJztcbmltcG9ydCBBdHRyaWJ1dGlvbkNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wnO1xuaW1wb3J0IFNjYWxlQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbCc7XG5pbXBvcnQgRnVsbHNjcmVlbkNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbCc7XG5pbXBvcnQgUG9wdXAgZnJvbSAnLi91aS9wb3B1cCc7XG5pbXBvcnQgTWFya2VyIGZyb20gJy4vdWkvbWFya2VyJztcbmltcG9ydCBTdHlsZSBmcm9tICcuL3N0eWxlL3N0eWxlJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQge0V2ZW50ZWR9IGZyb20gJy4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZyc7XG5pbXBvcnQge0RlYnVnfSBmcm9tICcuL3V0aWwvZGVidWcnO1xuaW1wb3J0IHtpc1NhZmFyaX0gZnJvbSAnLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtzZXRSVExUZXh0UGx1Z2luLCBnZXRSVExUZXh0UGx1Z2luU3RhdHVzfSBmcm9tICcuL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IFdvcmtlclBvb2wgZnJvbSAnLi91dGlsL3dvcmtlcl9wb29sJztcbmltcG9ydCB7Y2xlYXJUaWxlQ2FjaGV9IGZyb20gJy4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuaW1wb3J0IHtQZXJmb3JtYW5jZVV0aWxzfSBmcm9tICcuL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICB2ZXJzaW9uLFxuICAgIHN1cHBvcnRlZCxcbiAgICBzZXRSVExUZXh0UGx1Z2luLFxuICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMsXG4gICAgTWFwLFxuICAgIE5hdmlnYXRpb25Db250cm9sLFxuICAgIEdlb2xvY2F0ZUNvbnRyb2wsXG4gICAgQXR0cmlidXRpb25Db250cm9sLFxuICAgIFNjYWxlQ29udHJvbCxcbiAgICBGdWxsc2NyZWVuQ29udHJvbCxcbiAgICBQb3B1cCxcbiAgICBNYXJrZXIsXG4gICAgU3R5bGUsXG4gICAgTG5nTGF0LFxuICAgIExuZ0xhdEJvdW5kcyxcbiAgICBQb2ludCxcbiAgICBNZXJjYXRvckNvb3JkaW5hdGUsXG4gICAgRXZlbnRlZCxcbiAgICBjb25maWcsXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXAncyBbYWNjZXNzIHRva2VuXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8pLlxuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBhY2Nlc3NUb2tlblxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wuYWNjZXNzVG9rZW4gPSBteUFjY2Vzc1Rva2VuO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGVzLylcbiAgICAgKi9cbiAgICBnZXQgYWNjZXNzVG9rZW4oKTogP3N0cmluZyB7XG4gICAgICAgIHJldHVybiBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgIH0sXG5cbiAgICBzZXQgYWNjZXNzVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25maWcuQUNDRVNTX1RPS0VOID0gdG9rZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG1hcCdzIGRlZmF1bHQgQVBJIFVSTCBmb3IgcmVxdWVzdGluZyB0aWxlcywgc3R5bGVzLCBzcHJpdGVzLCBhbmQgZ2x5cGhzXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IGJhc2VBcGlVcmxcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLmJhc2VBcGlVcmwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG4gICAgICovXG4gICAgZ2V0IGJhc2VBcGlVcmwoKTogP3N0cmluZyB7XG4gICAgICAgIHJldHVybiBjb25maWcuQVBJX1VSTDtcbiAgICB9LFxuXG4gICAgc2V0IGJhc2VBcGlVcmwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uZmlnLkFQSV9VUkwgPSB1cmw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiB3ZWIgd29ya2VycyBpbnN0YW50aWF0ZWQgb24gYSBwYWdlIHdpdGggR0wgSlMgbWFwcy5cbiAgICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gaGFsZiB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcyAoY2FwcGVkIGF0IDYpLlxuICAgICAqIE1ha2Ugc3VyZSB0byBzZXQgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgY3JlYXRpbmcgYW55IG1hcCBpbnN0YW5jZXMgZm9yIGl0IHRvIGhhdmUgZWZmZWN0LlxuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSB3b3JrZXJDb3VudFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wud29ya2VyQ291bnQgPSAyO1xuICAgICAqL1xuICAgIGdldCB3b3JrZXJDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gV29ya2VyUG9vbC53b3JrZXJDb3VudDtcbiAgICB9LFxuXG4gICAgc2V0IHdvcmtlckNvdW50KGNvdW50OiBudW1iZXIpIHtcbiAgICAgICAgV29ya2VyUG9vbC53b3JrZXJDb3VudCA9IGNvdW50O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgKHJhc3RlciB0aWxlcywgc3ByaXRlcywgaWNvbnMpIHRvIGxvYWQgaW4gcGFyYWxsZWwsXG4gICAgICogd2hpY2ggYWZmZWN0cyBwZXJmb3JtYW5jZSBpbiByYXN0ZXItaGVhdnkgbWFwcy4gMTYgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5tYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMgPSAxMDtcbiAgICAgKi9cbiAgICBnZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTO1xuICAgIH0sXG5cbiAgICBzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKG51bVJlcXVlc3RzOiBudW1iZXIpIHtcbiAgICAgICAgY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUyA9IG51bVJlcXVlc3RzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYnJvd3NlciBzdG9yYWdlIHVzZWQgYnkgdGhpcyBsaWJyYXJ5LiBVc2luZyB0aGlzIG1ldGhvZCBmbHVzaGVzIHRoZSBNYXBib3ggdGlsZVxuICAgICAqIGNhY2hlIHRoYXQgaXMgbWFuYWdlZCBieSB0aGlzIGxpYnJhcnkuIFRpbGVzIG1heSBzdGlsbCBiZSBjYWNoZWQgYnkgdGhlIGJyb3dzZXJcbiAgICAgKiBpbiBzb21lIGNhc2VzLlxuICAgICAqXG4gICAgICogVGhpcyBBUEkgaXMgc3VwcG9ydGVkIG9uIGJyb3dzZXJzIHdoZXJlIHRoZSBbYENhY2hlYCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DYWNoZSlcbiAgICAgKiBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQuIFRoaXMgaW5jbHVkZXMgYWxsIG1ham9yIGJyb3dzZXJzIHdoZW4gcGFnZXMgYXJlIHNlcnZlZCBvdmVyXG4gICAgICogYGh0dHBzOi8vYCwgZXhjZXB0IEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIE1vYmlsZS5cbiAgICAgKlxuICAgICAqIFdoZW4gY2FsbGVkIGluIHVuc3VwcG9ydGVkIGJyb3dzZXJzIG9yIGVudmlyb25tZW50cyAocHJpdmF0ZSBvciBpbmNvZ25pdG8gbW9kZSksIHRoZVxuICAgICAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXJyb3IgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb24gY2xlYXJTdG9yYWdlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgY2xlYXJTdG9yYWdlKGNhbGxiYWNrPzogKGVycjogP0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgICAgIGNsZWFyVGlsZUNhY2hlKGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgd29ya2VyVXJsOiAnJ1xufTtcblxuLy9UaGlzIGdldHMgYXV0b21hdGljYWxseSBzdHJpcHBlZCBvdXQgaW4gcHJvZHVjdGlvbiBidWlsZHMuXG5EZWJ1Zy5leHRlbmQoZXhwb3J0ZWQsIHtpc1NhZmFyaSwgZ2V0UGVyZm9ybWFuY2VNZXRyaWNzOiBQZXJmb3JtYW5jZVV0aWxzLmdldFBlcmZvcm1hbmNlTWV0cmljc30pO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIE1hcGJveCBHTCBKUyBpbiB1c2UgYXMgc3BlY2lmaWVkIGluIGBwYWNrYWdlLmpzb25gLFxuICogYENIQU5HRUxPRy5tZGAsIGFuZCB0aGUgR2l0SHViIHJlbGVhc2UuXG4gKlxuICogQHZhciB7c3RyaW5nfSB2ZXJzaW9uXG4gKi9cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGJyb3dzZXIgW3N1cHBvcnRzIE1hcGJveCBHTCBKU10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL21hcGJveC1icm93c2VyLXN1cHBvcnQvI21hcGJveC1nbC1qcykuXG4gKlxuICogQGZ1bmN0aW9uIHN1cHBvcnRlZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWZhbHNlXSBJZiBgdHJ1ZWAsXG4gKiAgIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3ggR0wgSlMgd291bGRcbiAqICAgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW4gZXhwZWN0ZWQgKGUuZy4gYSBzb2Z0d2FyZSBXZWJHTCByZW5kZXJlciB3b3VsZCBiZSB1c2VkKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAZXhhbXBsZVxuICogbWFwYm94Z2wuc3VwcG9ydGVkKCkgLy8gPSB0cnVlXG4gKiBAc2VlIFtDaGVjayBmb3IgYnJvd3NlciBzdXBwb3J0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NoZWNrLWZvci1zdXBwb3J0LylcbiAqL1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCdzIFtSVEwgdGV4dCBwbHVnaW5dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvI21hcGJveC1nbC1ydGwtdGV4dCkuXG4gKiBOZWNlc3NhcnkgZm9yIHN1cHBvcnRpbmcgdGhlIEFyYWJpYyBhbmQgSGVicmV3IGxhbmd1YWdlcywgd2hpY2ggYXJlIHdyaXR0ZW4gcmlnaHQtdG8tbGVmdC4gTWFwYm94IFN0dWRpbyBsb2FkcyB0aGlzIHBsdWdpbiBieSBkZWZhdWx0LlxuICpcbiAqIEBmdW5jdGlvbiBzZXRSVExUZXh0UGx1Z2luXG4gKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luVVJMIFVSTCBwb2ludGluZyB0byB0aGUgTWFwYm94IFJUTCB0ZXh0IHBsdWdpbiBzb3VyY2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgd2l0aCBhbiBlcnJvciBhcmd1bWVudCBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF6eSBJZiBzZXQgdG8gYHRydWVgLCBtYXBib3hnbCB3aWxsIGRlZmVyIGxvYWRpbmcgdGhlIHBsdWdpbiB1bnRpbCBydGwgdGV4dCBpcyBlbmNvdW50ZXJlZCxcbiAqICAgIHJ0bCB0ZXh0IHdpbGwgdGhlbiBiZSByZW5kZXJlZCBvbmx5IGFmdGVyIHRoZSBwbHVnaW4gZmluaXNoZXMgbG9hZGluZy5cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zZXRSVExUZXh0UGx1Z2luKCdodHRwczovL2FwaS5tYXBib3guY29tL21hcGJveC1nbC1qcy9wbHVnaW5zL21hcGJveC1nbC1ydGwtdGV4dC92MC4yLjAvbWFwYm94LWdsLXJ0bC10ZXh0LmpzJyk7XG4gKiBAc2VlIFtBZGQgc3VwcG9ydCBmb3IgcmlnaHQtdG8tbGVmdCBzY3JpcHRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21hcGJveC1nbC1ydGwtdGV4dC8pXG4gKi9cblxuLyoqXG4gICogR2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KSBzdGF0dXMuXG4gICogVGhlIHN0YXR1cyBjYW4gYmUgYHVuYXZhaWxhYmxlYCAoaS5lLiBub3QgcmVxdWVzdGVkIG9yIHJlbW92ZWQpLCBgbG9hZGluZ2AsIGBsb2FkZWRgIG9yIGBlcnJvcmAuXG4gICogSWYgdGhlIHN0YXR1cyBpcyBgbG9hZGVkYCBhbmQgdGhlIHBsdWdpbiBpcyByZXF1ZXN0ZWQgYWdhaW4sIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAqXG4gICogQGZ1bmN0aW9uIGdldFJUTFRleHRQbHVnaW5TdGF0dXNcbiAgKiBAZXhhbXBsZVxuICAqIGNvbnN0IHBsdWdpblN0YXR1cyA9IG1hcGJveGdsLmdldFJUTFRleHRQbHVnaW5TdGF0dXMoKTtcbiAgKi9cblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZWQ7XG5cbi8vIGNhbmFyeSBhc3NlcnQ6IHVzZWQgdG8gY29uZmlybSB0aGF0IGFzc2VydHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBwcm9kdWN0aW9uIGJ1aWxkXG5hc3NlcnQodHJ1ZSwgJ2NhbmFyeSBhc3NlcnQnKTtcbiIsIi8vXG4vLyBPdXIgY3VzdG9tIGludHJvIHByb3ZpZGVzIGEgc3BlY2lhbGl6ZWQgXCJkZWZpbmUoKVwiIGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhlXG4vLyBBTUQgbW9kdWxlcyBiZWxvdywgdGhhdCBzZXRzIHVwIHRoZSB3b3JrZXIgYmxvYiBVUkwgYW5kIHRoZW4gZXhlY3V0ZXMgdGhlXG4vLyBtYWluIG1vZHVsZSwgc3RvcmluZyBpdHMgZXhwb3J0ZWQgdmFsdWUgYXMgJ21hcGJveGdsJ1xuXG4vLyBUaGUgdGhyZWUgXCJjaHVua3NcIiBpbXBvcnRlZCBoZXJlIGFyZSBwcm9kdWNlZCBieSBhIGZpcnN0IFJvbGx1cCBwYXNzLFxuLy8gd2hpY2ggb3V0cHV0cyB0aGVtIGFzIEFNRCBtb2R1bGVzLlxuXG4vLyBTaGFyZWQgZGVwZW5kZW5jaWVzLCBpLmUuOlxuLypcbmRlZmluZShbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAvLyBDb2RlIGZvciBhbGwgY29tbW9uIGRlcGVuZGVuY2llc1xuICAgIC8vIEVhY2ggbW9kdWxlJ3MgZXhwb3J0cyBhcmUgYXR0YWNoZWQgYXR0YWNoZWQgdG8gJ2V4cG9ydHMnICh3aXRoXG4gICAgLy8gbmFtZXMgcmV3cml0dGVuIHRvIGF2b2lkIGNvbGxpc2lvbnMsIGV0Yy4pXG59KVxuKi9cbmltcG9ydCAnLi9idWlsZC9tYXBib3hnbC9zaGFyZWQnO1xuXG4vLyBXb3JrZXIgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzLCBpLmUuOlxuLypcbmRlZmluZShbJy4vc2hhcmVkLmpzJ10sIGZ1bmN0aW9uIChfX3NoYXJlZF9fanMpIHtcbiAgICAvLyAgQ29kZSBmb3Igd29ya2VyIHNjcmlwdCBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbn0pO1xuKi9cbi8vIFdoZW4gdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBvdXIgY3VzdG9tIGRlZmluZSgpIGFib3ZlLFxuLy8gaXQgZ2V0cyBzdHJpbmdpZmllZCwgdG9nZXRoZXIgd2l0aCB0aGUgc2hhcmVkIHdyYXBwZXIgKHVzaW5nXG4vLyBGdW5jdGlvbi50b1N0cmluZygpKSwgYW5kIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIGNvZGUgaXMgbWFkZSBpbnRvIGFcbi8vIEJsb2IgVVJMIHRoYXQgZ2V0cyB1c2VkIGJ5IHRoZSBtYWluIG1vZHVsZSB0byBjcmVhdGUgdGhlIHdlYiB3b3JrZXJzLlxuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3dvcmtlcic7XG5cbi8vIE1haW4gbW9kdWxlIGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llc1xuLypcbmRlZmluZShbJy4vc2hhcmVkLmpzJ10sIGZ1bmN0aW9uIChfX3NoYXJlZF9fanMpIHtcbiAgICAvLyAgQ29kZSBmb3IgbWFpbiBHTCBKUyBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzLlxuICAgIC8vICBFeHBlY3RzIHRoZSBvdXRwdXQgb2YgJ3NoYXJlZCcgbW9kdWxlIHRvIGJlIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCxcbiAgICAvLyAgc2luY2UgYWxsIHJlZmVyZW5jZXMgdG8gY29tbW9uIGRlcHMgbG9vayBsaWtlLCBlLmcuLFxuICAgIC8vICBfX3NoYXJlZF9fanMuc2hhcGVUZXh0KCkuXG4gICAgLy9cbiAgICAvLyAgUmV0dXJucyB0aGUgYWN0dWFsIG1hcGJveGdsIChpLmUuIHNyYy9pbmRleC5qcylcbn0pO1xuKi9cbmltcG9ydCAnLi9idWlsZC9tYXBib3hnbC9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1hcGJveGdsO1xuIl0sIm5hbWVzIjpbImFyZ3VtZW50cyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwibGV0IiwiY29uc3QiLCJVbml0QmV6aWVyIiwid2luZG93IiwiZXhwb3J0ZWQiLCJicm93c2VyIiwid2VicFN1cHBvcnRlZCIsInNka1ZlcnNpb24iLCJ0aGlzIiwic3VwZXIiLCJhc3NlcnQiLCJsaXN0ZW5lciIsInBhcnNlQ1NTQ29sb3IiLCJ0b1N0cmluZyIsInR5cGUiLCJ0eXBlcyIsImFyZyIsInZhbHVlVG9TdHJpbmciLCJpIiwiZXhwZWN0ZWQiLCJwYXJzZWQiLCJlcnJvciIsImFycmF5IiwiaW50ZXJwb2xhdGVOdW1iZXIiLCJvdXRwdXRJbmRleCIsImlzQ29tcGFyYWJsZVR5cGUiLCJsdCIsInJ0IiwidHlwZVRvU3RyaW5nIiwiZXh0ZW5kIiwic3RvcCIsImludGVycG9sYXRpb25UeXBlIiwiZGVmaW5pdGlvbnMiLCJpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudCIsImlzRmVhdHVyZUNvbnN0YW50IiwiaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudCIsImlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50IiwidmFsaWRhdGVTcGVjIiwiZWxlbWVudFNwZWNLZXkiLCJsYXRlc3RTdHlsZVNwZWMiLCJ2YWxpZGF0ZVNvdXJjZSIsInZhbGlkYXRlTGlnaHQiLCJ2YWxpZGF0ZUZpbHRlciIsInZhbGlkYXRlUGFpbnRQcm9wZXJ0eSIsInZhbGlkYXRlTGF5b3V0UHJvcGVydHkiLCJHcmlkIiwibmFtZSIsImlzQ2hhciIsInJ0bFRleHRQbHVnaW4iLCJwcm9wZXJ0eSIsInN0eWxlU3BlYyIsIlBvaW50IiwibGF5b3V0IiwibXVybXVyMyIsIm11cm11cjIiLCJTdHJ1Y3RBcnJheUxheW91dCIsIlBhdHRlcm5MYXlvdXRBcnJheSIsIkNpcmNsZUxheW91dEFycmF5IiwiVHJpYW5nbGVJbmRleEFycmF5IiwibGF5b3V0QXR0cmlidXRlcyIsImJ1Y2tldEZlYXR1cmUiLCJmZWF0dXJlIiwiaW5kZXgiLCJnZW9tZXRyeSIsInNvdXJjZUxheWVySW5kZXgiLCJwYWludCIsImdsTWF0cml4LkFSUkFZX1RZUEUiLCJjbG9uZSIsImVxdWFscyIsImdsTWF0cml4LkVQU0lMT04iLCJjcmVhdGUiLCJjb3B5IiwiaWRlbnRpdHkiLCJmcm9tVmFsdWVzIiwic2V0IiwiaW52ZXJ0IiwiZGV0ZXJtaW5hbnQiLCJtdWx0aXBseSIsInJvdGF0ZSIsInNjYWxlIiwidHJhbnNsYXRlIiwiZnJvbVJvdGF0aW9uIiwiZnJvbVNjYWxpbmciLCJzdHIiLCJmcm9iIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseVNjYWxhciIsIm11bHRpcGx5U2NhbGFyQW5kQWRkIiwiZXhhY3RFcXVhbHMiLCJtdWwiLCJzdWIiLCJ0cmFuc3Bvc2UiLCJhZGpvaW50IiwiZnJvbVRyYW5zbGF0aW9uIiwiZnJvbVF1YXQiLCJiZXppZXIiLCJnbE1hdHJpeC5SQU5ET00iLCJyb3RhdGVYIiwicm90YXRlWSIsInJvdGF0ZVoiLCJkaXZpZGUiLCJjZWlsIiwiZmxvb3IiLCJtaW4iLCJtYXgiLCJyb3VuZCIsInNjYWxlQW5kQWRkIiwiZGlzdGFuY2UiLCJzcXVhcmVkRGlzdGFuY2UiLCJsZW5ndGgiLCJzcXVhcmVkTGVuZ3RoIiwibmVnYXRlIiwiaW52ZXJzZSIsIm5vcm1hbGl6ZSIsImRvdCIsImNyb3NzIiwibGVycCIsInJhbmRvbSIsInRyYW5zZm9ybU1hdDQiLCJ0cmFuc2Zvcm1RdWF0IiwiemVybyIsImRpdiIsImRpc3QiLCJzcXJEaXN0IiwibGVuIiwic3FyTGVuIiwiZm9yRWFjaCIsInZlYzQuY2xvbmUiLCJ2ZWM0LmZyb21WYWx1ZXMiLCJ2ZWM0LmNvcHkiLCJ2ZWM0LnNldCIsInZlYzQuYWRkIiwidmVjNC5zY2FsZSIsInZlYzQuZG90IiwidmVjNC5sZXJwIiwidmVjNC5sZW5ndGgiLCJ2ZWM0LnNxdWFyZWRMZW5ndGgiLCJ2ZWM0Lm5vcm1hbGl6ZSIsInZlYzQuZXhhY3RFcXVhbHMiLCJ2ZWM0LmVxdWFscyIsInZlYzMuY3JlYXRlIiwidmVjMy5mcm9tVmFsdWVzIiwidmVjMy5kb3QiLCJ2ZWMzLmNyb3NzIiwidmVjMy5sZW4iLCJ2ZWMzLm5vcm1hbGl6ZSIsIm1hdDMuY3JlYXRlIiwiZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iLCJmcm9tTWF0NCIsInF1YXQuY3JlYXRlIiwibWF0NC5nZXRSb3RhdGlvbiIsIm1hdDQuZ2V0VHJhbnNsYXRpb24iLCJxdWF0LmNvcHkiLCJnZXRUcmFuc2xhdGlvbiIsInF1YXQucm90YXRlWCIsInF1YXQucm90YXRlWSIsInF1YXQucm90YXRlWiIsInF1YXQuZG90IiwiY29uanVnYXRlIiwicXVhdC5sZW5ndGgiLCJxdWF0LnNxdWFyZWRMZW5ndGgiLCJ0cmFuc2Zvcm1NYXQzIiwiYW5nbGUiLCJ2ZWM0LnRyYW5zZm9ybU1hdDQiLCJwcm9wZXJ0aWVzIiwic3dhcCIsIkZpbGxMYXlvdXRBcnJheSIsIkxpbmVJbmRleEFycmF5IiwicmluZyIsImVhcmN1dCIsImNsYXNzaWZ5UmluZ3MiLCJzaWduZWRBcmVhIiwiVmVjdG9yVGlsZUZlYXR1cmUiLCJWZWN0b3JUaWxlTGF5ZXIiLCJyZXF1aXJlJCQyIiwibXZ0IiwiRUFSQ1VUX01BWF9SSU5HUyIsIkZpbGxFeHRydXNpb25MYXlvdXRBcnJheSIsInAiLCJwcm9qZWN0UXVlcnlHZW9tZXRyeSIsInZlY3RvclRpbGVGZWF0dXJlVHlwZXMiLCJMaW5lTGF5b3V0QXJyYXkiLCJvZmZzZXQiLCJQcm90b2J1ZiIsImJveCIsImlkIiwic3JjIiwiYmluIiwidyIsImgiLCJsaW5lIiwidGFnZ2VkTGluZSIsImFsaWduIiwiaW50ZXJwb2xhdGUiLCJib3JkZXIiLCJkZWZhdWx0Q29tcGFyZSIsIlF1ZXVlIiwibWluWm9vbSIsIm1heFpvb20iLCJzaGFwaW5nIiwiYW5jaG9yIiwiYWRkVmVydGV4IiwiU3ltYm9sTGF5b3V0QXJyYXkiLCJTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkiLCJTeW1ib2xPcGFjaXR5QXJyYXkiLCJ1cGxvYWQiLCJDb2xsaXNpb25WZXJ0ZXhBcnJheSIsImdsb2JhbFJUTFRleHRQbHVnaW4iLCJ0cmFuc2Zvcm1UZXh0IiwicmVzb2x2ZWRUb2tlbnMiLCJpbmRleEFycmF5IiwiQ29sbGlzaW9uQm94TGF5b3V0QXJyYXkiLCJDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSIsImsiLCJjaXJjbGUiLCJoZWF0bWFwIiwiaGlsbHNoYWRlIiwiZmlsbCIsImZpbGxFeHRydXNpb24iLCJzeW1ib2wiLCJiYWNrZ3JvdW5kIiwicmFzdGVyIiwiSW1hZ2VEYXRhIiwiSW1hZ2VCaXRtYXAiLCJjYWxsYmFjayIsImRlc2VyaWFsaXplIiwicHJvdG90eXBlQWNjZXNzb3JzIiwic291cmNlTGF5ZXIiLCJsYXllclN0YXRlcyIsInZ0IiwiZmVhdHVyZUZpbHRlciIsIkdlb0pTT05GZWF0dXJlIiwiZGVzZXJpYWxpemVCdWNrZXQiLCJidWNrZXQiLCJyZWZQcm9wZXJ0aWVzIiwiY3JlYXRlU3R5bGVMYXllciIsInZhbHVlcyIsImxheWVyQ29uZmlncyIsImxheWVyIiwicG90cGFjayIsIkFscGhhSW1hZ2UiLCJzdGFjayIsImdseXBocyIsInJlZ2lzdGVyIiwiT3ZlcnNjYWxlZFRpbGVJRCIsIkNvbGxpc2lvbkJveEFycmF5IiwiRGljdGlvbmFyeUNvZGVyIiwiRmVhdHVyZUluZGV4Iiwid2Fybk9uY2UiLCJtYXBPYmplY3QiLCJJbWFnZUF0bGFzIiwiU3ltYm9sQnVja2V0IiwicGVyZm9ybVN5bWJvbExheW91dCIsIkxpbmVCdWNrZXQiLCJGaWxsQnVja2V0IiwiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsIkV2YWx1YXRpb25QYXJhbWV0ZXJzIiwiZ2V0QXJyYXlCdWZmZXIiLCJSZXF1ZXN0UGVyZm9ybWFuY2UiLCJERU1EYXRhIiwiUkdCQUltYWdlIiwiRVhURU5UIiwicG9pbnQiLCJHZW9KU09OV3JhcHBlciIsIkZlYXR1cmVXcmFwcGVyIiwiUGJmIiwic29ydCIsInJld2luZCIsInRyYW5zZm9ybSIsInZ0cGJmIiwiZ2V0SlNPTiIsImNyZWF0ZUV4cHJlc3Npb24iLCJBY3RvciIsImVuZm9yY2VDYWNoZVNpemVMaW1pdCIsInNlbGYiLCJvcHRpb25zIiwiUmVzb3VyY2VUeXBlIiwiZ2V0SW1hZ2UiLCJFcnJvckV2ZW50IiwiRXZlbnQiLCJJbWFnZVBvc2l0aW9uIiwiVGV4dHVyZSIsIkV2ZW50ZWQiLCJwYXJzZUdseXBoUEJGIiwiYXN5bmNBbGwiLCJUaW55U0RGIiwic3BoZXJpY2FsVG9DYXJ0ZXNpYW4iLCJQcm9wZXJ0aWVzIiwiRGF0YUNvbnN0YW50UHJvcGVydHkiLCJUcmFuc2l0aW9uYWJsZSIsImVuZHNXaXRoIiwiZW1pdFZhbGlkYXRpb25FcnJvcnMiLCJ2YWxpZGF0ZVN0eWxlIiwidW5pcXVlSWQiLCJwaWNrIiwiTG5nTGF0Qm91bmRzIiwibWVyY2F0b3JYZnJvbUxuZyIsIm1lcmNhdG9yWWZyb21MYXQiLCJwb3N0VHVybnN0aWxlRXZlbnQiLCJwb3N0TWFwTG9hZEV2ZW50IiwiY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQiLCJvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJjcmVhdGVMYXlvdXQiLCJNZXJjYXRvckNvb3JkaW5hdGUiLCJSYXN0ZXJCb3VuZHNBcnJheSIsIlNlZ21lbnRWZWN0b3IiLCJDYW5vbmljYWxUaWxlSUQiLCJnZXRWaWRlbyIsIlZhbGlkYXRpb25FcnJvciIsInZlY3RvciIsInJhc3RlckRlbSIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIiwiY2FudmFzIiwiYmluZEFsbCIsIm1hdDQuaWRlbnRpdHkiLCJtYXQ0LnRyYW5zbGF0ZSIsIm1hdDQuc2NhbGUiLCJtYXQ0Lm11bHRpcGx5IiwiQ29sb3IiLCJBTFdBWVMiLCJkZWVwRXF1YWwiLCJjcmVhdGVTb3VyY2UiLCJTb3VyY2VGZWF0dXJlU3RhdGUiLCJ0aWxlIiwia2V5c0RpZmZlcmVuY2UiLCJ0aWxlSUQiLCJUaWxlIiwibWFwYm94Z2wiLCJsYXRlc3QiLCJpc0VxdWFsIiwibWF0NC5jcmVhdGUiLCJtYXQ0LnJvdGF0ZVoiLCJtYXQ0LmNsb25lIiwic3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tIiwiV3JpdGluZ01vZGUiLCJzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUiLCJvcmllbnRhdGlvbkNoYW5nZSIsImFkZER5bmFtaWNBdHRyaWJ1dGVzIiwicHJvamVjdGlvbi5wcm9qZWN0IiwicHJvamVjdGlvbi5wbGFjZUZpcnN0QW5kTGFzdEdseXBoIiwiaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uIiwicHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQiLCJnZXRBbmNob3JBbGlnbm1lbnQiLCJldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0IiwicHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4IiwicGxhY2VIb3Jpem9udGFsIiwicGxhY2VWZXJ0aWNhbCIsImdldEFuY2hvckp1c3RpZmljYXRpb24iLCJjcm9zc1RpbGVJRCIsInByZXZPcGFjaXR5IiwicGFja2VkT3BhY2l0eSIsImhvcml6b250YWxPcGFjaXR5IiwidmVydGljYWxPcGFjaXR5IiwicyIsInN5bWJvbEluc3RhbmNlIiwiX2VtaXRWYWxpZGF0aW9uRXJyb3JzIiwiZGlmZk9wZXJhdGlvbnMiLCJnZXRXb3JrZXJQb29sIiwiWm9vbUhpc3RvcnkiLCJnZXRSZWZlcnJlciIsInRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQiLCJpc01hcGJveFVSTCIsImRlcmVmIiwidmFsaWRhdGVDdXN0b21TdHlsZUxheWVyIiwiZmlsdGVyT2JqZWN0IiwibCIsImxheWVySWQiLCJzb3VyY2VSZXN1bHQiLCJsYXllckZlYXR1cmVzIiwiZmVhdHVyZVdyYXBwZXIiLCJydGxUZXh0UGx1Z2luRXZlbnRlZCIsImxheWVySUQiLCJzdHlsZUxheWVyIiwibWFrZVJlcXVlc3QiLCJnZXRTb3VyY2VUeXBlIiwic2V0U291cmNlVHlwZSIsInJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UiLCJ2ZXJ0ZXhCdWZmZXIiLCJQcm9ncmFtIiwiVW5pZm9ybU1hdHJpeDRmIiwiVW5pZm9ybTNmIiwiVW5pZm9ybTFmIiwiVW5pZm9ybTFpIiwiVW5pZm9ybTJmIiwiVW5pZm9ybTRmIiwibWF0My5mcm9tUm90YXRpb24iLCJ2ZWMzLnRyYW5zZm9ybU1hdDMiLCJVbmlmb3JtQ29sb3IiLCJtYXQ0Lm9ydGhvIiwic3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4Iiwic3ltYm9sU2l6ZSIsInN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyIsInN5bWJvbFByb2plY3Rpb24ucHJvamVjdCIsIk9ORV9FTSIsInNoaWZ0IiwiZyIsInN5bWJvbFByb2plY3Rpb24uZ2V0R2xDb29yZE1hdHJpeCIsInN5bWJvbFByb2plY3Rpb24udXBkYXRlTGluZUxhYmVscyIsInN0YXRlIiwidW5pZm9ybVZhbHVlcyIsInByb2dyYW0iLCJsYXlvdXRWZXJ0ZXhCdWZmZXIiLCJpbmRleEJ1ZmZlciIsInByb2dyYW1Db25maWd1cmF0aW9uIiwiZGVwdGhNb2RlIiwiY2xhbXAiLCJQb3NBcnJheSIsImRyYXciLCJkZWJ1ZyIsImN1c3RvbSIsIkxpbmVTdHJpcEluZGV4QXJyYXkiLCJzb3VyY2VDYWNoZSIsImNvb3JkcyIsInZlYzMuc3ViIiwidmVjMy5zY2FsZSIsInZlYzMuYWRkIiwidmVjMy5jbG9uZSIsIkxuZ0xhdCIsIndyYXAiLCJtYXQyLmNyZWF0ZSIsIm1hdDIucm90YXRlIiwiVW53cmFwcGVkVGlsZUlEIiwidmVjMi5zcXJMZW4iLCJtYXQ0LnBlcnNwZWN0aXZlIiwibWF0NC5yb3RhdGVYIiwibWVyY2F0b3JaZnJvbUFsdGl0dWRlIiwibWF0NC5pbnZlcnQiLCJfZWFzZSIsImluZXJ0aWFMaW5lYXJpdHkiLCJpbmVydGlhRWFzaW5nIiwiaW5lcnRpYURlY2VsZXJhdGlvbiIsImluZXJ0aWFNYXhTcGVlZCIsInNjcm9sbFpvb20iLCJib3hab29tIiwiZHJhZ1JvdGF0ZSIsImRyYWdQYW4iLCJrZXlib2FyZCIsImRvdWJsZUNsaWNrWm9vbSIsInRvdWNoWm9vbVJvdGF0ZSIsImRlZmF1bHRFYXNpbmciLCJjb25maWciLCJQZXJmb3JtYW5jZVV0aWxzIiwiUGVyZm9ybWFuY2VNYXJrZXJzIiwiUmVxdWVzdE1hbmFnZXIiLCJtb3VzZWluIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJ3aWR0aCIsImhlaWdodCIsImRhdGEiLCJpc1N1cHBvcnRlZCIsInNldENhY2hlTGltaXRzIiwidmVyc2lvbiIsImRlZmF1bHRPcHRpb25zIiwidGl0bGUiLCJzdXBwb3J0ZWQiLCJzZXRSVExUZXh0UGx1Z2luIiwiZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyIsImNsZWFyVGlsZUNhY2hlIiwiaXNTYWZhcmkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFlBQVksQ0FBQzs7QUFFYixJQUFJLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN6RCxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNyRCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7O0FBRTdELFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRTtDQUN0QixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtFQUN0QyxNQUFNLElBQUksU0FBUyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7RUFDN0U7O0NBRUQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDbkI7O0FBRUQsU0FBUyxlQUFlLEdBQUc7Q0FDMUIsSUFBSTtFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO0dBQ25CLE9BQU8sS0FBSyxDQUFDO0dBQ2I7Ozs7O0VBS0QsSUFBSSxLQUFLLEdBQUcs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QUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7SUFFbEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7SUFFbEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7O0lBRTVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3RELENBQUM7O0FBRUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDNUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLEdB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LEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXJELFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFwRSxVQUFVLE1BQU0sU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7SUFRbkUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXRELEdBQUcsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFyRCxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7O0lBU3hELFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7SUFPeEUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7OztJQVN6RCxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7Ozs7Ozs7O0lB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QUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNmLElB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdB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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25ELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNqRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25ELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQzs7QUFFekQs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RUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUM1RTs7eUNBRUQsNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO1FBQ2pLQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FB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LEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNyRzs7dURBRUQsNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDbE9BLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7RUEzQ2tELGNBNEN0RDs7QUFFRCx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN4RSxRQUFRLENBQUMsMENBQTBDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFXL0YsSUFBTSw4QkFBOEI7Ozs7Ozs7Ozs2Q0FPaEMsMENBQWdCO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDckQ7OzZDQUVELG9DQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDaFZBLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDbEo7OzZDQUVELDRCQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO1FBQ3ZWQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxD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QUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN2RixxQkFBSSw4Q0FBOEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUM3RixxQkFBSSxpREFBaUMsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN4RixxQkFBSSwrQ0FBK0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUM5RixxQkFBSSwrQ0FBK0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN0RixxQkFBSSw2Q0FBNkIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUM1RixxQkFBSSxnREFBZ0MsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN2RixxQkFBSSw4Q0FBOEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUM3RixxQkFBSSx3Q0FBd0IsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUMvRSxxQkFBSSxzQ0FBc0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUNyRixxQkFBSSxnREFBZ0MsRUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRTtJQUN2RixxQkFBSSw4Q0FBOEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRTtJQUM3RixxQkFBSSxzQkFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFFO0lBQzlELHFCQUFJLG9CQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDcEUscUJBQUksb0NBQW9CLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUU7SUFDNUUscUJBQUksa0NBQWtCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDbEYscUJBQUksa0NBQWtCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDM0UscUJBQUksZ0NBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDakYscUJBQUksNENBQTRCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDckYscUJBQUksMENBQTBCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDM0YscUJBQUksMENBQTBCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDbkYscUJBQUksd0NBQXdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDekYscUJBQUksb0NBQW9CLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDN0UscUJBQUksa0NBQWtCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7SUFDbkYscUJBQUksa0NBQWtCLEVBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUU7SUFDM0UscUJBQUksZ0NBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFD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QUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDOztFQUVuRixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ0gsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDcEMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsS0FBSyxVQUFVLENBQUM7RUFDbEYsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM5RTs7Q0FFRCxFQUFFLEdBQUcsQ0FBQyxDQUFDOztDQUVQLFFBQVEsU0FBUztFQUNoQixLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0VBQ25ELEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7RUFDbEQsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7O0VBRXpDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FB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QUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUM3QyxJQUFJLEdBQUcsR0FBRyxJQUFJQSxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7QUFZTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFOzs7RUFHaEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0lBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7R0FDYixNQUFNO0lBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNmOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVkLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7RUFFNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNSLE9BQU8sSUFBSSxDQUFDO0dBQ2I7O0VBRUQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0VBRTlCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEM7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7OztBQVFNLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtFQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0M7Ozs7Ozs7OztBQVNELFNBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbEI7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6RTs7Ozs7Ozs7O0FBU00sU0FBU0UsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN6Vjs7Ozs7Ozs7OztBQVVELFNBQWdCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7O0FBTU0sSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDOzs7Ozs7QUFNMUIsSUFBVyxHQUFHLEdBQUcsUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDclp6QixTQUFnQkMsUUFBTSxHQUFHO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXJDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDWjs7RUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtFQUN2QixJQUFJLEdBQUcsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsVUFBUSxDQUFDLEdBQUcsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsWUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQzdDLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7QUFjTSxTQUFTUSxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztFQUU1QixJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ1IsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3JDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRTtFQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FB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QUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsY0FBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3JCLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BHOzs7Ozs7OztBQVFNLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFEOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsc0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0c7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxD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QztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxPQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7OztBQWdCRCxTQUFnQkUsWUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3RFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkQsU0FBZ0JRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcs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QyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNqQixhQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN2Rzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JGLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU2UsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTYixjQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNyQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3JDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztFQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ1IsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0VBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3JCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQzdJOzs7Ozs7OztBQVFNLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxzQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5Sjs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsd0I7Ozs7OztBQU1NLElBQUlxQixLQUFHLEdBQUdiLFVBQVEsQ0FBQzs7Ozs7O0FBTTFCLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7Ozs7Ozs7Ozs7OztBQzl2QnpCLFNBQWdCaEIsUUFBTSxHQUFHO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRXRDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUNiOztFQUVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7RUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSUQsVUFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJNLFNBQVNFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDekcsSUFBSSxHQUFHLEdBQUcsSUFBSVAsVUFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JNLFNBQVNRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNGLFVBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTs7RUFFaEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDZixNQUFNO0lBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNqQjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDUixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTa0IsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4RyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4RyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNqQixhQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDOUU7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRWhCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkcsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7RUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNuRCxNQUFNO0lBQ0wsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUMvQzs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JELE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCRCxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNYLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ2xCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDbEIsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7RUFFbEIsSUFBSSxHQUFHLEdBQUdULE9BQWdCLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVaLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUVwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FB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R0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRVosSUFBSSxHQUFHLEdBQUdaLE9BQWdCLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUVWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMs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LENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FB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LEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0dBQzVCLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7SUFDckMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0dBQzVCLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0lBQ3RCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztHQUM1QixNQUFNO0lBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0dBQ25COztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkQsU0FBZ0IsNEJBQTRCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztFQUV6RCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCTSxTQUFTLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0VBRWxFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDaEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzFELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMs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Q0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7RUFDaEUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztFQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0VBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxD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QVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtFQUM5RCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7RUFDOUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFF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Q0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixFQUFFLElBQUksR0FBRyxDQUFDO0lBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7R0FDWDs7RUFFRCxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFO01BQ3hCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFO01BQ3hCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDN0IsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztFQUVsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDVixFQUFFLElBQUksR0FBRyxDQUFDO0dBQ1g7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7QUFDRCxDQUFDOzs7Ozs7OztBQVFNLFNBQVNXLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNyUDs7Ozs7Ozs7QUFRTSxTQUFTQyxNQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ25IOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsc0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDalM7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM3MkM7Ozs7OztBQU1NLElBQUlxQixLQUFHLEdBQUdiLFVBQVEsQ0FBQzs7Ozs7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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVCxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRSxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDNUI7Ozs7Ozs7OztBQVNNLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5Qjs7Ozs7Ozs7QUFRTSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5Qjs7Ozs7Ozs7O0FBU00sU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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QUMsQ0FBQztFQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztFQUMzRSxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0VBQ2pDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDO0VBQ3JCLElBQUksQ0FBQyxHQUFHQyxNQUFlLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUMxQyxJQUFJLENBQUMsR0FBR0EsTUFBZSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDbkIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztFQUV2QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7RUFHYixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3JCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3JCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7O0VBRTFCLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDMUIsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDMUIsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQzs7RUFFL0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHLElBQUksRUFBRSxDQUFDO0VBQ1YsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNWLEdBQUcsSUFBSSxFQUFFLENBQUM7O0VBRVYsSUFBSSxJQUFJLENBQUMsQ0FBQztFQUNWLElBQUksSUFBSSxDQUFDLENBQUM7RUFDVixJQUFJLElBQUksQ0FBQyxDQUFDOztFQUVWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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Ozs7Ozs7OztBQVNNLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7QUFZTSxTQUFTRyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVCxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCd0IsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcs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QyxDQUFDO0VBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9COzs7Ozs7OztBQVFNLFNBQVNDLGVBQWEsQ0FBQyxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RDOzs7Ozs7Ozs7QUFTTSxTQUFTQyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDMUI7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FB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LENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWQsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7RUFFbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTdEMsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxD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LEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ25EOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J0QyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCcUIsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV00sU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN2RCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDWHJCLE9BQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ25CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7OztFQUdsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEtBQUss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QzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztFQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztFQUcvQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxJQUFJLEtBQUssQ0FBQzs7RUFFVixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7O0lBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7O0lBRXBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0dBQ2hDLE1BQU07O0lBRUwsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7SUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7R0FDaEQ7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7O0FBWUQsU0FBZ0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QyxJQUFJLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7RUFDdEMsQ0FBQyxJ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QUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtFQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTSxTQUFTTyxZQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUN6RCxJQUFJLEVBQUUsR0FBRyxJQUFJUCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7O0FBZU0sU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDeEUsSUFBSSxFQUFFLEdBQUcsSUFBSUEsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxPQUFPLEVBQUUsQ0FBQztDQUNYOzs7Ozs7Ozs7OztBQVdELFNBQWdCa0YseUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDakQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFH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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLFVBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxTQUFnQkUsS0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxJQUFJLE9BQU8sR0FBRytFLE1BQVMsQ0FBQzs7Ozs7Ozs7QUFReEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLElBQUksT0FBTyxHQUFHQSxNQUFTLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IxRSxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztNQUNoQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDaEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO01BQ2hCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2pELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2xELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQmtCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRHlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaER5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hEeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7O0VBRWxELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR3hGLE9BQWdCLEVBQUU7SUFDcEMsT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUNyQjs7RUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JjLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JSLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7OztBQU1NLElBQUlhLEtBQUcsR0FBR2IsVUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVcxQixTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUN0QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBU2dELFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FD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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3STs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0I0QixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsVUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pCOzs7Ozs7Ozs7QUFTTSxTQUFTQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0Qjs7Ozs7Ozs7QUFRTSxTQUFTQyxRQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN6Qjs7Ozs7Ozs7QUFRTSxTQUFTQyxlQUFhLENBQUMsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEI7Ozs7Ozs7OztBQVNNLFNBQVNDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV4QixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7O0lBRVgsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQzFCOztFQUVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLEtBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxRQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRTtFQUNqQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztFQUNyQixJQUFJLENBQUMsR0FBR3JCLE1BQWUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEMsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQmlFLGVBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7OztBQVlELFNBQWdCM0MsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQnpDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0VBRW5DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNoQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU3FGLE9BQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7RUFFN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFOztJQUVaLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM1Qjs7RUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0VBRTdCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTs7SUFFWixJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0VBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQzs7RUFFL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDO0dBQ1YsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUN4QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7R0FDaEIsTUFBTTtJQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztHQUMxQjtDQUNGOzs7Ozs7OztBQVFNLFNBQVMxQyxNQUFJLENBQUMsR0FBRyxFQUFFO0VBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTdEMsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDM0M7Ozs7Ozs7OztBQVNNLFNBQVNNLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDOzs7Ozs7Ozs7QUFTTSxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0s7Ozs7OztBQU1NLElBQUl3RCxLQUFHLEdBQUdmLFFBQU0sQ0FBQzs7Ozs7O0FBTWpCLElBQUluQixLQUFHLEdBQUdMLFVBQVEsQ0FBQzs7Ozs7O0FBTW5CLElBQUlJLEtBQUcsR0FBR2IsVUFBUSxDQUFDOzs7Ozs7QUFNbkIsSUFBSTZDLEtBQUcsR0FBR3JCLFFBQU0sQ0FBQzs7Ozs7O0FBTWpCLElBQUlzQixNQUFJLEdBQUdmLFVBQVEsQ0FBQzs7Ozs7O0FBTXBCLElBQUlnQixTQUFPLEdBQUdmLGlCQUFlLENBQUM7Ozs7OztBQU1yQyxJQUFXaUIsUUFBTSxHQUFHZixnQkFBYzs7Ozs7Ozs7Ozs7Ozs7QUFjbEMsSUFBV2dCLFNBQU8sR0FBRyxZQUFZO0VBQy9CLElBQUksR0FBRyxHQUFHekQsUUFBTSxFQUFFLENBQUM7RUFDbkIsT0FBTyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0lBQ2xELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFVCxJQUFJLENBQUMsTUFBTSxFQUFFO01BQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNaOztJQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7TUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7O0lBRUQsSUFBSSxLQUFLLEVBQUU7TUFDVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakQsTUFBTTtNQUNMLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ2Q7O0lBRUQsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRTtNQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbEIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25COztJQUVELE9BQU8sQ0FBQyxDQUFDO0dBQ1YsQ0FBQztDQUNILEVBQUU7Ozs7Ozs7Ozs7QUM5bUJILElBQU0sZ0JBQWdCO0lBUWxCLHlCQUFXLENBQUMsS0FBSyxzQkFBc0I7UUFDbkM3RCxlQUFLLE9BQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzs7Ozs4REFDNUI7OytCQUVELHNDQUFhLFVBQVUsdUJBQXVCO1FBQzFDLE9BQU8sSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7TUFDdkM7OytCQUVELG9DQUFZLE1BQU0sa0JBQWtCO1FBQ2hDUixJQUFNLFlBQVksb0NBQW9DLE1BQU0sTUFBTSxDQUFDO1FBQ25FLE9BQU8sb0JBQW9CLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUM7WUFDNUQsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQztZQUMvRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDN0Q7OytCQUVELDBEQUF1QixhQUFhOzJCQUNiLE9BQU87MkJBQ1AsWUFBWTsyQkFDWixRQUFROzJCQUNSLElBQUk7MkJBQ0osU0FBUzsyQkFDVCxpQkFBaUI7MkJBQ2pCLGNBQWMseUJBQXlCO1FBQzFEQSxJQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxhQUFhO1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN4Q0EsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRUEsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JGQSxJQUFNLElBQUksSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7Ozs7UUFNOUJBLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEtBQUssS0FBSyxDQUFDO1FBQ3hFQSxJQUFNLGtCQUFrQixHQUFHLFlBQVksR0FBRyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0SEEsSUFBTSxlQUFlLEdBQUcsWUFBWSxHQUFHLElBQUksR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7O1FBRXZFLEtBQUssc0JBQWMsdUNBQVEsRUFBRTtZQUF4QkEsSUFBTTs7WUFDUCxLQUFLLGtCQUFlLDZCQUFJLEVBQUU7O2dCQUFyQkEsSUFBTTs7Z0JBRVBBLElBQU0sZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDOztnQkFFcEZELElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQztnQkFDbkNDLElBQU0sZUFBZSxHQUFHbUssZUFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN6RixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEtBQUssS0FBSyxFQUFFO29CQUMzRyxZQUFZLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDekUsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEtBQUssVUFBVSxFQUFFO29CQUNsSCxZQUFZLElBQUksU0FBUyxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekU7O2dCQUVELElBQUksOEJBQThCLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7YUFDdkc7U0FDSjs7UUFFRCxPQUFPLEtBQUssQ0FBQztLQUNoQjs7O0VBakUwQixhQWtFOUI7O0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBQyxTQUFTLGNBQWMsZ0JBQWdCO0lBQzFEbkssSUFBTSxLQUFLLEdBQUdtSyxlQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdkUsT0FBTyxJQUFJakgsYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOztBQUVELFNBQVMsb0JBQW9CLENBQUMsYUFBYSxnQkFBZ0IsY0FBYyxnQkFBZ0I7SUFDckYsT0FBTyxhQUFhLENBQUMsR0FBRyxXQUFFLENBQUMsRUFBRTtRQUN6QixPQUFPLFlBQVksQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0NBQ047Ozs7OztBQ3ZGRCxJQUFNLGFBQWE7Ozs7Ozs7Ozs7RUFBUyxlQUkzQjs7QUFFRCxRQUFRLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUNFN0QsU0FBUyxXQUFXLENBQUMsS0FBSyxLQUFLLEdBQWUsUUFBUSxRQUFRLFVBQVUsSUFBSSxtQ0FBbUM7MEJBQXhFOzs7SUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0tBQ3BELE1BQU0sSUFBSSxJQUFJLFlBQVksaUJBQWlCLEVBQUU7UUFDMUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0QyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxHQUFHLFFBQVEsRUFBRTtRQUNsRCxNQUFNLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FDakQ7SUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN0QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEtBQUssQ0FBQztDQUNoQjs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBZSxRQUFRLFFBQVEsVUFBVTswQkFBakM7OztJQUNuQyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2xELE9BQU87S0FDVjs7SUFFRGxELElBQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsUUFBQyxLQUFLLFVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7O0lBRTVELFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNuRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUN6QyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztJQUViLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztDQUM5Qjs7QUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUFNLEtBQUssTUFBTSxLQUFLLEtBQUssU0FBUyxLQUFLLFNBQVMsSUFBSSxRQUFRLFFBQVEsVUFBVTtJQUMvRixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0tBQ2pCOztJQUVELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQzNCLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztRQUNuQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUN2QyxNQUFNLElBQUksVUFBVSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7S0FDMUU7O0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU07UUFDM0IsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO1FBQ25DLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxVQUFVLENBQUMscURBQXFELENBQUMsQ0FBQztLQUMvRTs7SUFFREEsSUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM1QkEsSUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzs7SUFFNUJTLFFBQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7O0lBRTVCLEtBQUtWLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQ0MsSUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7UUFDdEVBLElBQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDO1FBQ3RFLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25EO0tBQ0o7SUFDRCxPQUFPLE1BQU0sQ0FBQztDQUNqQjs7QUFFRCxJQUFhLFVBQVUsR0FLbkIsbUJBQVcsQ0FBQyxJQUFJLE1BQVEsSUFBSSxpQ0FBbUM7TUFDN0QsV0FBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDOztFQUVILHFCQUFFLDBCQUFPLElBQUksTUFBUTtNQUNqQixXQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5Qjs7RUFFSCxxQkFBRSwwQkFBUTtNQUNOLE9BQVMsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlGOztFQUVILFdBQVMsc0JBQUssTUFBTSxZQUFjLE1BQU0sWUFBYyxLQUFLLE9BQVMsS0FBSyxPQUFTLElBQUksTUFBUTtNQUN4RixTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztHQUNwRCxDQUNKOzs7O0FBSUQsSUFBYSxTQUFTLEdBUWxCLGtCQUFXLENBQUMsSUFBSSxNQUFRLElBQUksaUNBQW1DO01BQzdELFdBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwQzs7RUFFSCxvQkFBRSwwQkFBTyxJQUFJLE1BQVE7TUFDakIsV0FBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUI7O0VBRUgsb0JBQUUsNEJBQVEsSUFBSSxnQ0FBa0MsSUFBSSxVQUFZO01BQzVELElBQU0sSUFBSSxFQUFFO1VBQ1IsSUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDdkIsTUFBTSxJQUFJLElBQUksWUFBWSxpQkFBaUIsRUFBRTtVQUM1QyxJQUFNLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMzQyxNQUFNO1VBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7T0FDcEI7SUFDSjs7RUFFSCxvQkFBRSwwQkFBUTtNQUNOLE9BQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGOztFQUVILFVBQVMsc0JBQUssTUFBTSx1QkFBeUIsTUFBTSxXQUFhLEtBQUssT0FBUyxLQUFLLE9BQVMsSUFBSSxNQUFRO01BQ2xHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQ3BELENBQ0o7O0FBRUQsUUFBUSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNuQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0dqQ0MsSUFBTWdFLE9BQUssMkJBQTJCLElBQUksVUFBVSxDQUFDO0lBQ2pELGdCQUFnQixFQUFFLElBQUksa0JBQWtCLENBQUNmLElBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RGLGdCQUFnQixFQUFFLElBQUksa0JBQWtCLENBQUNBLElBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RGLG1CQUFtQixFQUFFLElBQUksb0JBQW9CLENBQUNBLElBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlGLGVBQWUsRUFBRSxJQUFJLGlCQUFpQixDQUFDQSxJQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkYsaUJBQWlCLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQ0EsSUFBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Q0FDN0YsQ0FBQyxDQUFDOzs7OztBQUtILG9CQUFnQixTQUFFZSxPQUFLLEVBQUU7O0lBRXJCOzs7Ozs7Ozs7Ozs7QUMvQlcsU0FBUyxlQUFlLENBQUMsVUFBVSwyQkFBMkIsNEJBQTRCLHFCQUFxQjtJQUMxSGhFLElBQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5Q0EsSUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDN0IsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pDLGlCQUFpQixDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxREMsSUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsT0FBTyxDQUFDOzs7UUFHOUQsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdEQ7O0lBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0NBQ2hFOzs7Ozs7Ozs7QUNaRCxJQUFNLGlCQUFpQjtJQWNuQiwwQkFBVyxDQUFDLEtBQUssc0JBQXNCO1FBQ25DUSxlQUFLLE9BQUMsS0FBSyxFQUFFNEosWUFBVSxDQUFDLENBQUM7OztRQUd6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7Ozs7Z0VBQzNCOztnQ0FURCxzQ0FBYSxPQUFPLE9BQU87UUFDdkIsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNyQzs7Z0NBU0QsZ0ZBQWtDLElBQUksVUFBVTtRQUM1QyxJQUFJLElBQUksS0FBSyxlQUFlLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7TUFDSjs7Z0NBRUQsZ0RBQW1CO1FBQ2ZwSyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDdkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztNQUNoQzs7Z0NBRUQsNEJBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUMxQjtNQUNKOztnQ0FFRCw4Q0FBc0I7UUFDbEIsT0FBTyxDQUFDLENBQUM7TUFDWjs7Z0NBRUQsc0VBQW1DO1FBQy9CLE9BQU8sS0FBSyxDQUFDO01BQ2hCOztnQ0FFRCxnREFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO0tBQ2hGOzs7RUFsRDJCLGFBbUQvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ0RBLElBQU1nRSxPQUFLLDJCQUEyQixJQUFJLFVBQVUsQ0FBQztJQUNqRCxrQ0FBa0MsRUFBRSxJQUFJLG9CQUFvQixDQUFDZixJQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzlILCtCQUErQixFQUFFLElBQUksb0JBQW9CLENBQUNBLElBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDeEgsd0JBQXdCLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQ0EsSUFBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMxRyx3QkFBd0IsRUFBRSxJQUFJLG9CQUFvQixDQUFDQSxJQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFHLDJCQUEyQixFQUFFLElBQUksb0JBQW9CLENBQUNBLElBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDaEgsd0JBQXdCLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQ0EsSUFBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztDQUM3RyxDQUFDLENBQUM7Ozs7O0FBS0gsb0JBQWdCLFNBQUVlLE9BQUssRUFBRTs7SUFFckI7Ozs7Ozs7QUNuQ0osSUFBTSxtQkFBbUI7SUFLckIsNEJBQVcsQ0FBQyxLQUFLLHNCQUFzQjtRQUNuQ3hELGVBQUssT0FBQyxLQUFLLEVBQUU0SixZQUFVLENBQUMsQ0FBQzs7Ozs7b0VBQzVCOztrQ0FFRCxnREFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO0tBQ3ZGOzs7RUFYNkIsYUFZakM7Ozs7QUNuQkRwSyxJQUFNbUQsUUFBTSxHQUFHLFlBQVksQ0FBQztJQUN4QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0NBQ2hELEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFHQztBQUFnQjtBQUFNLHFDQUFvQjs7QUNSakQsWUFBWSxDQUFDOztBQUViLFlBQWMsR0FBRyxNQUFNLENBQUM7QUFDeEIsYUFBc0IsR0FBRyxNQUFNLENBQUM7O0FBRWhDLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFOztJQUVwQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQzs7SUFFZixJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU07UUFDNUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBQ3hELFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUNwRCxTQUFTLEdBQUcsRUFBRSxDQUFDOztJQUVuQixJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksSUFBRSxPQUFPLFNBQVMsR0FBQzs7SUFFdEUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7O0lBRTFDLElBQUksUUFBUSxJQUFFLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUM7OztJQUc1RSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRTtRQUN4QixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ3RDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztTQUMxQjs7O1FBR0QsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDN0M7O0lBRUQsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRTdELE9BQU8sU0FBUyxDQUFDO0NBQ3BCOzs7QUFHRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO0lBQ2xELElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQzs7SUFFWixJQUFJLFNBQVMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDdkQsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBRSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBQztLQUN2RixNQUFNO1FBQ0gsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUUsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUM7S0FDOUY7O0lBRUQsSUFBSSxJQUFJLElBQUlnQixRQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDcEI7O0lBRUQsT0FBTyxJQUFJLENBQUM7Q0FDZjs7O0FBR0QsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUMsS0FBSyxJQUFFLE9BQU8sS0FBSyxHQUFDO0lBQ3pCLElBQUksQ0FBQyxHQUFHLElBQUUsR0FBRyxHQUFHLEtBQUssR0FBQzs7SUFFdEIsSUFBSSxDQUFDLEdBQUcsS0FBSztRQUNULEtBQUssQ0FBQztJQUNWLEdBQUc7UUFDQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztRQUVkLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLQSxRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFFLFFBQU07WUFDeEIsS0FBSyxHQUFHLElBQUksQ0FBQzs7U0FFaEIsTUFBTTtZQUNILENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2Q7S0FDSixRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUU3QixPQUFPLEdBQUcsQ0FBQztDQUNkOzs7QUFHRCxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbEUsSUFBSSxDQUFDLEdBQUcsSUFBRSxTQUFPOzs7SUFHakIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFDOztJQUUzRCxJQUFJLElBQUksR0FBRyxHQUFHO1FBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQzs7O0lBR2YsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O1FBRWhCLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7O1lBRTlELFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUU3QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7OztZQUdoQixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7WUFFakIsU0FBUztTQUNaOztRQUVELEdBQUcsR0FBRyxJQUFJLENBQUM7OztRQUdYLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTs7WUFFZCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7O2FBRzNFLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUNuQixHQUFHLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDaEUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7YUFHN0QsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQ25CLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3pEOztZQUVELE1BQU07U0FDVDtLQUNKO0NBQ0o7OztBQUdELFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtJQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSTtRQUNaLENBQUMsR0FBRyxHQUFHO1FBQ1AsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0lBRWpCLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDOzs7SUFHckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7O0lBRXRCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDbkIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO1FBQy9DLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQ2Q7O0lBRUQsT0FBTyxJQUFJLENBQUM7Q0FDZjs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7SUFDM0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUk7UUFDWixDQUFDLEdBQUcsR0FBRztRQUNQLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDOztJQUVqQixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBRSxPQUFPLEtBQUssR0FBQzs7O0lBR3JDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdkY7OztBQUdELFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEU7OztBQUdELFNBQVNBLFFBQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BCLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN6Qzs7O0FBR0QsU0FBUyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDOztJQUVoQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBRSxPQUFPLElBQUksR0FBQzs7SUFFeEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFFLE9BQU8sSUFBSSxHQUFDO0lBQ25ELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztJQUNuRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7SUFDbkQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFFLE9BQU8sSUFBSSxHQUFDOztJQUVuRCxPQUFPLEtBQUssQ0FBQztDQUNoQjs7O0FBR0QsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENB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QUFXLDBCQUFDLEVBQUU7WUFBZEEsSUFBTTs7WUFDUEEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkQSxJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVkQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztZQUV2Q0EsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUMxQkEsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUMxQkEsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUMxQkEsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQzs7WUFFMUJBLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDeEJBLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDeEJBLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDeEJBLElBQU0sSUFBSSxHQUFHLEVBQUUs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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLENBQUMsQ0FBQztLQUNaOztJQUVELFNBQVMsYUFBYSxDQUFDLE9BQU8sVUFBVSxRQUFRLFVBQVUsSUFBSSxFQUFFO1FBQzVEQSxJQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFdkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7O0lBRUQsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7UUFDakNBLElBQU0sS0FBSyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsUUFBVSxJQUFJLFVBQUksS0FBSyxDQUFDLEVBQUMsVUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHO0tBQzFDOztJQUVELEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0Q0MsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMs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RSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFB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QztFQUNkLEtBQUssSUFBSSxLQUFJO0VBQ2IsT0FBTyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTs7RUFFNUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ1gsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0dBQ2QsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDckIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7R0FDM0MsTUFBTTtJQUNMLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFDO0lBQ3pCLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBSztHQUNkO0VBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDaEQ7O0FBRUQsU0FBYSxHQUFHLFVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7RUFDbkUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUM7RUFDWCxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUM7RUFDbEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUM7RUFDMUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUM7RUFDckIsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQ2hFLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBQztFQUMvQixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQztFQUNyQixJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQzs7RUFFM0QsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDOztFQUV2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0lBQ3RDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7SUFDeEIsQ0FBQyxHQUFHLEtBQUk7R0FDVCxNQUFNO0lBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFDO0lBQzFDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ3JDLENBQUMsR0FBRTtNQUNILENBQUMsSUFBSSxFQUFDO0tBQ1A7SUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2xCLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBQztLQUNoQixNQUFNO01BQ0wsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFDO0tBQ3JDO0lBQ0QsSUFB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QUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxHQUFDLElBQUk7SUFDN0csa0JBQWtCLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxHQUFDLEdBQUc7SUFDN0csa0JBQWtCLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxHQUFDLEdBQUc7SUFDN0csZ0JBQWdCLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxHQUFDLEtBQUs7SUFDN0csaUJBQWlCLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxHQUFDLElBQUk7SUFDN0csa0JBQWtCLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxHQUFDLEdBQUc7SUFDN0csbUJBQW1CLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFF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LEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDNUM7Q0FDSixDQUFDOztBQUVGLFNBQVMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUc7UUFDWCxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUVULENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0lBQzdFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0lBQzdFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0lBQzdFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0lBQzdFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0lBQzdFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDOztJQUU3RSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7Q0FDN0Q7O0FBRUQsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFO0lBQ3hCLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSztRQUN6QixHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUNoQyxJQUFJLFFBQVEsRUFBRTtRQUNWLE9BQU8sSUFBSSxHQUFHLFdBQVcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDM0M7O0lBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxXQUFXLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ3JEOztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDOUIsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDOztJQUVkLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNWLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO0tBQ2xDLE1BQU07UUFDSCxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQzs7UUFFN0IsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFO1lBQ2xCLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCLE1BQU07WUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7S0FDSjs7SUFFRCxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRTtRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7S0FDOUQ7O0lBRUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakM7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNuRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNuRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNuRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNuRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQ25DOztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUNuQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDOztJQUU3QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0lBQ2xGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0lBQ2xGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0lBQ2xGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0lBQ2xGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0lBQ2xGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztDQUNyQzs7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQ2hELElBQUksUUFBUTtRQUNSLEdBQUcsSUFBSSxNQUFNLEdBQUcsQ0FBQztRQUNqQixHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7UUFDbkIsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR3RFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUM7Q0FDcEY7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRztBQUMxRyxTQUFTLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEtBQUs7QUFDMUcsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMs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QUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENB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QUMsQ0FBQzs7UUFFaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV6RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuRTs7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFB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QUM7SUFDdEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMxRDs7QUFFRCxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTs7SUFFOUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUU7WUFDcEJBLElBQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQzNCQSxJQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QkEsSUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQ0EsSUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNFQSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9EQSxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xEOztRQUVEQSxJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM5QkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2JBLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQzs7UUFFZCxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFDOztRQUVwRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVixRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsRUFBRSxHQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsRUFBRSxHQUFDO1NBQ3ZDOztRQUVELElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBQzthQUM1RDtZQUNELENBQUMsRUFBRSxDQUFDO1lBQ0osUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DOztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUM7S0FDN0I7Q0FDSjs7QUFFRCxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdEM7O0FBRUQsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckJDLElBQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDaEI7O0FDN0RjLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN6RUEsSUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckNBLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUVULE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNqQkMsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCQSxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUJBLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7UUFFekIsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUMxQixLQUFLRCxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUM7YUFDN0U7WUFDRCxTQUFTO1NBQ1o7O1FBRURDLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDOztRQUV6QyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1FBRXRCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDOztRQUUxRUEsSUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFaEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEI7UUFDRCxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QjtLQUNKOztJQUVELE9BQU8sTUFBTSxDQUFDO0NBQ2pCOztBQ3pDYyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRTtJQUM3REEsSUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckNBLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQkEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFakIsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pCQSxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekJBLElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQkEsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDOztRQUV6QixJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksUUFBUSxFQUFFO1lBQzFCLEtBQUtELElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQzthQUNuRjtZQUNELFNBQVM7U0FDWjs7UUFFREMsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7O1FBRXpDQSxJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCQSxJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7UUFFNUIsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUM7O1FBRXBEQSxJQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOztRQUVoQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QjtLQUNKOztJQUVELE9BQU8sTUFBTSxDQUFDO0NBQ2pCOztBQUVELFNBQVMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUM1QkEsSUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQkEsSUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUM1Qjs7QUN6Q0RBLElBQU0sV0FBVyxhQUFHLEdBQUUsU0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFDLENBQUM7QUFDOUJBLElBQU0sV0FBVyxhQUFHLEdBQUUsU0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFDLENBQUM7O0FBRWYsSUFBTSxNQUFNLEdBQ3ZCLGVBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBa0IsRUFBRSxJQUFrQixFQUFFLFFBQWEsRUFBRSxTQUF3QixFQUFFOytCQUE3RSxHQUFHOytCQUFpQixHQUFHO3VDQUFxQixHQUFHO3lDQUFhLEdBQUc7O0lBQ25GLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztJQUVyQkEsSUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7SUFFekVBLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pEQSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRTlELEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDOztJQUVEMlEsTUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNyRDs7QUFFTCxpQkFBSSwwQkFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDOUIsT0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDOUU7O0FBRUwsaUJBQUksNEJBQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEIsT0FBVyxNQUFNLENB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LEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixPQUFPLENBQUMsQ0FBQztDQUNaOztBQzNNYyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzVDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDdEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztJQUUxRSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7UUFFekUsSUFBSSxJQUFJLElBQUUsTUFBTSxH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QUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLElBQUksWUFBWSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRWhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdkY7O0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUxRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekc7O0lBRUQsT0FBTyxZQUFZLENBQUM7Q0FDdkIsQ0FBQzs7O0FBR0YsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFDRCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QjtLQUNKO0lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO0tBQ0o7Q0FDSjs7O0FBR0QsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDOztJQUVaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELENBQUMsRUFBRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0tBQ25COztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsT0FBTyxDQUFDLENBQUMsQ0FB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SUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2QyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0MsSUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzQyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0MsSUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN6QyxJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkMsSUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvQixJQUFNLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLElBQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDekMsSUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvQyxJQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3JDLElBQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDN0MsSUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN2QyxJQUFNLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ25DLElBQU0sQ0FBQyxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNuRCxJQUFNLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3JDLElBQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbkQsSUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckQsSUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzQyxJQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNyRCxJQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNyRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdEYsSUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckQsSUFBTSxDQUFDLGdDQUFnQyxHQUFHLElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckYsSUFBTSxDQUFDLHFCQUFxQixHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7O01BRS9ELElBQU0sQ0FBQywyQkFBMkI7VUFDNUIsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsQ0FBQztVQUNqRCxFQUFFLENBQUMsWUFBWSxDQUFDLG9DQUFvQyxDQUFDO1VBQ3JELEVBQUUsQ0FBQyxZQUFZLENBQUMsdUNBQXVDLENBQUM7T0FDM0QsQ0FBQztNQUNGLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1VBQ2xDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO09BQzFIOztNQUVILElBQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7TUFDckUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7VUFDMUIsRUFBRSxDQUFDLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO09BQ3BEOztNQUVILElBQU0sQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3BFOztFQUVILGtCQUFFLG9DQUFhO01BQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOztNQUVqQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUNuQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDbkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNDOztFQUVILGtCQUFFLGdDQUFXO01BQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7TUFDcEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7VUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7T0FDeEM7TUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUNuQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUNuRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUMzQzs7RUFFSCxrQkFBRSxnREFBa0IsS0FBSywyREFBNkQsV0FBVyxVQUFZO01BQ3pHLE9BQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRDs7RUFFSCxrQkFBRSxrREFBbUIsS0FBSyxhQUFlLFVBQVUsbUNBQXFDLFdBQVcsVUFBWTtNQUN6RyxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFOztFQUVILGtCQUFFLGtEQUFtQixhQUFhLFFBQVUsS0FBSyxRQUFVLE1BQU0sUUFBVTtNQUNyRUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7TUFFckIsSUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7TUFDdEMsSUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvQixFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQ3hFLElBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7O01BRWxDLE9BQVMsR0FBRyxDQUFDO0lBQ2Q7O0VBRUgsa0JBQUUsZ0RBQWtCLEtBQUssUUFBVSxNQUFNLFFBQVU7TUFDL0MsT0FBUyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9DOztFQUVILGtCQUFFLHdCQUFNLEdBQWMsV0FBYTs4QkFBbkI7OztNQUNWQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO01BQ25CRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7O01BRWYsSUFBTSxLQUFLLEVBQUU7VUFDUCxJQUFJLElBQUksRUFBRSxDQUFDLGdCQUFnQixDQUFDO1VBQzlCLElBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNoRDs7TUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsRUFBRTtVQUM5QixJQUFJLElBQUksRUFBRSxDQUFDLGdCQUFnQixDQUFDOzs7O1VBSTVCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1VBRTlCLElBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQzdCLElBQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzVCOzs7Ozs7Ozs7TUFTRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCOztFQUVILGtCQUFFLG9DQUFZLFlBQVkseUJBQTJCO01BQy9DLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7VUFDakMsSUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDNUIsTUFBTTtVQUNMLElBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzFCLElBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMzQyxJQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDOUM7SUFDSjs7RUFFSCxrQkFBRSxzQ0FBYSxTQUFTLHNCQUF3QjtNQUMxQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1VBQ3hELElBQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQzdCLE1BQU07VUFDTCxJQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMzQixJQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDckMsSUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3JDLElBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUN4QztJQUNKOztFQUVILGtCQUFFLDBDQUFlLFdBQVcsd0JBQTBCO01BQ2hELElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO1VBQ2pFLElBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQy9CLE1BQU07VUFDTCxJQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUM3QixJQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDekMsSUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7Y0FDakIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSTtjQUMzQixHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUc7Y0FDcEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSTtXQUM5QixDQUFDLENBQUM7T0FDTjtJQUNKOztFQUVILGtCQUFFLHNDQUFhLFNBQVMsc0JBQXdCO01BQzVDLElBQU1tVSxxQkFBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3pELElBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3pCLE1BQU07VUFDTCxJQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN2QixJQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7VUFDOUMsSUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO09BQzdDOztNQUVILElBQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0Qzs7RUFFSCxrQkFBRSxrQ0FBWTs7O01BR1IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7VUFDN0IsSUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNyQztHQUNKLENBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xRRCxJQUFNLFdBQVc7SUEyQmIsb0JBQVcsQ0FBQyxFQUFFLFVBQVUsT0FBTyx1QkFBdUIsVUFBVSxjQUFjOzs7UUFDMUUxVCxZQUFLLEtBQUMsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQzs7UUFFN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLFlBQUcsQ0FBQyxFQUFFOzs7O1lBSWhCLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxVQUFVLElBQUVELE1BQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFDOzs7O1lBSTFGLElBQUlBLE1BQUksQ0FBQyxhQUFhLElBQUksQ0FBQ0EsTUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtnQkFDbEdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxJQUFJQSxNQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQkEsTUFBSSxDQUFDLE1BQU0sQ0FBQ0EsTUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1NBQ0osQ0FBQyxDQUFDOztRQUVILElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxjQUFLO1lBQ2hCQSxNQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM5QixDQUFDLENBQUM7O1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRzRULE1BQVksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7O1FBRTdCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSUMsOEJBQWtCLEVBQUUsQ0FBQzs7Ozs7b0RBQzFDOzswQkFFRCx3QkFBTSxHQUFHLE9BQU87UUFDWixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7TUFDSjs7MEJBRUQsOEJBQVMsR0FBRyxPQUFPO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO01BQ0o7Ozs7OzswQkFNRCxxQ0FBa0I7UUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsRUFBRTtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUU7UUFDN0MsS0FBS3BVLElBQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekJBLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVM7a0JBQ25ELE9BQU8sS0FBSyxHQUFDO1NBQ3BCO1FBQ0QsT0FBTyxJQUFJLENBQUM7TUFDZjs7MEJBRUQsMENBQW9CO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztNQUN2Qjs7MEJBRUQsMEJBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztNQUN2Qjs7MEJBRUQsNEJBQVM7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRSxTQUFPO1FBQzFCQSxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLFlBQVksSUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFDO01BQ25EOzswQkFFRCxnQ0FBVSxJQUFJLFFBQVEsUUFBUSxrQkFBa0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7TUFDaEQ7OzBCQUVELG9DQUFZLElBQUksUUFBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtjQUN2QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksY0FBUSxFQUFFLENBQUMsR0FBQztNQUN0RDs7MEJBRUQsa0NBQVcsSUFBSSxRQUFRO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO2NBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxjQUFRLEVBQUUsQ0FBQyxHQUFDO01BQ3JEOzswQkFFRCxrQ0FBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztNQUNuQzs7MEJBRUQsNEJBQVEsT0FBTyxXQUFXO1FBQ3RCLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjs7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0UsS0FBS0EsSUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QkEsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0M7TUFDSjs7Ozs7MEJBS0QsMkNBQXdCO1FBQ3BCLE9BQU8sQ0FBQzRPLGtCQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsV0FBRSxJQUFJLFFBQVEsU0FBRyxJQUFJLENBQUMsU0FBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsV0FBQyxJQUFHLFNBQUcsRUFBRSxDQUFDLE1BQUcsQ0FBQyxDQUFDO01BQzVHOzswQkFFRCw4Q0FBaUIsV0FBVywyQkFBMkI7OztRQUNuRDVPLElBQU0sV0FBVyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLEtBQUtBLElBQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsSUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztTQUNoRjtRQUNELElBQUksV0FBVyxFQUFFO1lBQ2IsT0FBTyxXQUFXLENBQUMsSUFBSSxXQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVE7Z0JBQ3pDQSxJQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNwQkEsSUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztnQkFDcEJBLElBQU0sUUFBUSxHQUFHLENBQUMsSUFBSWtELGlCQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMzQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RlAsSUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJa0QsaUJBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzNDLE1BQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pGLE9BQU8sQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDOUYsQ0FBQyxDQUFDLEdBQUcsV0FBQyxNQUFLLFNBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFHLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sV0FBVyxDQUFDLEdBQUcsV0FBQyxNQUFLLFNBQUcsSUFBSSxDQUFDLFNBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLFdBQUMsSUFBRyxTQUFHLEVBQUUsQ0FBQyxNQUFHLENBQUMsQ0FBQztNQUNyRjs7MEJBRUQsb0RBQW9CLE1BQU0sb0JBQW9CO1FBQzFDUCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksVUFBVSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxPQUFPLEtBQUssQ0FBQztNQUNoQjs7MEJBRUQsNENBQWdCLEVBQUUsVUFBVSxXQUFXLFlBQVk7UUFDL0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQy9DLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7TUFDckY7OzBCQUVELDRCQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7UUFFcEIsS0FBS0EsSUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBQztTQUM1RTtNQUNKOzswQkFFRCxvQ0FBWSxFQUFFLFVBQVUsS0FBSyxhQUFhO1FBQ3RDQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7OztRQUs3QixJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87Ozs7OztRQU1sQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3RCOztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDdEU7OzBCQUVELG9DQUFZLElBQUksUUFBUSxFQUFFLFVBQVUsYUFBYSxhQUFhLEdBQUcsVUFBVTtRQUN2RSxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLEdBQUcsSUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJc1Isc0JBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUM7O21CQUV6RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBQztZQUNqQyxPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBR2xSLG1CQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLEdBQUM7UUFDckUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBQztRQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDOztRQUUxRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJbVIsaUJBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxRQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN4Rjs7Ozs7OzBCQU1ELHNDQUFhLElBQUksUUFBUTtRQUNyQnZSLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6Q0MsSUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMURBLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdCLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDaEM7U0FDSjs7UUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbENELElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDakVDLElBQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkVBLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pEQSxJQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBRSxTQUFPOztZQUVqQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFOztnQkFFbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzFCLEVBQUUsSUFBSSxHQUFHLENBQUM7aUJBQ2IsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDakMsRUFBRSxJQUFJLEdBQUcsQ0FBQztpQkFDYjthQUNKO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLFNBQU87WUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztrQkFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUM7U0FDekQ7TUFDSjs7OzswQkFJRCw0QkFBUSxNQUFNLDBCQUEwQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3ZDOzs7OzswQkFLRCxvQ0FBWSxFQUFFLGdCQUFnQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDMUI7Ozs7OzswQkFNRDtRQUNJLFVBQVU7UUFDVixJQUFJO1FBQ0osZUFBZTtRQUNmLE1BQU07TUFDUjtRQUNFLEtBQUtBLElBQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDMUJELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7OztZQUczQixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLGVBQWU7Z0JBQzNDLFdBQVM7OztZQUdYQSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUU7Z0JBQy9DQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQzs7Z0JBRW5FLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7Z0JBRWpDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDeEIsZUFBZSxHQUFHLFFBQVEsQ0FBQztpQkFDOUI7YUFDSjs7O1lBR0RELElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQztZQUM3QixPQUFPLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDOztnQkFFakQsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFOztvQkFFeEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7b0JBQzlDLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO01BQ0o7Ozs7OzBCQUtELDhDQUFpQixNQUFNLG9CQUFvQixlQUFlLGlCQUFpQjtRQUN2RSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZDQyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLGVBQWUsRUFBRTtnQkFDeEQsT0FBTyxNQUFNLENBQUM7YUFDakIsTUFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxLQUFLRCxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVEQyxJQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9DLElBQUksSUFBSSxFQUFFO2dCQUNOLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtNQUNKOzswQkFFRCwwQ0FBZSxNQUFNLDJCQUEyQjtRQUM1Q0EsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7O1FBRURBLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxPQUFPLFVBQVUsQ0FBQztNQUNyQjs7Ozs7Ozs7OzswQkFVRCw0Q0FBZ0IsU0FBUyxhQUFhO1FBQ2xDQSxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUVBLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RUEsSUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDO1FBQ3ZEQSxJQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7O1FBRTFCQSxJQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDN0VBLElBQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLG9CQUFvQixDQUFDOztRQUUzSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNuQzs7MEJBRUQsMENBQWUsR0FBRyxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7O1FBZ0J4QkEsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbEVBLElBQU0sYUFBYSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDcENBLElBQU0sZUFBZSxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUM7UUFDNUNBLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7O1FBRXBCLElBQUksU0FBUyxFQUFFO1lBQ1hBLElBQU0sS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ25DLEtBQUtBLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDakM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7O1lBR3BCLEtBQUtBLElBQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzQjtZQUNELEtBQUtBLElBQU15TCxJQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDMUJ6TCxJQUFNcVUsTUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM1SSxJQUFFLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDQSxJQUFFLEVBQUU0SSxNQUFJLENBQUMsQ0FBQzthQUN0QztTQUNKO01BQ0o7Ozs7OzswQkFNRCwwQkFBTyxTQUFTLGFBQWE7OztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFOztRQUVwRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7UUFJL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7O1FBRXhCdFUsSUFBSSxZQUFZLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3JCLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM1QixZQUFZLEdBQUcsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2lCQUN2RSxHQUFHLFdBQUUsU0FBUyxFQUFFLFNBQUcsSUFBSXFQLDRCQUFnQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUMsQ0FBQyxDQUFDO1NBQzdKLE1BQU07WUFDSCxZQUFZLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztnQkFDakMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7YUFDcEQsQ0FBQyxDQUFDOztZQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxXQUFFLEtBQUssRUFBRSxTQUFHLENBQUM3TyxNQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sT0FBTyxLQUFLLElBQUMsQ0FBQyxDQUFDO2FBQ3JGO1NBQ0o7OztRQUdEUCxJQUFNLElBQUksR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZEQSxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUZBLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Ozs7UUFLNUZBLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBRTdELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakNBLElBQU0sZ0JBQWdCLGlDQUFpQyxFQUFFLENBQUM7WUFDMURBLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN2QkEsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxLQUFLLGtCQUFZLDRCQUFHLEVBQUU7Z0JBQWpCQSxJQUFNOztnQkFDUEEsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQlMsa0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDOztnQkFFMUJULElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJSSxtQkFBTyxDQUFDLEdBQUcsRUFBRSxJQUFFLFdBQVM7OztnQkFHN0VKLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksVUFBVSxFQUFFO29CQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7aUJBQy9EOztnQkFFRCxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQzVCOzs7WUFHRCxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7O1lBRXZFLEtBQUtBLElBQU15TCxJQUFFLElBQUksZ0JBQWdCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUNBLElBQUUsQ0FBQyxFQUFFOztvQkFFYixJQUFJLENBQUMsYUFBYSxDQUFDQSxJQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQzlCLE1BQU0sQ0FBQ0EsSUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUNBLElBQUUsQ0FBQyxDQUFDO2lCQUNyQzthQUNKO1NBQ0o7O1FBRUQsS0FBS3pMLElBQU0sVUFBVSxJQUFJLE1BQU0sRUFBRTs7O1lBRzdCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDM0M7OztRQUdEQSxJQUFNLE1BQU0sR0FBR3NVLDBCQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRCxLQUFLLHNCQUFnQixxQ0FBTSxFQUFFO1lBQXhCdFUsSUFBTXVVOztZQUNQdlUsSUFBTXFVLE1BQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDRSxRQUFNLENBQUMsQ0FBQztZQUNqQyxJQUFJRixNQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQ0EsTUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUNqREEsTUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2hELE1BQU0sSUFBSSxDQUFDQSxNQUFJLENBQUMsZ0JBQWdCLElBQUlBLE1BQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDRSxRQUFNLENBQUMsQ0FBQzthQUM1QjtTQUNKOzs7UUFHRCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztNQUN2Qzs7MEJBRUQsNERBQXlCO1FBQ3JCLEtBQUt2VSxJQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN4QjtTQUNKO01BQ0o7OzBCQUVELHNEQUFxQixZQUFZLDJCQUEyQixJQUFJLHlDQUF5QztRQUNyR0EsSUFBTSxNQUFNLGlDQUFpQyxFQUFFLENBQUM7UUFDaERBLElBQU0sT0FBTyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3pDQSxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUZBLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFFNUZBLElBQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLGtCQUFnQixxQ0FBWSxFQUFFO1lBQTlCQSxJQUFNOztZQUNQQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7WUFHbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7O1lBRTVCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFFLFdBQVM7O1lBRTdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFOztnQkFFN0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDckM7U0FDSjs7O1FBR0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztRQUV4RSxLQUFLLHNCQUFnQiwyQ0FBWSxFQUFFO1lBQTlCQSxJQUFNdVU7O1lBQ1B4VSxJQUFJc1UsTUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUNFLFFBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7WUFFbkMsSUFBSUYsTUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFFLFdBQVM7Ozs7O1lBSzdCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTs7Z0JBRWpDclUsSUFBTSxVQUFVLEdBQUd1VSxRQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVEdlUsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDcEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQ3BDLFNBQVM7aUJBQ1o7YUFDSixNQUFNOztnQkFFSEEsSUFBTSxRQUFRLEdBQUd1VSxRQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7O2dCQUV2RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUN2QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUUsV0FBUzthQUN6Qzs7Ozs7OztZQU9EeFUsSUFBSSxrQkFBa0IsR0FBR3NVLE1BQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7WUFFN0MsS0FBS3RVLElBQUksV0FBVyxHQUFHd1UsUUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRTtnQkFDMUZ2VSxJQUFNLFFBQVEsR0FBR3VVLFFBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7OztnQkFHOUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFFLFFBQU07Z0JBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDOztnQkFFN0JGLE1BQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUNBLE1BQUksSUFBSSxrQkFBa0IsRUFBRTtvQkFDN0JBLE1BQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJQSxNQUFJLEVBQUU7b0JBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7OztvQkFHaEMsa0JBQWtCLEdBQUdBLE1BQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDekMsSUFBSUEsTUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFFLFFBQU07aUJBQzdCO2FBQ0o7U0FDSjs7UUFFRCxPQUFPLE1BQU0sQ0FBQztNQUNqQjs7MEJBRUQsd0VBQStCO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7O1FBRTdCLEtBQUtyVSxJQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9CQSxJQUFNLElBQUksR0FBRyxFQUFFLENBQUM7WUFDaEJELElBQUkscUJBQVUsUUFBUTtZQUN0QkEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7Ozs7WUFJNUMsT0FBTyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTs7O2dCQUc5QixJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUMxQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEQsTUFBTTtpQkFDVDs7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7OztnQkFHekJDLElBQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUksVUFBVSxFQUFFO29CQUNaLE1BQU07aUJBQ1Q7O2dCQUVELFNBQVMsR0FBRyxRQUFRLENBQUM7YUFDeEI7OztZQUdELEtBQUssa0JBQWEsNkJBQUksRUFBRTtnQkFBbkJBLElBQU07O2dCQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDN0M7U0FDSjtNQUNKOzs7Ozs7MEJBTUQsOEJBQVMsTUFBTSwwQkFBMEI7UUFDckNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSTtjQUNKLE9BQU8sSUFBSSxHQUFDOztRQUVoQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMxRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDOUM7U0FDSjs7UUFFREMsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxJQUFJLEdBQUcsSUFBSXdVLGdCQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNuRjs7O1FBR0QsSUFBSSxDQUFDLElBQUksSUFBRSxRQUFRLElBQUksU0FBTzs7UUFFOUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSWpELGlCQUFLLENBQUMsYUFBYSxFQUFFLE9BQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUM7O1FBRXpHLE9BQU8sSUFBSSxDQUFDO01BQ2Y7OzBCQUVELG9EQUFvQixFQUFFLFVBQVUsSUFBSSxRQUFROzs7UUFDeEMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzQjs7UUFFRHZSLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLGFBQUk7Z0JBQzdCTyxNQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDaEMsT0FBT0EsTUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3JCO01BQ0o7Ozs7OzswQkFNRCxvQ0FBWSxFQUFFLFVBQVU7UUFDcEJQLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUk7Y0FDTCxTQUFPOztRQUVYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0I7O1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7Y0FDYixTQUFPOztRQUVYLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7U0FDL0QsTUFBTTtZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtNQUNKOzs7OzswQkFLRCxvQ0FBYTtRQUNULElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7O1FBRXJCLEtBQUtBLElBQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNO2NBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUM7O1FBRXpCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7TUFDdkI7Ozs7Ozs7OzBCQVFELDRCQUFRLGtCQUFrQixnQkFBZ0IsbUJBQW1CLFVBQVUsVUFBVSxXQUFXOzs7O1FBRXhGQSxJQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7O1FBRXZCQSxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUUsT0FBTyxXQUFXLEdBQUM7O1FBRW5DQSxJQUFNLHdCQUF3QixHQUFHLFVBQVU7WUFDdkMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDO1lBQ3BELGtCQUFrQixDQUFDOztRQUV2QkEsSUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxXQUFFLENBQUMsRUFBRSxTQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFDLENBQUMsQ0FBQztRQUNsRkEsSUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLFdBQUUsQ0FBQyxFQUFFLFNBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUMsQ0FBQyxDQUFDOztRQUU5RkEsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUUxQkQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3BCQSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7UUFDcEJBLElBQUksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3JCQSxJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQzs7UUFFckIsS0FBSyxvQkFBVyxnREFBbUIsRUFBRTtZQUFoQ0MsSUFBTTs7WUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCOztrQ0FFb0M7WUFDakNBLElBQU0sSUFBSSxHQUFHTyxNQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFOztnQkFFdkIsT0FBUzthQUNaO1lBQ0RQLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0JBLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRUEsSUFBTSxZQUFZLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBR3FRLGtCQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O1lBRTlGclEsSUFBTSxlQUFlLEdBQUc7Z0JBQ3BCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSStTLDhCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJQSw4QkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDMUQsQ0FBQzs7WUFFRixJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHMUMsa0JBQU0sSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBR0Esa0JBQU07Z0JBQzVGLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksSUFBSSxDQUFDLEVBQUU7O2dCQUV0RnJRLElBQU0sc0JBQXNCLGlCQUFpQixhQUFhLENBQUMsR0FBRyxXQUFFLENBQUMsRUFBRSxTQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFDLENBQUMsQ0FBQztnQkFDOUZBLElBQU0sNEJBQTRCLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxXQUFFLENBQUMsRUFBRSxTQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFDLENBQUMsQ0FBQzs7Z0JBRTVGLFdBQVcsQ0FBQyxJQUFJLENBQUM7MEJBQ2IsSUFBSTs0QkFDSixNQUFNO29CQUNOLGFBQWEsRUFBRSxzQkFBc0I7b0JBQ3JDLG1CQUFtQixFQUFFLDRCQUE0QjsyQkFDakQsS0FBSztpQkFDUixDQUFDLENBQUM7YUFDTjs7O1FBNUJMLEtBQUtELElBQUlrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxZQTZCbEM7O1FBRUQsT0FBTyxXQUFXLENBQUM7TUFDdEI7OzBCQUVELHdEQUFzQixXQUFXLHFDQUFxQzs7O1FBQ2xFakIsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBRSxFQUFFLEVBQUUsU0FBR08sTUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFNLENBQUMsQ0FBQztRQUN0RixLQUFLLGtCQUFlLCtCQUFNLEVBQUU7WUFBdkJQLElBQU07O1lBQ1AsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsT0FBTyxNQUFNLENBQUM7TUFDakI7OzBCQUVELDBDQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNmOztRQUVELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsS0FBS0EsSUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDMUJBLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSUksbUJBQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDckUsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7YUFDSjtTQUNKOztRQUVELE9BQU8sS0FBSyxDQUFDO01BQ2hCOzs7Ozs7MEJBTUQsNENBQWdCLFdBQVcsV0FBVyxTQUFTLG1CQUFtQixLQUFLLFVBQVU7UUFDN0UsV0FBVyxHQUFHLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzFEOzs7Ozs7MEJBTUQsa0RBQW1CLFdBQVcsV0FBVyxTQUFTLG9CQUFvQixHQUFHLFdBQVc7UUFDaEYsV0FBVyxHQUFHLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDL0Q7Ozs7OzswQkFNRCw0Q0FBZ0IsV0FBVyxXQUFXLFNBQVMsbUJBQW1CO1FBQzlELFdBQVcsR0FBRyxXQUFXLElBQUksbUJBQW1CLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7TUFDdkQ7Ozs7OzswQkFNRCw0Q0FBZ0IsT0FBTyxVQUFVLFNBQVMsVUFBVSxZQUFZLGlCQUFpQjtRQUM3RUosSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pEO01BQ0o7Ozs7OzBCQUtELGtFQUEyQixVQUFVLGlCQUFpQixJQUFJLGlCQUFpQjtRQUN2RSxLQUFLQSxJQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzFCQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sV0FBQyxNQUFLLFNBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUMsQ0FBQyxDQUFDO0tBQ3JFOzs7RUFyM0JxQjBSLHNCQXMzQnpCOztBQUVELFdBQVcsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDOztBQUVoQyxTQUFTLGFBQWEsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLDRCQUE0Qjs7OztJQUlyRTFSLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkRBLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztDQUMzSDs7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUU7SUFDeEIsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQztDQUNwRTs7Ozs7O0FDcDZCYyx1Q0FBNkI7SUFDeEMsUUFBUSxJQUFJRSxrQkFBTSxDQUFDLE1BQU0sQ0FBQ3VVLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTztDQUN2RDs7Ozs7Ozs7QUNDYyxJQUFNLFVBQVUsR0FNM0IsbUJBQVcsR0FBRztJQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ3BCOztBQUVMLHFCQUFJLDRCQUFRLEtBQUssMEJBQThCO0lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFOzs7UUFHZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QixPQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDckQsSUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7O0lBRUwsSUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQy9COztBQUVMLHFCQUFJLDRCQUFRLEtBQUssTUFBVTtJQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzNDLElBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxXQUFFLENBQUMsRUFBRTtZQUNyQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBQ1AsSUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQU0sQ0FBQztLQUM5QjtDQUNKOztBQUdMelUsSUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDSSxtQkFBTyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7O0FDMUM5RUwsSUFBSSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU9yQixTQUF3QixtQkFBbUIsSUFBSTtJQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDbkIsZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztLQUN2QztJQUNELE9BQU8sZ0JBQWdCLENBQUM7Q0FDM0I7O0FDYkQsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUMxQkMsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDOztJQUVsQixLQUFLQSxJQUFNLENBQUMsSUFBSSxLQUFLLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtLQUNKOztJQUVEME8seUJBQWEsQ0FBQyxPQUFPLFdBQUUsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUNiLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7S0FDSixDQUFDLENBQUM7O0lBRUgsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7SUFDekIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7SUFFeEIxTyxJQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQzs7SUFFRCxLQUFLQSxJQUFJa0IsR0FBQyxHQUFHLENBQUMsRUFBRUEsR0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUVBLEdBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQ0EsR0FBQyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxDQUFDQSxHQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDQSxHQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDQSxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0tBQ0o7O0lBRUQsT0FBTyxNQUFNLENBQUM7Q0FDakI7O0FDakRjLFNBQVMsVUFBVSxHQUFHO0lBQ2pDakIsSUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDOztJQUVqQkEsSUFBTSxPQUFPLEdBQUcwVSxxQkFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLEtBQUsxVSxJQUFNLFFBQVEsSUFBSTBVLHFCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDcEMxVSxJQUFNLElBQUksR0FBRzBVLHFCQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXZDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmM1UsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtnQkFDeEIsS0FBSyxHQUFHLE9BQU8sQ0FBQzthQUNuQixNQUFNO2dCQUNILElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3ZCLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQ2QsTUFBTTtvQkFDSCxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUNkO2FBQ0o7O1lBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNmLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDM0I7U0FDSjtLQUNKOztJQUVELE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQ3pCREMsSUFBTSxVQUFVLEdBQUc7Ozs7O0lBS2YsUUFBUSxFQUFFLFVBQVU7Ozs7O0lBS3BCLFFBQVEsRUFBRSxVQUFVOzs7OztJQUtwQixXQUFXLEVBQUUsYUFBYTs7Ozs7SUFLMUIsZ0JBQWdCLEVBQUUsa0JBQWtCOzs7OztJQUtwQyxpQkFBaUIsRUFBRSxtQkFBbUI7Ozs7O0lBS3RDLFNBQVMsRUFBRSxXQUFXOzs7OztJQUt0QixTQUFTLEVBQUUsV0FBVzs7Ozs7SUFLdEIsWUFBWSxFQUFFLGNBQWM7Ozs7O0lBSzVCLG9CQUFvQixFQUFFLHNCQUFzQjs7Ozs7SUFLNUMsaUJBQWlCLEVBQUUsbUJBQW1COzs7OztJQUt0QyxnQkFBZ0IsRUFBRSxrQkFBa0I7Ozs7O0lBS3BDLFNBQVMsRUFBRSxXQUFXOzs7OztJQUt0QixPQUFPLEVBQUUsU0FBUzs7Ozs7SUFLbEIsVUFBVSxFQUFFLFlBQVk7Ozs7O0lBS3hCLFFBQVEsRUFBRSxVQUFVOzs7OztJQUtwQixTQUFTLEVBQUUsV0FBVzs7Ozs7SUFLdEIsU0FBUyxFQUFFLFdBQVc7Ozs7O0lBS3RCLGFBQWEsRUFBRSxlQUFlOzs7OztJQUs5QixRQUFRLEVBQUUsVUFBVTs7Q0FFdkIsQ0FBQzs7QUFFRixTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyRjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtJQUN0RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDbkM7O0FBRUQsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0lBQzdELFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0NBQ3hDOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDL0NELElBQUksSUFBSSxDQUFDO0lBQ1QsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFFLFdBQVM7UUFDckQsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUM0VSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUM1RSxPQUFPLEtBQUssQ0FBQztTQUNoQjtLQUNKO0lBQ0QsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFFLFdBQVM7UUFDcEQsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzVFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmOztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtJQUMxRCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0QixLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQzs7SUFFcEI1VSxJQUFJLFFBQVEsQ0FBQzs7O0lBR2IsS0FBSyxRQUFRLElBQUksTUFBTSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFFLFdBQVM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDcEQ7S0FDSjs7O0lBR0QsS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFFLFdBQVM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEMsTUFBTSxJQUFJLENBQUM0VSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNwRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hILFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JHLE1BQU07O2dCQUVILFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQzthQUMzRDtTQUNKO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ2hGLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDOztJQUVwQjVVLElBQUksSUFBSSxDQUFDOztJQUVULEtBQUssSUFBSSxJQUFJLE1BQU0sRUFBRTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBRSxXQUFTO1FBQzNDLElBQUksQ0FBQzRVLHFCQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0tBQ0o7SUFDRCxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBRSxXQUFTO1FBQ3pFLElBQUksQ0FBQ0EscUJBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7S0FDSjtDQUNKOztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtJQUNwQixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7Q0FDbkI7QUFDRCxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ3pDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDOzs7SUFHcEIzVSxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDQSxJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7SUFHdENBLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pEQSxJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQzs7O0lBRy9DQSxJQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7OztJQUdwQ0EsSUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFbENELElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUM7OztJQUd0RSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QyxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsRCxNQUFNOztZQUVILENBQUMsRUFBRSxDQUFDO1NBQ1A7S0FDSjs7O0lBR0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1FBRTNDLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1FBRWhELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBRSxXQUFTOztRQUUxRCxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7O1lBRXJDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFLE1BQU07O1lBRUgsQ0FBQyxFQUFFLENBQUM7U0FDUDs7O1FBR0QsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3pCOzs7SUFHRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7OztRQUdqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTRVLHFCQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxJQUFFLFdBQVM7Ozs7UUFJakUsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUNBLHFCQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUNBLHFCQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBR2xFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsU0FBUztTQUNaOzs7UUFHRCx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkgsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQ0EscUJBQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEY7UUFDRCxJQUFJLENBQUNBLHFCQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQ0EscUJBQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4RyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25IOzs7UUFHRCxLQUFLLElBQUksSUFBSSxXQUFXLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUUsV0FBUztZQUNoRCxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUTtnQkFDMUQsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUUsV0FBUztZQUM5RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5Qix3QkFBd0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNoSSxNQUFNLElBQUksQ0FBQ0EscUJBQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xHO1NBQ0o7UUFDRCxLQUFLLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBRSxXQUFTO1lBQ25GLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxRQUFRO2dCQUMxRCxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBRSxXQUFTO1lBQzlFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2hJLE1BQU0sSUFBSSxDQUFDQSxxQkFBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDdEQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEc7U0FDSjtLQUNKO0NBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JELFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDL0IsSUFBSSxDQUFDLE1BQU0sSUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUM7O0lBRXBFNVUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDOztJQUVsQixJQUFJOztRQUVBLElBQUksQ0FBQzRVLHFCQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0Qs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LEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0TSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3TyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL1AsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkgsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNySCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoTCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeE4sR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0ssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9CLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxSixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeFosR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RMLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEgsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JLLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5SixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckwsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEosR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6SyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuSixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25JLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25JLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUYsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25SLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwUixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxD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QUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDN0QsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzdELFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7UUFHOUNBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztRQUloQkQsSUFBSSxDQUFDLHVCQUF1QixVQUFVLENBQUMsRUFBRTtZQUNyQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtTQUMxQyxDQUFDOzs7O1FBSUZBLElBQUksQ0FBQyx1QkFBdUIsVUFBVSxDQUFDLEVBQUU7WUFDckMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4RSxDQUFDOzs7UUFHRkEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQzs7O1FBRzFCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9kZWVwX2VxdWFsLmpzIiwiLi4vc3JjL3V0aWwvdXRpbC5qcyIsIi4uL3NyYy91dGlsL2Jyb3dzZXIuanMiLCIuLi9zcmMvdXRpbC9jb25maWcuanMiLCIuLi9zcmMvdXRpbC93ZWJwX3N1cHBvcnRlZC5qcyIsIi4uL3NyYy91dGlsL3NrdV90b2tlbi5qcyIsIi4uL3NyYy91dGlsL21hcGJveC5qcyIsIi4uL3NyYy91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZS5qcyIsIi4uL3NyYy91dGlsL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkLmpzIiwiLi4vc3JjL3V0aWwvYWpheC5qcyIsIi4uL3NyYy91dGlsL2V2ZW50ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9leHRlbmQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL3VuYnVuZGxlX2pzb25saW50LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9wYXJzaW5nX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zY29wZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY3NzY29sb3JwYXJzZXIvY3NzY29sb3JwYXJzZXIuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9jb2xsYXRvci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdmFsdWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9saXRlcmFsLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9ydW50aW1lX2Vycm9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9hc3NlcnRpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvZXJjaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9ldmFsdWF0aW9uX2NvbnRleHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2NvbXBvdW5kX2V4cHJlc3Npb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvbGxhdG9yLmpzIiwiLi4vc3JjL2dlby9sbmdfbGF0X2JvdW5kcy5qcyIsIi4uL3NyYy9nZW8vbG5nX2xhdC5qcyIsIi4uL3NyYy9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZS5qcyIsIi4uL3NyYy9kYXRhL2V4dGVudC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvd2l0aGluLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pc19jb25zdGFudC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvdmFyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9wYXJzaW5nX2NvbnRleHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3N0b3BzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9zdGVwLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvY29sb3Jfc3BhY2VzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29hbGVzY2UuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2xldC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvYXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2luLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9tYXRjaC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY2FzZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc3RyaW5nLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoM19nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL211cm11cmhhc2gyX2djLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX3Bvc2l0aW9uX21hcC5qcyIsIi4uL3NyYy9yZW5kZXIvdW5pZm9ybV9iaW5kaW5nLmpzIiwiLi4vc3JjL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uLmpzIiwiLi4vc3JjL2RhdGEvbG9hZF9nZW9tZXRyeS5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzLmpzIiwiLi4vc3JjL3N0eWxlL3F1ZXJ5X3V0aWxzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vY29tbW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0My5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL21hdDQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9xdWF0Mi5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvaW1hZ2UuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3V0aWwvY29sb3JfcmFtcC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZWFyY3V0L3NyYy9lYXJjdXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcXVpY2tzZWxlY3QvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9jbGFzc2lmeV9yaW5ncy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcy5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVsYXllci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3ZlY3Rvci10aWxlL2xpYi92ZWN0b3J0aWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvaW5kZXguanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3N5bWJvbC90cmFuc2Zvcm1fdGV4dC5qcyIsIi4uL3NyYy9zeW1ib2wvbWVyZ2VsaW5lcy5qcyIsIi4uL3NyYy91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uLmpzIiwiLi4vc3JjL3N5bWJvbC9vbmVfZW0uanMiLCIuLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wYmYvaW5kZXguanMiLCIuLi9zcmMvc3R5bGUvcGFyc2VfZ2x5cGhfcGJmLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BvdHBhY2svaW5kZXgubWpzIiwiLi4vc3JjL3JlbmRlci9pbWFnZV9hdGxhcy5qcyIsIi4uL3NyYy9zeW1ib2wvc2hhcGluZy5qcyIsIi4uL3NyYy9zeW1ib2wvYW5jaG9yLmpzIiwiLi4vc3JjL3N5bWJvbC9zeW1ib2xfc2l6ZS5qcyIsIi4uL3NyYy9zeW1ib2wvY2hlY2tfbWF4X2FuZ2xlLmpzIiwiLi4vc3JjL3N5bWJvbC9nZXRfYW5jaG9ycy5qcyIsIi4uL3NyYy9zeW1ib2wvY2xpcF9saW5lLmpzIiwiLi4vc3JjL3N5bWJvbC9xdWFkcy5qcyIsIi4uL3NyYy9zeW1ib2wvY29sbGlzaW9uX2ZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvdGlueXF1ZXVlL2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvZmluZF9wb2xlX29mX2luYWNjZXNzaWJpbGl0eS5qcyIsIi4uL3NyYy9zeW1ib2wvc3ltYm9sX2xheW91dC5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0LmpzIiwiLi4vc3JjL3V0aWwvcmVzb2x2ZV90b2tlbnMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdF9zZWN0aW9uX292ZXJyaWRlLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL2NyZWF0ZV9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9yZW5kZXIvdGV4dHVyZS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlZF9pbnZva2VyLmpzIiwiLi4vc3JjL3V0aWwvYWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC93aG9vdHMtanMvaW5kZXgubWpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2lkLmpzIiwiLi4vc3JjL2RhdGEvZGVtX2RhdGEuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9kaWN0aW9uYXJ5X2NvZGVyLmpzIiwiLi4vc3JjL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2Vfc3RhdGUuanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9yZWZfcHJvcGVydGllcy5qcyIsIi4uL3NyYy91dGlsL3BlcmZvcm1hbmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZ3JvdXBfYnlfbGF5b3V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4LmpzIiwiLi4vc3JjL3JlbmRlci9nbHlwaF9hdGxhcy5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyX3RpbGUuanMiLCIuLi9zcmMvc291cmNlL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dnczg0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvZ2VvanNvbi1hcmVhL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvZ2VvanNvbi1yZXdpbmQvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvbGliL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9zb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy93aXRoaW4uanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdXBlcmNsdXN0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvc2ltcGxpZnkuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvZmVhdHVyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jb252ZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2NsaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy90cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdGlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS93b3JrZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkL2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvZG9tLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfc3ByaXRlLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2ltYWdlLmpzIiwiLi4vc3JjL3JlbmRlci9pbWFnZV9tYW5hZ2VyLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfZ2x5cGhfcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC90aW55LXNkZi9pbmRleC5qcyIsIi4uL3NyYy9yZW5kZXIvZ2x5cGhfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9saWdodC5qcyIsIi4uL3NyYy9yZW5kZXIvbGluZV9hdGxhcy5qcyIsIi4uL3NyYy91dGlsL2Rpc3BhdGNoZXIuanMiLCIuLi9zcmMvc291cmNlL2xvYWRfdGlsZWpzb24uanMiLCIuLi9zcmMvc291cmNlL3RpbGVfYm91bmRzLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl9zb3VyY2UuanMiLCIuLi9zcmMvZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc291cmNlL2ltYWdlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvdmlkZW9fc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9jYW52YXNfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3F1ZXJ5X2ZlYXR1cmVzLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2NhY2hlLmpzIiwiLi4vc3JjL2dsL2luZGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92ZXJ0ZXhfYnVmZmVyLmpzIiwiLi4vc3JjL2dsL3ZhbHVlLmpzIiwiLi4vc3JjL2dsL2ZyYW1lYnVmZmVyLmpzIiwiLi4vc3JjL2dsL2RlcHRoX21vZGUuanMiLCIuLi9zcmMvZ2wvc3RlbmNpbF9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbG9yX21vZGUuanMiLCIuLi9zcmMvZ2wvY3VsbF9mYWNlX21vZGUuanMiLCIuLi9zcmMvZ2wvY29udGV4dC5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX2NhY2hlLmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIiwiLi4vc3JjL3V0aWwvd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvdXRpbC9nbG9iYWxfd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9kZXJlZi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2VtcHR5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGlmZi5qcyIsIi4uL3NyYy9zeW1ib2wvZ3JpZF9pbmRleC5qcyIsIi4uL3NyYy9zeW1ib2wvcHJvamVjdGlvbi5qcyIsIi4uL3NyYy9zeW1ib2wvY29sbGlzaW9uX2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cy5qcyIsIi4uL3NyYy9zeW1ib2wvcGxhY2VtZW50LmpzIiwiLi4vc3JjL3N0eWxlL3BhdXNlYWJsZV9wbGFjZW1lbnQuanMiLCIuLi9zcmMvc3ltYm9sL2Nyb3NzX3RpbGVfc3ltYm9sX2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlLmpzIiwiLi4vc3JjL2RhdGEvcG9zX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc2hhZGVycy9zaGFkZXJzLmpzIiwiLi4vc3JjL3JlbmRlci92ZXJ0ZXhfYXJyYXlfb2JqZWN0LmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3BhdHRlcm4uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vZmlsbF9leHRydXNpb25fcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9maWxsX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vY2lyY2xlX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vY29sbGlzaW9uX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vZGVidWdfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9jbGlwcGluZ19tYXNrX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vaGVhdG1hcF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2hpbGxzaGFkZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2xpbmVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9yYXN0ZXJfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9zeW1ib2xfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9iYWNrZ3JvdW5kX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcHJvZ3JhbV91bmlmb3Jtcy5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jb2xsaXNpb25fZGVidWcuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfc3ltYm9sLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2NpcmNsZS5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19oZWF0bWFwLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2xpbmUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19maWxsX2V4dHJ1c2lvbi5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19oaWxsc2hhZGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfcmFzdGVyLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2JhY2tncm91bmQuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZGVidWcuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY3VzdG9tLmpzIiwiLi4vc3JjL3JlbmRlci9wYWludGVyLmpzIiwiLi4vc3JjL3V0aWwvcHJpbWl0aXZlcy5qcyIsIi4uL3NyYy9nZW8vZWRnZV9pbnNldHMuanMiLCIuLi9zcmMvZ2VvL3RyYW5zZm9ybS5qcyIsIi4uL3NyYy91dGlsL3Rocm90dGxlLmpzIiwiLi4vc3JjL3VpL2hhc2guanMiLCIuLi9zcmMvdWkvZXZlbnRzLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2Nyb2xsX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RyYWdfcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvZHJhZ19wYW4uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9rZXlib2FyZC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2RibGNsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90b3VjaF96b29tX3JvdGF0ZS5qcyIsIi4uL3NyYy91aS9iaW5kX2hhbmRsZXJzLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy91dGlsL2RlYnVnLmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vcm9sbHVwL21hcGJveGdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIGNvbXBhcmUgYW5kIGlzQnVmZmVyIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvYmxvYi82ODBlOWU1ZTQ4OGYyMmFhYzI3NTk5YTU3ZGM4NDRhNjMxNTkyOGRkL2luZGV4LmpzXG4vLyBvcmlnaW5hbCBub3RpY2U6XG5cbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHggPSBhLmxlbmd0aDtcbiAgdmFyIHkgPSBiLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXTtcbiAgICAgIHkgPSBiW2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gaXNCdWZmZXIoYikge1xuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiB0eXBlb2YgZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGIpO1xuICB9XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpO1xufVxuXG4vLyBiYXNlZCBvbiBub2RlIGFzc2VydCwgb3JpZ2luYWwgbm90aWNlOlxuLy8gTkI6IFRoZSBVUkwgdG8gdGhlIENvbW1vbkpTIHNwZWMgaXMga2VwdCBqdXN0IGZvciB0cmFkaXRpb24uXG4vLyAgICAgbm9kZS1hc3NlcnQgaGFzIGV2b2x2ZWQgYSBsb3Qgc2luY2UgdGhlbiwgYm90aCBpbiBBUEkgYW5kIGJlaGF2aW9yLlxuXG4vLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsLycpO1xudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb28oKSB7fS5uYW1lID09PSAnZm9vJztcbn0oKSk7XG5mdW5jdGlvbiBwVG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5mdW5jdGlvbiBpc1ZpZXcoYXJyYnVmKSB7XG4gIGlmIChpc0J1ZmZlcihhcnJidWYpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnJidWYpO1xuICB9XG4gIGlmICghYXJyYnVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnJidWYgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhcnJidWYuYnVmZmVyICYmIGFycmJ1Zi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIDEuIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcblxuLy8gMi4gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gYXNzZXJ0LlxuLy8gbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6IG1lc3NhZ2UsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWwsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pXG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2Jsb2IvYWRlZWVlYzhiZmNjNjA2OGIxODdkN2Q5ZmIzZDViYjFkM2EzMDg5OS9pbXBsZW1lbnRhdGlvbi5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmdW5jKSB7XG4gIGlmICghdXRpbC5pc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcbiAgICByZXR1cm4gZnVuYy5uYW1lO1xuICB9XG4gIHZhciBzdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIHZhciBtYXRjaCA9IHN0ci5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn1cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgdGhpcy5hY3R1YWwgPSBvcHRpb25zLmFjdHVhbDtcbiAgdGhpcy5leHBlY3RlZCA9IG9wdGlvbnMuZXhwZWN0ZWQ7XG4gIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yO1xuICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWVzc2FnZSA9IGdldE1lc3NhZ2UodGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTtcbiAgfVxuICB2YXIgc3RhY2tTdGFydEZ1bmN0aW9uID0gb3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb24gfHwgZmFpbDtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBub24gdjggYnJvd3NlcnMgc28gd2UgY2FuIGhhdmUgYSBzdGFja3RyYWNlXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7XG5cbiAgICAgIC8vIHRyeSB0byBzdHJpcCB1c2VsZXNzIGZyYW1lc1xuICAgICAgdmFyIGZuX25hbWUgPSBnZXROYW1lKHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7XG4gIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc3BlY3Qoc29tZXRoaW5nKSB7XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMgfHwgIXV0aWwuaXNGdW5jdGlvbihzb21ldGhpbmcpKSB7XG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChzb21ldGhpbmcpO1xuICB9XG4gIHZhciByYXduYW1lID0gZ2V0TmFtZShzb21ldGhpbmcpO1xuICB2YXIgbmFtZSA9IHJhd25hbWUgPyAnOiAnICsgcmF3bmFtZSA6ICcnO1xuICByZXR1cm4gJ1tGdW5jdGlvbicgKyAgbmFtZSArICddJztcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZikge1xuICByZXR1cm4gdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmFjdHVhbCksIDEyOCkgKyAnICcgK1xuICAgICAgICAgc2VsZi5vcGVyYXRvciArICcgJyArXG4gICAgICAgICB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuZXhwZWN0ZWQpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwRXF1YWwnLCBhc3NlcnQuZGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBTdHJpY3RFcXVhbCcsIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAmJiBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSA9PT0gMDtcblxuICAvLyA3LjIuIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIERhdGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBzYW1lIHRpbWUuXG4gIH0gZWxzZSBpZiAodXRpbC5pc0RhdGUoYWN0dWFsKSAmJiB1dGlsLmlzRGF0ZShleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMyBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIFJlZ0V4cCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kXG4gIC8vIHByb3BlcnRpZXMgKGBnbG9iYWxgLCBgbXVsdGlsaW5lYCwgYGxhc3RJbmRleGAsIGBpZ25vcmVDYXNlYCkuXG4gIH0gZWxzZSBpZiAodXRpbC5pc1JlZ0V4cChhY3R1YWwpICYmIHV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJlxuICAgICAgICAgICBhY3R1YWwuZ2xvYmFsID09PSBleHBlY3RlZC5nbG9iYWwgJiZcbiAgICAgICAgICAgYWN0dWFsLm11bHRpbGluZSA9PT0gZXhwZWN0ZWQubXVsdGlsaW5lICYmXG4gICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJlxuICAgICAgICAgICBhY3R1YWwuaWdub3JlQ2FzZSA9PT0gZXhwZWN0ZWQuaWdub3JlQ2FzZTtcblxuICAvLyA3LjQuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JykgJiZcbiAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IG51bGwgfHwgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyBJZiBib3RoIHZhbHVlcyBhcmUgaW5zdGFuY2VzIG9mIHR5cGVkIGFycmF5cywgd3JhcCB0aGVpciB1bmRlcmx5aW5nXG4gIC8vIEFycmF5QnVmZmVycyBpbiBhIEJ1ZmZlciBlYWNoIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlXG4gIC8vIFRoaXMgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHRoZSBhcnJheXMgdG8gaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGNoZWNrZWQgYnlcbiAgLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoYWthIHBUb1N0cmluZykuIE5ldmVyIHBlcmZvcm0gYmluYXJ5XG4gIC8vIGNvbXBhcmlzb25zIGZvciBGbG9hdCpBcnJheXMsIHRob3VnaCwgc2luY2UgZS5nLiArMCA9PT0gLTAgYnV0IHRoZWlyXG4gIC8vIGJpdCBwYXR0ZXJucyBhcmUgbm90IGlkZW50aWNhbC5cbiAgfSBlbHNlIGlmIChpc1ZpZXcoYWN0dWFsKSAmJiBpc1ZpZXcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgcFRvU3RyaW5nKGFjdHVhbCkgPT09IHBUb1N0cmluZyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICAhKGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgICAgICAgICAgICAgYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSkge1xuICAgIHJldHVybiBjb21wYXJlKG5ldyBVaW50OEFycmF5KGFjdHVhbC5idWZmZXIpLFxuICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGV4cGVjdGVkLmJ1ZmZlcikpID09PSAwO1xuXG4gIC8vIDcuNSBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAhPT0gaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIG1lbW9zID0gbWVtb3MgfHwge2FjdHVhbDogW10sIGV4cGVjdGVkOiBbXX07XG5cbiAgICB2YXIgYWN0dWFsSW5kZXggPSBtZW1vcy5hY3R1YWwuaW5kZXhPZihhY3R1YWwpO1xuICAgIGlmIChhY3R1YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gbWVtb3MuZXhwZWN0ZWQuaW5kZXhPZihleHBlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb3MuYWN0dWFsLnB1c2goYWN0dWFsKTtcbiAgICBtZW1vcy5leHBlY3RlZC5wdXNoKGV4cGVjdGVkKTtcblxuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSB7XG4gIGlmIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSBudWxsIHx8IGIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoc3RyaWN0ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKTtcbiAgdmFyIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYiwgc3RyaWN0KTtcbiAgfVxuICB2YXIga2EgPSBvYmplY3RLZXlzKGEpO1xuICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB2YXIga2V5LCBpO1xuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIV9kZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyA4LiBUaGUgbm9uLWVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBmb3IgYW55IGRlZXAgaW5lcXVhbGl0eS5cbi8vIGFzc2VydC5ub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gbm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5mdW5jdGlvbiBub3REZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBTdHJpY3RFcXVhbCcsIG5vdERlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn1cblxuXG4vLyA5LiBUaGUgc3RyaWN0IGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzdHJpY3QgZXF1YWxpdHksIGFzIGRldGVybWluZWQgYnkgPT09LlxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09PScsIGFzc2VydC5zdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDEwLiBUaGUgc3RyaWN0IG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHN0cmljdCBpbmVxdWFsaXR5LCBhc1xuLy8gZGV0ZXJtaW5lZCBieSAhPT0uICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT09JywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlLiAgVGhlIGluc3RhbmNlb2YgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBhcnJvdyBmdW5jdGlvbnMuXG4gIH1cblxuICBpZiAoRXJyb3IuaXNQcm90b3R5cGVPZihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXhwZWN0ZWQuY2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3RyeUJsb2NrKGJsb2NrKSB7XG4gIHZhciBlcnJvcjtcbiAgdHJ5IHtcbiAgICBibG9jaygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHR5cGVvZiBibG9jayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIGFjdHVhbCA9IF90cnlCbG9jayhibG9jayk7XG5cbiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArXG4gICAgICAgICAgICAobWVzc2FnZSA/ICcgJyArIG1lc3NhZ2UgOiAnLicpO1xuXG4gIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICB2YXIgdXNlclByb3ZpZGVkTWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJztcbiAgdmFyIGlzVW53YW50ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgdXRpbC5pc0Vycm9yKGFjdHVhbCk7XG4gIHZhciBpc1VuZXhwZWN0ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmICFleHBlY3RlZDtcblxuICBpZiAoKGlzVW53YW50ZWRFeGNlcHRpb24gJiZcbiAgICAgIHVzZXJQcm92aWRlZE1lc3NhZ2UgJiZcbiAgICAgIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fFxuICAgICAgaXNVbmV4cGVjdGVkRXhjZXB0aW9uKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnR290IHVud2FudGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICgoc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmIGV4cGVjdGVkICYmXG4gICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkge1xuICAgIHRocm93IGFjdHVhbDtcbiAgfVxufVxuXG4vLyAxMS4gRXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3I6XG4vLyBhc3NlcnQudGhyb3dzKGJsb2NrLCBFcnJvcl9vcHQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKHRydWUsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyhmYWxzZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHRocm93IGVycjsgfTtcblxuLy8gRXhwb3NlIGEgc3RyaWN0IG9ubHkgdmFyaWFudCBvZiBhc3NlcnRcbmZ1bmN0aW9uIHN0cmljdCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBzdHJpY3QpO1xufVxuYXNzZXJ0LnN0cmljdCA9IG9iamVjdEFzc2lnbihzdHJpY3QsIGFzc2VydCwge1xuICBlcXVhbDogYXNzZXJ0LnN0cmljdEVxdWFsLFxuICBkZWVwRXF1YWw6IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwsXG4gIG5vdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gIG5vdERlZXBFcXVhbDogYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbFxufSk7XG5hc3NlcnQuc3RyaWN0LnN0cmljdCA9IGFzc2VydC5zdHJpY3Q7XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAqIGFyZSBtZXQ6XG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSXG4gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIFBvcnRlZCBmcm9tIFdlYmtpdFxuICogaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1VuaXRCZXppZXIuaFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gVW5pdEJlemllcjtcblxuZnVuY3Rpb24gVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzLCBpbXBsaWNpdCBmaXJzdCBhbmQgbGFzdCBjb250cm9sIHBvaW50cyBhcmUgKDAsMCkgYW5kICgxLDEpLlxuICAgIHRoaXMuY3ggPSAzLjAgKiBwMXg7XG4gICAgdGhpcy5ieCA9IDMuMCAqIChwMnggLSBwMXgpIC0gdGhpcy5jeDtcbiAgICB0aGlzLmF4ID0gMS4wIC0gdGhpcy5jeCAtIHRoaXMuYng7XG5cbiAgICB0aGlzLmN5ID0gMy4wICogcDF5O1xuICAgIHRoaXMuYnkgPSAzLjAgKiAocDJ5IC0gcDF5KSAtIHRoaXMuY3k7XG4gICAgdGhpcy5heSA9IDEuMCAtIHRoaXMuY3kgLSB0aGlzLmJ5O1xuXG4gICAgdGhpcy5wMXggPSBwMXg7XG4gICAgdGhpcy5wMXkgPSBwMnk7XG4gICAgdGhpcy5wMnggPSBwMng7XG4gICAgdGhpcy5wMnkgPSBwMnk7XG59XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlWCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAvLyBgYXggdF4zICsgYnggdF4yICsgY3ggdCcgZXhwYW5kZWQgdXNpbmcgSG9ybmVyJ3MgcnVsZS5cbiAgICByZXR1cm4gKCh0aGlzLmF4ICogdCArIHRoaXMuYngpICogdCArIHRoaXMuY3gpICogdDtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlWSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKCh0aGlzLmF5ICogdCArIHRoaXMuYnkpICogdCArIHRoaXMuY3kpICogdDtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgzLjAgKiB0aGlzLmF4ICogdCArIDIuMCAqIHRoaXMuYngpICogdCArIHRoaXMuY3g7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZUN1cnZlWCA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICBpZiAodHlwZW9mIGVwc2lsb24gPT09ICd1bmRlZmluZWQnKSBlcHNpbG9uID0gMWUtNjtcblxuICAgIHZhciB0MCwgdDEsIHQyLCB4MiwgaTtcblxuICAgIC8vIEZpcnN0IHRyeSBhIGZldyBpdGVyYXRpb25zIG9mIE5ld3RvbidzIG1ldGhvZCAtLSBub3JtYWxseSB2ZXJ5IGZhc3QuXG4gICAgZm9yICh0MiA9IHgsIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cbiAgICAgICAgeDIgPSB0aGlzLnNhbXBsZUN1cnZlWCh0MikgLSB4O1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIpIDwgZXBzaWxvbikgcmV0dXJuIHQyO1xuXG4gICAgICAgIHZhciBkMiA9IHRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWCh0Mik7XG4gICAgICAgIGlmIChNYXRoLmFicyhkMikgPCAxZS02KSBicmVhaztcblxuICAgICAgICB0MiA9IHQyIC0geDIgLyBkMjtcbiAgICB9XG5cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGJpc2VjdGlvbiBtZXRob2QgZm9yIHJlbGlhYmlsaXR5LlxuICAgIHQwID0gMC4wO1xuICAgIHQxID0gMS4wO1xuICAgIHQyID0geDtcblxuICAgIGlmICh0MiA8IHQwKSByZXR1cm4gdDA7XG4gICAgaWYgKHQyID4gdDEpIHJldHVybiB0MTtcblxuICAgIHdoaWxlICh0MCA8IHQxKSB7XG5cbiAgICAgICAgeDIgPSB0aGlzLnNhbXBsZUN1cnZlWCh0Mik7XG4gICAgICAgIGlmIChNYXRoLmFicyh4MiAtIHgpIDwgZXBzaWxvbikgcmV0dXJuIHQyO1xuXG4gICAgICAgIGlmICh4ID4geDIpIHtcbiAgICAgICAgICAgIHQwID0gdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0MSA9IHQyO1xuICAgICAgICB9XG5cbiAgICAgICAgdDIgPSAodDEgLSB0MCkgKiAwLjUgKyB0MDtcbiAgICB9XG5cbiAgICAvLyBGYWlsdXJlLlxuICAgIHJldHVybiB0Mjtcbn07XG5cblVuaXRCZXppZXIucHJvdG90eXBlLnNvbHZlID0gZnVuY3Rpb24oeCwgZXBzaWxvbikge1xuICAgIHJldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHgsIGVwc2lsb24pKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnQ7XG5cbi8qKlxuICogQSBzdGFuZGFsb25lIHBvaW50IGdlb21ldHJ5IHdpdGggdXNlZnVsIGFjY2Vzc29yLCBjb21wYXJpc29uLCBhbmRcbiAqIG1vZGlmaWNhdGlvbiBtZXRob2RzLlxuICpcbiAqIEBjbGFzcyBQb2ludFxuICogQHBhcmFtIHtOdW1iZXJ9IHggdGhlIHgtY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsb25naXR1ZGUgb3Igc2NyZWVuXG4gKiBwaXhlbHMsIG9yIGFueSBvdGhlciBzb3J0IG9mIHVuaXQuXG4gKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlLiB0aGlzIGNvdWxkIGJlIGxhdGl0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgtNzcsIDM4KTtcbiAqL1xuZnVuY3Rpb24gUG9pbnQoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbn1cblxuUG9pbnQucHJvdG90eXBlID0ge1xuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgdGhpcyBwb2ludCwgcmV0dXJuaW5nIGEgbmV3IHBvaW50IHRoYXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICogd2l0aG91dCBhZmZlY3RpbmcgdGhlIG9sZCBvbmUuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHRoZSBjbG9uZVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGFub3RoZXIgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgYWRkOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgdG8gZnJvbSBwb2ludCxcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBzdWI6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3N1YihwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBwb2ludCxcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBtdWx0QnlQb2ludDogICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgZGl2QnlQb2ludDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2QnlQb2ludChwKTsgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBtdWx0OiAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX211bHQoayk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IGEgZmFjdG9yLFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IGsgZmFjdG9yXG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdjogICAgIGZ1bmN0aW9uKGspIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHRoaXMgcG9pbnQgYXJvdW5kIHRoZSAwLCAwIG9yaWdpbiBieSBhbiBhbmdsZSBhLFxuICAgICAqIGdpdmVuIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYSBhbmdsZSB0byByb3RhdGUgYXJvdW5kLCBpbiByYWRpYW5zXG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIHJvdGF0ZTogIGZ1bmN0aW9uKGEpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKGEpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHRoaXMgcG9pbnQgYXJvdW5kIHAgcG9pbnQgYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgUG9pbnQgdG8gcm90YXRlIGFyb3VuZFxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGVBcm91bmQ6ICBmdW5jdGlvbihhLHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKGEscCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50IGJ5IGEgNHgxIHRyYW5zZm9ybWF0aW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPn0gbSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbWF0TXVsdDogZnVuY3Rpb24obSkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KG0pOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoaXMgcG9pbnQgYnV0IGFzIGEgdW5pdCB2ZWN0b3IgZnJvbSAwLCAwLCBtZWFuaW5nXG4gICAgICogdGhhdCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmVzdWx0aW5nIHBvaW50IHRvIHRoZSAwLCAwXG4gICAgICogY29vcmRpbmF0ZSB3aWxsIGJlIGVxdWFsIHRvIDEgYW5kIHRoZSBhbmdsZSBmcm9tIHRoZSByZXN1bHRpbmdcbiAgICAgKiBwb2ludCB0byB0aGUgMCwgMCBjb29yZGluYXRlIHdpbGwgYmUgdGhlIHNhbWUgYXMgYmVmb3JlLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB1bml0IHZlY3RvciBwb2ludFxuICAgICAqL1xuICAgIHVuaXQ6ICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIGEgcGVycGVuZGljdWxhciBwb2ludCwgd2hlcmUgdGhlIG5ldyB5IGNvb3JkaW5hdGVcbiAgICAgKiBpcyB0aGUgb2xkIHggY29vcmRpbmF0ZSBhbmQgdGhlIG5ldyB4IGNvb3JkaW5hdGUgaXMgdGhlIG9sZCB5XG4gICAgICogY29vcmRpbmF0ZSBtdWx0aXBsaWVkIGJ5IC0xXG4gICAgICogQHJldHVybiB7UG9pbnR9IHBlcnBlbmRpY3VsYXIgcG9pbnRcbiAgICAgKi9cbiAgICBwZXJwOiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGlzIHBvaW50IHdpdGggdGhlIHggJiB5IGNvb3JkaW5hdGVzXG4gICAgICogcm91bmRlZCB0byBpbnRlZ2Vycy5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gcm91bmRlZCBwb2ludFxuICAgICAqL1xuICAgIHJvdW5kOiAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBtYWdpdHVkZSBvZiB0aGlzIHBvaW50OiB0aGlzIGlzIHRoZSBFdWNsaWRlYW5cbiAgICAgKiBkaXN0YW5jZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCdzIHggYW5kIHlcbiAgICAgKiBjb29yZGluYXRlcy5cbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1hZ25pdHVkZVxuICAgICAqL1xuICAgIG1hZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSnVkZ2Ugd2hldGhlciB0aGlzIHBvaW50IGlzIGVxdWFsIHRvIGFub3RoZXIgcG9pbnQsIHJldHVybmluZ1xuICAgICAqIHRydWUgb3IgZmFsc2UuXG4gICAgICogQHBhcmFtIHtQb2ludH0gb3RoZXIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcG9pbnRzIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueCA9PT0gb3RoZXIueCAmJlxuICAgICAgICAgICAgICAgdGhpcy55ID09PSBvdGhlci55O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50XG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAgICovXG4gICAgZGlzdDogZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcihwKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgZnJvbSB0aGlzIHBvaW50IHRvIGFub3RoZXIgcG9pbnQsXG4gICAgICogd2l0aG91dCB0aGUgc3F1YXJlIHJvb3Qgc3RlcC4gVXNlZnVsIGlmIHlvdSdyZSBjb21wYXJpbmdcbiAgICAgKiByZWxhdGl2ZSBkaXN0YW5jZXMuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAgICovXG4gICAgZGlzdFNxcjogZnVuY3Rpb24ocCkge1xuICAgICAgICB2YXIgZHggPSBwLnggLSB0aGlzLngsXG4gICAgICAgICAgICBkeSA9IHAueSAtIHRoaXMueTtcbiAgICAgICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGZyb20gdGhlIDAsIDAgY29vcmRpbmF0ZSB0byB0aGlzIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55LCB0aGlzLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtQb2ludH0gYiB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gICAgICovXG4gICAgYW5nbGVUbzogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzLnkgLSBiLnksIHRoaXMueCAtIGIueCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0aGlzIHBvaW50IGFuZCBhbm90aGVyIHBvaW50LCBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtQb2ludH0gYiB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gICAgICovXG4gICAgYW5nbGVXaXRoOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFuZ2xlV2l0aFNlcChiLngsIGIueSk7XG4gICAgfSxcblxuICAgIC8qXG4gICAgICogRmluZCB0aGUgYW5nbGUgb2YgdGhlIHR3byB2ZWN0b3JzLCBzb2x2aW5nIHRoZSBmb3JtdWxhIGZvclxuICAgICAqIHRoZSBjcm9zcyBwcm9kdWN0IGEgeCBiID0gfGF8fGJ8c2luKMOOwrgpIGZvciDDjsK4LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGVcbiAgICAgKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlXG4gICAgICogQHJldHVybiB7TnVtYmVyfSB0aGUgYW5nbGUgaW4gcmFkaWFuc1xuICAgICAqL1xuICAgIGFuZ2xlV2l0aFNlcDogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihcbiAgICAgICAgICAgIHRoaXMueCAqIHkgLSB0aGlzLnkgKiB4LFxuICAgICAgICAgICAgdGhpcy54ICogeCArIHRoaXMueSAqIHkpO1xuICAgIH0sXG5cbiAgICBfbWF0TXVsdDogZnVuY3Rpb24obSkge1xuICAgICAgICB2YXIgeCA9IG1bMF0gKiB0aGlzLnggKyBtWzFdICogdGhpcy55LFxuICAgICAgICAgICAgeSA9IG1bMl0gKiB0aGlzLnggKyBtWzNdICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2FkZDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggKz0gcC54O1xuICAgICAgICB0aGlzLnkgKz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3N1YjogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLT0gcC54O1xuICAgICAgICB0aGlzLnkgLT0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54ICo9IGs7XG4gICAgICAgIHRoaXMueSAqPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX2RpdjogZnVuY3Rpb24oaykge1xuICAgICAgICB0aGlzLnggLz0gaztcbiAgICAgICAgdGhpcy55IC89IGs7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfbXVsdEJ5UG9pbnQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICo9IHAueDtcbiAgICAgICAgdGhpcy55ICo9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXZCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAvPSBwLng7XG4gICAgICAgIHRoaXMueSAvPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfdW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2Rpdih0aGlzLm1hZygpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9wZXJwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XG4gICAgICAgIHRoaXMueSA9IHRoaXMueDtcbiAgICAgICAgdGhpcy54ID0gLXk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm90YXRlOiBmdW5jdGlvbihhbmdsZSkge1xuICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgeCA9IGNvcyAqIHRoaXMueCAtIHNpbiAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBzaW4gKiB0aGlzLnggKyBjb3MgKiB0aGlzLnk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm90YXRlQXJvdW5kOiBmdW5jdGlvbihhbmdsZSwgcCkge1xuICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgeCA9IHAueCArIGNvcyAqICh0aGlzLnggLSBwLngpIC0gc2luICogKHRoaXMueSAtIHAueSksXG4gICAgICAgICAgICB5ID0gcC55ICsgc2luICogKHRoaXMueCAtIHAueCkgKyBjb3MgKiAodGhpcy55IC0gcC55KTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9yb3VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcbiAgICAgICAgdGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdCBhIHBvaW50IGZyb20gYW4gYXJyYXkgaWYgbmVjZXNzYXJ5LCBvdGhlcndpc2UgaWYgdGhlIGlucHV0XG4gKiBpcyBhbHJlYWR5IGEgUG9pbnQsIG9yIGFuIHVua25vd24gdHlwZSwgcmV0dXJuIGl0IHVuY2hhbmdlZFxuICogQHBhcmFtIHtBcnJheTxOdW1iZXI+fFBvaW50fCp9IGEgYW55IGtpbmQgb2YgaW5wdXQgdmFsdWVcbiAqIEByZXR1cm4ge1BvaW50fSBjb25zdHJ1Y3RlZCBwb2ludCwgb3IgcGFzc2VkLXRocm91Z2ggdmFsdWUuXG4gKiBAZXhhbXBsZVxuICogLy8gdGhpc1xuICogdmFyIHBvaW50ID0gUG9pbnQuY29udmVydChbMCwgMV0pO1xuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogdmFyIHBvaW50ID0gbmV3IFBvaW50KDAsIDEpO1xuICovXG5Qb2ludC5jb252ZXJ0ID0gZnVuY3Rpb24gKGEpIHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFBvaW50KSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KGFbMF0sIGFbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gYTtcbn07XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIERlZXBseSBjb21wYXJlcyB0d28gb2JqZWN0IGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbChhOiA/bWl4ZWQsIGI6ID9taXhlZCk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh0eXBlb2YgYiA9PT0gJ29iamVjdCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhID09PSBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWVwRXF1YWw7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbi8qKlxuICogQG1vZHVsZSB1dGlsXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBgdGAgdGhhdCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAxLCByZXR1cm5cbiAqIGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBlYXNlcyBiZXR3ZWVuIDAgYW5kIDEgaW4gYSBwbGVhc2luZ1xuICogY3ViaWMgaW4tb3V0IGZhc2hpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhc2VDdWJpY0luT3V0KHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHQgPD0gMCkgcmV0dXJuIDA7XG4gICAgaWYgKHQgPj0gMSkgcmV0dXJuIDE7XG4gICAgY29uc3QgdDIgPSB0ICogdCxcbiAgICAgICAgdDMgPSB0MiAqIHQ7XG4gICAgcmV0dXJuIDQgKiAodCA8IDAuNSA/IHQzIDogMyAqICh0IC0gdDIpICsgdDMgLSAwLjc1KTtcbn1cblxuLyoqXG4gKiBHaXZlbiBnaXZlbiAoeCwgeSksICh4MSwgeTEpIGNvbnRyb2wgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSxcbiAqIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgaW50ZXJwb2xhdGVzIGFsb25nIHRoYXQgY3VydmUuXG4gKlxuICogQHBhcmFtIHAxeCBjb250cm9sIHBvaW50IDEgeCBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDF5IGNvbnRyb2wgcG9pbnQgMSB5IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnggY29udHJvbCBwb2ludCAyIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAyeSBjb250cm9sIHBvaW50IDIgeSBjb29yZGluYXRlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBiZXppZXIgPSBuZXcgVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEEgZGVmYXVsdCBiZXppZXItY3VydmUgcG93ZXJlZCBlYXNpbmcgZnVuY3Rpb24gd2l0aFxuICogY29udHJvbCBwb2ludHMgKDAuMjUsIDAuMSkgYW5kICgwLjI1LCAxKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBlYXNlID0gYmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSk7XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlIHZpYSBtaW4gKyBtYXhcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBuKSk7XG59XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlLCBleGNsdWRpbmcgdGhlIG1pbmltdW0sIHZpYSBtb2R1bGFyIGFyaXRobWV0aWNcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlIHRvIGJlIHJldHVybmVkLCBpbmNsdXNpdmVcbiAqIEByZXR1cm5zIGNvbnN0cmFpbmVkIG51bWJlclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgY29uc3QgdyA9ICgobiAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xuICAgIHJldHVybiAodyA9PT0gbWluKSA/IG1heCA6IHc7XG59XG5cbi8qXG4gKiBDYWxsIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvbiBhbiBhcnJheSBvZiBhcmd1bWVudHMsXG4gKiBjYWxsaW5nIGBjYWxsYmFja2Agd2l0aCB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgYWxsIGNhbGxzLlxuICpcbiAqIEBwYXJhbSBhcnJheSBpbnB1dCB0byBlYWNoIGNhbGwgb2YgdGhlIGFzeW5jIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZuIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChkYXRhLCBjYWxsYmFjaylcbiAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGxiYWNrIHJ1biBhZnRlciBhbGwgYXN5bmMgd29yayBpcyBkb25lLlxuICogY2FsbGVkIHdpdGggYW4gYXJyYXksIGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMgb2YgZWFjaCBhc3luYyBjYWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jQWxsPEl0ZW0sIFJlc3VsdD4oXG4gICAgYXJyYXk6IEFycmF5PEl0ZW0+LFxuICAgIGZuOiAoaXRlbTogSXRlbSwgZm5DYWxsYmFjazogQ2FsbGJhY2s8UmVzdWx0PikgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8UmVzdWx0Pj5cbikge1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSB7IHJldHVybiBjYWxsYmFjayhudWxsLCBbXSk7IH1cbiAgICBsZXQgcmVtYWluaW5nID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgZm4oaXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAoKHJlc3VsdDogYW55KTogUmVzdWx0KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIxMjNcbiAgICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkgY2FsbGJhY2soZXJyb3IsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLypcbiAqIFBvbHlmaWxsIGZvciBPYmplY3QudmFsdWVzLiBOb3QgZnVsbHkgc3BlYyBjb21wbGlhbnQsIGJ1dCB3ZSBkb24ndFxuICogbmVlZCBpdCB0byBiZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzPFQ+KG9iajoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLypcbiAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUga2V5cyBpbiBvbmUgb2JqZWN0IGFuZCB0aGUga2V5c1xuICogaW4gYW5vdGhlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMga2V5cyBkaWZmZXJlbmNlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c0RpZmZlcmVuY2U8UywgVD4ob2JqOiB7W2tleTogc3RyaW5nXTogU30sIG90aGVyOiB7W2tleTogc3RyaW5nXTogVH0pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gW107XG4gICAgZm9yIChjb25zdCBpIGluIG9iaikge1xuICAgICAgICBpZiAoIShpIGluIG90aGVyKSkge1xuICAgICAgICAgICAgZGlmZmVyZW5jZS5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgZGVzdGluYXRpb24gb2JqZWN0IGFuZCBvcHRpb25hbGx5IG1hbnkgc291cmNlIG9iamVjdHMsXG4gKiBjb3B5IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBvYmplY3RzIGludG8gdGhlIGRlc3RpbmF0aW9uLlxuICogVGhlIGxhc3Qgc291cmNlIG9iamVjdCBnaXZlbiBvdmVycmlkZXMgcHJvcGVydGllcyBmcm9tIHByZXZpb3VzXG4gKiBzb3VyY2Ugb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZGVzdCBkZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBzb3VyY2VzIHNvdXJjZXMgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSBwdWxsZWRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCAuLi5zb3VyY2VzOiBBcnJheTw/T2JqZWN0Pik6IE9iamVjdCB7XG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc3JjKSB7XG4gICAgICAgICAgICBkZXN0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9iamVjdCBhbmQgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhcyBzdHJpbmdzLCByZXR1cm4gdmVyc2lvblxuICogb2YgdGhhdCBvYmplY3Qgd2l0aCBvbmx5IHRob3NlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHNyYyB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydGllcyBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBjaG9zZW5cbiAqIHRvIGFwcGVhciBvbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm5zIG9iamVjdCB3aXRoIGxpbWl0ZWQgcHJvcGVydGllcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZm9vID0geyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMTAgfTtcbiAqIHZhciBqdXN0TmFtZSA9IHBpY2soZm9vLCBbJ25hbWUnXSk7XG4gKiAvLyBqdXN0TmFtZSA9IHsgbmFtZTogJ0NoYXJsaWUnIH1cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNyYzogT2JqZWN0LCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KTogT2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgayA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIGlmIChrIGluIHNyYykge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmxldCBpZCA9IDE7XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pcXVlIG51bWVyaWMgaWQsIHN0YXJ0aW5nIGF0IDEgYW5kIGluY3JlbWVudGluZyB3aXRoXG4gKiBlYWNoIGNhbGwuXG4gKlxuICogQHJldHVybnMgdW5pcXVlIG51bWVyaWMgaWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaWQrKztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSByYW5kb20gVVVJRCAodjQpLiBUYWtlbiBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qZWQvOTgyODgzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIGIoYSkge1xuICAgICAgICByZXR1cm4gYSA/IChhIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGEgLyA0KS50b1N0cmluZygxNikgOlxuICAgICAgICAvLyRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIHRoZSBpbXBsaWVkIGFycmF5IGxpdGVyYWwgY29udmVyc2lvbiBoZXJlXG4gICAgICAgICAgICAoWzFlN10gKyAtWzFlM10gKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBiKTtcbiAgICB9XG4gICAgcmV0dXJuIGIoKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHN0cmluZyB0byBtYXRjaCBVVUlEKHY0KSBvZiB0aGVcbiAqIGZvcm06IHh4eHh4eHh4LXh4eHgtNHh4eC1bODlhYl14eHgteHh4eHh4eHh4eHh4XG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byB2YWxpZGF0ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVV1aWQoc3RyOiA/c3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ciA/IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3Qoc3RyKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzLCByZXBsYWNlIGFsbCBvZiB0aGVtXG4gKiB3aXRoIGJvdW5kIHZlcnNpb25zIHRoYXQgd2lsbCBhbHdheXMgcmVmZXIgdG8gYGNvbnRleHRgIGFzIGB0aGlzYC4gVGhpc1xuICogaXMgdXNlZnVsIGZvciBjbGFzc2VzIHdoZXJlIG90aGVyd2lzZSBldmVudCBiaW5kaW5ncyB3b3VsZCByZWFzc2lnblxuICogYHRoaXNgIHRvIHRoZSBldmVudGVkIG9iamVjdCBvciBzb21lIG90aGVyIHZhbHVlOiB0aGlzIGxldHMgeW91IGVuc3VyZVxuICogdGhlIGB0aGlzYCB2YWx1ZSBhbHdheXMuXG4gKlxuICogQHBhcmFtIGZucyBsaXN0IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lc1xuICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBNeUNsYXNzKCkge1xuICogICBiaW5kQWxsKFsnb250aW1lciddLCB0aGlzKTtcbiAqICAgdGhpcy5uYW1lID0gJ1RvbSc7XG4gKiB9XG4gKiBNeUNsYXNzLnByb3RvdHlwZS5vbnRpbWVyID0gZnVuY3Rpb24oKSB7XG4gKiAgIGFsZXJ0KHRoaXMubmFtZSk7XG4gKiB9O1xuICogdmFyIG15Q2xhc3MgPSBuZXcgTXlDbGFzcygpO1xuICogc2V0VGltZW91dChteUNsYXNzLm9udGltZXIsIDEwMCk7XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZEFsbChmbnM6IEFycmF5PHN0cmluZz4sIGNvbnRleHQ6IE9iamVjdCk6IHZvaWQge1xuICAgIGZucy5mb3JFYWNoKChmbikgPT4ge1xuICAgICAgICBpZiAoIWNvbnRleHRbZm5dKSB7IHJldHVybjsgfVxuICAgICAgICBjb250ZXh0W2ZuXSA9IGNvbnRleHRbZm5dLmJpbmQoY29udGV4dCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBhIHBhcnRpY3VsYXIgc3Vic3RyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZzogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzdWZmaXgsIHN0cmluZy5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSAhPT0gLTE7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBtYXBwaW5nIGFsbCB0aGUgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCB3aGlsZVxuICogcHJlc2VydmluZyB0aGVpciBrZXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3QoaW5wdXQ6IE9iamVjdCwgaXRlcmF0b3I6IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogT2JqZWN0IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGJ5IGZpbHRlcmluZyBvdXQgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwnO1xuZXhwb3J0IHtkZWVwRXF1YWx9O1xuXG4vKipcbiAqIERlZXBseSBjbG9uZXMgdHdvIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lPFQ+KGlucHV0OiBUKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoY2xvbmUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gKChtYXBPYmplY3QoaW5wdXQsIGNsb25lKTogYW55KTogVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gYXJyYXlzIGhhdmUgYXQgbGVhc3Qgb25lIGNvbW1vbiBlbGVtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheXNJbnRlcnNlY3Q8VD4oYTogQXJyYXk8VD4sIGI6IEFycmF5PFQ+KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBhLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGlmIChiLmluZGV4T2YoYVtsXSkgPj0gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBhbmQgZW5zdXJlIGR1cGxpY2F0ZSB3YXJuaW5nIG1lc3NhZ2VzXG4gKiBhcmUgbm90IHByaW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgd2Fybk9uY2VIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdKSB7XG4gICAgICAgIC8vIGNvbnNvbGUgaXNuJ3QgZGVmaW5lZCBpbiBzb21lIFdlYldvcmtlcnMsIHNlZSAjMjU1OFxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdID0gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIGlmIHRoZSBwcm92aWRlZCBQb2ludHMgYXJlIGluIGEgY291bnRlciBjbG9ja3dpc2UgKHRydWUpIG9yIGNsb2Nrd2lzZSAoZmFsc2UpIG9yZGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHRydWUgZm9yIGEgY291bnRlciBjbG9ja3dpc2Ugc2V0IG9mIHBvaW50c1xuICovXG4vLyBodHRwOi8vYnJ5Y2Vib2UuY29tLzIwMDYvMTAvMjMvbGluZS1zZWdtZW50LWludGVyc2VjdGlvbi1hbGdvcml0aG0vXG5leHBvcnQgZnVuY3Rpb24gaXNDb3VudGVyQ2xvY2t3aXNlKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGMueSAtIGEueSkgKiAoYi54IC0gYS54KSA+IChiLnkgLSBhLnkpICogKGMueCAtIGEueCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2lnbmVkIGFyZWEgZm9yIHRoZSBwb2x5Z29uIHJpbmcuICBQb3N0aXZlIGFyZWFzIGFyZSBleHRlcmlvciByaW5ncyBhbmRcbiAqIGhhdmUgYSBjbG9ja3dpc2Ugd2luZGluZy4gIE5lZ2F0aXZlIGFyZWFzIGFyZSBpbnRlcmlvciByaW5ncyBhbmQgaGF2ZSBhIGNvdW50ZXIgY2xvY2t3aXNlXG4gKiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHJpbmcgRXh0ZXJpb3Igb3IgaW50ZXJpb3IgcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nOiBBcnJheTxQb2ludD4pOiBudW1iZXIge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDEsIHAxLCBwMjsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBwMSA9IHJpbmdbaV07XG4gICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgc3VtICs9IChwMi54IC0gcDEueCkgKiAocDEueSArIHAyLnkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIERldGVjdHMgY2xvc2VkIHBvbHlnb25zLCBmaXJzdCArIGxhc3QgcG9pbnQgYXJlIGVxdWFsXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBwb2ludHMgYXJyYXkgb2YgcG9pbnRzXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBvaW50cyBhcmUgYSBjbG9zZWQgcG9seWdvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDbG9zZWRQb2x5Z29uKHBvaW50czogQXJyYXk8UG9pbnQ+KTogYm9vbGVhbiB7XG4gICAgLy8gSWYgaXQgaXMgMiBwb2ludHMgdGhhdCBhcmUgdGhlIHNhbWUgdGhlbiBpdCBpcyBhIHBvaW50XG4gICAgLy8gSWYgaXQgaXMgMyBwb2ludHMgd2l0aCBzdGFydCBhbmQgZW5kIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBsaW5lXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwMSA9IHBvaW50c1swXTtcbiAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoTWF0aC5hYnMocDEueCAtIHAyLngpID4gMCB8fFxuICAgICAgICBNYXRoLmFicyhwMS55IC0gcDIueSkgPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwb2x5Z29uIHNpbXBsaWZpY2F0aW9uIGNhbiBwcm9kdWNlIHBvbHlnb25zIHdpdGggemVybyBhcmVhIGFuZCBtb3JlIHRoYW4gMyBwb2ludHNcbiAgICByZXR1cm4gTWF0aC5hYnMoY2FsY3VsYXRlU2lnbmVkQXJlYShwb2ludHMpKSA+IDAuMDE7XG59XG5cbi8qKlxuICogQ29udmVydHMgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIHRvIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNwaGVyaWNhbCBTcGhlcmljYWwgY29vcmRpbmF0ZXMsIGluIFtyYWRpYWwsIGF6aW11dGhhbCwgcG9sYXJdXG4gKiBAcmV0dXJuIGNhcnRlc2lhbiBjb29yZGluYXRlcyBpbiBbeCwgeSwgel1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oW3IsIGF6aW11dGhhbCwgcG9sYXJdOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0ge1xuICAgIC8vIFdlIGFic3RyYWN0IFwibm9ydGhcIi9cInVwXCIgKGNvbXBhc3Mtd2lzZSkgdG8gYmUgMMOCwrAgd2hlbiByZWFsbHkgdGhpcyBpcyA5MMOCwrAgKMOPwoAvMik6XG4gICAgLy8gY29ycmVjdCBmb3IgdGhhdCBoZXJlXG4gICAgYXppbXV0aGFsICs9IDkwO1xuXG4gICAgLy8gQ29udmVydCBhemltdXRoYWwgYW5kIHBvbGFyIGFuZ2xlcyB0byByYWRpYW5zXG4gICAgYXppbXV0aGFsICo9IE1hdGguUEkgLyAxODA7XG4gICAgcG9sYXIgKj0gTWF0aC5QSSAvIDE4MDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHIgKiBNYXRoLmNvcyhhemltdXRoYWwpICogTWF0aC5zaW4ocG9sYXIpLFxuICAgICAgICB5OiByICogTWF0aC5zaW4oYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgejogciAqIE1hdGguY29zKHBvbGFyKVxuICAgIH07XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuLyoqXG4gKiAgUmV0dW5zIHRydWUgaWYgdGhlIHdoZW4gcnVuIGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgZGF0YSBmcm9tICdDYWNoZS1Db250cm9sJyBoZWFkZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY2FjaGVDb250cm9sIFZhbHVlIG9mICdDYWNoZS1Db250cm9sJyBoZWFkZXJcbiAqIEByZXR1cm4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyc2VkIGhlYWRlciBpbmZvLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbChjYWNoZUNvbnRyb2w6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgLy8gVGFrZW4gZnJvbSBbV3JlY2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvd3JlY2spXG4gICAgY29uc3QgcmUgPSAvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2c7XG5cbiAgICBjb25zdCBoZWFkZXIgPSB7fTtcbiAgICBjYWNoZUNvbnRyb2wucmVwbGFjZShyZSwgKCQwLCAkMSwgJDIsICQzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJDIgfHwgJDM7XG4gICAgICAgIGhlYWRlclskMV0gPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyWydtYXgtYWdlJ10pIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gcGFyc2VJbnQoaGVhZGVyWydtYXgtYWdlJ10sIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG1heEFnZSkpIGRlbGV0ZSBoZWFkZXJbJ21heC1hZ2UnXTtcbiAgICAgICAgZWxzZSBoZWFkZXJbJ21heC1hZ2UnXSA9IG1heEFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyO1xufVxuXG5sZXQgX2lzU2FmYXJpID0gbnVsbDtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBydW4gaW4gV2ViS2l0IGRlcml2ZWQgYnJvd3NlcnMuXG4gKiBUaGlzIGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIFNhZmFyaSBjYXVzZWQgYnkgdXNpbmcgVHJhbnNmZXJhYmxlIG9iamVjdHMgdG9cbiAqIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBXZWJXb3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvODc3MVxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgdW5kZXJseWluZyBTYWZhcmkgaXNzdWUgaXMgZml4ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzY29wZSB7V2luZG93T3JXb3JrZXJHbG9iYWxTY29wZX0gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIGFuZCBXZWJXb3JrZXIgY29udGV4dCxcbiAqICAgICAgbGV0IHRoZSBjYWxsaW5nIHNjb3BlIHBhc3MgaW4gdGhlIGdsb2JhbCBzY29wZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKHNjb3BlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoX2lzU2FmYXJpID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdXNlckFnZW50ID0gc2NvcGUubmF2aWdhdG9yID8gc2NvcGUubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gICAgICAgIF9pc1NhZmFyaSA9ICEhc2NvcGUuc2FmYXJpIHx8XG4gICAgICAgICEhKHVzZXJBZ2VudCAmJiAoL1xcYihpUGFkfGlQaG9uZXxpUG9kKVxcYi8udGVzdCh1c2VyQWdlbnQpIHx8ICghIXVzZXJBZ2VudC5tYXRjaCgnU2FmYXJpJykgJiYgIXVzZXJBZ2VudC5tYXRjaCgnQ2hyb21lJykpKSk7XG4gICAgfVxuICAgIHJldHVybiBfaXNTYWZhcmk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46IChwYWludFN0YXJ0VGltZXN0YW1wOiBudW1iZXIpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGlsZVVSTCAmJiAhaXNNYXBib3hVUkwodGlsZVVSTCkpIHJldHVybiB0aWxlVVJMO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHRpbGVVUkwpO1xuICAgICAgICBjb25zdCBpbWFnZUV4dGVuc2lvblJlID0gLyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLztcbiAgICAgICAgY29uc3QgdGlsZVVSTEFQSVByZWZpeFJlID0gL14uK1xcL3Y0XFwvLztcblxuICAgICAgICAvLyBUaGUgdjQgbWFwYm94IHRpbGUgQVBJIHN1cHBvcnRzIDUxMng1MTIgaW1hZ2UgdGlsZXMgb25seSB3aGVuIEAyeFxuICAgICAgICAvLyBpcyBhcHBlbmRlZCB0byB0aGUgdGlsZSBVUkwuIElmIGB0aWxlU2l6ZTogNTEyYCBpcyBzcGVjaWZpZWQgZm9yXG4gICAgICAgIC8vIGEgTWFwYm94IHJhc3RlciBzb3VyY2UgZm9yY2UgdGhlIEAyeCBzdWZmaXggZXZlbiBpZiBhIG5vbiBoaWRwaSBkZXZpY2UuXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyIHx8IHRpbGVTaXplID09PSA1MTIgPyAnQDJ4JyA6ICcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCA/ICcud2VicCcgOiAnJDEnO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UoaW1hZ2VFeHRlbnNpb25SZSwgYCR7c3VmZml4fSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UodGlsZVVSTEFQSVByZWZpeFJlLCAnLycpO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAvdjQke3VybE9iamVjdC5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBnZXRBY2Nlc3NUb2tlbih1cmxPYmplY3QucGFyYW1zKSB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIGFjY2Vzc1Rva2VuICYmIHRoaXMuX3NrdVRva2VuKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYHNrdT0ke3RoaXMuX3NrdVRva2VufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsaXplVGlsZVVSTCh1cmw6IHN0cmluZywgcmVtb3ZlQWNjZXNzVG9rZW46IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBsZXQgcGFyYW1zID0gdXJsT2JqZWN0LnBhcmFtcztcbiAgICAgICAgaWYgKHJlbW92ZUFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuZmlsdGVyKHAgPT4gIXAubWF0Y2goL15hY2Nlc3NfdG9rZW49LykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSByZXN1bHQgKz0gYD8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjYW5vbmljYWxpemVUaWxlc2V0KHRpbGVKU09OOiBUaWxlSlNPTiwgc291cmNlVVJMPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUFjY2Vzc1Rva2VuID0gc291cmNlVVJMID8gaXNNYXBib3hVUkwoc291cmNlVVJMKSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdGlsZUpTT04udGlsZXMgfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHRoaXMuY2Fub25pY2FsaXplVGlsZVVSTCh1cmwsIHJlbW92ZUFjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKHBhcmFtczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbXzogc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tfOiBudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxuLy8gV2UncmUgdXNpbmcgYSBnbG9iYWwgc2hhcmVkIGNhY2hlIG9iamVjdC4gTm9ybWFsbHksIHJlcXVlc3RpbmcgYWQtaG9jIENhY2hlIG9iamVjdHMgaXMgZmluZSwgYnV0XG4vLyBTYWZhcmkgaGFzIGEgbWVtb3J5IGxlYWsgaW4gd2hpY2ggaXQgZmFpbHMgdG8gcmVsZWFzZSBtZW1vcnkgd2hlbiByZXF1ZXN0aW5nIGtleXMoKSBmcm9tIGEgQ2FjaGVcbi8vIG9iamVjdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5OTEgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5sZXQgc2hhcmVkQ2FjaGU6ID9Qcm9taXNlPENhY2hlPjtcblxuZnVuY3Rpb24gY2FjaGVPcGVuKCkge1xuICAgIGlmICh3aW5kb3cuY2FjaGVzICYmICFzaGFyZWRDYWNoZSkge1xuICAgICAgICBzaGFyZWRDYWNoZSA9IHdpbmRvdy5jYWNoZXMub3BlbihDQUNIRV9OQU1FKTtcbiAgICB9XG59XG5cbi8vIFdlJ3JlIG5ldmVyIGNsb3NpbmcgdGhlIGNhY2hlLCBidXQgb3VyIHVuaXQgdGVzdHMgcmVseSBvbiBjaGFuZ2luZyBvdXQgdGhlIGdsb2JhbCB3aW5kb3cuY2FjaGVzXG4vLyBvYmplY3QsIHNvIHdlIGhhdmUgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHVuaXQgdGVzdHMgdGhhdCBhbGxvd3MgcmVzZXR0aW5nIHRoZSBzaGFyZWQgY2FjaGUuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVDbG9zZSgpIHtcbiAgICBzaGFyZWRDYWNoZSA9IHVuZGVmaW5lZDtcbn1cblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFJlc3BvbnNlT3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IG5ldyB3aW5kb3cuSGVhZGVycygpXG4gICAgfTtcbiAgICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHYsIGspID0+IG9wdGlvbnMuaGVhZGVycy5zZXQoaywgdikpO1xuXG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbm8tc3RvcmUnXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KCdFeHBpcmVzJywgbmV3IERhdGUocmVxdWVzdFRpbWUgKyBjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSAqIDEwMDApLnRvVVRDU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IG5ldyBEYXRlKG9wdGlvbnMuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSkuZ2V0VGltZSgpIC0gcmVxdWVzdFRpbWU7XG4gICAgaWYgKHRpbWVVbnRpbEV4cGlyeSA8IE1JTl9USU1FX1VOVElMX0VYUElSWSkgcmV0dXJuO1xuXG4gICAgcHJlcGFyZUJvZHkocmVzcG9uc2UsIGJvZHkgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IG5ldyB3aW5kb3cuUmVzcG9uc2UoYm9keSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY2FjaGVPcGVuKCk7XG4gICAgICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcbiAgICAgICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgIGNvbnN0IHN0cmlwcGVkVVJMID0gc3RyaXBRdWVyeVBhcmFtZXRlcnMocmVxdWVzdC51cmwpO1xuXG4gICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlc2ggPSBpc0ZyZXNoKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWluc2VydCBpbnRvIGNhY2hlIHNvIHRoYXQgb3JkZXIgb2Yga2V5cyBpbiB0aGUgY2FjaGUgaXMgdGhlIG9yZGVyIG9mIGFjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIG1ha2VzIHRoZSBjYWNoZSBhIExSVSBpbnN0ZWFkIG9mIGEgRklGTyBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKHN0cmlwcGVkVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXQoc3RyaXBwZWRVUkwsIHJlc3BvbnNlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UsIGZyZXNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSB8fCAwKTtcbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICByZXR1cm4gZXhwaXJlcyA+IERhdGUubm93KCkgJiYgIWNhY2hlQ29udHJvbFsnbm8tY2FjaGUnXTtcbn1cblxuLy8gYEluZmluaXR5YCB0cmlnZ2VycyBhIGNhY2hlIGNoZWNrIGFmdGVyIHRoZSBmaXJzdCB0aWxlIGlzIGxvYWRlZFxuLy8gc28gdGhhdCBhIGNoZWNrIGlzIHJ1biBhdCBsZWFzdCBvbmNlIG9uIGVhY2ggcGFnZSBsb2FkLlxubGV0IGdsb2JhbEVudHJ5Q291bnRlciA9IEluZmluaXR5O1xuXG4vLyBUaGUgY2FjaGUgY2hlY2sgZ2V0cyBydW4gb24gYSB3b3JrZXIuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdFxuLy8gcHJvZmlsaW5nIHNvbWV0aW1lcyBzaG93cyB0aGlzIGFzIHRha2luZyB1cCBzaWduaWZpY2FudCB0aW1lIG9uIHRoZVxuLy8gdGhyZWFkIGl0IGdldHMgY2FsbGVkIGZyb20uIEFuZCBzb21ldGltZXMgaXQgZG9lc24ndC4gSXQgKm1heSogYmVcbi8vIGZpbmUgdG8gcnVuIHRoaXMgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBvdXQgb2YgY2F1dGlvbiB0aGlzIGlzIGJlaW5nXG4vLyBkaXNwYXRjaGVkIG9uIGEgd29ya2VyLiBUaGlzIGNhbiBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBpbiB0aGUgZnV0dXJlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgICBnbG9iYWxFbnRyeUNvdW50ZXIrKztcbiAgICBpZiAoZ2xvYmFsRW50cnlDb3VudGVyID4gY2FjaGVDaGVja1RocmVzaG9sZCkge1xuICAgICAgICBkaXNwYXRjaGVyLmdldEFjdG9yKCkuc2VuZCgnZW5mb3JjZUNhY2hlU2l6ZUxpbWl0JywgY2FjaGVMaW1pdCk7XG4gICAgICAgIGdsb2JhbEVudHJ5Q291bnRlciA9IDA7XG4gICAgfVxufVxuXG4vLyBydW5zIG9uIHdvcmtlciwgc2VlIGFib3ZlIGNvbW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQ6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIHNoYXJlZENhY2hlXG4gICAgICAgIC50aGVuKGNhY2hlID0+IHtcbiAgICAgICAgICAgIGNhY2hlLmtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSBsaW1pdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRpbGVDYWNoZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByb21pc2UgPSB3aW5kb3cuY2FjaGVzLmRlbGV0ZShDQUNIRV9OQU1FKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS5jYXRjaChjYWxsYmFjaykudGhlbigoKSA9PiBjYWxsYmFjaygpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgY2FjaGVMaW1pdCA9IGxpbWl0O1xuICAgIGNhY2hlQ2hlY2tUaHJlc2hvbGQgPSBjaGVja1RocmVzaG9sZDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxubGV0IHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzOiA/Ym9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBwb3J0c09mZnNjcmVlbkNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgIHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzID0gd2luZG93Lk9mZnNjcmVlbkNhbnZhcyAmJlxuICAgICAgICAgICAgbmV3IHdpbmRvdy5PZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdy5jcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9ydHNPZmZzY3JlZW5DYW52YXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCB3YXJuT25jZSwgaXNXb3JrZXJ9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCBmcm9tICcuL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWRlbnRpYWxzIGAnc2FtZS1vcmlnaW4nfCdpbmNsdWRlJ2AgVXNlICdpbmNsdWRlJyB0byBzZW5kIGNvb2tpZXMgd2l0aCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM/OiBPYmplY3QsXG4gICAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyxcbiAgICBib2R5Pzogc3RyaW5nLFxuICAgIHR5cGU/OiAnc3RyaW5nJyB8ICdqc29uJyB8ICdhcnJheUJ1ZmZlcicsXG4gICAgY3JlZGVudGlhbHM/OiAnc2FtZS1vcmlnaW4nIHwgJ2luY2x1ZGUnLFxuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZz86IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQ2FsbGJhY2s8VD4gPSAoZXJyb3I6ID9FcnJvciwgZGF0YTogP1QsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4gdm9pZDtcblxuY2xhc3MgQUpBWEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwMSAmJiBpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSAnOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vUmljaC1IYXJyaXMvYnVibGUvaXNzdWVzLzQwXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLnN0YXR1c30pOiAke3RoaXMudXJsfWA7XG4gICAgfVxufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSdyZSBzZW5kaW5nIHRoZSBjb3JyZWN0IHJlZmVycmVyIGZyb20gYmxvYiBVUkwgd29ya2VyIGJ1bmRsZXMuXG4vLyBGb3IgZmlsZXMgbG9hZGVkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLCBgbG9jYXRpb24ub3JpZ2luYCB3aWxsIGJlIHNldFxuLy8gdG8gdGhlIHN0cmluZyghKSBcIm51bGxcIiAoRmlyZWZveCksIG9yIFwiZmlsZTovL1wiIChDaHJvbWUsIFNhZmFyaSwgRWRnZSwgSUUpLFxuLy8gYW5kIHdlIHdpbGwgc2V0IGFuIGVtcHR5IHJlZmVycmVyLiBPdGhlcndpc2UsIHdlJ3JlIHVzaW5nIHRoZSBkb2N1bWVudCdzIFVSTC5cbi8qIGdsb2JhbCBzZWxmICovXG5leHBvcnQgY29uc3QgZ2V0UmVmZXJyZXIgPSBpc1dvcmtlcigpID9cbiAgICAoKSA9PiBzZWxmLndvcmtlciAmJiBzZWxmLndvcmtlci5yZWZlcnJlciA6XG4gICAgKCkgPT4gKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2Jsb2I6JyA/IHdpbmRvdy5wYXJlbnQgOiB3aW5kb3cpLmxvY2F0aW9uLmhyZWY7XG5cbi8vIERldGVybWluZXMgd2hldGhlciBhIFVSTCBpcyBhIGZpbGU6Ly8gVVJMLiBUaGlzIGlzIG9idmlvdXNseSB0aGUgY2FzZSBpZiBpdCBiZWdpbnNcbi8vIHdpdGggZmlsZTovLy4gUmVsYXRpdmUgVVJMcyBhcmUgYWxzbyBmaWxlOi8vIFVSTHMgaWZmIHRoZSBvcmlnaW5hbCBkb2N1bWVudCB3YXMgbG9hZGVkXG4vLyB2aWEgYSBmaWxlOi8vIFVSTC5cbmNvbnN0IGlzRmlsZVVSTCA9IHVybCA9PiAvXmZpbGU6Ly50ZXN0KHVybCkgfHwgKC9eZmlsZTovLnRlc3QoZ2V0UmVmZXJyZXIoKSkgJiYgIS9eXFx3KzovLnRlc3QodXJsKSk7XG5cbmZ1bmN0aW9uIG1ha2VGZXRjaFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyB3aW5kb3cuQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycy51cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0UGFyYW1ldGVycy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGJvZHk6IHJlcXVlc3RQYXJhbWV0ZXJzLmJvZHksXG4gICAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVycyxcbiAgICAgICAgcmVmZXJyZXI6IGdldFJlZmVycmVyKCksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbiAgICB9KTtcbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2FjaGVJZ25vcmluZ1NlYXJjaCA9IGhhc0NhY2hlRGVmZWF0aW5nU2t1KHJlcXVlc3QudXJsKTtcblxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9yRmV0Y2ggPSAoZXJyLCBjYWNoZWRSZXNwb25zZSwgcmVzcG9uc2VJc0ZyZXNoKSA9PiB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gRG8gZmV0Y2ggaW4gY2FzZSBvZiBjYWNoZSBlcnJvci5cbiAgICAgICAgICAgIC8vIEhUVFAgcGFnZXMgaW4gRWRnZSB0cmlnZ2VyIGEgc2VjdXJpdHkgZXJyb3IgdGhhdCBjYW4gYmUgaWdub3JlZC5cbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gJ1NlY3VyaXR5RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSAmJiByZXNwb25zZUlzRnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5pc2hSZXF1ZXN0KGNhY2hlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZG8gcmV2YWxpZGF0aW9uIHdpdGggJ0lmLU5vbmUtTWF0Y2gnIGJlY2F1c2UgdGhlbiB0aGVcbiAgICAgICAgICAgIC8vIHJlcXVlc3QgZG9lc24ndCBoYXZlIHNpbXBsZSBjb3JzIGhlYWRlcnMuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgd2luZG93LmZldGNoKHJlcXVlc3QpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVhYmxlUmVzcG9uc2UgPSBjYWNoZUlnbm9yaW5nU2VhcmNoID8gcmVzcG9uc2UuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaFJlcXVlc3QocmVzcG9uc2UsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgcmVzcG9uc2Uuc3RhdHVzLCByZXF1ZXN0UGFyYW1ldGVycy51cmwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDIwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2lsZW5jZSBleHBlY3RlZCBBYm9ydEVycm9yXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmlzaFJlcXVlc3QgPSAocmVzcG9uc2UsIGNhY2hlYWJsZVJlc3BvbnNlLCByZXF1ZXN0VGltZSkgPT4ge1xuICAgICAgICAoXG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnYXJyYXlCdWZmZXInID8gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSA6XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicgPyByZXNwb25zZS5qc29uKCkgOlxuICAgICAgICAgICAgcmVzcG9uc2UudGV4dCgpXG4gICAgICAgICkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjYWNoZWFibGVSZXNwb25zZSAmJiByZXF1ZXN0VGltZSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZSBhZnRlciBpdCBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICAgICAgICAgICAgLy8gVW50aWwgaXQgaXMgZnVsbHkgbG9hZGVkIHRoZXJlIGlzIGEgY2hhbmNlIGl0IHdpbGwgYmUgYWJvcnRlZC4gQWJvcnRpbmcgd2hpbGVcbiAgICAgICAgICAgICAgICAvLyByZWFkaW5nIHRoZSBib2R5IGNhbiBjYXVzZSB0aGUgY2FjaGUgaW5zZXJ0aW9uIHRvIGVycm9yLiBXZSBjb3VsZCBjYXRjaCB0aGlzIGVycm9yXG4gICAgICAgICAgICAgICAgLy8gaW4gbW9zdCBicm93c2VycyBidXQgaW4gRmlyZWZveCBpdCBzZWVtcyB0byBzb21ldGltZXMgY3Jhc2ggdGhlIHRhYi4gQWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gaXQgdG8gdGhlIGNhY2hlIGhlcmUgYXZvaWRzIHRoYXQgZXJyb3IuXG4gICAgICAgICAgICAgICAgY2FjaGVQdXQocmVxdWVzdCwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSk7XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoIWFib3J0ZWQpIGNhbGxiYWNrKG5ldyBFcnJvcihlcnIubWVzc2FnZSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKGNhY2hlSWdub3JpbmdTZWFyY2gpIHtcbiAgICAgICAgY2FjaGVHZXQocmVxdWVzdCwgdmFsaWRhdGVPckZldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0ZU9yRmV0Y2gobnVsbCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIGlmICghY29tcGxldGUpIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9fTtcbn1cblxuZnVuY3Rpb24gbWFrZVhNTEh0dHBSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgPSBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0UGFyYW1ldGVycy5tZXRob2QgfHwgJ0dFVCcsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCwgdHJ1ZSk7XG4gICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgfVxuICAgIGZvciAoY29uc3QgayBpbiByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGssIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnNba10pO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAndGV4dCc7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIH1cbiAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gcmVxdWVzdFBhcmFtZXRlcnMuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJztcbiAgICB4aHIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKHhoci5zdGF0dXNUZXh0KSk7XG4gICAgfTtcbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAoKCh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB8fCB4aHIuc3RhdHVzID09PSAwKSAmJiB4aHIucmVzcG9uc2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBkYXRhOiBtaXhlZCA9IHhoci5yZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBtYW51YWxseSBwYXJzaW5nIEpTT04gaGVyZSB0byBnZXQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGEsIHhoci5nZXRSZXNwb25zZUhlYWRlcignQ2FjaGUtQ29udHJvbCcpLCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0V4cGlyZXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgQUpBWEVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIuc3RhdHVzLCByZXF1ZXN0UGFyYW1ldGVycy51cmwpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgeGhyLnNlbmQocmVxdWVzdFBhcmFtZXRlcnMuYm9keSk7XG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHhoci5hYm9ydCgpfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1ha2VSZXF1ZXN0ID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgLy8gV2UncmUgdHJ5aW5nIHRvIHVzZSB0aGUgRmV0Y2ggQVBJIGlmIHBvc3NpYmxlLiBIb3dldmVyLCBpbiBzb21lIHNpdHVhdGlvbnMgd2UgY2FuJ3QgdXNlIGl0OlxuICAgIC8vIC0gSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXQgYXQgYWxsLiBJbiB0aGlzIGNhc2UsIHdlIGRpc3BhdGNoIHRoZSByZXF1ZXN0IHRvIHRoZSBtYWluIHRocmVhZCBzb1xuICAgIC8vICAgdGhhdCB3ZSBjYW4gZ2V0IGFuIGFjY3J1YXRlIHJlZmVycmVyIGhlYWRlci5cbiAgICAvLyAtIFNhZmFyaSBleHBvc2VzIHdpbmRvdy5BYm9ydENvbnRyb2xsZXIsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYWN0dWFsbHkgYWJvcnQgYW55IHJlcXVlc3RzIGluXG4gICAgLy8gICBzb21lIHZlcnNpb25zIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDk4MCNjMilcbiAgICAvLyAtIFJlcXVlc3RzIGZvciByZXNvdXJjZXMgd2l0aCB0aGUgZmlsZTovLyBVUkkgc2NoZW1lIGRvbid0IHdvcmsgd2l0aCB0aGUgRmV0Y2ggQVBJIGVpdGhlci4gSW5cbiAgICAvLyAgIHRoaXMgY2FzZSB3ZSB1bmNvbmRpdGlvbmFsbHkgdXNlIFhIUiBvbiB0aGUgY3VycmVudCB0aHJlYWQgc2luY2UgcmVmZXJyZXJzIGRvbid0IG1hdHRlci5cbiAgICBpZiAoIWlzRmlsZVVSTChyZXF1ZXN0UGFyYW1ldGVycy51cmwpKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmV0Y2ggJiYgd2luZG93LlJlcXVlc3QgJiYgd2luZG93LkFib3J0Q29udHJvbGxlciAmJiB3aW5kb3cuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ3NpZ25hbCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUZldGNoUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dvcmtlcigpICYmIHNlbGYud29ya2VyICYmIHNlbGYud29ya2VyLmFjdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBxdWV1ZU9uTWFpblRocmVhZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53b3JrZXIuYWN0b3Iuc2VuZCgnZ2V0UmVzb3VyY2UnLCByZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2ssIHVuZGVmaW5lZCwgcXVldWVPbk1haW5UaHJlYWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRKU09OID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxPYmplY3Q+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdqc29uJ30pLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXJyYXlCdWZmZXIgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPEFycmF5QnVmZmVyPik6IENhbmNlbGFibGUge1xuICAgIHJldHVybiBtYWtlUmVxdWVzdChleHRlbmQocmVxdWVzdFBhcmFtZXRlcnMsIHt0eXBlOiAnYXJyYXlCdWZmZXInfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3N0RGF0YSA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8c3RyaW5nPik6IENhbmNlbGFibGUge1xuICAgIHJldHVybiBtYWtlUmVxdWVzdChleHRlbmQocmVxdWVzdFBhcmFtZXRlcnMsIHttZXRob2Q6ICdQT1NUJ30pLCBjYWxsYmFjayk7XG59O1xuXG5mdW5jdGlvbiBzYW1lT3JpZ2luKHVybCkge1xuICAgIGNvbnN0IGE6IEhUTUxBbmNob3JFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGEucHJvdG9jb2wgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCAmJiBhLmhvc3QgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xufVxuXG5jb25zdCB0cmFuc3BhcmVudFBuZ1VybCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0nO1xuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvSW1hZ2UoZGF0YTogQXJyYXlCdWZmZXIsIGNhbGxiYWNrOiAoZXJyOiA/RXJyb3IsIGltYWdlOiA/SFRNTEltYWdlRWxlbWVudCkgPT4gdm9pZCwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSB7XG4gICAgY29uc3QgaW1nOiBIVE1MSW1hZ2VFbGVtZW50ID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuICAgIGNvbnN0IFVSTCA9IHdpbmRvdy5VUkw7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgaW1nKTtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKTtcbiAgICB9O1xuICAgIGltZy5vbmVycm9yID0gKCkgPT4gY2FsbGJhY2sobmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBpbWFnZS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbCA9IGNhY2hlQ29udHJvbDtcbiAgICAoaW1nOiBhbnkpLmV4cGlyZXMgPSBleHBpcmVzO1xuICAgIGltZy5zcmMgPSBkYXRhLmJ5dGVMZW5ndGggPyBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpIDogdHJhbnNwYXJlbnRQbmdVcmw7XG59XG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9JbWFnZUJpdG1hcChkYXRhOiBBcnJheUJ1ZmZlciwgY2FsbGJhY2s6IChlcnI6ID9FcnJvciwgaW1hZ2U6ID9JbWFnZUJpdG1hcCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGJsb2I6IEJsb2IgPSBuZXcgd2luZG93LkJsb2IoW25ldyBVaW50OEFycmF5KGRhdGEpXSwge3R5cGU6ICdpbWFnZS9wbmcnfSk7XG4gICAgd2luZG93LmNyZWF0ZUltYWdlQml0bWFwKGJsb2IpLnRoZW4oKGltZ0JpdG1hcCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBpbWdCaXRtYXApO1xuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgaW1hZ2UgYmVjYXVzZSBvZiAke2UubWVzc2FnZX0uIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuYCkpO1xuICAgIH0pO1xufVxuXG5sZXQgaW1hZ2VRdWV1ZSwgbnVtSW1hZ2VSZXF1ZXN0cztcbmV4cG9ydCBjb25zdCByZXNldEltYWdlUmVxdWVzdFF1ZXVlID0gKCkgPT4ge1xuICAgIGltYWdlUXVldWUgPSBbXTtcbiAgICBudW1JbWFnZVJlcXVlc3RzID0gMDtcbn07XG5yZXNldEltYWdlUmVxdWVzdFF1ZXVlKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZSA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IENhbGxiYWNrPEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcD4pOiBDYW5jZWxhYmxlIHtcbiAgICBpZiAod2VicFN1cHBvcnRlZC5zdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzKSB7XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVycy5hY2NlcHQgPSAnaW1hZ2Uvd2VicCwqLyonO1xuICAgIH1cblxuICAgIC8vIGxpbWl0IGNvbmN1cnJlbnQgaW1hZ2UgbG9hZHMgdG8gaGVscCB3aXRoIHJhc3RlciBzb3VyY2VzIHBlcmZvcm1hbmNlIG9uIGJpZyBzY3JlZW5zXG4gICAgaWYgKG51bUltYWdlUmVxdWVzdHMgPj0gY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUykge1xuICAgICAgICBjb25zdCBxdWV1ZWQgPSB7XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVycyxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbCgpIHsgdGhpcy5jYW5jZWxsZWQgPSB0cnVlOyB9XG4gICAgICAgIH07XG4gICAgICAgIGltYWdlUXVldWUucHVzaChxdWV1ZWQpO1xuICAgICAgICByZXR1cm4gcXVldWVkO1xuICAgIH1cbiAgICBudW1JbWFnZVJlcXVlc3RzKys7XG5cbiAgICBsZXQgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICBjb25zdCBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhZHZhbmNlZCkgcmV0dXJuO1xuICAgICAgICBhZHZhbmNlZCA9IHRydWU7XG4gICAgICAgIG51bUltYWdlUmVxdWVzdHMtLTtcbiAgICAgICAgYXNzZXJ0KG51bUltYWdlUmVxdWVzdHMgPj0gMCk7XG4gICAgICAgIHdoaWxlIChpbWFnZVF1ZXVlLmxlbmd0aCAmJiBudW1JbWFnZVJlcXVlc3RzIDwgY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gaW1hZ2VRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qge3JlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaywgY2FuY2VsbGVkfSA9IHJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuY2FuY2VsID0gZ2V0SW1hZ2UocmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrKS5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gcmVxdWVzdCB0aGUgaW1hZ2Ugd2l0aCBYSFIgdG8gd29yayBhcm91bmQgY2FjaGluZyBpc3N1ZXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzE0NzBcbiAgICBjb25zdCByZXF1ZXN0ID0gZ2V0QXJyYXlCdWZmZXIocmVxdWVzdFBhcmFtZXRlcnMsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpID0+IHtcblxuICAgICAgICBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGFycmF5QnVmZmVyVG9JbWFnZUJpdG1hcChkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5QnVmZmVyVG9JbWFnZShkYXRhLCBjYWxsYmFjaywgY2FjaGVDb250cm9sLCBleHBpcmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgYWR2YW5jZUltYWdlUmVxdWVzdFF1ZXVlKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvID0gZnVuY3Rpb24odXJsczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPEhUTUxWaWRlb0VsZW1lbnQ+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcbiAgICB2aWRlby5tdXRlZCA9IHRydWU7XG4gICAgdmlkZW8ub25sb2Fkc3RhcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdmlkZW8pO1xuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHM6IEhUTUxTb3VyY2VFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpO1xuICAgICAgICBpZiAoIXNhbWVPcmlnaW4odXJsc1tpXSkpIHtcbiAgICAgICAgICAgIHZpZGVvLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICAgIH1cbiAgICAgICAgcy5zcmMgPSB1cmxzW2ldO1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtjYW5jZWw6ICgpID0+IHt9fTtcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi91dGlsJztcblxudHlwZSBMaXN0ZW5lciA9IChPYmplY3QpID0+IGFueTtcbnR5cGUgTGlzdGVuZXJzID0ge1tfOiBzdHJpbmddOiBBcnJheTxMaXN0ZW5lcj4gfTtcblxuZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogTGlzdGVuZXIsIGxpc3RlbmVyTGlzdDogTGlzdGVuZXJzKSB7XG4gICAgY29uc3QgbGlzdGVuZXJFeGlzdHMgPSBsaXN0ZW5lckxpc3RbdHlwZV0gJiYgbGlzdGVuZXJMaXN0W3R5cGVdLmluZGV4T2YobGlzdGVuZXIpICE9PSAtMTtcbiAgICBpZiAoIWxpc3RlbmVyRXhpc3RzKSB7XG4gICAgICAgIGxpc3RlbmVyTGlzdFt0eXBlXSA9IGxpc3RlbmVyTGlzdFt0eXBlXSB8fCBbXTtcbiAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogTGlzdGVuZXIsIGxpc3RlbmVyTGlzdDogTGlzdGVuZXJzKSB7XG4gICAgaWYgKGxpc3RlbmVyTGlzdCAmJiBsaXN0ZW5lckxpc3RbdHlwZV0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0ZW5lckxpc3RbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyTGlzdFt0eXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnQge1xuICAgICt0eXBlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIGRhdGE6IE9iamVjdCA9IHt9KSB7XG4gICAgICAgIGV4dGVuZCh0aGlzLCBkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBFcnJvckxpa2Uge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgZXJyb3I6IEVycm9yTGlrZTtcblxuICAgIGNvbnN0cnVjdG9yKGVycm9yOiBFcnJvckxpa2UsIGRhdGE6IE9iamVjdCA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCdlcnJvcicsIGV4dGVuZCh7ZXJyb3J9LCBkYXRhKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIE1ldGhvZHMgbWl4ZWQgaW4gdG8gb3RoZXIgY2xhc3NlcyBmb3IgZXZlbnQgY2FwYWJpbGl0aWVzLlxuICpcbiAqIEBtaXhpbiBFdmVudGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudGVkIHtcbiAgICBfbGlzdGVuZXJzOiBMaXN0ZW5lcnM7XG4gICAgX29uZVRpbWVMaXN0ZW5lcnM6IExpc3RlbmVycztcbiAgICBfZXZlbnRlZFBhcmVudDogP0V2ZW50ZWQ7XG4gICAgX2V2ZW50ZWRQYXJlbnREYXRhOiA/KE9iamVjdCB8ICgpID0+IE9iamVjdCk7XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGFkZCBhIGxpc3RlbiBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAgIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIGBmaXJlYCxcbiAgICAgKiAgIGV4dGVuZGVkIHdpdGggYHRhcmdldGAgYW5kIGB0eXBlYCBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqL1xuICAgIG9uKHR5cGU6ICosIGxpc3RlbmVyOiBMaXN0ZW5lcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMgfHwge307XG4gICAgICAgIF9hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9saXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byByZW1vdmUgbGlzdGVuZXJzIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqL1xuICAgIG9mZih0eXBlOiAqLCBsaXN0ZW5lcjogTGlzdGVuZXIpIHtcbiAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX2xpc3RlbmVycyk7XG4gICAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgdG8gYSBzcGVjaWZpZWQgZXZlbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIFRoZSBsaXN0ZW5lciB3aWxsIGJlIGNhbGxlZCBmaXJzdCB0aW1lIHRoZSBldmVudCBmaXJlcyBhZnRlciB0aGUgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZCB0aGUgZmlyc3QgdGltZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBgdGhpc2BcbiAgICAgKi9cbiAgICBvbmNlKHR5cGU6ICosIGxpc3RlbmVyOiBMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzID0gdGhpcy5fb25lVGltZUxpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgX2FkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZpcmUoZXZlbnQ6IEV2ZW50LCBwcm9wZXJ0aWVzPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCAodHlwZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBPYmplY3QpIHNpZ25hdHVyZSBmcm9tIHByZXZpb3VzIHZlcnNpb25zLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzY1MjIsXG4gICAgICAgIC8vICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1kcmF3L2lzc3Vlcy83NjZcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzIHx8IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBldmVudC50eXBlO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnModHlwZSkpIHtcbiAgICAgICAgICAgIChldmVudDogYW55KS50YXJnZXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgYWRkaW5nIG9yIHJlbW92aW5nIGxpc3RlbmVycyBpbnNpZGUgb3RoZXIgbGlzdGVuZXJzIHdvbid0IGNhdXNlIGFuIGluZmluaXRlIGxvb3BcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0gPyB0aGlzLl9saXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb25lVGltZUxpc3RlbmVycyA9IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSA/IHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0uc2xpY2UoKSA6IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBvbmVUaW1lTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ldmVudGVkUGFyZW50O1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCkgOiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50LmZpcmUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IG5vIGVycm9yIGV2ZW50cyBhcmUgZHJvcHBlZCwgcHJpbnQgdGhlbSB0byB0aGVcbiAgICAgICAgLy8gY29uc29sZSBpZiB0aGV5IGhhdmUgbm8gbGlzdGVuZXJzLlxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihldmVudC5lcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJ1ZSBpZiB0aGlzIGluc3RhbmNlIG9mIEV2ZW50ZWQgb3IgYW55IGZvcndhcmRlZWQgaW5zdGFuY2VzIG9mIEV2ZW50ZWQgaGF2ZSBhIGxpc3RlbmVyIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm9yIHNwZWNpZmllZCBldmVudCB0eXBlLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbGlzdGVucyh0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLl9saXN0ZW5lcnMgJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgJiYgdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXSAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fZXZlbnRlZFBhcmVudCAmJiB0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModHlwZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnViYmxlIGFsbCBldmVudHMgZmlyZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiBFdmVudGVkIHRvIHRoaXMgcGFyZW50IGluc3RhbmNlIG9mIEV2ZW50ZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RXZlbnRlZFBhcmVudChwYXJlbnQ6ID9FdmVudGVkLCBkYXRhPzogT2JqZWN0IHwgKCkgPT4gT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG4vLyBOb3RlOiBEbyBub3QgaW5oZXJpdCBmcm9tIEVycm9yLiBJdCBicmVha3Mgd2hlbiB0cmFuc3BpbGluZyB0byBFUzUuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRpb25FcnJvciB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGlkZW50aWZpZXI6ID9zdHJpbmc7XG4gICAgbGluZTogP251bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGtleTogP3N0cmluZywgdmFsdWU6ID97IF9fbGluZV9fOiBudW1iZXIgfSwgbWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyOiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IChrZXkgPyBgJHtrZXl9OiBgIDogJycpICsgbWVzc2FnZTtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUuX19saW5lX18pIHtcbiAgICAgICAgICAgIHRoaXMubGluZSA9IHZhbHVlLl9fbGluZV9fO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUNvbnN0YW50cyhvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgY29uc3RhbnRzID0gb3B0aW9ucy52YWx1ZTtcblxuICAgIGlmIChjb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgY29uc3RhbnRzLCAnY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4JyldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3V0cHV0OiBhbnksIC4uLmlucHV0czogQXJyYXk8YW55Pikge1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBpbiBpbnB1dCkge1xuICAgICAgICAgICAgb3V0cHV0W2tdID0gaW5wdXRba107XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsIi8vIEBmbG93XG5cbi8vIFR1cm4ganNvbmxpbnQtbGluZXMtcHJpbWl0aXZlcyBvYmplY3RzIGludG8gcHJpbWl0aXZlIG9iamVjdHNcbmV4cG9ydCBmdW5jdGlvbiB1bmJ1bmRsZSh2YWx1ZTogbWl4ZWQpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBVbmJ1bmRsZSh2YWx1ZTogbWl4ZWQpOiBtaXhlZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZGVlcFVuYnVuZGxlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSkge1xuICAgICAgICBjb25zdCB1bmJ1bmRsZWRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBtaXhlZCB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICB1bmJ1bmRsZWRWYWx1ZVtrZXldID0gZGVlcFVuYnVuZGxlKHZhbHVlW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmJ1bmRsZWRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5idW5kbGUodmFsdWUpO1xufVxuIiwiLy8gQGZsb3dcblxuY2xhc3MgUGFyc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGtleTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNpbmdFcnJvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24nO1xuXG4vKipcbiAqIFRyYWNrcyBgbGV0YCBiaW5kaW5ncyBkdXJpbmcgZXhwcmVzc2lvbiBwYXJzaW5nLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2NvcGUge1xuICAgIHBhcmVudDogP1Njb3BlO1xuICAgIGJpbmRpbmdzOiB7W186IHN0cmluZ106IEV4cHJlc3Npb259O1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudD86IFNjb3BlLCBiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+ID0gW10pIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZXhwcmVzc2lvbl0gb2YgYmluZGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbbmFtZV0gPSBleHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uY2F0KGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTY29wZSh0aGlzLCBiaW5kaW5ncyk7XG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IEV4cHJlc3Npb24ge1xuICAgICAgICBpZiAodGhpcy5iaW5kaW5nc1tuYW1lXSkgeyByZXR1cm4gdGhpcy5iaW5kaW5nc1tuYW1lXTsgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsgcmV0dXJuIHRoaXMucGFyZW50LmdldChuYW1lKTsgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbm90IGZvdW5kIGluIHNjb3BlLmApO1xuICAgIH1cblxuICAgIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYmluZGluZ3NbbmFtZV0pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5oYXMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjb3BlO1xuIiwiLy8gQGZsb3dcblxuZXhwb3J0IHR5cGUgTnVsbFR5cGVUID0geyBraW5kOiAnbnVsbCcgfTtcbmV4cG9ydCB0eXBlIE51bWJlclR5cGVUID0geyBraW5kOiAnbnVtYmVyJyB9O1xuZXhwb3J0IHR5cGUgU3RyaW5nVHlwZVQgPSB7IGtpbmQ6ICdzdHJpbmcnIH07XG5leHBvcnQgdHlwZSBCb29sZWFuVHlwZVQgPSB7IGtpbmQ6ICdib29sZWFuJyB9O1xuZXhwb3J0IHR5cGUgQ29sb3JUeXBlVCA9IHsga2luZDogJ2NvbG9yJyB9O1xuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZVQgPSB7IGtpbmQ6ICdvYmplY3QnIH07XG5leHBvcnQgdHlwZSBWYWx1ZVR5cGVUID0geyBraW5kOiAndmFsdWUnIH07XG5leHBvcnQgdHlwZSBFcnJvclR5cGVUID0geyBraW5kOiAnZXJyb3InIH07XG5leHBvcnQgdHlwZSBDb2xsYXRvclR5cGVUID0geyBraW5kOiAnY29sbGF0b3InIH07XG5leHBvcnQgdHlwZSBGb3JtYXR0ZWRUeXBlVCA9IHsga2luZDogJ2Zvcm1hdHRlZCcgfTtcbmV4cG9ydCB0eXBlIFJlc29sdmVkSW1hZ2VUeXBlVCA9IHsga2luZDogJ3Jlc29sdmVkSW1hZ2UnIH07XG5cbmV4cG9ydCB0eXBlIEV2YWx1YXRpb25LaW5kID0gJ2NvbnN0YW50JyB8ICdzb3VyY2UnIHwgJ2NhbWVyYScgfCAnY29tcG9zaXRlJztcblxuZXhwb3J0IHR5cGUgVHlwZSA9XG4gICAgTnVsbFR5cGVUIHxcbiAgICBOdW1iZXJUeXBlVCB8XG4gICAgU3RyaW5nVHlwZVQgfFxuICAgIEJvb2xlYW5UeXBlVCB8XG4gICAgQ29sb3JUeXBlVCB8XG4gICAgT2JqZWN0VHlwZVQgfFxuICAgIFZhbHVlVHlwZVQgfFxuICAgIEFycmF5VHlwZSB8IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBFcnJvclR5cGVUIHxcbiAgICBDb2xsYXRvclR5cGVUIHxcbiAgICBGb3JtYXR0ZWRUeXBlVCB8XG4gICAgUmVzb2x2ZWRJbWFnZVR5cGVUXG5cbmV4cG9ydCB0eXBlIEFycmF5VHlwZSA9IHtcbiAgICBraW5kOiAnYXJyYXknLFxuICAgIGl0ZW1UeXBlOiBUeXBlLFxuICAgIE46ID9udW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IE51bGxUeXBlID0ge2tpbmQ6ICdudWxsJ307XG5leHBvcnQgY29uc3QgTnVtYmVyVHlwZSA9IHtraW5kOiAnbnVtYmVyJ307XG5leHBvcnQgY29uc3QgU3RyaW5nVHlwZSA9IHtraW5kOiAnc3RyaW5nJ307XG5leHBvcnQgY29uc3QgQm9vbGVhblR5cGUgPSB7a2luZDogJ2Jvb2xlYW4nfTtcbmV4cG9ydCBjb25zdCBDb2xvclR5cGUgPSB7a2luZDogJ2NvbG9yJ307XG5leHBvcnQgY29uc3QgT2JqZWN0VHlwZSA9IHtraW5kOiAnb2JqZWN0J307XG5leHBvcnQgY29uc3QgVmFsdWVUeXBlID0ge2tpbmQ6ICd2YWx1ZSd9O1xuZXhwb3J0IGNvbnN0IEVycm9yVHlwZSA9IHtraW5kOiAnZXJyb3InfTtcbmV4cG9ydCBjb25zdCBDb2xsYXRvclR5cGUgPSB7a2luZDogJ2NvbGxhdG9yJ307XG5leHBvcnQgY29uc3QgRm9ybWF0dGVkVHlwZSA9IHtraW5kOiAnZm9ybWF0dGVkJ307XG5leHBvcnQgY29uc3QgUmVzb2x2ZWRJbWFnZVR5cGUgPSB7a2luZDogJ3Jlc29sdmVkSW1hZ2UnfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGl0ZW1UeXBlOiBUeXBlLCBOOiA/bnVtYmVyKTogQXJyYXlUeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnYXJyYXknLFxuICAgICAgICBpdGVtVHlwZSxcbiAgICAgICAgTlxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh0eXBlOiBUeXBlKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZS5raW5kID09PSAnYXJyYXknKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdG9TdHJpbmcodHlwZS5pdGVtVHlwZSk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdHlwZS5OID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICBgYXJyYXk8JHtpdGVtVHlwZX0sICR7dHlwZS5OfT5gIDpcbiAgICAgICAgICAgIHR5cGUuaXRlbVR5cGUua2luZCA9PT0gJ3ZhbHVlJyA/ICdhcnJheScgOiBgYXJyYXk8JHtpdGVtVHlwZX0+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZS5raW5kO1xuICAgIH1cbn1cblxuY29uc3QgdmFsdWVNZW1iZXJUeXBlcyA9IFtcbiAgICBOdWxsVHlwZSxcbiAgICBOdW1iZXJUeXBlLFxuICAgIFN0cmluZ1R5cGUsXG4gICAgQm9vbGVhblR5cGUsXG4gICAgQ29sb3JUeXBlLFxuICAgIEZvcm1hdHRlZFR5cGUsXG4gICAgT2JqZWN0VHlwZSxcbiAgICBhcnJheShWYWx1ZVR5cGUpLFxuICAgIFJlc29sdmVkSW1hZ2VUeXBlXG5dO1xuXG4vKipcbiAqIFJldHVybnMgbnVsbCBpZiBgdGAgaXMgYSBzdWJ0eXBlIG9mIGBleHBlY3RlZGA7IG90aGVyd2lzZSByZXR1cm5zIGFuXG4gKiBlcnJvciBtZXNzYWdlLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU3VidHlwZShleHBlY3RlZDogVHlwZSwgdDogVHlwZSk6ID9zdHJpbmcge1xuICAgIGlmICh0LmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgLy8gRXJyb3IgaXMgYSBzdWJ0eXBlIG9mIGV2ZXJ5IHR5cGVcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZC5raW5kID09PSAnYXJyYXknKSB7XG4gICAgICAgIGlmICh0LmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICgodC5OID09PSAwICYmIHQuaXRlbVR5cGUua2luZCA9PT0gJ3ZhbHVlJykgfHwgIWNoZWNrU3VidHlwZShleHBlY3RlZC5pdGVtVHlwZSwgdC5pdGVtVHlwZSkpICYmXG4gICAgICAgICAgICAodHlwZW9mIGV4cGVjdGVkLk4gIT09ICdudW1iZXInIHx8IGV4cGVjdGVkLk4gPT09IHQuTikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZC5raW5kID09PSB0LmtpbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZC5raW5kID09PSAndmFsdWUnKSB7XG4gICAgICAgIGZvciAoY29uc3QgbWVtYmVyVHlwZSBvZiB2YWx1ZU1lbWJlclR5cGVzKSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrU3VidHlwZShtZW1iZXJUeXBlLCB0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGBFeHBlY3RlZCAke3RvU3RyaW5nKGV4cGVjdGVkKX0gYnV0IGZvdW5kICR7dG9TdHJpbmcodCl9IGluc3RlYWQuYDtcbn1cbiIsIi8vIChjKSBEZWFuIE1jTmFtZWUgPGRlYW5AZ21haWwuY29tPiwgMjAxMi5cbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVhbm0vY3NzLWNvbG9yLXBhcnNlci1qc1xuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4vLyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XG4gIFwidHJhbnNwYXJlbnRcIjogWzAsMCwwLDBdLCBcImFsaWNlYmx1ZVwiOiBbMjQwLDI0OCwyNTUsMV0sXG4gIFwiYW50aXF1ZXdoaXRlXCI6IFsyNTAsMjM1LDIxNSwxXSwgXCJhcXVhXCI6IFswLDI1NSwyNTUsMV0sXG4gIFwiYXF1YW1hcmluZVwiOiBbMTI3LDI1NSwyMTIsMV0sIFwiYXp1cmVcIjogWzI0MCwyNTUsMjU1LDFdLFxuICBcImJlaWdlXCI6IFsyNDUsMjQ1LDIyMCwxXSwgXCJiaXNxdWVcIjogWzI1NSwyMjgsMTk2LDFdLFxuICBcImJsYWNrXCI6IFswLDAsMCwxXSwgXCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LDIzNSwyMDUsMV0sXG4gIFwiYmx1ZVwiOiBbMCwwLDI1NSwxXSwgXCJibHVldmlvbGV0XCI6IFsxMzgsNDMsMjI2LDFdLFxuICBcImJyb3duXCI6IFsxNjUsNDIsNDIsMV0sIFwiYnVybHl3b29kXCI6IFsyMjIsMTg0LDEzNSwxXSxcbiAgXCJjYWRldGJsdWVcIjogWzk1LDE1OCwxNjAsMV0sIFwiY2hhcnRyZXVzZVwiOiBbMTI3LDI1NSwwLDFdLFxuICBcImNob2NvbGF0ZVwiOiBbMjEwLDEwNSwzMCwxXSwgXCJjb3JhbFwiOiBbMjU1LDEyNyw4MCwxXSxcbiAgXCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLDE0OSwyMzcsMV0sIFwiY29ybnNpbGtcIjogWzI1NSwyNDgsMjIwLDFdLFxuICBcImNyaW1zb25cIjogWzIyMCwyMCw2MCwxXSwgXCJjeWFuXCI6IFswLDI1NSwyNTUsMV0sXG4gIFwiZGFya2JsdWVcIjogWzAsMCwxMzksMV0sIFwiZGFya2N5YW5cIjogWzAsMTM5LDEzOSwxXSxcbiAgXCJkYXJrZ29sZGVucm9kXCI6IFsxODQsMTM0LDExLDFdLCBcImRhcmtncmF5XCI6IFsxNjksMTY5LDE2OSwxXSxcbiAgXCJkYXJrZ3JlZW5cIjogWzAsMTAwLDAsMV0sIFwiZGFya2dyZXlcIjogWzE2OSwxNjksMTY5LDFdLFxuICBcImRhcmtraGFraVwiOiBbMTg5LDE4MywxMDcsMV0sIFwiZGFya21hZ2VudGFcIjogWzEzOSwwLDEzOSwxXSxcbiAgXCJkYXJrb2xpdmVncmVlblwiOiBbODUsMTA3LDQ3LDFdLCBcImRhcmtvcmFuZ2VcIjogWzI1NSwxNDAsMCwxXSxcbiAgXCJkYXJrb3JjaGlkXCI6IFsxNTMsNTAsMjA0LDFdLCBcImRhcmtyZWRcIjogWzEzOSwwLDAsMV0sXG4gIFwiZGFya3NhbG1vblwiOiBbMjMzLDE1MCwxMjIsMV0sIFwiZGFya3NlYWdyZWVuXCI6IFsxNDMsMTg4LDE0MywxXSxcbiAgXCJkYXJrc2xhdGVibHVlXCI6IFs3Miw2MSwxMzksMV0sIFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsNzksNzksMV0sXG4gIFwiZGFya3NsYXRlZ3JleVwiOiBbNDcsNzksNzksMV0sIFwiZGFya3R1cnF1b2lzZVwiOiBbMCwyMDYsMjA5LDFdLFxuICBcImRhcmt2aW9sZXRcIjogWzE0OCwwLDIxMSwxXSwgXCJkZWVwcGlua1wiOiBbMjU1LDIwLDE0NywxXSxcbiAgXCJkZWVwc2t5Ymx1ZVwiOiBbMCwxOTEsMjU1LDFdLCBcImRpbWdyYXlcIjogWzEwNSwxMDUsMTA1LDFdLFxuICBcImRpbWdyZXlcIjogWzEwNSwxMDUsMTA1LDFdLCBcImRvZGdlcmJsdWVcIjogWzMwLDE0NCwyNTUsMV0sXG4gIFwiZmlyZWJyaWNrXCI6IFsxNzgsMzQsMzQsMV0sIFwiZmxvcmFsd2hpdGVcIjogWzI1NSwyNTAsMjQwLDFdLFxuICBcImZvcmVzdGdyZWVuXCI6IFszNCwxMzksMzQsMV0sIFwiZnVjaHNpYVwiOiBbMjU1LDAsMjU1LDFdLFxuICBcImdhaW5zYm9yb1wiOiBbMjIwLDIyMCwyMjAsMV0sIFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LDI0OCwyNTUsMV0sXG4gIFwiZ29sZFwiOiBbMjU1LDIxNSwwLDFdLCBcImdvbGRlbnJvZFwiOiBbMjE4LDE2NSwzMiwxXSxcbiAgXCJncmF5XCI6IFsxMjgsMTI4LDEyOCwxXSwgXCJncmVlblwiOiBbMCwxMjgsMCwxXSxcbiAgXCJncmVlbnllbGxvd1wiOiBbMTczLDI1NSw0NywxXSwgXCJncmV5XCI6IFsxMjgsMTI4LDEyOCwxXSxcbiAgXCJob25leWRld1wiOiBbMjQwLDI1NSwyNDAsMV0sIFwiaG90cGlua1wiOiBbMjU1LDEwNSwxODAsMV0sXG4gIFwiaW5kaWFucmVkXCI6IFsyMDUsOTIsOTIsMV0sIFwiaW5kaWdvXCI6IFs3NSwwLDEzMCwxXSxcbiAgXCJpdm9yeVwiOiBbMjU1LDI1NSwyNDAsMV0sIFwia2hha2lcIjogWzI0MCwyMzAsMTQwLDFdLFxuICBcImxhdmVuZGVyXCI6IFsyMzAsMjMwLDI1MCwxXSwgXCJsYXZlbmRlcmJsdXNoXCI6IFsyNTUsMjQwLDI0NSwxXSxcbiAgXCJsYXduZ3JlZW5cIjogWzEyNCwyNTIsMCwxXSwgXCJsZW1vbmNoaWZmb25cIjogWzI1NSwyNTAsMjA1LDFdLFxuICBcImxpZ2h0Ymx1ZVwiOiBbMTczLDIxNiwyMzAsMV0sIFwibGlnaHRjb3JhbFwiOiBbMjQwLDEyOCwxMjgsMV0sXG4gIFwibGlnaHRjeWFuXCI6IFsyMjQsMjU1LDI1NSwxXSwgXCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBbMjUwLDI1MCwyMTAsMV0sXG4gIFwibGlnaHRncmF5XCI6IFsyMTEsMjExLDIxMSwxXSwgXCJsaWdodGdyZWVuXCI6IFsxNDQsMjM4LDE0NCwxXSxcbiAgXCJsaWdodGdyZXlcIjogWzIxMSwyMTEsMjExLDFdLCBcImxpZ2h0cGlua1wiOiBbMjU1LDE4MiwxOTMsMV0sXG4gIFwibGlnaHRzYWxtb25cIjogWzI1NSwxNjAsMTIyLDFdLCBcImxpZ2h0c2VhZ3JlZW5cIjogWzMyLDE3OCwxNzAsMV0sXG4gIFwibGlnaHRza3libHVlXCI6IFsxMzUsMjA2LDI1MCwxXSwgXCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LDEzNiwxNTMsMV0sXG4gIFwibGlnaHRzbGF0ZWdyZXlcIjogWzExOSwxMzYsMTUzLDFdLCBcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsMTk2LDIyMiwxXSxcbiAgXCJsaWdodHllbGxvd1wiOiBbMjU1LDI1NSwyMjQsMV0sIFwibGltZVwiOiBbMCwyNTUsMCwxXSxcbiAgXCJsaW1lZ3JlZW5cIjogWzUwLDIwNSw1MCwxXSwgXCJsaW5lblwiOiBbMjUwLDI0MCwyMzAsMV0sXG4gIFwibWFnZW50YVwiOiBbMjU1LDAsMjU1LDFdLCBcIm1hcm9vblwiOiBbMTI4LDAsMCwxXSxcbiAgXCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsMjA1LDE3MCwxXSwgXCJtZWRpdW1ibHVlXCI6IFswLDAsMjA1LDFdLFxuICBcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LDg1LDIxMSwxXSwgXCJtZWRpdW1wdXJwbGVcIjogWzE0NywxMTIsMjE5LDFdLFxuICBcIm1lZGl1bXNlYWdyZWVuXCI6IFs2MCwxNzksMTEzLDFdLCBcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLDEwNCwyMzgsMV0sXG4gIFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsMjUwLDE1NCwxXSwgXCJtZWRpdW10dXJxdW9pc2VcIjogWzcyLDIwOSwyMDQsMV0sXG4gIFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksMjEsMTMzLDFdLCBcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsMjUsMTEyLDFdLFxuICBcIm1pbnRjcmVhbVwiOiBbMjQ1LDI1NSwyNTAsMV0sIFwibWlzdHlyb3NlXCI6IFsyNTUsMjI4LDIyNSwxXSxcbiAgXCJtb2NjYXNpblwiOiBbMjU1LDIyOCwxODEsMV0sIFwibmF2YWpvd2hpdGVcIjogWzI1NSwyMjIsMTczLDFdLFxuICBcIm5hdnlcIjogWzAsMCwxMjgsMV0sIFwib2xkbGFjZVwiOiBbMjUzLDI0NSwyMzAsMV0sXG4gIFwib2xpdmVcIjogWzEyOCwxMjgsMCwxXSwgXCJvbGl2ZWRyYWJcIjogWzEwNywxNDIsMzUsMV0sXG4gIFwib3JhbmdlXCI6IFsyNTUsMTY1LDAsMV0sIFwib3JhbmdlcmVkXCI6IFsyNTUsNjksMCwxXSxcbiAgXCJvcmNoaWRcIjogWzIxOCwxMTIsMjE0LDFdLCBcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwyMzIsMTcwLDFdLFxuICBcInBhbGVncmVlblwiOiBbMTUyLDI1MSwxNTIsMV0sIFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LDIzOCwyMzgsMV0sXG4gIFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LDExMiwxNDcsMV0sIFwicGFwYXlhd2hpcFwiOiBbMjU1LDIzOSwyMTMsMV0sXG4gIFwicGVhY2hwdWZmXCI6IFsyNTUsMjE4LDE4NSwxXSwgXCJwZXJ1XCI6IFsyMDUsMTMzLDYzLDFdLFxuICBcInBpbmtcIjogWzI1NSwxOTIsMjAzLDFdLCBcInBsdW1cIjogWzIyMSwxNjAsMjIxLDFdLFxuICBcInBvd2RlcmJsdWVcIjogWzE3NiwyMjQsMjMwLDFdLCBcInB1cnBsZVwiOiBbMTI4LDAsMTI4LDFdLFxuICBcInJlYmVjY2FwdXJwbGVcIjogWzEwMiw1MSwxNTMsMV0sXG4gIFwicmVkXCI6IFsyNTUsMCwwLDFdLCBcInJvc3licm93blwiOiBbMTg4LDE0MywxNDMsMV0sXG4gIFwicm95YWxibHVlXCI6IFs2NSwxMDUsMjI1LDFdLCBcInNhZGRsZWJyb3duXCI6IFsxMzksNjksMTksMV0sXG4gIFwic2FsbW9uXCI6IFsyNTAsMTI4LDExNCwxXSwgXCJzYW5keWJyb3duXCI6IFsyNDQsMTY0LDk2LDFdLFxuICBcInNlYWdyZWVuXCI6IFs0NiwxMzksODcsMV0sIFwic2Vhc2hlbGxcIjogWzI1NSwyNDUsMjM4LDFdLFxuICBcInNpZW5uYVwiOiBbMTYwLDgyLDQ1LDFdLCBcInNpbHZlclwiOiBbMTkyLDE5MiwxOTIsMV0sXG4gIFwic2t5Ymx1ZVwiOiBbMTM1LDIwNiwyMzUsMV0sIFwic2xhdGVibHVlXCI6IFsxMDYsOTAsMjA1LDFdLFxuICBcInNsYXRlZ3JheVwiOiBbMTEyLDEyOCwxNDQsMV0sIFwic2xhdGVncmV5XCI6IFsxMTIsMTI4LDE0NCwxXSxcbiAgXCJzbm93XCI6IFsyNTUsMjUwLDI1MCwxXSwgXCJzcHJpbmdncmVlblwiOiBbMCwyNTUsMTI3LDFdLFxuICBcInN0ZWVsYmx1ZVwiOiBbNzAsMTMwLDE4MCwxXSwgXCJ0YW5cIjogWzIxMCwxODAsMTQwLDFdLFxuICBcInRlYWxcIjogWzAsMTI4LDEyOCwxXSwgXCJ0aGlzdGxlXCI6IFsyMTYsMTkxLDIxNiwxXSxcbiAgXCJ0b21hdG9cIjogWzI1NSw5OSw3MSwxXSwgXCJ0dXJxdW9pc2VcIjogWzY0LDIyNCwyMDgsMV0sXG4gIFwidmlvbGV0XCI6IFsyMzgsMTMwLDIzOCwxXSwgXCJ3aGVhdFwiOiBbMjQ1LDIyMiwxNzksMV0sXG4gIFwid2hpdGVcIjogWzI1NSwyNTUsMjU1LDFdLCBcIndoaXRlc21va2VcIjogWzI0NSwyNDUsMjQ1LDFdLFxuICBcInllbGxvd1wiOiBbMjU1LDI1NSwwLDFdLCBcInllbGxvd2dyZWVuXCI6IFsxNTQsMjA1LDUwLDFdfVxuXG5mdW5jdGlvbiBjbGFtcF9jc3NfYnl0ZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMjU1LlxuICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxuICByZXR1cm4gaSA8IDAgPyAwIDogaSA+IDI1NSA/IDI1NSA6IGk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wX2Nzc19mbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxuICByZXR1cm4gZiA8IDAgPyAwIDogZiA+IDEgPyAxIDogZjtcbn1cblxuZnVuY3Rpb24gcGFyc2VfY3NzX2ludChzdHIpIHsgIC8vIGludCBvciBwZXJjZW50YWdlLlxuICBpZiAoc3RyW3N0ci5sZW5ndGggLSAxXSA9PT0gJyUnKVxuICAgIHJldHVybiBjbGFtcF9jc3NfYnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xuICByZXR1cm4gY2xhbXBfY3NzX2J5dGUocGFyc2VJbnQoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2Nzc19mbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gIGlmIChzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnJScpXG4gICAgcmV0dXJuIGNsYW1wX2Nzc19mbG9hdChwYXJzZUZsb2F0KHN0cikgLyAxMDApO1xuICByZXR1cm4gY2xhbXBfY3NzX2Zsb2F0KHBhcnNlRmxvYXQoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaCkge1xuICBpZiAoaCA8IDApIGggKz0gMTtcbiAgZWxzZSBpZiAoaCA+IDEpIGggLT0gMTtcblxuICBpZiAoaCAqIDYgPCAxKSByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcbiAgaWYgKGggKiAyIDwgMSkgcmV0dXJuIG0yO1xuICBpZiAoaCAqIDMgPCAyKSByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMi8zIC0gaCkgKiA2O1xuICByZXR1cm4gbTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ1NTQ29sb3IoY3NzX3N0cikge1xuICAvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2UsIG5vdCBjb21wbGlhbnQsIGJ1dCBzaG91bGQganVzdCBiZSBtb3JlIGFjY2VwdGluZy5cbiAgdmFyIHN0ciA9IGNzc19zdHIucmVwbGFjZSgvIC9nLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXG4gIGlmIChzdHIgaW4ga0NTU0NvbG9yVGFibGUpIHJldHVybiBrQ1NTQ29sb3JUYWJsZVtzdHJdLnNsaWNlKCk7ICAvLyBkdXAuXG5cbiAgLy8gI2FiYyBhbmQgI2FiYzEyMyBzeW50YXguXG4gIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgIGlmIChzdHIubGVuZ3RoID09PSA0KSB7XG4gICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cbiAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmYpKSByZXR1cm4gbnVsbDsgIC8vIENvdmVycyBOYU4uXG4gICAgICByZXR1cm4gWygoaXYgJiAweGYwMCkgPj4gNCkgfCAoKGl2ICYgMHhmMDApID4+IDgpLFxuICAgICAgICAgICAgICAoaXYgJiAweGYwKSB8ICgoaXYgJiAweGYwKSA+PiA0KSxcbiAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxuICAgICAgICAgICAgICAxXTtcbiAgICB9IGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcbiAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHJldHVybiBudWxsOyAgLy8gQ292ZXJzIE5hTi5cbiAgICAgIHJldHVybiBbKGl2ICYgMHhmZjAwMDApID4+IDE2LFxuICAgICAgICAgICAgICAoaXYgJiAweGZmMDApID4+IDgsXG4gICAgICAgICAgICAgIGl2ICYgMHhmZixcbiAgICAgICAgICAgICAgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgb3AgPSBzdHIuaW5kZXhPZignKCcpLCBlcCA9IHN0ci5pbmRleE9mKCcpJyk7XG4gIGlmIChvcCAhPT0gLTEgJiYgZXAgKyAxID09PSBzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGZuYW1lID0gc3RyLnN1YnN0cigwLCBvcCk7XG4gICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3ArMSwgZXAtKG9wKzEpKS5zcGxpdCgnLCcpO1xuICAgIHZhciBhbHBoYSA9IDE7ICAvLyBUbyBhbGxvdyBjYXNlIGZhbGx0aHJvdWdoLlxuICAgIHN3aXRjaCAoZm5hbWUpIHtcbiAgICAgIGNhc2UgJ3JnYmEnOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGFscGhhID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtcy5wb3AoKSk7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cbiAgICAgIGNhc2UgJ3JnYic6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFtwYXJzZV9jc3NfaW50KHBhcmFtc1swXSksXG4gICAgICAgICAgICAgICAgcGFyc2VfY3NzX2ludChwYXJhbXNbMV0pLFxuICAgICAgICAgICAgICAgIHBhcnNlX2Nzc19pbnQocGFyYW1zWzJdKSxcbiAgICAgICAgICAgICAgICBhbHBoYV07XG4gICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICAgICAgICBhbHBoYSA9IHBhcnNlX2Nzc19mbG9hdChwYXJhbXMucG9wKCkpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICBjYXNlICdoc2wnOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBoID0gKCgocGFyc2VGbG9hdChwYXJhbXNbMF0pICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwOyAgLy8gMCAuLiAxXG4gICAgICAgIC8vIE5PVEUoZGVhbm0pOiBBY2NvcmRpbmcgdG8gdGhlIENTUyBzcGVjIHMvbCBzaG91bGQgb25seSBiZVxuICAgICAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gICAgICAgIHZhciBzID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtc1sxXSk7XG4gICAgICAgIHZhciBsID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtc1syXSk7XG4gICAgICAgIHZhciBtMiA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgICB2YXIgbTEgPSBsICogMiAtIG0yO1xuICAgICAgICByZXR1cm4gW2NsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaCsxLzMpICogMjU1KSxcbiAgICAgICAgICAgICAgICBjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgpICogMjU1KSxcbiAgICAgICAgICAgICAgICBjbGFtcF9jc3NfYnl0ZShjc3NfaHVlX3RvX3JnYihtMSwgbTIsIGgtMS8zKSAqIDI1NSksXG4gICAgICAgICAgICAgICAgYWxwaGFdO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnRyeSB7IGV4cG9ydHMucGFyc2VDU1NDb2xvciA9IHBhcnNlQ1NTQ29sb3IgfSBjYXRjaChlKSB7IH1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGFyc2VDU1NDb2xvcn0gZnJvbSAnY3NzY29sb3JwYXJzZXInO1xuXG4vKipcbiAqIEFuIFJHQkEgY29sb3IgdmFsdWUuIENyZWF0ZSBpbnN0YW5jZXMgZnJvbSBjb2xvciBzdHJpbmdzIHVzaW5nIHRoZSBzdGF0aWNcbiAqIG1ldGhvZCBgQ29sb3IucGFyc2VgLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBSR0IgY2hhbm5lbCB2YWx1ZXMgaW4gdGhlIHJhbmdlXG4gKiBgWzAsIDFdYCwgcHJlbXVsdGlwbGllZCBieSBBLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByIFRoZSByZWQgY2hhbm5lbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnIFRoZSBncmVlbiBjaGFubmVsLlxuICogQHBhcmFtIHtudW1iZXJ9IGIgVGhlIGJsdWUgY2hhbm5lbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhIFRoZSBhbHBoYSBjaGFubmVsLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29sb3Ige1xuICAgIHI6IG51bWJlcjtcbiAgICBnOiBudW1iZXI7XG4gICAgYjogbnVtYmVyO1xuICAgIGE6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy5yID0gcjtcbiAgICAgICAgdGhpcy5nID0gZztcbiAgICAgICAgdGhpcy5iID0gYjtcbiAgICAgICAgdGhpcy5hID0gYTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYmxhY2s6IENvbG9yO1xuICAgIHN0YXRpYyB3aGl0ZTogQ29sb3I7XG4gICAgc3RhdGljIHRyYW5zcGFyZW50OiBDb2xvcjtcbiAgICBzdGF0aWMgcmVkOiBDb2xvcjtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB2YWxpZCBDU1MgY29sb3Igc3RyaW5ncyBhbmQgcmV0dXJucyBhIGBDb2xvcmAgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMgQSBgQ29sb3JgIGluc3RhbmNlLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgaW5wdXQgaXMgbm90IGEgdmFsaWQgY29sb3Igc3RyaW5nLlxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShpbnB1dD86IHN0cmluZyB8IENvbG9yIHwgbnVsbCk6IENvbG9yIHwgdm9pZCB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZ2JhID0gcGFyc2VDU1NDb2xvcihpbnB1dCk7XG4gICAgICAgIGlmICghcmdiYSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgICAgICByZ2JhWzBdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbMV0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVsyXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzNdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBSR0JBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbG9yIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQW4gUkdCQSBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcHVycGxlID0gbmV3IENvbG9yLnBhcnNlKCdwdXJwbGUnKTtcbiAgICAgKiBwdXJwbGUudG9TdHJpbmc7IC8vID0gXCJyZ2JhKDEyOCwwLDEyOCwxKVwiXG4gICAgICogdmFyIHRyYW5zbHVjZW50R3JlZW4gPSBuZXcgQ29sb3IucGFyc2UoJ3JnYmEoMjYsIDIwNywgMjYsIC43MyknKTtcbiAgICAgKiB0cmFuc2x1Y2VudEdyZWVuLnRvU3RyaW5nKCk7IC8vID0gXCJyZ2JhKDI2LDIwNywyNiwwLjczKVwiXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgW3IsIGcsIGIsIGFdID0gdGhpcy50b0FycmF5KCk7XG4gICAgICAgIHJldHVybiBgcmdiYSgke01hdGgucm91bmQocil9LCR7TWF0aC5yb3VuZChnKX0sJHtNYXRoLnJvdW5kKGIpfSwke2F9KWA7XG4gICAgfVxuXG4gICAgdG9BcnJheSgpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIGNvbnN0IHtyLCBnLCBiLCBhfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBhID09PSAwID8gWzAsIDAsIDAsIDBdIDogW1xuICAgICAgICAgICAgciAqIDI1NSAvIGEsXG4gICAgICAgICAgICBnICogMjU1IC8gYSxcbiAgICAgICAgICAgIGIgKiAyNTUgLyBhLFxuICAgICAgICAgICAgYVxuICAgICAgICBdO1xuICAgIH1cbn1cblxuQ29sb3IuYmxhY2sgPSBuZXcgQ29sb3IoMCwgMCwgMCwgMSk7XG5Db2xvci53aGl0ZSA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcbkNvbG9yLnRyYW5zcGFyZW50ID0gbmV3IENvbG9yKDAsIDAsIDAsIDApO1xuQ29sb3IucmVkID0gbmV3IENvbG9yKDEsIDAsIDAsIDEpO1xuXG5leHBvcnQgZGVmYXVsdCBDb2xvcjtcbiIsIi8vIEBmbG93XG5cbi8vIEZsb3cgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIEludGwgY3JpYmJlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTI3MFxuXG5kZWNsYXJlIHZhciBJbnRsOiB7XG4gICAgQ29sbGF0b3I6IENsYXNzPEludGwkQ29sbGF0b3I+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkQ29sbGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yIChcbiAgICAgICAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvcHRpb25zPzogQ29sbGF0b3JPcHRpb25zXG4gICAgKTogSW50bCRDb2xsYXRvcjtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IENvbGxhdG9yT3B0aW9uc1xuICAgICk6IEludGwkQ29sbGF0b3I7XG5cbiAgICBjb21wYXJlIChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlcjtcblxuICAgIHJlc29sdmVkT3B0aW9ucygpOiBhbnk7XG59XG5cbnR5cGUgQ29sbGF0b3JPcHRpb25zID0ge1xuICAgIGxvY2FsZU1hdGNoZXI/OiAnbG9va3VwJyB8ICdiZXN0IGZpdCcsXG4gICAgdXNhZ2U/OiAnc29ydCcgfCAnc2VhcmNoJyxcbiAgICBzZW5zaXRpdml0eT86ICdiYXNlJyB8ICdhY2NlbnQnIHwgJ2Nhc2UnIHwgJ3ZhcmlhbnQnLFxuICAgIGlnbm9yZVB1bmN0dWF0aW9uPzogYm9vbGVhbixcbiAgICBudW1lcmljPzogYm9vbGVhbixcbiAgICBjYXNlRmlyc3Q/OiAndXBwZXInIHwgJ2xvd2VyJyB8ICdmYWxzZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGF0b3Ige1xuICAgIGxvY2FsZTogc3RyaW5nIHwgbnVsbDtcbiAgICBzZW5zaXRpdml0eTogJ2Jhc2UnIHwgJ2FjY2VudCcgfCAnY2FzZScgfCAndmFyaWFudCc7XG4gICAgY29sbGF0b3I6IEludGwkQ29sbGF0b3I7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBib29sZWFuLCBkaWFjcml0aWNTZW5zaXRpdmU6IGJvb2xlYW4sIGxvY2FsZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSlcbiAgICAgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBkaWFjcml0aWNTZW5zaXRpdmUgPyAndmFyaWFudCcgOiAnY2FzZSc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBkaWFjcml0aWNTZW5zaXRpdmUgPyAnYWNjZW50JyA6ICdiYXNlJztcblxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlID8gdGhpcy5sb2NhbGUgOiBbXSxcbiAgICAgICAgICAgIHtzZW5zaXRpdml0eTogdGhpcy5zZW5zaXRpdml0eSwgdXNhZ2U6ICdzZWFyY2gnfSk7XG4gICAgfVxuXG4gICAgY29tcGFyZShsaHM6IHN0cmluZywgcmhzOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKGxocywgcmhzKTtcbiAgICB9XG5cbiAgICByZXNvbHZlZExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBXZSBjcmVhdGUgYSBDb2xsYXRvciB3aXRob3V0IFwidXNhZ2U6IHNlYXJjaFwiIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudFxuICAgICAgICAvLyB0aGUgc2VhcmNoIG9wdGlvbnMgZW5jb2RlZCBpbiBvdXIgcmVzdWx0IChlLmcuIFwiZW4tdS1jby1zZWFyY2hcIilcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlID8gdGhpcy5sb2NhbGUgOiBbXSlcbiAgICAgICAgICAgIC5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3V0aWwvY29sb3InO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXR0ZWRTZWN0aW9uIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgaW1hZ2U6IFJlc29sdmVkSW1hZ2UgfCBudWxsO1xuICAgIHNjYWxlOiBudW1iZXIgfCBudWxsO1xuICAgIGZvbnRTdGFjazogc3RyaW5nIHwgbnVsbDtcbiAgICB0ZXh0Q29sb3I6IENvbG9yIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZywgaW1hZ2U6IFJlc29sdmVkSW1hZ2UgfCBudWxsLCBzY2FsZTogbnVtYmVyIHwgbnVsbCwgZm9udFN0YWNrOiBzdHJpbmcgfCBudWxsLCB0ZXh0Q29sb3I6IENvbG9yIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgdGhpcy5mb250U3RhY2sgPSBmb250U3RhY2s7XG4gICAgICAgIHRoaXMudGV4dENvbG9yID0gdGV4dENvbG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0dGVkIHtcbiAgICBzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbj47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbj4pIHtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IHNlY3Rpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHVuZm9ybWF0dGVkOiBzdHJpbmcpOiBGb3JtYXR0ZWQge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZChbbmV3IEZvcm1hdHRlZFNlY3Rpb24odW5mb3JtYXR0ZWQsIG51bGwsIG51bGwsIG51bGwsIG51bGwpXSk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNlY3Rpb25zLnNvbWUoc2VjdGlvbiA9PiBzZWN0aW9uLnRleHQubGVuZ3RoICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VjdGlvbi5pbWFnZSAmJiBzZWN0aW9uLmltYWdlLm5hbWUubGVuZ3RoICE9PSAwKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZhY3RvcnkodGV4dDogRm9ybWF0dGVkIHwgc3RyaW5nKTogRm9ybWF0dGVkIHtcbiAgICAgICAgaWYgKHRleHQgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdHRlZC5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25zLm1hcChzZWN0aW9uID0+IHNlY3Rpb24udGV4dCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IEFycmF5PG1peGVkPiA9IFtcImZvcm1hdFwiXTtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKFtcImltYWdlXCIsIHNlY3Rpb24uaW1hZ2UubmFtZV0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24udGV4dCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IG1peGVkIH0gPSB7fTtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmZvbnRTdGFjaykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJ0ZXh0LWZvbnRcIl0gPSBbXCJsaXRlcmFsXCIsIHNlY3Rpb24uZm9udFN0YWNrLnNwbGl0KCcsJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2NhbGUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW1wiZm9udC1zY2FsZVwiXSA9IHNlY3Rpb24uc2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW1widGV4dC1jb2xvclwiXSA9IChbXCJyZ2JhXCJdOiBBcnJheTxtaXhlZD4pLmNvbmNhdChzZWN0aW9uLnRleHRDb2xvci50b0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkSW1hZ2VPcHRpb25zID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdmFpbGFibGU6IGJvb2xlYW5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29sdmVkSW1hZ2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhdmFpbGFibGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXNvbHZlZEltYWdlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlID0gb3B0aW9ucy5hdmFpbGFibGU7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0cmluZyhuYW1lOiBzdHJpbmcpOiBSZXNvbHZlZEltYWdlIHwgbnVsbCB7XG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7IC8vIHRyZWF0IGVtcHR5IHZhbHVlcyBhcyBubyBpbWFnZVxuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkSW1hZ2Uoe25hbWUsIGF2YWlsYWJsZTogZmFsc2V9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBbXCJpbWFnZVwiLCB0aGlzLm5hbWVdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3V0aWwvY29sb3InO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4vdHlwZXMvY29sbGF0b3InO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB7TnVsbFR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIEJvb2xlYW5UeXBlLCBDb2xvclR5cGUsIE9iamVjdFR5cGUsIFZhbHVlVHlwZSwgQ29sbGF0b3JUeXBlLCBGb3JtYXR0ZWRUeXBlLCBSZXNvbHZlZEltYWdlVHlwZSwgYXJyYXl9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJHQkEocjogbWl4ZWQsIGc6IG1peGVkLCBiOiBtaXhlZCwgYT86IG1peGVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCEoXG4gICAgICAgIHR5cGVvZiByID09PSAnbnVtYmVyJyAmJiByID49IDAgJiYgciA8PSAyNTUgJiZcbiAgICAgICAgdHlwZW9mIGcgPT09ICdudW1iZXInICYmIGcgPj0gMCAmJiBnIDw9IDI1NSAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ251bWJlcicgJiYgYiA+PSAwICYmIGIgPD0gMjU1XG4gICAgKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IFtyLCBnLCBiLCBhXSA6IFtyLCBnLCBiXTtcbiAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHJnYmEgdmFsdWUgWyR7dmFsdWUuam9pbignLCAnKX1dOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LmA7XG4gICAgfVxuXG4gICAgaWYgKCEoXG4gICAgICAgIHR5cGVvZiBhID09PSAndW5kZWZpbmVkJyB8fCAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIGEgPj0gMCAmJiBhIDw9IDEpXG4gICAgKSkge1xuICAgICAgICByZXR1cm4gYEludmFsaWQgcmdiYSB2YWx1ZSBbJHtbciwgZywgYiwgYV0uam9pbignLCAnKX1dOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVmFsdWUgPSBudWxsIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IENvbG9yIHwgQ29sbGF0b3IgfCBGb3JtYXR0ZWQgfCBSZXNvbHZlZEltYWdlIHwgJFJlYWRPbmx5QXJyYXk8VmFsdWU+IHwgeyArW3N0cmluZ106IFZhbHVlIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsdWUobWl4ZWQ6IG1peGVkKTogYm9vbGVhbiB7XG4gICAgaWYgKG1peGVkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIENvbGxhdG9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1peGVkKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWl4ZWQpIHtcbiAgICAgICAgICAgIGlmICghaXNWYWx1ZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtaXhlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWl4ZWQpIHtcbiAgICAgICAgICAgIGlmICghaXNWYWx1ZShtaXhlZFtrZXldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKHZhbHVlOiBWYWx1ZSk6IFR5cGUge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTnVsbFR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmdUeXBlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW5UeXBlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gTnVtYmVyVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sbGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIENvbGxhdG9yVHlwZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgIHJldHVybiBGb3JtYXR0ZWRUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiBSZXNvbHZlZEltYWdlVHlwZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGl0ZW1UeXBlOiBUeXBlIHwgdHlwZW9mIHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0eXBlT2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoIWl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSB0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gdCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IFZhbHVlVHlwZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheShpdGVtVHlwZSB8fCBWYWx1ZVR5cGUsIGxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpO1xuICAgICAgICByZXR1cm4gT2JqZWN0VHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVmFsdWUpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbG9yIHx8IHZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkIHx8IHZhbHVlIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IHtDb2xvciwgQ29sbGF0b3J9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtpc1ZhbHVlLCB0eXBlT2YsIENvbG9yfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSAgZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5cbmNsYXNzIExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIHZhbHVlOiBWYWx1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIHZhbHVlOiBWYWx1ZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCdsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgaWYgKCFpc1ZhbHVlKGFyZ3NbMV0pKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYGludmFsaWQgdmFsdWVgKTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBsZXQgdHlwZSA9IHR5cGVPZih2YWx1ZSk7XG5cbiAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpbmZlciB0aGUgaXRlbSB0eXBlIGlmIHBvc3NpYmxlIGZvciB6ZXJvLWxlbmd0aCBhcnJheXNcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICB0eXBlLk4gPT09IDAgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkICYmXG4gICAgICAgICAgICBleHBlY3RlZC5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAodHlwZW9mIGV4cGVjdGVkLk4gIT09ICdudW1iZXInIHx8IGV4cGVjdGVkLk4gPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHlwZSA9IGV4cGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsKHR5cGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKCkge31cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdhcnJheScgfHwgdGhpcy50eXBlLmtpbmQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gW1wibGl0ZXJhbFwiLCB0aGlzLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgIC8vIENvbnN0YW50LWZvbGRpbmcgY2FuIGdlbmVyYXRlIExpdGVyYWwgZXhwcmVzc2lvbnMgdGhhdCB5b3VcbiAgICAgICAgICAgIC8vIGNvdWxkbid0IGFjdHVhbGx5IGdlbmVyYXRlIHdpdGggYSBcImxpdGVyYWxcIiBleHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBpbXBsZW1lbnQgYW4gZXF1aXZhbGVudCBzZXJpYWxpemF0aW9uIGhlcmVcbiAgICAgICAgICAgIHJldHVybiBbXCJyZ2JhXCJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgLy8gU2FtZSBhcyBDb2xvclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc2VyaWFsaXplKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlOiBhbnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXRlcmFsO1xuIiwiLy8gQGZsb3dcblxuY2xhc3MgUnVudGltZUVycm9yIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmFtZSA9ICdFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSdW50aW1lRXJyb3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gICAgT2JqZWN0VHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBOdW1iZXJUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIGNoZWNrU3VidHlwZSxcbiAgICB0b1N0cmluZyxcbiAgICBhcnJheVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgdHlwZXMgPSB7XG4gICAgc3RyaW5nOiBTdHJpbmdUeXBlLFxuICAgIG51bWJlcjogTnVtYmVyVHlwZSxcbiAgICBib29sZWFuOiBCb29sZWFuVHlwZSxcbiAgICBvYmplY3Q6IE9iamVjdFR5cGVcbn07XG5cbmNsYXNzIEFzc2VydGlvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBhcmdzOiBBcnJheTxFeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgIGxldCB0eXBlO1xuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGV0IGl0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgISh0eXBlIGluIHR5cGVzKSB8fCB0eXBlID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgXCJhcnJheVwiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywgMSk7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSB0eXBlc1t0eXBlXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgTjtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc1syXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGFyZ3NbMl0gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAhPT0gTWF0aC5mbG9vcihhcmdzWzJdKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gXCJhcnJheVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTiA9IGFyZ3NbMl07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0eXBlID0gYXJyYXkoaXRlbVR5cGUsIE4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0KHR5cGVzW25hbWVdLCBuYW1lKTtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlc1tuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCBpLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwYXJzZWQucHVzaChpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0eXBlLCBwYXJzZWQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5hcmdzW2ldLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZSh0aGlzLnR5cGUsIHR5cGVPZih2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gdGhpcy5hcmdzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICR7dG9TdHJpbmcodGhpcy50eXBlKX0sIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZih2YWx1ZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncy5ldmVyeShhcmcgPT4gYXJnLm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbdHlwZS5raW5kXTtcbiAgICAgICAgaWYgKHR5cGUua2luZCA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSB0eXBlLml0ZW1UeXBlO1xuICAgICAgICAgICAgaWYgKGl0ZW1UeXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUua2luZCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZS5raW5kID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goaXRlbVR5cGUua2luZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgTiA9IHR5cGUuTjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE4gPT09ICdudW1iZXInIHx8IHRoaXMuYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChOKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQuY29uY2F0KHRoaXMuYXJncy5tYXAoYXJnID0+IGFyZy5zZXJpYWxpemUoKSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXNzZXJ0aW9uO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlLCBWYWx1ZVR5cGUsIEZvcm1hdHRlZFR5cGUsIGFycmF5LCBTdHJpbmdUeXBlLCBDb2xvclR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgRm9ybWF0dGVkLCB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCB7dG9TdHJpbmcsIHR5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uID0ge1xuICAgIC8vIENvbnRlbnQgb2YgYSBzZWN0aW9uIG1heSBiZSBJbWFnZSBleHByZXNzaW9uIG9yIG90aGVyXG4gICAgLy8gdHlwZSBvZiBleHByZXNzaW9uIHRoYXQgaXMgY29lcmNhYmxlIHRvICdzdHJpbmcnLlxuICAgIGNvbnRlbnQ6IEV4cHJlc3Npb24sXG4gICAgc2NhbGU6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIGZvbnQ6IEV4cHJlc3Npb24gfCBudWxsO1xuICAgIHRleHRDb2xvcjogRXhwcmVzc2lvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdEV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEZvcm1hdHRlZFR5cGU7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QXJnID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpcnN0QXJnKSAmJiB0eXBlb2YgZmlyc3RBcmcgPT09ICdvYmplY3QnKSAge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gaW1hZ2Ugb3IgdGV4dCBzZWN0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPiA9IFtdO1xuICAgICAgICBsZXQgbmV4dFRva2VuTWF5QmVPYmplY3QgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYXJncy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IChhcmdzW2ldOiBhbnkpO1xuXG4gICAgICAgICAgICBpZiAobmV4dFRva2VuTWF5QmVPYmplY3QgJiYgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgbmV4dFRva2VuTWF5QmVPYmplY3QgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBzY2FsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1snZm9udC1zY2FsZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gY29udGV4dC5wYXJzZShhcmdbJ2ZvbnQtc2NhbGUnXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBmb250ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWyd0ZXh0LWZvbnQnXSkge1xuICAgICAgICAgICAgICAgICAgICBmb250ID0gY29udGV4dC5wYXJzZShhcmdbJ3RleHQtZm9udCddLCAxLCBhcnJheShTdHJpbmdUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9udCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRDb2xvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1sndGV4dC1jb2xvciddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvciA9IGNvbnRleHQucGFyc2UoYXJnWyd0ZXh0LWNvbG9yJ10sIDEsIENvbG9yVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGV4dENvbG9yKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXhwcmVzc2lvbiA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGxhc3RFeHByZXNzaW9uLnNjYWxlID0gc2NhbGU7XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24uZm9udCA9IGZvbnQ7XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24udGV4dENvbG9yID0gdGV4dENvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBraW5kID0gY29udGVudC50eXBlLmtpbmQ7XG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT09ICdzdHJpbmcnICYmIGtpbmQgIT09ICd2YWx1ZScgJiYga2luZCAhPT0gJ251bGwnICYmIGtpbmQgIT09ICdyZXNvbHZlZEltYWdlJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuYCk7XG5cbiAgICAgICAgICAgICAgICBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VjdGlvbnMucHVzaCh7Y29udGVudCwgc2NhbGU6IG51bGwsIGZvbnQ6IG51bGwsIHRleHRDb2xvcjogbnVsbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRFeHByZXNzaW9uKHNlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlU2VjdGlvbiA9IHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkQ29udGVudCA9IHNlY3Rpb24uY29udGVudC5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgaWYgKHR5cGVPZihldmFsdWF0ZWRDb250ZW50KSA9PT0gUmVzb2x2ZWRJbWFnZVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZFNlY3Rpb24oJycsIGV2YWx1YXRlZENvbnRlbnQsIG51bGwsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZFNlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nKGV2YWx1YXRlZENvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNjYWxlID8gc2VjdGlvbi5zY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5mb250ID8gc2VjdGlvbi5mb250LmV2YWx1YXRlKGN0eCkuam9pbignLCcpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi50ZXh0Q29sb3IgPyBzZWN0aW9uLnRleHRDb2xvci5ldmFsdWF0ZShjdHgpIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlZCh0aGlzLnNlY3Rpb25zLm1hcChldmFsdWF0ZVNlY3Rpb24pKTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBmbihzZWN0aW9uLmNvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2NhbGUpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnNjYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLmZvbnQpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLmZvbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgZm4oc2VjdGlvbi50ZXh0Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgdGhlIGNvbWJpbmF0b3JpYyBzZXQgb2YgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIFVzdWFsbHksIHRoaXMudGV4dCB3aWxsIGJlIHVuZGVmaW5lZCBhbnl3YXlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImZvcm1hdFwiXTtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChzZWN0aW9uLmNvbnRlbnQuc2VyaWFsaXplKCkpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uc2NhbGUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWydmb250LXNjYWxlJ10gPSBzZWN0aW9uLnNjYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3RleHQtZm9udCddID0gc2VjdGlvbi5mb250LnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24udGV4dENvbG9yKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1sndGV4dC1jb2xvciddID0gc2VjdGlvbi50ZXh0Q29sb3Iuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSZXNvbHZlZEltYWdlVHlwZSwgU3RyaW5nVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlRXhwcmVzc2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBSZXNvbHZlZEltYWdlVHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0d28gYXJndW1lbnRzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGNvbnRleHQuZXJyb3IoYE5vIGltYWdlIG5hbWUgcHJvdmlkZWQuYCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbWFnZUV4cHJlc3Npb24obmFtZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRJbWFnZU5hbWUgPSB0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoZXZhbHVhdGVkSW1hZ2VOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlICYmIGN0eC5hdmFpbGFibGVJbWFnZXMpIHZhbHVlLmF2YWlsYWJsZSA9IGN0eC5hdmFpbGFibGVJbWFnZXMuaW5kZXhPZihldmFsdWF0ZWRJbWFnZU5hbWUpID4gLTE7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgLy8gVGhlIG91dHB1dCBvZiBpbWFnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBpbWFnZXMgaW4gdGhlIGV2YWx1YXRpb24gY29udGV4dFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1wiaW1hZ2VcIiwgdGhpcy5pbnB1dC5zZXJpYWxpemUoKV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge0Jvb2xlYW5UeXBlLCBDb2xvclR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIFZhbHVlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtDb2xvciwgdG9TdHJpbmcgYXMgdmFsdWVUb1N0cmluZywgdmFsaWRhdGVSR0JBfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBGb3JtYXRFeHByZXNzaW9uIGZyb20gJy4uL2RlZmluaXRpb25zL2Zvcm1hdCc7XG5pbXBvcnQgSW1hZ2VFeHByZXNzaW9uIGZyb20gJy4uL2RlZmluaXRpb25zL2ltYWdlJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCB0eXBlcyA9IHtcbiAgICAndG8tYm9vbGVhbic6IEJvb2xlYW5UeXBlLFxuICAgICd0by1jb2xvcic6IENvbG9yVHlwZSxcbiAgICAndG8tbnVtYmVyJzogTnVtYmVyVHlwZSxcbiAgICAndG8tc3RyaW5nJzogU3RyaW5nVHlwZVxufTtcblxuLyoqXG4gKiBTcGVjaWFsIGZvcm0gZm9yIGVycm9yLWNvYWxlc2NpbmcgY29lcmNpb24gZXhwcmVzc2lvbnMgXCJ0by1udW1iZXJcIixcbiAqIFwidG8tY29sb3JcIi4gIFNpbmNlIHRoZXNlIGNvZXJjaW9ucyBjYW4gZmFpbCBhdCBydW50aW1lLCB0aGV5IGFjY2VwdCBtdWx0aXBsZVxuICogYXJndW1lbnRzLCBvbmx5IGV2YWx1YXRpbmcgb25lIGF0IGEgdGltZSB1bnRpbCBvbmUgc3VjY2VlZHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29lcmNpb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gKGFyZ3NbMF06IGFueSk7XG4gICAgICAgIGFzc2VydCh0eXBlc1tuYW1lXSwgbmFtZSk7XG5cbiAgICAgICAgaWYgKChuYW1lID09PSAndG8tYm9vbGVhbicgfHwgbmFtZSA9PT0gJ3RvLXN0cmluZycpICYmIGFyZ3MubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBjb25zdCB0eXBlID0gdHlwZXNbbmFtZV07XG5cbiAgICAgICAgY29uc3QgcGFyc2VkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIGksIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHBhcnNlZC5wdXNoKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQ29lcmNpb24odHlwZSwgcGFyc2VkKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGxldCBpbnB1dDtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGN0eC5wYXJzZUNvbG9yKGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMpIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IDMgfHwgaW5wdXQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBgSW52YWxpZCByYmdhIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkoaW5wdXQpfTogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy5gO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB2YWxpZGF0ZVJHQkEoaW5wdXRbMF0sIGlucHV0WzFdLCBpbnB1dFsyXSwgaW5wdXRbM10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoKGlucHV0WzBdOiBhbnkpIC8gMjU1LCAoaW5wdXRbMV06IGFueSkgLyAyNTUsIChpbnB1dFsyXTogYW55KSAvIDI1NSwgKGlucHV0WzNdOiBhbnkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoZXJyb3IgfHwgYENvdWxkIG5vdCBwYXJzZSBjb2xvciBmcm9tIHZhbHVlICcke3R5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyBpbnB1dCA6IFN0cmluZyhKU09OLnN0cmluZ2lmeShpbnB1dCkpfSdgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSB0byBudW1iZXIuYCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdmb3JtYXR0ZWQnKSB7XG4gICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBleHBsaWNpdCAndG8tZm9ybWF0dGVkJyBidXQgdGhpcyBjb2VyY2lvbiBjYW4gYmUgaW1wbGljaXRseVxuICAgICAgICAgICAgLy8gY3JlYXRlZCBieSBwcm9wZXJ0aWVzIHRoYXQgZXhwZWN0IHRoZSAnZm9ybWF0dGVkJyB0eXBlLlxuICAgICAgICAgICAgcmV0dXJuIEZvcm1hdHRlZC5mcm9tU3RyaW5nKHZhbHVlVG9TdHJpbmcodGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ3Jlc29sdmVkSW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZWRJbWFnZS5mcm9tU3RyaW5nKHZhbHVlVG9TdHJpbmcodGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVRvU3RyaW5nKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5hcmdzLmZvckVhY2goZm4pO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3MuZXZlcnkoYXJnID0+IGFyZy5vdXRwdXREZWZpbmVkKCkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRFeHByZXNzaW9uKFt7Y29udGVudDogdGhpcy5hcmdzWzBdLCBzY2FsZTogbnVsbCwgZm9udDogbnVsbCwgdGV4dENvbG9yOiBudWxsfV0pLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VFeHByZXNzaW9uKHRoaXMuYXJnc1swXSkuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW2B0by0ke3RoaXMudHlwZS5raW5kfWBdO1xuICAgICAgICB0aGlzLmVhY2hDaGlsZChjaGlsZCA9PiB7IHNlcmlhbGl6ZWQucHVzaChjaGlsZC5zZXJpYWxpemUoKSk7IH0pO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvZXJjaW9uO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtDb2xvcn0gZnJvbSAnLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCB0eXBlIHtHbG9iYWxQcm9wZXJ0aWVzLCBGZWF0dXJlLCBGZWF0dXJlU3RhdGV9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuXG5jb25zdCBnZW9tZXRyeVR5cGVzID0gWydVbmtub3duJywgJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnUG9seWdvbiddO1xuXG5jbGFzcyBFdmFsdWF0aW9uQ29udGV4dCB7XG4gICAgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcztcbiAgICBmZWF0dXJlOiA/RmVhdHVyZTtcbiAgICBmZWF0dXJlU3RhdGU6ID9GZWF0dXJlU3RhdGU7XG4gICAgZm9ybWF0dGVkU2VjdGlvbjogP0Zvcm1hdHRlZFNlY3Rpb247XG4gICAgYXZhaWxhYmxlSW1hZ2VzOiA/QXJyYXk8c3RyaW5nPjtcbiAgICBjYW5vbmljYWw6ID9DYW5vbmljYWxUaWxlSUQ7XG5cbiAgICBfcGFyc2VDb2xvckNhY2hlOiB7W186IHN0cmluZ106ID9Db2xvcn07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gKG51bGw6IGFueSk7XG4gICAgICAgIHRoaXMuZmVhdHVyZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmVhdHVyZVN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRTZWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyc2VDb2xvckNhY2hlID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYW5vbmljYWwgPSBudWxsO1xuICAgIH1cblxuICAgIGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlICYmICdpZCcgaW4gdGhpcy5mZWF0dXJlID8gdGhpcy5mZWF0dXJlLmlkIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZW9tZXRyeVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgPyB0eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGUgPT09ICdudW1iZXInID8gZ2VvbWV0cnlUeXBlc1t0aGlzLmZlYXR1cmUudHlwZV0gOiB0aGlzLmZlYXR1cmUudHlwZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2VvbWV0cnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgJ2dlb21ldHJ5JyBpbiB0aGlzLmZlYXR1cmUgPyB0aGlzLmZlYXR1cmUuZ2VvbWV0cnkgOiBudWxsO1xuICAgIH1cblxuICAgIGNhbm9uaWNhbElEKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5vbmljYWw7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiB0aGlzLmZlYXR1cmUucHJvcGVydGllcyB8fCB7fTtcbiAgICB9XG5cbiAgICBwYXJzZUNvbG9yKGlucHV0OiBzdHJpbmcpOiA/Q29sb3Ige1xuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5fcGFyc2VDb2xvckNhY2hlW2lucHV0XTtcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgICAgICAgIGNhY2hlZCA9IHRoaXMuX3BhcnNlQ29sb3JDYWNoZVtpbnB1dF0gPSBDb2xvci5wYXJzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2YWx1YXRpb25Db250ZXh0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCBQYXJzaW5nQ29udGV4dCBmcm9tICcuL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbiwgRXhwcmVzc2lvblJlZ2lzdHJ5fSBmcm9tICcuL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuL3ZhbHVlcyc7XG5cbmV4cG9ydCB0eXBlIFZhcmFyZ3MgPSB7fCB0eXBlOiBUeXBlIHx9O1xudHlwZSBTaWduYXR1cmUgPSBBcnJheTxUeXBlPiB8IFZhcmFyZ3M7XG50eXBlIEV2YWx1YXRlID0gKEV2YWx1YXRpb25Db250ZXh0LCBBcnJheTxFeHByZXNzaW9uPikgPT4gVmFsdWU7XG50eXBlIERlZmluaXRpb24gPSBbVHlwZSwgU2lnbmF0dXJlLCBFdmFsdWF0ZV0gfFxuICAgIHt8dHlwZTogVHlwZSwgb3ZlcmxvYWRzOiBBcnJheTxbU2lnbmF0dXJlLCBFdmFsdWF0ZV0+fH07XG5cbmNsYXNzIENvbXBvdW5kRXhwcmVzc2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBUeXBlO1xuICAgIF9ldmFsdWF0ZTogRXZhbHVhdGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBzdGF0aWMgZGVmaW5pdGlvbnM6IHtbXzogc3RyaW5nXTogRGVmaW5pdGlvbiB9O1xuXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB0eXBlOiBUeXBlLCBldmFsdWF0ZTogRXZhbHVhdGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRlID0gZXZhbHVhdGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZhbHVhdGUoY3R4LCB0aGlzLmFyZ3MpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5hcmdzLmZvckVhY2goZm4pO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLm5hbWVdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGFyZyA9PiBhcmcuc2VyaWFsaXplKCkpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgY29uc3Qgb3A6IHN0cmluZyA9IChhcmdzWzBdOiBhbnkpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gQ29tcG91bmRFeHByZXNzaW9uLmRlZmluaXRpb25zW29wXTtcbiAgICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVW5rbm93biBleHByZXNzaW9uIFwiJHtvcH1cIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS5gLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdyBjaGVjayBhcmd1bWVudCB0eXBlcyBhZ2FpbnN0IGVhY2ggc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHR5cGUgPSBBcnJheS5pc0FycmF5KGRlZmluaXRpb24pID9cbiAgICAgICAgICAgIGRlZmluaXRpb25bMF0gOiBkZWZpbml0aW9uLnR5cGU7XG5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlT3ZlcmxvYWRzID0gQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSA/XG4gICAgICAgICAgICBbW2RlZmluaXRpb25bMV0sIGRlZmluaXRpb25bMl1dXSA6XG4gICAgICAgICAgICBkZWZpbml0aW9uLm92ZXJsb2FkcztcblxuICAgICAgICBjb25zdCBvdmVybG9hZHMgPSBhdmFpbGFibGVPdmVybG9hZHMuZmlsdGVyKChbc2lnbmF0dXJlXSkgPT4gKFxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc2lnbmF0dXJlKSB8fCAvLyB2YXJhZ3NcbiAgICAgICAgICAgIHNpZ25hdHVyZS5sZW5ndGggPT09IGFyZ3MubGVuZ3RoIC0gMSAvLyBjb3JyZWN0IHBhcmFtIGNvdW50XG4gICAgICAgICkpO1xuXG4gICAgICAgIGxldCBzaWduYXR1cmVDb250ZXh0OiBQYXJzaW5nQ29udGV4dCA9IChudWxsOiBhbnkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3BhcmFtcywgZXZhbHVhdGVdIG9mIG92ZXJsb2Fkcykge1xuICAgICAgICAgICAgLy8gVXNlIGEgZnJlc2ggY29udGV4dCBmb3IgZWFjaCBhdHRlbXB0ZWQgc2lnbmF0dXJlIHNvIHRoYXQsIGlmXG4gICAgICAgICAgICAvLyB3ZSBldmVudHVhbGx5IHN1Y2NlZWQsIHdlIGhhdmVuJ3QgcG9sbHV0ZWQgYGNvbnRleHQuZXJyb3JzYC5cbiAgICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQoY29udGV4dC5yZWdpc3RyeSwgY29udGV4dC5wYXRoLCBudWxsLCBjb250ZXh0LnNjb3BlKTtcblxuICAgICAgICAgICAgLy8gRmlyc3QgcGFyc2UgYWxsIHRoZSBhcmdzLCBwb3RlbnRpYWxseSBjb2VyY2luZyB0byB0aGVcbiAgICAgICAgICAgIC8vIHR5cGVzIGV4cGVjdGVkIGJ5IHRoaXMgb3ZlcmxvYWQuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzOiBBcnJheTxFeHByZXNzaW9uPiA9IFtdO1xuICAgICAgICAgICAgbGV0IGFyZ1BhcnNlRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpIC0gMV0gOlxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudHlwZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHNpZ25hdHVyZUNvbnRleHQucGFyc2UoYXJnLCAxICsgcGFyc2VkQXJncy5sZW5ndGgsIGV4cGVjdGVkVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnUGFyc2VGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkQXJncy5wdXNoKHBhcnNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXJnUGFyc2VGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBDb3VsZG4ndCBjb2VyY2UgYXJncyBvZiB0aGlzIG92ZXJsb2FkIHRvIGV4cGVjdGVkIHR5cGUsIG1vdmVcbiAgICAgICAgICAgICAgICAvLyBvbiB0byBuZXh0IG9uZS5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSBwYXJzZWRBcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVDb250ZXh0LmVycm9yKGBFeHBlY3RlZCAke3BhcmFtcy5sZW5ndGh9IGFyZ3VtZW50cywgYnV0IGZvdW5kICR7cGFyc2VkQXJncy5sZW5ndGh9IGluc3RlYWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZWRBcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBBcnJheS5pc0FycmF5KHBhcmFtcykgPyBwYXJhbXNbaV0gOiBwYXJhbXMudHlwZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmcgPSBwYXJzZWRBcmdzW2ldO1xuICAgICAgICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQuY29uY2F0KGkgKyAxKS5jaGVja1N1YnR5cGUoZXhwZWN0ZWQsIGFyZy50eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZUNvbnRleHQuZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcG91bmRFeHByZXNzaW9uKG9wLCB0eXBlLCBldmFsdWF0ZSwgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoIXNpZ25hdHVyZUNvbnRleHQgfHwgc2lnbmF0dXJlQ29udGV4dC5lcnJvcnMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgaWYgKG92ZXJsb2Fkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLnB1c2goLi4uc2lnbmF0dXJlQ29udGV4dC5lcnJvcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBvdmVybG9hZHMubGVuZ3RoID8gb3ZlcmxvYWRzIDogYXZhaWxhYmxlT3ZlcmxvYWRzO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGV4cGVjdGVkXG4gICAgICAgICAgICAgICAgLm1hcCgoW3BhcmFtc10pID0+IHN0cmluZ2lmeVNpZ25hdHVyZShwYXJhbXMpKVxuICAgICAgICAgICAgICAgIC5qb2luKCcgfCAnKTtcblxuICAgICAgICAgICAgY29uc3QgYWN0dWFsVHlwZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIEZvciBlcnJvciBtZXNzYWdlLCByZS1wYXJzZSBhcmd1bWVudHMgd2l0aG91dCB0cnlpbmcgdG9cbiAgICAgICAgICAgIC8vIGFwcGx5IGFueSBjb2VyY2lvbnNcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgMSArIGFjdHVhbFR5cGVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGFjdHVhbFR5cGVzLnB1c2godG9TdHJpbmcocGFyc2VkLnR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50cyBvZiB0eXBlICR7c2lnbmF0dXJlc30sIGJ1dCBmb3VuZCAoJHthY3R1YWxUeXBlcy5qb2luKCcsICcpfSkgaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWdpc3RlcihcbiAgICAgICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeSxcbiAgICAgICAgZGVmaW5pdGlvbnM6IHtbXzogc3RyaW5nXTogRGVmaW5pdGlvbiB9XG4gICAgKSB7XG4gICAgICAgIGFzc2VydCghQ29tcG91bmRFeHByZXNzaW9uLmRlZmluaXRpb25zKTtcbiAgICAgICAgQ29tcG91bmRFeHByZXNzaW9uLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkZWZpbml0aW9ucykge1xuICAgICAgICAgICAgcmVnaXN0cnlbbmFtZV0gPSBDb21wb3VuZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNpZ25hdHVyZShzaWduYXR1cmU6IFNpZ25hdHVyZSk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2lnbmF0dXJlKSkge1xuICAgICAgICByZXR1cm4gYCgke3NpZ25hdHVyZS5tYXAodG9TdHJpbmcpLmpvaW4oJywgJyl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAoJHt0b1N0cmluZyhzaWduYXR1cmUudHlwZSl9Li4uKWA7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb3VuZEV4cHJlc3Npb247XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1N0cmluZ1R5cGUsIEJvb2xlYW5UeXBlLCBDb2xsYXRvclR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBDb2xsYXRvciBmcm9tICcuLi90eXBlcy9jb2xsYXRvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGF0b3JFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGRpYWNyaXRpY1NlbnNpdGl2ZTogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoY2FzZVNlbnNpdGl2ZTogRXhwcmVzc2lvbiwgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IENvbGxhdG9yVHlwZTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG4gICAgICAgIHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlID0gZGlhY3JpdGljU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1sxXTogYW55KTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBjb25zdCBjYXNlU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2Nhc2Utc2Vuc2l0aXZlJ10gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSwgMSwgQm9vbGVhblR5cGUpO1xuICAgICAgICBpZiAoIWNhc2VTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGRpYWNyaXRpY1NlbnNpdGl2ZSA9IGNvbnRleHQucGFyc2UoXG4gICAgICAgICAgICBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9uc1snZGlhY3JpdGljLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghZGlhY3JpdGljU2Vuc2l0aXZlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQ29sbGF0b3JFeHByZXNzaW9uKGNhc2VTZW5zaXRpdmUsIGRpYWNyaXRpY1NlbnNpdGl2ZSwgbG9jYWxlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sbGF0b3IodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKGN0eCksIHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKGN0eCksIHRoaXMubG9jYWxlID8gdGhpcy5sb2NhbGUuZXZhbHVhdGUoY3R4KSA6IG51bGwpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5jYXNlU2Vuc2l0aXZlKTtcbiAgICAgICAgZm4odGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubG9jYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIC8vIFRlY2huaWNhbGx5IHRoZSBzZXQgb2YgcG9zc2libGUgb3V0cHV0cyBpcyB0aGUgY29tYmluYXRvcmljIHNldCBvZiBDb2xsYXRvcnMgcHJvZHVjZWRcbiAgICAgICAgLy8gYnkgYWxsIHBvc3NpYmxlIG91dHB1dHMgb2YgbG9jYWxlL2Nhc2VTZW5zaXRpdmUvZGlhY3JpdGljU2Vuc2l0aXZlXG4gICAgICAgIC8vIEJ1dCBmb3IgdGhlIHByaW1hcnkgdXNlIG9mIENvbGxhdG9ycyBpbiBjb21wYXJpc29uIG9wZXJhdG9ycywgd2UgaWdub3JlIHRoZSBDb2xsYXRvcidzXG4gICAgICAgIC8vIHBvc3NpYmxlIG91dHB1dHMgYW55d2F5LCBzbyB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBsZWF2aW5nIHRoaXMgZmFsc2UgZm9yIG5vdy5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddID0gdGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10gPSB0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKSB7XG4gICAgICAgICAgICBvcHRpb25zWydsb2NhbGUnXSA9IHRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJjb2xsYXRvclwiLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuL2xuZ19sYXQnO1xuXG4vKipcbiAqIEEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHJlcHJlc2VudHMgYSBnZW9ncmFwaGljYWwgYm91bmRpbmcgYm94LFxuICogZGVmaW5lZCBieSBpdHMgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgcG9pbnRzIGluIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuXG4gKlxuICogSWYgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsIGEgYG51bGxgIGJvdW5kaW5nIGJveCBpcyBjcmVhdGVkLlxuICpcbiAqIE5vdGUgdGhhdCBhbnkgTWFwYm94IEdMIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgYXMgYW4gYXJndW1lbnQgb3Igb3B0aW9uXG4gKiBjYW4gYWxzbyBhY2NlcHQgYW4gYEFycmF5YCBvZiB0d28ge0BsaW5rIExuZ0xhdExpa2V9IGNvbnN0cnVjdHMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdEJvdW5kc0xpa2V9LlxuICpcbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW3N3XSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbbmVdIFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gKiBAZXhhbXBsZVxuICogdmFyIHN3ID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSk7XG4gKiB2YXIgbmUgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKTtcbiAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKHN3LCBuZSk7XG4gKi9cbmNsYXNzIExuZ0xhdEJvdW5kcyB7XG4gICAgX25lOiBMbmdMYXQ7XG4gICAgX3N3OiBMbmdMYXQ7XG5cbiAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRvbyBmbGV4aWJsZSB0byB0eXBlLiBJdCBzaG91bGQgbm90IGJlIHNvIGZsZXhpYmxlLlxuICAgIGNvbnN0cnVjdG9yKHN3OiBhbnksIG5lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFzdykge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9IGVsc2UgaWYgKG5lKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChzdykuc2V0Tm9ydGhFYXN0KG5lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KFtzd1swXSwgc3dbMV1dKS5zZXROb3J0aEVhc3QoW3N3WzJdLCBzd1szXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3dbMF0pLnNldE5vcnRoRWFzdChzd1sxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBuZSBhIHtAbGluayBMbmdMYXRMaWtlfSBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE5vcnRoRWFzdChuZTogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9uZSA9IG5lIGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChuZS5sbmcsIG5lLmxhdCkgOiBMbmdMYXQuY29udmVydChuZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHN3IGEge0BsaW5rIExuZ0xhdExpa2V9IG9iamVjdCBkZXNjcmliaW5nIHRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gYHRoaXNgXG4gICAgICovXG4gICAgc2V0U291dGhXZXN0KHN3OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX3N3ID0gc3cgaW5zdGFuY2VvZiBMbmdMYXQgPyBuZXcgTG5nTGF0KHN3LmxuZywgc3cubGF0KSA6IExuZ0xhdC5jb252ZXJ0KHN3KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHRoZSBib3VuZHMgdG8gaW5jbHVkZSBhIGdpdmVuIExuZ0xhdExpa2Ugb3IgTG5nTGF0Qm91bmRzTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZXxMbmdMYXRCb3VuZHNMaWtlfSBvYmogb2JqZWN0IHRvIGV4dGVuZCB0b1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIGV4dGVuZChvYmo6IExuZ0xhdExpa2UgfCBMbmdMYXRCb3VuZHNMaWtlKSB7XG4gICAgICAgIGNvbnN0IHN3ID0gdGhpcy5fc3csXG4gICAgICAgICAgICBuZSA9IHRoaXMuX25lO1xuICAgICAgICBsZXQgc3cyLCBuZTI7XG5cbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdCkge1xuICAgICAgICAgICAgc3cyID0gb2JqO1xuICAgICAgICAgICAgbmUyID0gb2JqO1xuXG4gICAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgICAgICBzdzIgPSBvYmouX3N3O1xuICAgICAgICAgICAgbmUyID0gb2JqLl9uZTtcblxuICAgICAgICAgICAgaWYgKCFzdzIgfHwgIW5lMikgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gNCB8fCBvYmouZXZlcnkoQXJyYXkuaXNBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG5nTGF0Qm91bmRzT2JqID0gKChvYmo6IGFueSk6IExuZ0xhdEJvdW5kc0xpa2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0Qm91bmRzLmNvbnZlcnQobG5nTGF0Qm91bmRzT2JqKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG5nTGF0T2JqID0gKChvYmo6IGFueSk6IExuZ0xhdExpa2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0LmNvbnZlcnQobG5nTGF0T2JqKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN3ICYmICFuZSkge1xuICAgICAgICAgICAgdGhpcy5fc3cgPSBuZXcgTG5nTGF0KHN3Mi5sbmcsIHN3Mi5sYXQpO1xuICAgICAgICAgICAgdGhpcy5fbmUgPSBuZXcgTG5nTGF0KG5lMi5sbmcsIG5lMi5sYXQpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdy5sbmcgPSBNYXRoLm1pbihzdzIubG5nLCBzdy5sbmcpO1xuICAgICAgICAgICAgc3cubGF0ID0gTWF0aC5taW4oc3cyLmxhdCwgc3cubGF0KTtcbiAgICAgICAgICAgIG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XG4gICAgICAgICAgICBuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgZXF1aWRpc3RhbnQgZnJvbSB0aGUgYm91bmRpbmcgYm94J3MgY29ybmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBib3VuZGluZyBib3gncyBjZW50ZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKTtcbiAgICAgKiBsbGIuZ2V0Q2VudGVyKCk7IC8vID0gTG5nTGF0IHtsbmc6IC03My45NjM2NSwgbGF0OiA0MC43ODMxNX1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoKHRoaXMuX3N3LmxuZyArIHRoaXMuX25lLmxuZykgLyAyLCAodGhpcy5fc3cubGF0ICsgdGhpcy5fbmUubGF0KSAvIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhXZXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9zdzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX25lOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgbm9ydGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXROb3J0aCgpKTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHNvdXRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRFYXN0KCksIHRoaXMuZ2V0U291dGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgd2VzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFdlc3QoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxuZzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNvdXRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fc3cubGF0OyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIGVhc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRFYXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBub3J0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX25lLmxhdDsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PEFycmF5PG51bWJlcj4+fSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LCBjb25zaXN0aW5nIG9mIHRoZVxuICAgICAqICAgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgY29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kaW5nIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBudW1iZXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvQXJyYXkoKTsgLy8gPSBbWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXV1cbiAgICAgKi9cbiAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMuX3N3LnRvQXJyYXkoKSwgdGhpcy5fbmUudG9BcnJheSgpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50cyBhcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0XG4gICAgICogICBgJ0xuZ0xhdEJvdW5kcyhMbmdMYXQobG5nLCBsYXQpLCBMbmdMYXQobG5nLCBsYXQpKSdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvU3RyaW5nKCk7IC8vID0gXCJMbmdMYXRCb3VuZHMoTG5nTGF0KC03My45ODc2LCA0MC43NjYxKSwgTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKSlcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYExuZ0xhdEJvdW5kcygke3RoaXMuX3N3LnRvU3RyaW5nKCl9LCAke3RoaXMuX25lLnRvU3RyaW5nKCl9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGJvdW5kaW5nIGJveCBpcyBhbiBlbXB0eS9gbnVsbGAtdHlwZSBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBib3VuZHMgaGF2ZSBiZWVuIGRlZmluZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLl9zdyAmJiB0aGlzLl9uZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBDaGVjayBpZiB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBsbmdsYXQgZ2VvZ3JhcGhpYyBwb2ludCB0byBjaGVjayBhZ2FpbnN0LlxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRpbmcgYm94LlxuICAgICovXG4gICAgY29udGFpbnMobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIGNvbnN0IHtsbmcsIGxhdH0gPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zTGF0aXR1ZGUgPSB0aGlzLl9zdy5sYXQgPD0gbGF0ICYmIGxhdCA8PSB0aGlzLl9uZS5sYXQ7XG4gICAgICAgIGxldCBjb250YWluc0xvbmdpdHVkZSA9IHRoaXMuX3N3LmxuZyA8PSBsbmcgJiYgbG5nIDw9IHRoaXMuX25lLmxuZztcbiAgICAgICAgaWYgKHRoaXMuX3N3LmxuZyA+IHRoaXMuX25lLmxuZykgeyAvLyB3cmFwcGVkIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICBjb250YWluc0xvbmdpdHVkZSA9IHRoaXMuX3N3LmxuZyA+PSBsbmcgJiYgbG5nID49IHRoaXMuX25lLmxuZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWluc0xhdGl0dWRlICYmIGNvbnRhaW5zTG9uZ2l0dWRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IHRvIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgaXMgcGFzc2VkIGluLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBJbnRlcm5hbGx5LCB0aGUgZnVuY3Rpb24gY2FsbHMgYExuZ0xhdCNjb252ZXJ0YCB0byBjb252ZXJ0IGFycmF5cyB0byBgTG5nTGF0YCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IGlucHV0IEFuIGFycmF5IG9mIHR3byBjb29yZGluYXRlcyB0byBjb252ZXJ0LCBvciBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gQSBuZXcgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LCBpZiBhIGNvbnZlcnNpb24gb2NjdXJyZWQsIG9yIHRoZSBvcmlnaW5hbCBgTG5nTGF0Qm91bmRzYCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYXJyID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICAgICAqIHZhciBsbGIgPSBtYXBib3hnbC5MbmdMYXRCb3VuZHMuY29udmVydChhcnIpO1xuICAgICAqIGxsYjsgICAvLyA9IExuZ0xhdEJvdW5kcyB7X3N3OiBMbmdMYXQge2xuZzogLTczLjk4NzYsIGxhdDogNDAuNzY2MX0sIF9uZTogTG5nTGF0IHtsbmc6IC03My45Mzk3LCBsYXQ6IDQwLjgwMDJ9fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0KGlucHV0OiBMbmdMYXRCb3VuZHNMaWtlKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dCBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykgcmV0dXJuIGlucHV0O1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhpbnB1dCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0LCBhbiBhcnJheSBvZiB7QGxpbmsgTG5nTGF0TGlrZX0gb2JqZWN0cyBpbiBbc3csIG5lXSBvcmRlcixcbiAqIG9yIGFuIGFycmF5IG9mIG51bWJlcnMgaW4gW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gb3JkZXIuXG4gKlxuICogQHR5cGVkZWYge0xuZ0xhdEJvdW5kcyB8IFtMbmdMYXRMaWtlLCBMbmdMYXRMaWtlXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfSBMbmdMYXRCb3VuZHNMaWtlXG4gKiBAZXhhbXBsZVxuICogdmFyIHYxID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhcbiAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksXG4gKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjkzOTcsIDQwLjgwMDIpXG4gKiApO1xuICogdmFyIHYyID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKVxuICogdmFyIHYzID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICovXG5leHBvcnQgdHlwZSBMbmdMYXRCb3VuZHNMaWtlID0gTG5nTGF0Qm91bmRzIHwgW0xuZ0xhdExpa2UsIExuZ0xhdExpa2VdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBkZWZhdWx0IExuZ0xhdEJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d3JhcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9sbmdfbGF0X2JvdW5kcyc7XG5cbi8qXG4qIEFwcHJveGltYXRlIHJhZGl1cyBvZiB0aGUgZWFydGggaW4gbWV0ZXJzLlxuKiBVc2VzIHRoZSBXR1MtODQgYXBwcm94aW1hdGlvbi4gVGhlIHJhZGl1cyBhdCB0aGUgZXF1YXRvciBpcyB+NjM3ODEzNyBhbmQgYXQgdGhlIHBvbGVzIGlzIH42MzU2NzUyLiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Xb3JsZF9HZW9kZXRpY19TeXN0ZW0jV0dTODRcbiogNjM3MTAwOC44IGlzIG9uZSBwdWJsaXNoZWQgXCJhdmVyYWdlIHJhZGl1c1wiIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FYXJ0aF9yYWRpdXMjTWVhbl9yYWRpdXMsIG9yIGZ0cDovL2F0aGVuYS5mc3YuY3Z1dC5jei9aRkcvZ3JzODAtTW9yaXR6LnBkZiBwLjRcbiovXG5leHBvcnQgY29uc3QgZWFydGhSYWRpdXMgPSA2MzcxMDA4Ljg7XG5cbi8qKlxuICogQSBgTG5nTGF0YCBvYmplY3QgcmVwcmVzZW50cyBhIGdpdmVuIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgY29vcmRpbmF0ZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqXG4gKiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggR2VvSlNPTi5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdGAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIG51bWJlcnMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdExpa2V9LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbmcgTG9uZ2l0dWRlLCBtZWFzdXJlZCBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHtudW1iZXJ9IGxhdCBMYXRpdHVkZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAvKVxuICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAqIEBzZWUgW0NyZWF0ZSBhIHRpbWVsaW5lIGFuaW1hdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aW1lbGluZS1hbmltYXRpb24vKVxuICovXG5jbGFzcyBMbmdMYXQge1xuICAgIGxuZzogbnVtYmVyO1xuICAgIGxhdDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChpc05hTihsbmcpIHx8IGlzTmFOKGxhdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoJHtsbmd9LCAke2xhdH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sbmcgPSArbG5nO1xuICAgICAgICB0aGlzLmxhdCA9ICtsYXQ7XG4gICAgICAgIGlmICh0aGlzLmxhdCA+IDkwIHx8IHRoaXMubGF0IDwgLTkwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBgTG5nTGF0YCBvYmplY3Qgd2hvc2UgbG9uZ2l0dWRlIGlzIHdyYXBwZWQgdG8gdGhlIHJhbmdlICgtMTgwLCAxODApLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHdyYXBwZWQgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgyODYuMDI1MSwgNDAuNzczNik7XG4gICAgICogdmFyIHdyYXBwZWQgPSBsbC53cmFwKCk7XG4gICAgICogd3JhcHBlZC5sbmc7IC8vID0gLTczLjk3NDlcbiAgICAgKi9cbiAgICB3cmFwKCkge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdCh3cmFwKHRoaXMubG5nLCAtMTgwLCAxODApLCB0aGlzLmxhdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gVGhlIGNvb3JkaW5hdGVzIHJlcHJlc2V0ZWQgYXMgYW4gYXJyYXkgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvQXJyYXkoKTsgLy8gPSBbLTczLjk3NDksIDQwLjc3MzZdXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmxuZywgdGhpcy5sYXRdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb29yZGluYXRlcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0IGAnTG5nTGF0KGxuZywgbGF0KSdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9TdHJpbmcoKTsgLy8gPSBcIkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNilcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYExuZ0xhdCgke3RoaXMubG5nfSwgJHt0aGlzLmxhdH0pYDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcHByb3hpbWF0ZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcGFpciBvZiBjb29yZGluYXRlcyBpbiBtZXRlcnNcbiAgICAgKiBVc2VzIHRoZSBIYXZlcnNpbmUgRm9ybXVsYSAoZnJvbSBSLlcuIFNpbm5vdHQsIFwiVmlydHVlcyBvZiB0aGUgSGF2ZXJzaW5lXCIsIFNreSBhbmQgVGVsZXNjb3BlLCB2b2wuIDY4LCBuby4gMiwgMTk4NCwgcC4gMTU5KVxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ0xhdCBjb29yZGluYXRlcyB0byBjb21wdXRlIHRoZSBkaXN0YW5jZSB0b1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IERpc3RhbmNlIGluIG1ldGVycyBiZXR3ZWVuIHRoZSB0d28gY29vcmRpbmF0ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbmV3X3lvcmsgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03NC4wMDYwLCA0MC43MTI4KTtcbiAgICAgKiB2YXIgbG9zX2FuZ2VsZXMgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC0xMTguMjQzNywgMzQuMDUyMik7XG4gICAgICogbmV3X3lvcmsuZGlzdGFuY2VUbyhsb3NfYW5nZWxlcyk7IC8vID0gMzkzNTc1MS42OTA4OTM5ODcsIFwidHJ1ZSBkaXN0YW5jZVwiIHVzaW5nIGEgbm9uLXNwaGVyaWNhbCBhcHByb3hpbWF0aW9uIGlzIH4zOTY2a21cbiAgICAgKi9cbiAgICBkaXN0YW5jZVRvKGxuZ0xhdDogTG5nTGF0KSB7XG4gICAgICAgIGNvbnN0IHJhZCA9IE1hdGguUEkgLyAxODA7XG4gICAgICAgIGNvbnN0IGxhdDEgPSB0aGlzLmxhdCAqIHJhZDtcbiAgICAgICAgY29uc3QgbGF0MiA9IGxuZ0xhdC5sYXQgKiByYWQ7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnNpbihsYXQxKSAqIE1hdGguc2luKGxhdDIpICsgTWF0aC5jb3MobGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIE1hdGguY29zKChsbmdMYXQubG5nIC0gdGhpcy5sbmcpICogcmFkKTtcblxuICAgICAgICBjb25zdCBtYXhNZXRlcnMgPSBlYXJ0aFJhZGl1cyAqIE1hdGguYWNvcyhNYXRoLm1pbihhLCAxKSk7XG4gICAgICAgIHJldHVybiBtYXhNZXRlcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGBMbmdMYXRCb3VuZHNgIGZyb20gdGhlIGNvb3JkaW5hdGVzIGV4dGVuZGVkIGJ5IGEgZ2l2ZW4gYHJhZGl1c2AuIFRoZSByZXR1cm5lZCBgTG5nTGF0Qm91bmRzYCBjb21wbGV0ZWx5IGNvbnRhaW5zIHRoZSBgcmFkaXVzYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzPTBdIERpc3RhbmNlIGluIG1ldGVycyBmcm9tIHRoZSBjb29yZGluYXRlcyB0byBleHRlbmQgdGhlIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBBIG5ldyBgTG5nTGF0Qm91bmRzYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb29yZGluYXRlcyBleHRlbmRlZCBieSB0aGUgYHJhZGl1c2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b0JvdW5kcygxMDApLnRvQXJyYXkoKTsgLy8gPSBbWy03My45NzUwMTg2MjE0MTMyOCwgNDAuNzczNTEwMTY4NDcyMjldLCBbLTczLjk3NDc4MTM3ODU4NjczLCA0MC43NzM2ODk4MzE1Mjc3MV1dXG4gICAgICovXG4gICAgdG9Cb3VuZHMocmFkaXVzPzogbnVtYmVyID0gMCkge1xuICAgICAgICBjb25zdCBlYXJ0aENpcmN1bWZlcmVuY2VJbk1ldGVyc0F0RXF1YXRvciA9IDQwMDc1MDE3O1xuICAgICAgICBjb25zdCBsYXRBY2N1cmFjeSA9IDM2MCAqIHJhZGl1cyAvIGVhcnRoQ2lyY3VtZmVyZW5jZUluTWV0ZXJzQXRFcXVhdG9yLFxuICAgICAgICAgICAgbG5nQWNjdXJhY3kgPSBsYXRBY2N1cmFjeSAvIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIHRoaXMubGF0KTtcblxuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhuZXcgTG5nTGF0KHRoaXMubG5nIC0gbG5nQWNjdXJhY3ksIHRoaXMubGF0IC0gbGF0QWNjdXJhY3kpLFxuICAgICAgICAgICAgbmV3IExuZ0xhdCh0aGlzLmxuZyArIGxuZ0FjY3VyYWN5LCB0aGlzLmxhdCArIGxhdEFjY3VyYWN5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgb3IgYW4gb2JqZWN0IHdpdGggYGxuZ2AgYW5kIGBsYXRgIG9yIGBsb25gIGFuZCBgbGF0YCBwcm9wZXJ0aWVzXG4gICAgICogdG8gYSBgTG5nTGF0YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBJZiBhIGBMbmdMYXRgIG9iamVjdCBpcyBwYXNzZWQgaW4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gaW5wdXQgQW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgb3Igb2JqZWN0IHRvIGNvbnZlcnQsIG9yIGEgYExuZ0xhdGAgb2JqZWN0IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBBIG5ldyBgTG5nTGF0YCBvYmplY3QsIGlmIGEgY29udmVyc2lvbiBvY2N1cnJlZCwgb3IgdGhlIG9yaWdpbmFsIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBhcnIgPSBbLTczLjk3NDksIDQwLjc3MzZdO1xuICAgICAqIHZhciBsbCA9IG1hcGJveGdsLkxuZ0xhdC5jb252ZXJ0KGFycik7XG4gICAgICogbGw7ICAgLy8gPSBMbmdMYXQge2xuZzogLTczLjk3NDksIGxhdDogNDAuNzczNn1cbiAgICAgKi9cbiAgICBzdGF0aWMgY29udmVydChpbnB1dDogTG5nTGF0TGlrZSk6IExuZ0xhdCB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIExuZ0xhdCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSAmJiAoaW5wdXQubGVuZ3RoID09PSAyIHx8IGlucHV0Lmxlbmd0aCA9PT0gMykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG5nTGF0KE51bWJlcihpbnB1dFswXSksIE51bWJlcihpbnB1dFsxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoXG4gICAgICAgICAgICAgICAgLy8gZmxvdyBjYW4ndCByZWZpbmUgdGhpcyB0byBoYXZlIG9uZSBvZiBsbmcgb3IgbGF0LCBzbyB3ZSBoYXZlIHRvIGNhc3QgdG8gYW55XG4gICAgICAgICAgICAgICAgTnVtYmVyKCdsbmcnIGluIGlucHV0ID8gKGlucHV0OiBhbnkpLmxuZyA6IChpbnB1dDogYW55KS5sb24pLFxuICAgICAgICAgICAgICAgIE51bWJlcihpbnB1dC5sYXQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgYW4gb2JqZWN0IHtsb246IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl1cIik7XG4gICAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExuZ0xhdH0gb2JqZWN0LCBhbiBhcnJheSBvZiB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSxcbiAqIG9yIGFuIG9iamVjdCB3aXRoIGBsbmdgIGFuZCBgbGF0YCBvciBgbG9uYCBhbmQgYGxhdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZWRlZiB7TG5nTGF0IHwge2xuZzogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCB7bG9uOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IFtudW1iZXIsIG51bWJlcl19IExuZ0xhdExpa2VcbiAqIEBleGFtcGxlXG4gKiB2YXIgdjEgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC0xMjIuNDIwNjc5LCAzNy43NzI1MzcpO1xuICogdmFyIHYyID0gWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddO1xuICogdmFyIHYzID0ge2xvbjogLTEyMi40MjA2NzksIGxhdDogMzcuNzcyNTM3fTtcbiAqL1xuZXhwb3J0IHR5cGUgTG5nTGF0TGlrZSA9IExuZ0xhdCB8IHtsbmc6IG51bWJlciwgbGF0OiBudW1iZXJ9IHwge2xvbjogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCBbbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgZGVmYXVsdCBMbmdMYXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0LCB7ZWFydGhSYWRpdXN9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbi8qXG4gKiBUaGUgYXZlcmFnZSBjaXJjdW1mZXJlbmNlIG9mIHRoZSB3b3JsZCBpbiBtZXRlcnMuXG4gKi9cbmNvbnN0IGVhcnRoQ2lyY3VtZnJlbmNlID0gMiAqIE1hdGguUEkgKiBlYXJ0aFJhZGl1czsgLy8gbWV0ZXJzXG5cbi8qXG4gKiBUaGUgY2lyY3VtZmVyZW5jZSBhdCBhIGxpbmUgb2YgbGF0aXR1ZGUgaW4gbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXRpdHVkZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGVhcnRoQ2lyY3VtZnJlbmNlICogTWF0aC5jb3MobGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yWGZyb21MbmcobG5nOiBudW1iZXIpIHtcbiAgICByZXR1cm4gKDE4MCArIGxuZykgLyAzNjA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvcllmcm9tTGF0KGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgxODAgLSAoMTgwIC8gTWF0aC5QSSAqIE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgbGF0ICogTWF0aC5QSSAvIDM2MCkpKSkgLyAzNjA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoYWx0aXR1ZGU6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYWx0aXR1ZGUgLyBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG5nRnJvbU1lcmNhdG9yWCh4OiBudW1iZXIpIHtcbiAgICByZXR1cm4geCAqIDM2MCAtIDE4MDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdEZyb21NZXJjYXRvclkoeTogbnVtYmVyKSB7XG4gICAgY29uc3QgeTIgPSAxODAgLSB5ICogMzYwO1xuICAgIHJldHVybiAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRpdHVkZUZyb21NZXJjYXRvclooejogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICByZXR1cm4geiAqIGNpcmN1bWZlcmVuY2VBdExhdGl0dWRlKGxhdEZyb21NZXJjYXRvclkoeSkpO1xufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgTWVyY2F0b3Igc2NhbGUgZmFjdG9yIGZvciBhIGdpdmVuIGxhdGl0dWRlLCBzZWVcbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01lcmNhdG9yX3Byb2plY3Rpb24jU2NhbGVfZmFjdG9yXG4gKlxuICogQXQgdGhlIGVxdWF0b3IgdGhlIHNjYWxlIGZhY3RvciB3aWxsIGJlIDEsIHdoaWNoIGluY3JlYXNlcyBhdCBoaWdoZXIgbGF0aXR1ZGVzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHNjYWxlIGZhY3RvclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yU2NhbGUobGF0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gMSAvIE1hdGguY29zKGxhdCAqIE1hdGguUEkgLyAxODApO1xufVxuXG4vKipcbiAqIEEgYE1lcmNhdG9yQ29vcmRpbmF0ZWAgb2JqZWN0IHJlcHJlc2VudHMgYSBwcm9qZWN0ZWQgdGhyZWUgZGltZW5zaW9uYWwgcG9zaXRpb24uXG4gKlxuICogYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdXNlcyB0aGUgd2ViIG1lcmNhdG9yIHByb2plY3Rpb24gKFtFUFNHOjM4NTddKGh0dHBzOi8vZXBzZy5pby8zODU3KSkgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgdW5pdHM6XG4gKiAtIHRoZSBzaXplIG9mIDEgdW5pdCBpcyB0aGUgd2lkdGggb2YgdGhlIHByb2plY3RlZCB3b3JsZCBpbnN0ZWFkIG9mIHRoZSBcIm1lcmNhdG9yIG1ldGVyXCJcbiAqIC0gdGhlIG9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBpcyBhdCB0aGUgbm9ydGgtd2VzdCBjb3JuZXIgaW5zdGVhZCBvZiB0aGUgbWlkZGxlXG4gKlxuICogRm9yIGV4YW1wbGUsIGBNZXJjYXRvckNvb3JkaW5hdGUoMCwgMCwgMClgIGlzIHRoZSBub3J0aC13ZXN0IGNvcm5lciBvZiB0aGUgbWVyY2F0b3Igd29ybGQgYW5kXG4gKiBgTWVyY2F0b3JDb29yZGluYXRlKDEsIDEsIDApYCBpcyB0aGUgc291dGgtZWFzdCBjb3JuZXIuIElmIHlvdSBhcmUgZmFtaWxpYXIgd2l0aFxuICogW3ZlY3RvciB0aWxlc10oaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC92ZWN0b3ItdGlsZS1zcGVjKSBpdCBtYXkgYmUgaGVscGZ1bCB0byB0aGlua1xuICogb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgYXMgdGhlIGAwLzAvMGAgdGlsZSB3aXRoIGFuIGV4dGVudCBvZiBgMWAuXG4gKlxuICogVGhlIGB6YCBkaW1lbnNpb24gb2YgYE1lcmNhdG9yQ29vcmRpbmF0ZWAgaXMgY29uZm9ybWFsLiBBIGN1YmUgaW4gdGhlIG1lcmNhdG9yIGNvb3JkaW5hdGUgc3BhY2Ugd291bGQgYmUgcmVuZGVyZWQgYXMgYSBjdWJlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSB4IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgeSBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IHogVGhlIHogY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbnVsbElzbGFuZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApO1xuICpcbiAqIEBzZWUgW0FkZCBhIGN1c3RvbSBzdHlsZSBsYXllcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tc3R5bGUtbGF5ZXIvKVxuICovXG5jbGFzcyBNZXJjYXRvckNvb3JkaW5hdGUge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgejogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciA9IDApIHtcbiAgICAgICAgdGhpcy54ID0gK3g7XG4gICAgICAgIHRoaXMueSA9ICt5O1xuICAgICAgICB0aGlzLnogPSArejtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9qZWN0IGEgYExuZ0xhdGAgdG8gYSBgTWVyY2F0b3JDb29yZGluYXRlYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nTGF0TGlrZSBUaGUgbG9jYXRpb24gdG8gcHJvamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWx0aXR1ZGUgVGhlIGFsdGl0dWRlIGluIG1ldGVycyBvZiB0aGUgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge01lcmNhdG9yQ29vcmRpbmF0ZX0gVGhlIHByb2plY3RlZCBtZXJjYXRvciBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQoeyBsbmc6IDAsIGxhdDogMH0sIDApO1xuICAgICAqIGNvb3JkOyAvLyBNZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApXG4gICAgICovXG4gICAgc3RhdGljIGZyb21MbmdMYXQobG5nTGF0TGlrZTogTG5nTGF0TGlrZSwgYWx0aXR1ZGU6IG51bWJlciA9IDApIHtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gTG5nTGF0LmNvbnZlcnQobG5nTGF0TGlrZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JYZnJvbUxuZyhsbmdMYXQubG5nKSxcbiAgICAgICAgICAgICAgICBtZXJjYXRvcllmcm9tTGF0KGxuZ0xhdC5sYXQpLFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWmZyb21BbHRpdHVkZShhbHRpdHVkZSwgbG5nTGF0LmxhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBMbmdMYXRgIGZvciB0aGUgY29vcmRpbmF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKTtcbiAgICAgKiB2YXIgbGF0TG5nID0gY29vcmQudG9MbmdMYXQoKTsgLy8gTG5nTGF0KDAsIDApXG4gICAgICovXG4gICAgdG9MbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KFxuICAgICAgICAgICAgICAgIGxuZ0Zyb21NZXJjYXRvclgodGhpcy54KSxcbiAgICAgICAgICAgICAgICBsYXRGcm9tTWVyY2F0b3JZKHRoaXMueSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFsdGl0dWRlIGluIG1ldGVycyBvZiB0aGUgY29vcmRpbmF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhbHRpdHVkZSBpbiBtZXRlcnMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAsIDAsIDAuMDIpO1xuICAgICAqIGNvb3JkLnRvQWx0aXR1ZGUoKTsgLy8gNjkxNC4yODE5NTYyOTUzMzlcbiAgICAgKi9cbiAgICB0b0FsdGl0dWRlKCkge1xuICAgICAgICByZXR1cm4gYWx0aXR1ZGVGcm9tTWVyY2F0b3JaKHRoaXMueiwgdGhpcy55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiAxIG1ldGVyIGluIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVuaXRzIGF0IHRoaXMgbGF0aXR1ZGUuXG4gICAgICpcbiAgICAgKiBGb3IgY29vcmRpbmF0ZXMgaW4gcmVhbCB3b3JsZCB1bml0cyB1c2luZyBtZXRlcnMsIHRoaXMgbmF0dXJhbGx5IHByb3ZpZGVzIHRoZSBzY2FsZVxuICAgICAqIHRvIHRyYW5zZm9ybSBpbnRvIGBNZXJjYXRvckNvb3JkaW5hdGVgcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IERpc3RhbmNlIG9mIDEgbWV0ZXIgaW4gYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdW5pdHMuXG4gICAgICovXG4gICAgbWV0ZXJJbk1lcmNhdG9yQ29vcmRpbmF0ZVVuaXRzKCkge1xuICAgICAgICAvLyAxIG1ldGVyIC8gY2lyY3VtZmVyZW5jZSBhdCBlcXVhdG9yIGluIG1ldGVycyAqIE1lcmNhdG9yIHByb2plY3Rpb24gc2NhbGUgZmFjdG9yIGF0IHRoaXMgbGF0aXR1ZGVcbiAgICAgICAgcmV0dXJuIDEgLyBlYXJ0aENpcmN1bWZyZW5jZSAqIG1lcmNhdG9yU2NhbGUobGF0RnJvbU1lcmNhdG9yWSh0aGlzLnkpKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVyY2F0b3JDb29yZGluYXRlO1xuIiwiLy8gQGZsb3dcblxuLyoqXG4gKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhIGNvb3JkaW5hdGUgaW4gdGhlIGludGVybmFsIHRpbGUgY29vcmRpbmF0ZSBzeXN0ZW0uIENvb3JkaW5hdGVzIG9mXG4gKiBhbGwgc291cmNlIGZlYXR1cmVzIG5vcm1hbGl6ZWQgdG8gdGhpcyBleHRlbnQgdXBvbiBsb2FkLlxuICpcbiAqIFRoZSB2YWx1ZSBpcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogKiBWZXJ0ZXggYnVmZmVyIHN0b3JlIHBvc2l0aW9ucyBhcyBzaWduZWQgMTYgYml0IGludGVnZXJzLlxuICogKiBPbmUgYml0IGlzIGxvc3QgZm9yIHNpZ25lZG5lc3MgdG8gc3VwcG9ydCB0aWxlIGJ1ZmZlcnMuXG4gKiAqIE9uZSBiaXQgaXMgbG9zdCBiZWNhdXNlIHRoZSBsaW5lIHZlcnRleCBidWZmZXIgdXNlZCB0byBwYWNrIDEgYml0IG9mIG90aGVyIGRhdGEgaW50byB0aGUgaW50LlxuICogKiBPbmUgYml0IGlzIGxvc3QgdG8gc3VwcG9ydCBmZWF0dXJlcyBleHRlbmRpbmcgcGFzdCB0aGUgZXh0ZW50IG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZSB0aWxlLlxuICogKiBUaGlzIGxlYXZlcyB1cyB3aXRoIDJeMTMgPSA4MTkyXG4gKlxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5leHBvcnQgZGVmYXVsdCA4MTkyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtpc1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0dlb0pTT04sIEdlb0pTT05Qb2x5Z29uLCBHZW9KU09OTXVsdGlQb2x5Z29ufSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi8uLi8uLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uLy4uLy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxudHlwZSBHZW9KU09OUG9seWdvbnMgPXwgR2VvSlNPTlBvbHlnb24gfCBHZW9KU09OTXVsdGlQb2x5Z29uO1xuXG4vLyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXG50eXBlIEJCb3ggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbmZ1bmN0aW9uIHVwZGF0ZUJCb3goYmJveDogQkJveCwgY29vcmQ6IFBvaW50KSB7XG4gICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIGNvb3JkWzBdKTtcbiAgICBiYm94WzFdID0gTWF0aC5taW4oYmJveFsxXSwgY29vcmRbMV0pO1xuICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBjb29yZFswXSk7XG4gICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIGNvb3JkWzFdKTtcbn1cblxuZnVuY3Rpb24gYm94V2l0aGluQm94KGJib3gxOiBCQm94LCBiYm94MjogQkJveCkge1xuICAgIGlmIChiYm94MVswXSA8PSBiYm94MlswXSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChiYm94MVsyXSA+PSBiYm94MlsyXSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChiYm94MVsxXSA8PSBiYm94MlsxXSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChiYm94MVszXSA+PSBiYm94MlszXSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlQ29vcmRpbmF0ZXMocCwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICBjb25zdCBjb29yZCA9IE1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHtsbmc6IHBbMF0sIGxhdDogcFsxXX0sIDApO1xuICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuICAgIHJldHVybiBbTWF0aC5yb3VuZChjb29yZC54ICogdGlsZXNBdFpvb20gKiBFWFRFTlQpLCBNYXRoLnJvdW5kKGNvb3JkLnkgKiB0aWxlc0F0Wm9vbSAqIEVYVEVOVCldO1xufVxuXG5mdW5jdGlvbiBvbkJvdW5kYXJ5KHAsIHAxLCBwMikge1xuICAgIGNvbnN0IHgxID0gcFswXSAtIHAxWzBdO1xuICAgIGNvbnN0IHkxID0gcFsxXSAtIHAxWzFdO1xuICAgIGNvbnN0IHgyID0gcFswXSAtIHAyWzBdO1xuICAgIGNvbnN0IHkyID0gcFsxXSAtIHAyWzFdO1xuICAgIHJldHVybiAoeDEgKiB5MiAtIHgyICogeTEgPT09IDApICYmICh4MSAqIHgyIDw9IDApICYmICh5MSAqIHkyIDw9IDApO1xufVxuXG5mdW5jdGlvbiByYXlJbnRlcnNlY3QocCwgcDEsIHAyKSB7XG4gICAgcmV0dXJuICgocDFbMV0gPiBwWzFdKSAhPT0gKHAyWzFdID4gcFsxXSkpICYmIChwWzBdIDwgKHAyWzBdIC0gcDFbMF0pICogKHBbMV0gLSBwMVsxXSkgLyAocDJbMV0gLSBwMVsxXSkgKyBwMVswXSk7XG59XG5cbi8vIHJheSBjYXN0aW5nIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGlmIHBvaW50IGlzIGluIHBvbHlnb25cbmZ1bmN0aW9uIHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcmluZ3MpIHtcbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSByaW5nc1tpXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbjIgPSByaW5nLmxlbmd0aDsgaiA8IGxlbjIgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChvbkJvdW5kYXJ5KHBvaW50LCByaW5nW2pdLCByaW5nW2ogKyAxXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChyYXlJbnRlcnNlY3QocG9pbnQsIHJpbmdbal0sIHJpbmdbaiArIDFdKSkgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG5mdW5jdGlvbiBwb2ludFdpdGhpblBvbHlnb25zKHBvaW50LCBwb2x5Z29ucykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcG9seWdvbnNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwZXJwKHYxLCB2Mikge1xuICAgIHJldHVybiAodjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF0pO1xufVxuXG4vLyBjaGVjayBpZiBwMSBhbmQgcDIgYXJlIGluIGRpZmZlcmVudCBzaWRlcyBvZiBsaW5lIHNlZ21lbnQgcTEtPnEyXG5mdW5jdGlvbiAgdHdvU2lkZWQocDEsIHAyLCBxMSwgcTIpIHtcbiAgICAvLyBxMS0+cDEgKHgxLCB5MSksIHExLT5wMiAoeDIsIHkyKSwgcTEtPnEyICh4MywgeTMpXG4gICAgY29uc3QgeDEgPSBwMVswXSAtIHExWzBdO1xuICAgIGNvbnN0IHkxID0gcDFbMV0gLSBxMVsxXTtcbiAgICBjb25zdCB4MiA9IHAyWzBdIC0gcTFbMF07XG4gICAgY29uc3QgeTIgPSBwMlsxXSAtIHExWzFdO1xuICAgIGNvbnN0IHgzID0gcTJbMF0gLSBxMVswXTtcbiAgICBjb25zdCB5MyA9IHEyWzFdIC0gcTFbMV07XG4gICAgaWYgKCh4MSAqIHkzIC0geDMgKiB5MSkgKiAoeDIgKiB5MyAtIHgzICogeTIpIDwgMCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8gYSwgYiBhcmUgZW5kIHBvaW50cyBmb3IgbGluZSBzZWdtZW50MSwgYyBhbmQgZCBhcmUgZW5kIHBvaW50cyBmb3IgbGluZSBzZWdtZW50MlxuZnVuY3Rpb24gbGluZUludGVyc2VjdExpbmUoYSwgYiwgYywgZCkge1xuICAgIC8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBhcmUgcGFyYWxsZWwgb3Igbm90XG4gICAgLy8gcHJlY29uZGl0aW9uIGlzIGVuZCBwb2ludCBhLCBiIGlzIGluc2lkZSBwb2x5Z29uLCBpZiBsaW5lIGEtPmIgaXNcbiAgICAvLyBwYXJhbGxlbCB0byBwb2x5Z29uIGVkZ2UgYy0+ZCwgdGhlbiBhLT5iIHdvbid0IGludGVyc2VjdCB3aXRoIGMtPmRcbiAgICBjb25zdCB2ZWN0b3JQID0gW2JbMF0gLSBhWzBdLCBiWzFdIC0gYVsxXV07XG4gICAgY29uc3QgdmVjdG9yUSA9IFtkWzBdIC0gY1swXSwgZFsxXSAtIGNbMV1dO1xuICAgIGlmIChwZXJwKHZlY3RvclEsIHZlY3RvclApID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJZiBsaW5lcyBhcmUgaW50ZXJzZWN0aW5nIHdpdGggZWFjaCBvdGhlciwgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIHNob3VsZCBiZTpcbiAgICAvLyBhIGFuZCBiIGxpZSBpbiBkaWZmZXJlbnQgc2lkZXMgb2Ygc2VnbWVudCBjLT5kXG4gICAgLy8gYyBhbmQgZCBsaWUgaW4gZGlmZmVyZW50IHNpZGVzIG9mIHNlZ21lbnQgYS0+YlxuICAgIGlmICh0d29TaWRlZChhLCBiLCBjLCBkKSAmJiB0d29TaWRlZChjLCBkLCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0UG9seWdvbihwMSwgcDIsIHBvbHlnb24pIHtcbiAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggZXZlcnkgZWRnZSBvZiB0aGUgcmluZ1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJpbmcubGVuZ3RoIC0gMTsgKytqKSB7XG4gICAgICAgICAgICBpZiAobGluZUludGVyc2VjdExpbmUocDEsIHAyLCByaW5nW2pdLCByaW5nW2ogKyAxXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVTdHJpbmdXaXRoaW5Qb2x5Z29uKGxpbmUsIHBvbHlnb24pIHtcbiAgICAvLyBGaXJzdCwgY2hlY2sgaWYgZ2VvbWV0cnkgcG9pbnRzIG9mIGxpbmUgc2VnbWVudHMgYXJlIGFsbCBpbnNpZGUgcG9seWdvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXBvaW50V2l0aGluUG9seWdvbihsaW5lW2ldLCBwb2x5Z29uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2Vjb25kLCBjaGVjayBpZiB0aGVyZSBpcyBsaW5lIHNlZ21lbnQgaW50ZXJzZWN0aW5nIHBvbHlnb24gZWRnZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RQb2x5Z29uKGxpbmVbaV0sIGxpbmVbaSArIDFdLCBwb2x5Z29uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsaW5lU3RyaW5nV2l0aGluUG9seWdvbnMobGluZSwgcG9seWdvbnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lU3RyaW5nV2l0aGluUG9seWdvbihsaW5lLCBwb2x5Z29uc1tpXSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFRpbGVQb2x5Z29uKGNvb3JkaW5hdGVzLCBiYm94LCBjYW5vbmljYWwpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByaW5nID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29vcmRpbmF0ZXNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gZ2V0VGlsZUNvb3JkaW5hdGVzKGNvb3JkaW5hdGVzW2ldW2pdLCBjYW5vbmljYWwpO1xuICAgICAgICAgICAgdXBkYXRlQkJveChiYm94LCBjb29yZCk7XG4gICAgICAgICAgICByaW5nLnB1c2goY29vcmQpO1xuICAgICAgICB9XG4gICAgICAgIHBvbHlnb24ucHVzaChyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvbHlnb247XG59XG5cbmZ1bmN0aW9uIGdldFRpbGVQb2x5Z29ucyhjb29yZGluYXRlcywgYmJveCwgY2Fub25pY2FsKSB7XG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBnZXRUaWxlUG9seWdvbihjb29yZGluYXRlc1tpXSwgYmJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBwb2ludHNXaXRoaW5Qb2x5Z29ucyhjdHg6IEV2YWx1YXRpb25Db250ZXh0LCBwb2x5Z29uR2VvbWV0cnk6IEdlb0pTT05Qb2x5Z29ucykge1xuICAgIGNvbnN0IHBvaW50QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBwb2x5QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBjYW5vbmljYWwgPSBjdHguY2Fub25pY2FsSUQoKTtcbiAgICBjb25zdCBzaGlmdHMgPSBbY2Fub25pY2FsLnggKiBFWFRFTlQsIGNhbm9uaWNhbC55ICogRVhURU5UXTtcbiAgICBjb25zdCB0aWxlUG9pbnRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHBvaW50cyBvZiBjdHguZ2VvbWV0cnkoKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFtwb2ludC54ICsgc2hpZnRzWzBdLCBwb2ludC55ICsgc2hpZnRzWzFdXTtcbiAgICAgICAgICAgIHVwZGF0ZUJCb3gocG9pbnRCQm94LCBwKTtcbiAgICAgICAgICAgIHRpbGVQb2ludHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb2x5Z29uR2VvbWV0cnkudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGNvbnN0IHRpbGVQb2x5Z29uID0gZ2V0VGlsZVBvbHlnb24ocG9seWdvbkdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gocG9pbnRCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbGVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRXaXRoaW5Qb2x5Z29uKHBvaW50LCB0aWxlUG9seWdvbikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb2x5Z29uR2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgY29uc3QgdGlsZVBvbHlnb25zID0gZ2V0VGlsZVBvbHlnb25zKHBvbHlnb25HZW9tZXRyeS5jb29yZGluYXRlcywgcG9seUJCb3gsIGNhbm9uaWNhbCk7XG4gICAgICAgIGlmICghYm94V2l0aGluQm94KHBvaW50QkJveCwgcG9seUJCb3gpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB0aWxlUG9pbnRzKSB7XG4gICAgICAgICAgICBpZiAoIXBvaW50V2l0aGluUG9seWdvbnMocG9pbnQsIHRpbGVQb2x5Z29ucykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsaW5lc1dpdGhpblBvbHlnb25zKGN0eDogRXZhbHVhdGlvbkNvbnRleHQsIHBvbHlnb25HZW9tZXRyeTogR2VvSlNPTlBvbHlnb25zKSB7XG4gICAgY29uc3QgbGluZUJCb3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG4gICAgY29uc3QgcG9seUJCb3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG5cbiAgICBjb25zdCBjYW5vbmljYWwgPSBjdHguY2Fub25pY2FsSUQoKTtcbiAgICBjb25zdCBzaGlmdHMgPSBbY2Fub25pY2FsLnggKiBFWFRFTlQsIGNhbm9uaWNhbC55ICogRVhURU5UXTtcbiAgICBjb25zdCB0aWxlTGluZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBjdHguZ2VvbWV0cnkoKSkge1xuICAgICAgICBjb25zdCB0aWxlTGluZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIGxpbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBbcG9pbnQueCArIHNoaWZ0c1swXSwgcG9pbnQueSArIHNoaWZ0c1sxXV07XG4gICAgICAgICAgICB1cGRhdGVCQm94KGxpbmVCQm94LCBwKTtcbiAgICAgICAgICAgIHRpbGVMaW5lLnB1c2gocCk7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZUxpbmVzLnB1c2godGlsZUxpbmUpO1xuICAgIH1cblxuICAgIGlmIChwb2x5Z29uR2VvbWV0cnkudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGNvbnN0IHRpbGVQb2x5Z29uID0gZ2V0VGlsZVBvbHlnb24ocG9seWdvbkdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gobGluZUJCb3gsIHBvbHlCQm94KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aWxlTGluZXMpIHtcbiAgICAgICAgICAgIGlmICghbGluZVN0cmluZ1dpdGhpblBvbHlnb24obGluZSwgdGlsZVBvbHlnb24pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9seWdvbkdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGNvbnN0IHRpbGVQb2x5Z29ucyA9IGdldFRpbGVQb2x5Z29ucyhwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuXG4gICAgICAgIGlmICghYm94V2l0aGluQm94KGxpbmVCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGlsZUxpbmVzKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVTdHJpbmdXaXRoaW5Qb2x5Z29ucyhsaW5lLCB0aWxlUG9seWdvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG5cbn1cblxuY2xhc3MgV2l0aGluIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBnZW9qc29uOiBHZW9KU09OXG4gICAgZ2VvbWV0cmllczogR2VvSlNPTlBvbHlnb25zO1xuXG4gICAgY29uc3RydWN0b3IoZ2VvanNvbjogR2VvSlNPTiwgZ2VvbWV0cmllczogR2VvSlNPTlBvbHlnb25zKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEJvb2xlYW5UeXBlO1xuICAgICAgICB0aGlzLmdlb2pzb24gPSBnZW9qc29uO1xuICAgICAgICB0aGlzLmdlb21ldHJpZXMgPSBnZW9tZXRyaWVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGAnd2l0aGluJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG4gICAgICAgIGlmIChpc1ZhbHVlKGFyZ3NbMV0pKSB7XG4gICAgICAgICAgICBjb25zdCBnZW9qc29uID0gKGFyZ3NbMV06IE9iamVjdCk7XG4gICAgICAgICAgICBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2l0aGluKGdlb2pzb24sIGdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBnZW9qc29uLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQb2x5Z29uJyB8fCB0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpdGhpbihnZW9qc29uLCBnZW9qc29uLmdlb21ldHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdlb2pzb24udHlwZSAgPT09ICdQb2x5Z29uJyB8fCBnZW9qc29uLnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXaXRoaW4oZ2VvanNvbiwgZ2VvanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYCd3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgdmFsaWQgZ2VvanNvbiBvYmplY3QgdGhhdCBjb250YWlucyBwb2x5Z29uIGdlb21ldHJ5IHR5cGUuYCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoY3R4Lmdlb21ldHJ5KCkgIT0gbnVsbCAmJiBjdHguY2Fub25pY2FsSUQoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4Lmdlb21ldHJ5VHlwZSgpID09PSAnUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50c1dpdGhpblBvbHlnb25zKGN0eCwgdGhpcy5nZW9tZXRyaWVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4Lmdlb21ldHJ5VHlwZSgpID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZXNXaXRoaW5Qb2x5Z29ucyhjdHgsIHRoaXMuZ2VvbWV0cmllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZCgpIHt9XG5cbiAgICBvdXRwdXREZWZpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgcmV0dXJuIFtcIndpdGhpblwiLCB0aGlzLmdlb2pzb25dO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBXaXRoaW47XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgV2l0aGluIGZyb20gJy4vZGVmaW5pdGlvbnMvd2l0aGluJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24uanMnO1xuXG5mdW5jdGlvbiBpc0ZlYXR1cmVDb25zdGFudChlOiBFeHByZXNzaW9uKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2dldCcgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2ZlYXR1cmUtc3RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5uYW1lID09PSAnaGFzJyAmJiBlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlLm5hbWUgPT09ICdwcm9wZXJ0aWVzJyB8fFxuICAgICAgICAgICAgZS5uYW1lID09PSAnZ2VvbWV0cnktdHlwZScgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2lkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXmZpbHRlci0vLnRlc3QoZS5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBXaXRoaW4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGUuZWFjaENoaWxkKGFyZyA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgIWlzRmVhdHVyZUNvbnN0YW50KGFyZykpIHsgcmVzdWx0ID0gZmFsc2U7IH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRlQ29uc3RhbnQoZTogRXhwcmVzc2lvbikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdmZWF0dXJlLXN0YXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGUuZWFjaENoaWxkKGFyZyA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgIWlzU3RhdGVDb25zdGFudChhcmcpKSB7IHJlc3VsdCA9IGZhbHNlOyB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGU6IEV4cHJlc3Npb24sIHByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbiAmJiBwcm9wZXJ0aWVzLmluZGV4T2YoZS5uYW1lKSA+PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGUuZWFjaENoaWxkKChhcmcpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGFyZywgcHJvcGVydGllcykpIHsgcmVzdWx0ID0gZmFsc2U7IH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge2lzRmVhdHVyZUNvbnN0YW50LCBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQsIGlzU3RhdGVDb25zdGFudH07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0ICBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG5jbGFzcyBWYXIgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBib3VuZEV4cHJlc3Npb246IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGJvdW5kRXhwcmVzc2lvbjogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBib3VuZEV4cHJlc3Npb24udHlwZTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5ib3VuZEV4cHJlc3Npb24gPSBib3VuZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyIHx8IHR5cGVvZiBhcmdzWzFdICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGAndmFyJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBhcmdzWzFdO1xuICAgICAgICBpZiAoIWNvbnRleHQuc2NvcGUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVW5rbm93biB2YXJpYWJsZSBcIiR7bmFtZX1cIi4gTWFrZSBzdXJlIFwiJHtuYW1lfVwiIGhhcyBiZWVuIGJvdW5kIGluIGFuIGVuY2xvc2luZyBcImxldFwiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LmAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBWYXIobmFtZSwgY29udGV4dC5zY29wZS5nZXQobmFtZSkpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRFeHByZXNzaW9uLmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKCkge31cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJ2YXJcIiwgdGhpcy5uYW1lXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTY29wZSBmcm9tICcuL3Njb3BlJztcbmltcG9ydCB7Y2hlY2tTdWJ0eXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCBQYXJzaW5nRXJyb3IgZnJvbSAnLi9wYXJzaW5nX2Vycm9yJztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4vZGVmaW5pdGlvbnMvbGl0ZXJhbCc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vZGVmaW5pdGlvbnMvYXNzZXJ0aW9uJztcbmltcG9ydCBDb2VyY2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvZXJjaW9uJztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29sbGF0b3JFeHByZXNzaW9uIGZyb20gJy4vZGVmaW5pdGlvbnMvY29sbGF0b3InO1xuaW1wb3J0IFdpdGhpbiBmcm9tICcuL2RlZmluaXRpb25zL3dpdGhpbic7XG5pbXBvcnQge2lzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNGZWF0dXJlQ29uc3RhbnR9IGZyb20gJy4vaXNfY29uc3RhbnQnO1xuaW1wb3J0IFZhciBmcm9tICcuL2RlZmluaXRpb25zL3Zhcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uLCBFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU3RhdGUgYXNzb2NpYXRlZCBwYXJzaW5nIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYW4gZXhwcmVzc2lvbiB0cmVlLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgUGFyc2luZ0NvbnRleHQge1xuICAgIHJlZ2lzdHJ5OiBFeHByZXNzaW9uUmVnaXN0cnk7XG4gICAgcGF0aDogQXJyYXk8bnVtYmVyPjtcbiAgICBrZXk6IHN0cmluZztcbiAgICBzY29wZTogU2NvcGU7XG4gICAgZXJyb3JzOiBBcnJheTxQYXJzaW5nRXJyb3I+O1xuXG4gICAgLy8gVGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhpcyBleHByZXNzaW9uLiBQcm92aWRlZCBvbmx5IHRvIGFsbG93IEV4cHJlc3Npb25cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdG8gaW5mZXIgYXJndW1lbnQgdHlwZXM6IEV4cHJlc3Npb24jcGFyc2UoKSBuZWVkIG5vdFxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBwYXJzZWQgZXhwcmVzc2lvbiBtYXRjaGVzXG4gICAgLy8gYGV4cGVjdGVkVHlwZWAuXG4gICAgZXhwZWN0ZWRUeXBlOiA/VHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWdpc3RyeTogRXhwcmVzc2lvblJlZ2lzdHJ5LFxuICAgICAgICBwYXRoOiBBcnJheTxudW1iZXI+ID0gW10sXG4gICAgICAgIGV4cGVjdGVkVHlwZTogP1R5cGUsXG4gICAgICAgIHNjb3BlOiBTY29wZSA9IG5ldyBTY29wZSgpLFxuICAgICAgICBlcnJvcnM6IEFycmF5PFBhcnNpbmdFcnJvcj4gPSBbXVxuICAgICkge1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMua2V5ID0gcGF0aC5tYXAocGFydCA9PiBgWyR7cGFydH1dYCkuam9pbignJyk7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBleHByIHRoZSBKU09OIGV4cHJlc3Npb24gdG8gcGFyc2VcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGluZGV4IGlmIHRoaXMgZXhwcmVzc2lvbiBpcyBhbiBhcmd1bWVudCBvZiBhIHBhcmVudCBleHByZXNzaW9uIHRoYXQncyBiZWluZyBwYXJzZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zLm9taXRUeXBlQW5ub3RhdGlvbnMgc2V0IHRydWUgdG8gb21pdCBpbmZlcnJlZCB0eXBlIGFubm90YXRpb25zLiAgQ2FsbGVyIGJld2FyZTogd2l0aCB0aGlzIG9wdGlvbiBzZXQsIHRoZSBwYXJzZWQgZXhwcmVzc2lvbidzIHR5cGUgd2lsbCBOT1Qgc2F0aXNmeSBgZXhwZWN0ZWRUeXBlYCBpZiBpdCB3b3VsZCBub3JtYWxseSBiZSB3cmFwcGVkIGluIGFuIGluZmVycmVkIGFubm90YXRpb24uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwYXJzZShcbiAgICAgICAgZXhwcjogbWl4ZWQsXG4gICAgICAgIGluZGV4PzogbnVtYmVyLFxuICAgICAgICBleHBlY3RlZFR5cGU/OiA/VHlwZSxcbiAgICAgICAgYmluZGluZ3M/OiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4sXG4gICAgICAgIG9wdGlvbnM6IHt0eXBlQW5ub3RhdGlvbj86ICdhc3NlcnQnIHwgJ2NvZXJjZScgfCAnb21pdCd9ID0ge31cbiAgICApOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uY2F0KGluZGV4LCBleHBlY3RlZFR5cGUsIGJpbmRpbmdzKS5fcGFyc2UoZXhwciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlKGV4cHIsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIF9wYXJzZShleHByOiBtaXhlZCwgb3B0aW9uczoge3R5cGVBbm5vdGF0aW9uPzogJ2Fzc2VydCcgfCAnY29lcmNlJyB8ICdvbWl0J30pOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChleHByID09PSBudWxsIHx8IHR5cGVvZiBleHByID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXhwciA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBleHByID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZXhwciA9IFsnbGl0ZXJhbCcsIGV4cHJdO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYW5ub3RhdGUocGFyc2VkLCB0eXBlLCB0eXBlQW5ub3RhdGlvbjogJ2Fzc2VydCcgfCAnY29lcmNlJyB8ICdvbWl0Jykge1xuICAgICAgICAgICAgaWYgKHR5cGVBbm5vdGF0aW9uID09PSAnYXNzZXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHR5cGUsIFtwYXJzZWRdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZUFubm90YXRpb24gPT09ICdjb2VyY2UnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2VyY2lvbih0eXBlLCBbcGFyc2VkXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleHByKSkge1xuICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbXV0uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wID0gZXhwclswXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcihgRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAke3R5cGVvZiBvcH0gaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS5gLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgRXhwciA9IHRoaXMucmVnaXN0cnlbb3BdO1xuICAgICAgICAgICAgaWYgKEV4cHIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkID0gRXhwci5wYXJzZShleHByLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBlY3RlZFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLmV4cGVjdGVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gcGFyc2VkLnR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBleHBlY3QgYSBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgb3IgYXJyYXkgYnV0IGhhdmUgYSB2YWx1ZSwgd3JhcCBpdCBpbiBhbiBhc3NlcnRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgZXhwZWN0IGEgY29sb3Igb3IgZm9ybWF0dGVkIHN0cmluZywgYnV0IGhhdmUgYSBzdHJpbmcgb3IgdmFsdWUsIHdyYXAgaXQgaW4gYSBjb2VyY2lvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBkbyBzdGF0aWMgdHlwZS1jaGVja2luZy5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYmVoYXZpb3JzIGFyZSBvdmVycmlkYWJsZSBmb3I6XG4gICAgICAgICAgICAgICAgICAgIC8vICAgKiBUaGUgXCJjb2FsZXNjZVwiIG9wZXJhdG9yLCB3aGljaCBuZWVkcyB0byBvbWl0IHR5cGUgYW5ub3RhdGlvbnMuXG4gICAgICAgICAgICAgICAgICAgIC8vICAgKiBTdHJpbmctdmFsdWVkIHByb3BlcnRpZXMgKGUuZy4gYHRleHQtZmllbGRgKSwgd2hlcmUgY29lcmNpb24gaXMgbW9yZSBjb252ZW5pZW50IHRoYW4gYXNzZXJ0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGV4cGVjdGVkLmtpbmQgPT09ICdzdHJpbmcnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdudW1iZXInIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdib29sZWFuJyB8fCBleHBlY3RlZC5raW5kID09PSAnb2JqZWN0JyB8fCBleHBlY3RlZC5raW5kID09PSAnYXJyYXknKSAmJiBhY3R1YWwua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gYW5ub3RhdGUocGFyc2VkLCBleHBlY3RlZCwgb3B0aW9ucy50eXBlQW5ub3RhdGlvbiB8fCAnYXNzZXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGV4cGVjdGVkLmtpbmQgPT09ICdjb2xvcicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2Zvcm1hdHRlZCcgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ3Jlc29sdmVkSW1hZ2UnKSAmJiAoYWN0dWFsLmtpbmQgPT09ICd2YWx1ZScgfHwgYWN0dWFsLmtpbmQgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gYW5ub3RhdGUocGFyc2VkLCBleHBlY3RlZCwgb3B0aW9ucy50eXBlQW5ub3RhdGlvbiB8fCAnY29lcmNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1N1YnR5cGUoZXhwZWN0ZWQsIGFjdHVhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gZXhwcmVzc2lvbidzIGFyZ3VtZW50cyBhcmUgYWxsIGxpdGVyYWxzLCB3ZSBjYW4gZXZhbHVhdGVcbiAgICAgICAgICAgICAgICAvLyBpdCBpbW1lZGlhdGVseSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgbGl0ZXJhbCB2YWx1ZSBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyBwYXJzZWQvY29tcGlsZWQgcmVzdWx0LiBFeHByZXNzaW9ucyB0aGF0IGV4cGVjdCBhbiBpbWFnZSBzaG91bGRcbiAgICAgICAgICAgICAgICAvLyBub3QgYmUgcmVzb2x2ZWQgaGVyZSBzbyB3ZSBjYW4gbGF0ZXIgZ2V0IHRoZSBhdmFpbGFibGUgaW1hZ2VzLlxuICAgICAgICAgICAgICAgIGlmICghKHBhcnNlZCBpbnN0YW5jZW9mIExpdGVyYWwpICYmIChwYXJzZWQudHlwZS5raW5kICE9PSAncmVzb2x2ZWRJbWFnZScpICYmIGlzQ29uc3RhbnQocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlYyA9IG5ldyBFdmFsdWF0aW9uQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gbmV3IExpdGVyYWwocGFyc2VkLnR5cGUsIHBhcnNlZC5ldmFsdWF0ZShlYykpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBVbmtub3duIGV4cHJlc3Npb24gXCIke29wfVwiLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHByID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYCd1bmRlZmluZWQnIHZhbHVlIGludmFsaWQuIFVzZSBudWxsIGluc3RlYWQuYCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbXCJsaXRlcmFsXCIsIHsuLi59XSBpbnN0ZWFkLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgJHt0eXBlb2YgZXhwcn0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgY29udGV4dCBzdWl0YWJsZSBmb3IgcGFyc2luZyB0aGUgc3ViZXhwcmVzc2lvbiBhdFxuICAgICAqIGluZGV4IGBpbmRleGAsIG9wdGlvbmFsbHkgYXBwZW5kaW5nIHRvICdsZXQnIGJpbmRpbmcgbWFwLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGBlcnJvcnNgIHByb3BlcnR5LCBpbnRlbmRlZCBmb3IgY29sbGVjdGluZyBlcnJvcnMgd2hpbGVcbiAgICAgKiBwYXJzaW5nLCBpcyBjb3BpZWQgYnkgcmVmZXJlbmNlIHJhdGhlciB0aGFuIGNsb25lZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbmNhdChpbmRleDogbnVtYmVyLCBleHBlY3RlZFR5cGU/OiA/VHlwZSwgYmluZGluZ3M/OiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4pIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgPyB0aGlzLnBhdGguY29uY2F0KGluZGV4KSA6IHRoaXMucGF0aDtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBiaW5kaW5ncyA/IHRoaXMuc2NvcGUuY29uY2F0KGJpbmRpbmdzKSA6IHRoaXMuc2NvcGU7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdHJ5LFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZSB8fCBudWxsLFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICB0aGlzLmVycm9yc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1c2ggYSBwYXJzaW5nIChvciB0eXBlIGNoZWNraW5nKSBlcnJvciBpbnRvIHRoZSBgdGhpcy5lcnJvcnNgXG4gICAgICogQHBhcmFtIGVycm9yIFRoZSBtZXNzYWdlXG4gICAgICogQHBhcmFtIGtleXMgT3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yIGF0IGEgY2hpbGRcbiAgICAgKiBvZiB0aGUgY3VycmVudCBleHByZXNzaW9uIGF0IGB0aGlzLmtleWAuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBlcnJvcihlcnJvcjogc3RyaW5nLCAuLi5rZXlzOiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke3RoaXMua2V5fSR7a2V5cy5tYXAoayA9PiBgWyR7a31dYCkuam9pbignJyl9YDtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgUGFyc2luZ0Vycm9yKGtleSwgZXJyb3IpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgYHRgIGlzIGEgc3VidHlwZSBvZiBgZXhwZWN0ZWRgOyBvdGhlcndpc2UgcmV0dXJucyBhblxuICAgICAqIGVycm9yIG1lc3NhZ2UgYW5kIGFsc28gcHVzaGVzIGl0IHRvIGB0aGlzLmVycm9yc2AuXG4gICAgICovXG4gICAgY2hlY2tTdWJ0eXBlKGV4cGVjdGVkOiBUeXBlLCB0OiBUeXBlKTogP3N0cmluZyB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCB0KTtcbiAgICAgICAgaWYgKGVycm9yKSB0aGlzLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2luZ0NvbnRleHQ7XG5cbmZ1bmN0aW9uIGlzQ29uc3RhbnQoZXhwcmVzc2lvbjogRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgVmFyKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN0YW50KGV4cHJlc3Npb24uYm91bmRFeHByZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi5uYW1lID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb2xsYXRvckV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIHJlc3VsdHMgb2YgYSBDb2xsYXRvciBleHByZXNzaW9uIHdpdGggZml4ZWQgYXJndW1lbnRzXG4gICAgICAgIC8vIGdlbmVyYWxseSBzaG91bGRuJ3QgY2hhbmdlIGJldHdlZW4gZXhlY3V0aW9ucywgd2UgY2FuJ3Qgc2VyaWFsaXplIHRoZW1cbiAgICAgICAgLy8gYXMgY29uc3RhbnQgZXhwcmVzc2lvbnMgYmVjYXVzZSByZXN1bHRzIGNoYW5nZSBiYXNlZCBvbiBlbnZpcm9ubWVudC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFdpdGhpbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlQW5ub3RhdGlvbiA9IGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDb2VyY2lvbiB8fFxuICAgICAgICBleHByZXNzaW9uIGluc3RhbmNlb2YgQXNzZXJ0aW9uO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29uc3RhbnQgPSB0cnVlO1xuICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKGNoaWxkID0+IHtcbiAgICAgICAgLy8gV2UgY2FuIF9hbG1vc3RfIGFzc3VtZSB0aGF0IGlmIGBleHByZXNzaW9uc2AgY2hpbGRyZW4gYXJlIGNvbnN0YW50LFxuICAgICAgICAvLyB0aGV5IHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGV2YWx1YXRlZCB0byBMaXRlcmFsIHZhbHVlcyB3aGVuIHRoZXlcbiAgICAgICAgLy8gd2VyZSBwYXJzZWQuICBUeXBlIGFubm90YXRpb25zIGFyZSB0aGUgZXhjZXB0aW9uLCBiZWNhdXNlIHRoZXkgbWlnaHRcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGluZmVycmVkIGFuZCBhZGRlZCBhZnRlciBhIGNoaWxkIHdhcyBwYXJzZWQuXG5cbiAgICAgICAgLy8gU28gd2UgcmVjdXJzZSBpbnRvIGlzQ29uc3RhbnQoKSBmb3IgdGhlIGNoaWxkcmVuIG9mIHR5cGUgYW5ub3RhdGlvbnMsXG4gICAgICAgIC8vIGJ1dCBvdGhlcndpc2Ugc2ltcGx5IGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgTGl0ZXJhbHMuXG4gICAgICAgIGlmIChpc1R5cGVBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICBjaGlsZHJlbkNvbnN0YW50ID0gY2hpbGRyZW5Db25zdGFudCAmJiBpc0NvbnN0YW50KGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkcmVuQ29uc3RhbnQgPSBjaGlsZHJlbkNvbnN0YW50ICYmIGNoaWxkIGluc3RhbmNlb2YgTGl0ZXJhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghY2hpbGRyZW5Db25zdGFudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRmVhdHVyZUNvbnN0YW50KGV4cHJlc3Npb24pICYmXG4gICAgICAgIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudChleHByZXNzaW9uLCBbJ3pvb20nLCAnaGVhdG1hcC1kZW5zaXR5JywgJ2xpbmUtcHJvZ3Jlc3MnLCAnYWNjdW11bGF0ZWQnLCAnaXMtc3VwcG9ydGVkLXNjcmlwdCddKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIFN0b3BzID0gQXJyYXk8W251bWJlciwgRXhwcmVzc2lvbl0+O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0b3AgPD0gaW5wdXQsIG9yIDAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKHN0b3BzOiBBcnJheTxudW1iZXI+LCBpbnB1dDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBsZXQgbG93ZXJJbmRleCA9IDA7XG4gICAgbGV0IHVwcGVySW5kZXggPSBsYXN0SW5kZXg7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJlbnRWYWx1ZSwgbmV4dFZhbHVlO1xuXG4gICAgd2hpbGUgKGxvd2VySW5kZXggPD0gdXBwZXJJbmRleCkge1xuICAgICAgICBjdXJyZW50SW5kZXggPSBNYXRoLmZsb29yKChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyKTtcbiAgICAgICAgY3VycmVudFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4XTtcbiAgICAgICAgbmV4dFZhbHVlID0gc3RvcHNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA8PSBpbnB1dCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGFzdEluZGV4IHx8IGlucHV0IDwgbmV4dFZhbHVlKSB7IC8vIFNlYXJjaCBjb21wbGV0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvd2VySW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSA+IGlucHV0KSB7XG4gICAgICAgICAgICB1cHBlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoJ0lucHV0IGlzIG5vdCBhIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vc3RvcHMnO1xuXG5pbXBvcnQgdHlwZSB7U3RvcHN9IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgU3RlcCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc3RvcHM6IFN0b3BzID0gW107XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpID09PSAxID8gLUluZmluaXR5IDogYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDE7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RvcHMubGVuZ3RoICYmIHN0b3BzW3N0b3BzLmxlbmd0aCAtIDFdWzBdID49IGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RlcChvdXRwdXRUeXBlLCBpbnB1dCwgc3RvcHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLm91dHB1dHM7XG5cbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBpZiAodmFsdWUgPD0gbGFiZWxzWzBdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RvcENvdW50ID0gbGFiZWxzLmxlbmd0aDtcbiAgICAgICAgaWYgKHZhbHVlID49IGxhYmVsc1tzdG9wQ291bnQgLSAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbc3RvcENvdW50IC0gMV0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhsYWJlbHMsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgZm4oZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXRzLmV2ZXJ5KG91dCA9PiBvdXQub3V0cHV0RGVmaW5lZCgpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJzdGVwXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2godGhpcy5sYWJlbHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tpXS5zZXJpYWxpemUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGVwO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gKGEgKiAoMSAtIHQpKSArIChiICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcihmcm9tOiBDb2xvciwgdG86IENvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICBudW1iZXIoZnJvbS5yLCB0by5yLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uZywgdG8uZywgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5hLCB0by5hLCB0KVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShmcm9tOiBBcnJheTxudW1iZXI+LCB0bzogQXJyYXk8bnVtYmVyPiwgdDogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGZyb20ubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBudW1iZXIoZCwgdG9baV0sIHQpO1xuICAgIH0pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4vY29sb3InO1xuXG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZU51bWJlcn0gZnJvbSAnLi9pbnRlcnBvbGF0ZSc7XG5cbnR5cGUgTEFCQ29sb3IgPSB7XG4gICAgbDogbnVtYmVyLFxuICAgIGE6IG51bWJlcixcbiAgICBiOiBudW1iZXIsXG4gICAgYWxwaGE6IG51bWJlclxufTtcblxudHlwZSBIQ0xDb2xvciA9IHtcbiAgICBoOiBudW1iZXIsXG4gICAgYzogbnVtYmVyLFxuICAgIGw6IG51bWJlcixcbiAgICBhbHBoYTogbnVtYmVyXG59O1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IFhuID0gMC45NTA0NzAsIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFluID0gMSxcbiAgICBabiA9IDEuMDg4ODMwLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDEsXG4gICAgZGVnMnJhZCA9IE1hdGguUEkgLyAxODAsXG4gICAgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG5cbi8vIFV0aWxpdGllc1xuZnVuY3Rpb24geHl6MmxhYih0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIHh5ejJyZ2IoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeDogbnVtYmVyKSB7XG4gICAgeCAvPSAyNTU7XG4gICAgcmV0dXJuIHggPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbi8vIExBQlxuZnVuY3Rpb24gcmdiVG9MYWIocmdiQ29sb3I6IENvbG9yKTogTEFCQ29sb3Ige1xuICAgIGNvbnN0IGIgPSByZ2IyeHl6KHJnYkNvbG9yLnIpLFxuICAgICAgICBhID0gcmdiMnh5eihyZ2JDb2xvci5nKSxcbiAgICAgICAgbCA9IHJnYjJ4eXoocmdiQ29sb3IuYiksXG4gICAgICAgIHggPSB4eXoybGFiKCgwLjQxMjQ1NjQgKiBiICsgMC4zNTc1NzYxICogYSArIDAuMTgwNDM3NSAqIGwpIC8gWG4pLFxuICAgICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSxcbiAgICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsOiAxMTYgKiB5IC0gMTYsXG4gICAgICAgIGE6IDUwMCAqICh4IC0geSksXG4gICAgICAgIGI6IDIwMCAqICh5IC0geiksXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGFiVG9SZ2IobGFiQ29sb3I6IExBQkNvbG9yKTogQ29sb3Ige1xuICAgIGxldCB5ID0gKGxhYkNvbG9yLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTihsYWJDb2xvci5hKSA/IHkgOiB5ICsgbGFiQ29sb3IuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKGxhYkNvbG9yLmIpID8geSA6IHkgLSBsYWJDb2xvci5iIC8gMjAwO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejJyZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KSwgLy8gRDY1IC0+IHNSR0JcbiAgICAgICAgeHl6MnJnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KSxcbiAgICAgICAgeHl6MnJnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopLFxuICAgICAgICBsYWJDb2xvci5hbHBoYVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlTGFiKGZyb206IExBQkNvbG9yLCB0bzogTEFCQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYSwgdG8uYSwgdCksXG4gICAgICAgIGI6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYiwgdG8uYiwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG4vLyBIQ0xcbmZ1bmN0aW9uIHJnYlRvSGNsKHJnYkNvbG9yOiBDb2xvcik6IEhDTENvbG9yIHtcbiAgICBjb25zdCB7bCwgYSwgYn0gPSByZ2JUb0xhYihyZ2JDb2xvcik7XG4gICAgY29uc3QgaCA9IE1hdGguYXRhbjIoYiwgYSkgKiByYWQyZGVnO1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGggPCAwID8gaCArIDM2MCA6IGgsXG4gICAgICAgIGM6IE1hdGguc3FydChhICogYSArIGIgKiBiKSxcbiAgICAgICAgbCxcbiAgICAgICAgYWxwaGE6IHJnYkNvbG9yLmFcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBoY2xUb1JnYihoY2xDb2xvcjogSENMQ29sb3IpOiBDb2xvciB7XG4gICAgY29uc3QgaCA9IGhjbENvbG9yLmggKiBkZWcycmFkLFxuICAgICAgICBjID0gaGNsQ29sb3IuYyxcbiAgICAgICAgbCA9IGhjbENvbG9yLmw7XG4gICAgcmV0dXJuIGxhYlRvUmdiKHtcbiAgICAgICAgbCxcbiAgICAgICAgYTogTWF0aC5jb3MoaCkgKiBjLFxuICAgICAgICBiOiBNYXRoLnNpbihoKSAqIGMsXG4gICAgICAgIGFscGhhOiBoY2xDb2xvci5hbHBoYVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUh1ZShhOiBudW1iZXIsIGI6IG51bWJlciwgdDogbnVtYmVyKSB7XG4gICAgY29uc3QgZCA9IGIgLSBhO1xuICAgIHJldHVybiBhICsgdCAqIChkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIY2woZnJvbTogSENMQ29sb3IsIHRvOiBIQ0xDb2xvciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaDogaW50ZXJwb2xhdGVIdWUoZnJvbS5oLCB0by5oLCB0KSxcbiAgICAgICAgYzogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5jLCB0by5jLCB0KSxcbiAgICAgICAgbDogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5sLCB0by5sLCB0KSxcbiAgICAgICAgYWxwaGE6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYWxwaGEsIHRvLmFscGhhLCB0KVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBsYWIgPSB7XG4gICAgZm9yd2FyZDogcmdiVG9MYWIsXG4gICAgcmV2ZXJzZTogbGFiVG9SZ2IsXG4gICAgaW50ZXJwb2xhdGU6IGludGVycG9sYXRlTGFiXG59O1xuXG5leHBvcnQgY29uc3QgaGNsID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvSGNsLFxuICAgIHJldmVyc2U6IGhjbFRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUhjbFxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBVbml0QmV6aWVyIGZyb20gJ0BtYXBib3gvdW5pdGJlemllcic7XG5cbmltcG9ydCAqIGFzIGludGVycG9sYXRlIGZyb20gJy4uLy4uL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHt0b1N0cmluZywgTnVtYmVyVHlwZSwgQ29sb3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL3N0b3BzJztcbmltcG9ydCB7aGNsLCBsYWJ9IGZyb20gJy4uLy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcblxuaW1wb3J0IHR5cGUge1N0b3BzfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEludGVycG9sYXRpb25UeXBlID1cbiAgICB7IG5hbWU6ICdsaW5lYXInIH0gfFxuICAgIHsgbmFtZTogJ2V4cG9uZW50aWFsJywgYmFzZTogbnVtYmVyIH0gfFxuICAgIHsgbmFtZTogJ2N1YmljLWJlemllcicsIGNvbnRyb2xQb2ludHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIH07XG5cbmNsYXNzIEludGVycG9sYXRlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcblxuICAgIG9wZXJhdG9yOiAnaW50ZXJwb2xhdGUnIHwgJ2ludGVycG9sYXRlLWhjbCcgfCAnaW50ZXJwb2xhdGUtbGFiJztcbiAgICBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcbiAgICBsYWJlbHM6IEFycmF5PG51bWJlcj47XG4gICAgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYicsIGludGVycG9sYXRpb246IEludGVycG9sYXRpb25UeXBlLCBpbnB1dDogRXhwcmVzc2lvbiwgc3RvcHM6IFN0b3BzKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgZXhwcmVzc2lvbl0gb2Ygc3RvcHMpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRzLnB1c2goZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaW50ZXJwb2xhdGlvbkZhY3RvcihpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikge1xuICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIHQgPSBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGludGVycG9sYXRpb24uYmFzZSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCAxLCBsb3dlciwgdXBwZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb24ubmFtZSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBpbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHM7XG4gICAgICAgICAgICBjb25zdCB1YiA9IG5ldyBVbml0QmV6aWVyKGNbMF0sIGNbMV0sIGNbMl0sIGNbM10pO1xuICAgICAgICAgICAgdCA9IHViLnNvbHZlKGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgbGV0IFtvcGVyYXRvciwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIC4uLnJlc3RdID0gYXJncztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW50ZXJwb2xhdGlvbikgfHwgaW50ZXJwb2xhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi5gLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uWzBdID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtuYW1lOiAnbGluZWFyJ307XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGludGVycG9sYXRpb25bMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09ICdudW1iZXInKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLmAsIDEsIDEpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXhwb25lbnRpYWwnLFxuICAgICAgICAgICAgICAgIGJhc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2N1YmljLWJlemllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludHMgPSBpbnRlcnBvbGF0aW9uLnNsaWNlKDEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMubGVuZ3RoICE9PSA0IHx8XG4gICAgICAgICAgICAgICAgY29udHJvbFBvaW50cy5zb21lKHQgPT4gdHlwZW9mIHQgIT09ICdudW1iZXInIHx8IHQgPCAwIHx8IHQgPiAxKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0N1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLicsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjdWJpYy1iZXppZXInLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHM6IChjb250cm9sUG9pbnRzOiBhbnkpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICR7U3RyaW5nKGludGVycG9sYXRpb25bMF0pfWAsIDEsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gMSA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgJHthcmdzLmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChhcmdzLmxlbmd0aCAtIDEpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gY29udGV4dC5wYXJzZShpbnB1dCwgMiwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHN0b3BzOiBTdG9wcyA9IFtdO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcgfHwgb3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1sYWInKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gQ29sb3JUeXBlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuZXhwZWN0ZWRUeXBlICYmIGNvbnRleHQuZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBjb250ZXh0LmV4cGVjdGVkVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0W2kgKyAxXTtcblxuICAgICAgICAgICAgY29uc3QgbGFiZWxLZXkgPSBpICsgMztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaSArIDQ7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0b3BzLmxlbmd0aCAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXVswXSA+PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UodmFsdWUsIHZhbHVlS2V5LCBvdXRwdXRUeXBlKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgc3RvcHMucHVzaChbbGFiZWwsIHBhcnNlZF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dHB1dFR5cGUua2luZCAhPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIG91dHB1dFR5cGUua2luZCAhPT0gJ2NvbG9yJyAmJlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICBvdXRwdXRUeXBlLml0ZW1UeXBlLmtpbmQgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG91dHB1dFR5cGUuTiA9PT0gJ251bWJlcidcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVHlwZSAke3RvU3RyaW5nKG91dHB1dFR5cGUpfSBpcyBub3QgaW50ZXJwb2xhdGFibGUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEludGVycG9sYXRlKG91dHB1dFR5cGUsIChvcGVyYXRvcjogYW55KSwgaW50ZXJwb2xhdGlvbiwgaW5wdXQsIHN0b3BzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5vdXRwdXRzO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGxhYmVsc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3BDb3VudCA9IGxhYmVscy5sZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA+PSBsYWJlbHNbc3RvcENvdW50IC0gMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzW3N0b3BDb3VudCAtIDFdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8obGFiZWxzLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgY29uc3QgdXBwZXIgPSBsYWJlbHNbaW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgdCA9IEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLCB2YWx1ZSwgbG93ZXIsIHVwcGVyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRMb3dlciA9IG91dHB1dHNbaW5kZXhdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFVwcGVyID0gb3V0cHV0c1tpbmRleCArIDFdLmV2YWx1YXRlKGN0eCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiAoaW50ZXJwb2xhdGVbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV06IGFueSkob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvciA9PT0gJ2ludGVycG9sYXRlLWhjbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBoY2wucmV2ZXJzZShoY2wuaW50ZXJwb2xhdGUoaGNsLmZvcndhcmQob3V0cHV0TG93ZXIpLCBoY2wuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsYWIucmV2ZXJzZShsYWIuaW50ZXJwb2xhdGUobGFiLmZvcndhcmQob3V0cHV0TG93ZXIpLCBsYWIuZm9yd2FyZChvdXRwdXRVcHBlciksIHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbiBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGZuKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeShvdXQgPT4gb3V0Lm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0aW9uO1xuICAgICAgICBpZiAodGhpcy5pbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdsaW5lYXInKSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wibGluZWFyXCJdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICBpZiAgKHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImV4cG9uZW50aWFsXCIsIHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJjdWJpYy1iZXppZXJcIiBdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW3RoaXMub3BlcmF0b3IsIGludGVycG9sYXRpb24sIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dHNbaV0uc2VyaWFsaXplKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByYXRpbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gZXhwb25lbnRpYWwgZnVuY3Rpb25cbiAqIHN0b3BzLlxuICogSG93IGl0IHdvcmtzOiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWwgZnVuY3Rpb24gYGYoeCkgPSBhICogYmFzZV54ICsgYmAsIHdoZXJlIGBiYXNlYCBpcyB0aGUgdXNlci1zcGVjaWZpZWQgYmFzZSxcbiAqIGFuZCBgYWAgYW5kIGBiYCBhcmUgY29uc3RhbnRzIGFmZm9yZGluZyBzdWZmaWNpZW50IGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBmaXRcbiAqIHRoZSBmdW5jdGlvbiB0byB0aGUgZ2l2ZW4gc3RvcHMuXG4gKlxuICogSGVyZSdzIGEgYml0IG9mIGFsZ2VicmEgdGhhdCBsZXRzIHVzIGNvbXB1dGUgYGYoeClgIGRpcmVjdGx5IGZyb20gdGhlIHN0b3BcbiAqIHZhbHVlcyB3aXRob3V0IGV4cGxpY2l0bHkgc29sdmluZyBmb3IgYGFgIGFuZCBgYmA6XG4gKlxuICogRmlyc3Qgc3RvcCB2YWx1ZTogYGYoeDApID0geTAgPSBhICogYmFzZV54MCArIGJgXG4gKiBTZWNvbmQgc3RvcCB2YWx1ZTogYGYoeDEpID0geTEgPSBhICogYmFzZV54MSArIGJgXG4gKiA9PiBgeTEgLSB5MCA9IGEoYmFzZV54MSAtIGJhc2VeeDApYFxuICogPT4gYGEgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqXG4gKiBEZXNpcmVkIHZhbHVlOiBgZih4KSA9IHkgPSBhICogYmFzZV54ICsgYmBcbiAqID0+IGBmKHgpID0geTAgKyBhICogKGJhc2VeeCAtIGJhc2VeeDApYFxuICpcbiAqIEZyb20gdGhlIGFib3ZlLCB3ZSBjYW4gcmVwbGFjZSB0aGUgYGFgIGluIGBhICogKGJhc2VeeCAtIGJhc2VeeDApYCBhbmQgZG8gYVxuICogbGl0dGxlIGFsZ2VicmE6XG4gKiBgYGBcbiAqIGEgKiAoYmFzZV54IC0gYmFzZV54MCkgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKSAqIChiYXNlXnggLSBiYXNlXngwKVxuICogICAgICAgICAgICAgICAgICAgICA9ICh5MSAtIHkwKSAqIChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIC0gYmFzZV54MClcbiAqIGBgYFxuICpcbiAqIElmIHdlIGxldCBgKGJhc2VeeCAtIGJhc2VeeDApIC8gKGJhc2VeeDEgYmFzZV54MClgLCB0aGVuIHdlIGhhdmVcbiAqIGBmKHgpID0geTAgKyAoeTEgLSB5MCkgKiByYXRpb2AuICBJbiBvdGhlciB3b3JkcywgYHJhdGlvYCBtYXkgYmUgdHJlYXRlZCBhc1xuICogYW4gaW50ZXJwb2xhdGlvbiBmYWN0b3IgYmV0d2VlbiB0aGUgdHdvIHN0b3BzJyBvdXRwdXQgdmFsdWVzLlxuICpcbiAqIChOb3RlOiBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtIGZvciBgcmF0aW9gLFxuICogYChiYXNlXih4LXgwKSAtIDEpIC8gKGJhc2VeKHgxLXgwKSAtIDEpIGAsIGlzIGVxdWl2YWxlbnQsIGJ1dCByZXF1aXJlcyBmZXdlclxuICogZXhwZW5zaXZlIGBNYXRoLnBvdygpYCBvcGVyYXRpb25zLilcbiAqXG4gKiBAcHJpdmF0ZVxuKi9cbmZ1bmN0aW9uIGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVycG9sYXRlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge2NoZWNrU3VidHlwZSwgVmFsdWVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgQ29hbGVzY2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihcIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6IFR5cGUgPSAobnVsbDogYW55KTtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIGlmIChleHBlY3RlZFR5cGUgJiYgZXhwZWN0ZWRUeXBlLmtpbmQgIT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3Muc2xpY2UoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGNvbnRleHQucGFyc2UoYXJnLCAxICsgcGFyc2VkQXJncy5sZW5ndGgsIG91dHB1dFR5cGUsIHVuZGVmaW5lZCwge3R5cGVBbm5vdGF0aW9uOiAnb21pdCd9KTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIG91dHB1dFR5cGUgPSBvdXRwdXRUeXBlIHx8IHBhcnNlZC50eXBlO1xuICAgICAgICAgICAgcGFyc2VkQXJncy5wdXNoKHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KG91dHB1dFR5cGUpO1xuXG4gICAgICAgIC8vIEFib3ZlLCB3ZSBwYXJzZSBhcmd1bWVudHMgd2l0aG91dCBpbmZlcnJlZCB0eXBlIGFubm90YXRpb24gc28gdGhhdFxuICAgICAgICAvLyB0aGV5IGRvbid0IHByb2R1Y2UgYSBydW50aW1lIGVycm9yIGZvciBgbnVsbGAgaW5wdXQsIHdoaWNoIHdvdWxkXG4gICAgICAgIC8vIHByZWVtcHQgdGhlIGRlc2lyZWQgbnVsbC1jb2FsZXNjaW5nIGJlaGF2aW9yLlxuICAgICAgICAvLyBUaHVzLCBpZiBhbnkgb2Ygb3VyIGFyZ3VtZW50cyB3b3VsZCBoYXZlIG5lZWRlZCBhbiBhbm5vdGF0aW9uLCB3ZVxuICAgICAgICAvLyBuZWVkIHRvIHdyYXAgdGhlIGVuY2xvc2luZyBjb2FsZXNjZSBleHByZXNzaW9uIHdpdGggaXQgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgbmVlZHNBbm5vdGF0aW9uID0gZXhwZWN0ZWRUeXBlICYmXG4gICAgICAgICAgICBwYXJzZWRBcmdzLnNvbWUoYXJnID0+IGNoZWNrU3VidHlwZShleHBlY3RlZFR5cGUsIGFyZy50eXBlKSk7XG5cbiAgICAgICAgcmV0dXJuIG5lZWRzQW5ub3RhdGlvbiA/XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoVmFsdWVUeXBlLCBwYXJzZWRBcmdzKSA6XG4gICAgICAgICAgICBuZXcgQ29hbGVzY2UoKG91dHB1dFR5cGU6IGFueSksIHBhcnNlZEFyZ3MpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGxldCBhcmdDb3VudCA9IDA7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRJbWFnZU5hbWU7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgYXJnQ291bnQrKztcbiAgICAgICAgICAgIHJlc3VsdCA9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBmaXJzdCByZXF1ZXN0ZWQgaW1hZ2UgaW4gYSBjb2FsZXNjZSBzdGF0ZW1lbnRcbiAgICAgICAgICAgIC8vIGlmIGNvYWxlc2NlIGNhbid0IGZpbmQgYSB2YWxpZCBpbWFnZSwgd2UgcmV0dXJuIHRoZSBmaXJzdCBpbWFnZSBuYW1lIHNvIHN0eWxlaW1hZ2VtaXNzaW5nIGNhbiBmaXJlXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UgJiYgIXJlc3VsdC5hdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RlZEltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJbWFnZU5hbWUgPSByZXN1bHQubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT09IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVxdWVzdGVkSW1hZ2VOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KGFyZyA9PiBhcmcub3V0cHV0RGVmaW5lZCgpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJjb2FsZXNjZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2FsZXNjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgIGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5cbmNsYXNzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPjtcbiAgICByZXN1bHQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihiaW5kaW5nczogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+LCByZXN1bHQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gcmVzdWx0LnR5cGU7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSBbXS5jb25jYXQoYmluZGluZ3MpO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIHRoaXMuYmluZGluZ3MpIHtcbiAgICAgICAgICAgIGZuKGJpbmRpbmdbMV0pO1xuICAgICAgICB9XG4gICAgICAgIGZuKHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYXJnc1tpXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAke3R5cGVvZiBuYW1lfSBpbnN0ZWFkLmAsIGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoL1teYS16QS1aMC05X10vLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgVmFyaWFibGUgbmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgJ18nLmAsIGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRleHQucGFyc2UoYXJnc1tpICsgMV0sIGkgKyAxKTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBiaW5kaW5ncy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIGFyZ3MubGVuZ3RoIC0gMSwgY29udGV4dC5leHBlY3RlZFR5cGUsIGJpbmRpbmdzKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBuZXcgTGV0KGJpbmRpbmdzLCByZXN1bHQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5vdXRwdXREZWZpbmVkKCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wibGV0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBleHByXSBvZiB0aGlzLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gobmFtZSwgZXhwci5zZXJpYWxpemUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMZXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2FycmF5LCBWYWx1ZVR5cGUsIE51bWJlclR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZSwgQXJyYXlUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmNsYXNzIEF0IGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbmRleDogRXhwcmVzc2lvbjtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGluZGV4OiBFeHByZXNzaW9uLCBpbnB1dDogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGV4dC5wYXJzZShhcmdzWzJdLCAyLCBhcnJheShjb250ZXh0LmV4cGVjdGVkVHlwZSB8fCBWYWx1ZVR5cGUpKTtcblxuICAgICAgICBpZiAoIWluZGV4IHx8ICFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgdDogQXJyYXlUeXBlID0gKGlucHV0LnR5cGU6IGFueSk7XG4gICAgICAgIHJldHVybiBuZXcgQXQodC5pdGVtVHlwZSwgaW5kZXgsIGlucHV0KTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gKCh0aGlzLmluZGV4LmV2YWx1YXRlKGN0eCk6IGFueSk6IG51bWJlcik7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gKCh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk6IEFycmF5PFZhbHVlPik7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogJHtpbmRleH0gPCAwLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogJHtpbmRleH0gPiAke2FycmF5Lmxlbmd0aCAtIDF9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBNYXRoLmZsb29yKGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgJHtpbmRleH0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheVtpbmRleF07XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmluZGV4KTtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImF0XCIsIHRoaXMuaW5kZXguc2VyaWFsaXplKCksIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1ZhbHVlVHlwZSwgQm9vbGVhblR5cGUsIHRvU3RyaW5nfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcblxuZnVuY3Rpb24gaXNDb21wYXJhYmxlVHlwZSh0eXBlOiBUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgIHR5cGUua2luZCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgdHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGFyYWJsZVJ1bnRpbWVWYWx1ZShuZWVkbGU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuZWVkbGUgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgICB0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICB0eXBlb2YgbmVlZGxlID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNTZWFyY2hhYmxlUnVudGltZVZhbHVlKGhheXN0YWNrOiBBcnJheTxWYWx1ZT4gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShoYXlzdGFjaykgfHxcbiAgICAgICAgICAgdHlwZW9mIGhheXN0YWNrID09PSAnc3RyaW5nJztcbn1cblxuY2xhc3MgSW4gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG5lZWRsZTogRXhwcmVzc2lvbjtcbiAgICBoYXlzdGFjazogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKG5lZWRsZTogRXhwcmVzc2lvbiwgaGF5c3RhY2s6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgIHRoaXMubmVlZGxlID0gbmVlZGxlO1xuICAgICAgICB0aGlzLmhheXN0YWNrID0gaGF5c3RhY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRsZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcblxuICAgICAgICBjb25zdCBoYXlzdGFjayA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgVmFsdWVUeXBlKTtcblxuICAgICAgICBpZiAoIW5lZWRsZSB8fCAhaGF5c3RhY2spIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmICghaXNDb21wYXJhYmxlVHlwZShuZWVkbGUudHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKG5lZWRsZS50eXBlKX0gaW5zdGVhZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbihuZWVkbGUsIGhheXN0YWNrKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IG5lZWRsZSA9ICh0aGlzLm5lZWRsZS5ldmFsdWF0ZShjdHgpOiBhbnkpO1xuICAgICAgICBjb25zdCBoYXlzdGFjayA9ICh0aGlzLmhheXN0YWNrLmV2YWx1YXRlKGN0eCk6IGFueSk7XG5cbiAgICAgICAgaWYgKG5lZWRsZSA9PSBudWxsIHx8ICFoYXlzdGFjaykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICghaXNDb21wYXJhYmxlUnVudGltZVZhbHVlKG5lZWRsZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nIG9yIG51bWJlciwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKG5lZWRsZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1NlYXJjaGFibGVSdW50aW1lVmFsdWUoaGF5c3RhY2spKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZihoYXlzdGFjaykpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKSA+PSAwO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5uZWVkbGUpO1xuICAgICAgICBmbih0aGlzLmhheXN0YWNrKTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJpblwiLCB0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSwgdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQge1ZhbHVlVHlwZSwgdHlwZSBUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG4vLyBNYXAgaW5wdXQgbGFiZWwgdmFsdWVzIHRvIG91dHB1dCBleHByZXNzaW9uIGluZGV4XG50eXBlIENhc2VzID0ge1tudW1iZXIgfCBzdHJpbmddOiBudW1iZXJ9O1xuXG5jbGFzcyBNYXRjaCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXRUeXBlOiBUeXBlO1xuXG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgY2FzZXM6IENhc2VzO1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuICAgIG90aGVyd2lzZTogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0VHlwZTogVHlwZSwgb3V0cHV0VHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIGNhc2VzOiBDYXNlcywgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj4sIG90aGVyd2lzZTogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLmlucHV0VHlwZSA9IGlucHV0VHlwZTtcbiAgICAgICAgdGhpcy50eXBlID0gb3V0cHV0VHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IG91dHB1dHM7XG4gICAgICAgIHRoaXMub3RoZXJ3aXNlID0gb3RoZXJ3aXNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDUpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICUgMiAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IGlucHV0VHlwZTtcbiAgICAgICAgbGV0IG91dHB1dFR5cGU7XG4gICAgICAgIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FzZXMgPSB7fTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYWJlbHMpKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxzID0gW2xhYmVsc107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IGNvbnRleHQuY29uY2F0KGkpO1xuICAgICAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKCdFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIG51bWJlcnMgb3Igc3RyaW5ncy5gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMobGFiZWwpID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9LmApO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGFiZWwgPT09ICdudW1iZXInICYmIE1hdGguZmxvb3IobGFiZWwpICE9PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy5gKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSB0eXBlT2YobGFiZWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFiZWxDb250ZXh0LmNoZWNrU3VidHlwZShpbnB1dFR5cGUsIHR5cGVPZihsYWJlbCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FzZXNbU3RyaW5nKGxhYmVsKV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoJ0JyYW5jaCBsYWJlbHMgbXVzdCBiZSB1bmlxdWUuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZXNbU3RyaW5nKGxhYmVsKV0gPSBvdXRwdXRzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZSh2YWx1ZSwgaSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCByZXN1bHQudHlwZTtcbiAgICAgICAgICAgIG91dHB1dHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG90aGVyd2lzZSA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoIW90aGVyd2lzZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgYXNzZXJ0KGlucHV0VHlwZSAmJiBvdXRwdXRUeXBlKTtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnICYmIGNvbnRleHQuY29uY2F0KDEpLmNoZWNrU3VidHlwZSgoaW5wdXRUeXBlOiBhbnkpLCBpbnB1dC50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1hdGNoKChpbnB1dFR5cGU6IGFueSksIChvdXRwdXRUeXBlOiBhbnkpLCBpbnB1dCwgY2FzZXMsIG91dHB1dHMsIG90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9ICh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9ICh0eXBlT2YoaW5wdXQpID09PSB0aGlzLmlucHV0VHlwZSAmJiB0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tpbnB1dF1dKSB8fCB0aGlzLm90aGVyd2lzZTtcbiAgICAgICAgcmV0dXJuIG91dHB1dC5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIHRoaXMub3V0cHV0cy5mb3JFYWNoKGZuKTtcbiAgICAgICAgZm4odGhpcy5vdGhlcndpc2UpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dHB1dHMuZXZlcnkob3V0ID0+IG91dC5vdXRwdXREZWZpbmVkKCkpICYmIHRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcIm1hdGNoXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIC8vIFNvcnQgc28gc2VyaWFsaXphdGlvbiBoYXMgYW4gYXJiaXRyYXJ5IGRlZmluZWQgb3JkZXIsIGV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGJyYW5jaCBvcmRlciBkb2Vzbid0IGFmZmVjdCBldmFsdWF0aW9uXG4gICAgICAgIGNvbnN0IHNvcnRlZExhYmVscyA9IE9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtcblxuICAgICAgICAvLyBHcm91cCBicmFuY2hlcyBieSB1bmlxdWUgbWF0Y2ggZXhwcmVzc2lvbiB0byBzdXBwb3J0IGNvbmRlbnNlZFxuICAgICAgICAvLyBzZXJpYWxpemF0aW9ucyBvZiB0aGUgZm9ybSBbY2FzZTEsIGNhc2UyLCAuLi5dIC0+IG1hdGNoRXhwcmVzc2lvblxuICAgICAgICBjb25zdCBncm91cGVkQnlPdXRwdXQ6IEFycmF5PFtudW1iZXIsIEFycmF5PG51bWJlciB8IHN0cmluZz5dPiA9IFtdO1xuICAgICAgICBjb25zdCBvdXRwdXRMb29rdXA6IHtbaW5kZXg6IG51bWJlcl06IG51bWJlcn0gPSB7fTsgLy8gbG9va3VwIGluZGV4IGludG8gZ3JvdXBlZEJ5T3V0cHV0IGZvciBhIGdpdmVuIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygc29ydGVkTGFiZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgb3V0cHV0LCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZ3JvdXBlZCBsaXN0XG4gICAgICAgICAgICAgICAgb3V0cHV0TG9va3VwW3RoaXMuY2FzZXNbbGFiZWxdXSA9IGdyb3VwZWRCeU91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0LnB1c2goW3RoaXMuY2FzZXNbbGFiZWxdLCBbbGFiZWxdXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBleHByZXNzaW9uIGJlZm9yZSwgYWRkIHRoZSBsYWJlbCB0byB0aGF0IG91dHB1dCdzIGdyb3VwXG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0W291dHB1dEluZGV4XVsxXS5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZXJjZUxhYmVsID0gKGxhYmVsKSA9PiB0aGlzLmlucHV0VHlwZS5raW5kID09PSAnbnVtYmVyJyA/IE51bWJlcihsYWJlbCkgOiBsYWJlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgbGFiZWxzXSBvZiBncm91cGVkQnlPdXRwdXQpIHtcbiAgICAgICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhIHNpbmdsZSBsYWJlbCBtYXRjaGVzIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goY29lcmNlTGFiZWwobGFiZWxzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFycmF5IG9mIGxpdGVyYWwgbGFiZWxzIHBvaW50aW5nIHRvIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gobGFiZWxzLm1hcChjb2VyY2VMYWJlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tvdXRwdXRJbmRleF0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm90aGVyd2lzZS5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEJyYW5jaGVzID0gQXJyYXk8W0V4cHJlc3Npb24sIEV4cHJlc3Npb25dPjtcblxuY2xhc3MgQ2FzZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBicmFuY2hlczogQnJhbmNoZXM7XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYnJhbmNoZXM6IEJyYW5jaGVzLCBvdGhlcndpc2U6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IGJyYW5jaGVzO1xuICAgICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6ID9UeXBlO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdGVzdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgQm9vbGVhblR5cGUpO1xuICAgICAgICAgICAgaWYgKCF0ZXN0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2kgKyAxXSwgaSArIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBicmFuY2hlcy5wdXNoKFt0ZXN0LCByZXN1bHRdKTtcblxuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcmVzdWx0LnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdGhlcndpc2UgPSBjb250ZXh0LnBhcnNlKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgYXJncy5sZW5ndGggLSAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgaWYgKCFvdGhlcndpc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlKChvdXRwdXRUeXBlOiBhbnkpLCBicmFuY2hlcywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0LmV2YWx1YXRlKGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbdGVzdCwgZXhwcmVzc2lvbl0gb2YgdGhpcy5icmFuY2hlcykge1xuICAgICAgICAgICAgZm4odGVzdCk7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKFtfLCBvdXRdKSA9PiBvdXQub3V0cHV0RGVmaW5lZCgpKSAmJiB0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY2FzZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt0b1N0cmluZywgVmFsdWVUeXBlLCBCb29sZWFuVHlwZSwgQ29sbGF0b3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9ICc9PScgfCAnIT0nIHwgJzwnIHwgJz4nIHwgJzw9JyB8ICc+PScgO1xuXG5mdW5jdGlvbiBpc0NvbXBhcmFibGVUeXBlKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIHR5cGU6IFR5cGUpIHtcbiAgICBpZiAob3AgPT09ICc9PScgfHwgb3AgPT09ICchPScpIHtcbiAgICAgICAgLy8gZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9yZGVyaW5nIG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPT09IGI7IH1cbmZ1bmN0aW9uIG5lcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgIT09IGI7IH1cbmZ1bmN0aW9uIGx0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA8IGI7IH1cbmZ1bmN0aW9uIGd0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA+IGI7IH1cbmZ1bmN0aW9uIGx0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhIDw9IGI7IH1cbmZ1bmN0aW9uIGd0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID49IGI7IH1cblxuZnVuY3Rpb24gZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID09PSAwOyB9XG5mdW5jdGlvbiBuZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gIWVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpOyB9XG5mdW5jdGlvbiBsdENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPCAwOyB9XG5mdW5jdGlvbiBndENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPiAwOyB9XG5mdW5jdGlvbiBsdGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA8PSAwOyB9XG5mdW5jdGlvbiBndGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA+PSAwOyB9XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycywgaW1wbGVtZW50aW5nIHRoZSBzaWduYXR1cmVzOlxuICogLSAoVCwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtIChULCB2YWx1ZSwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtICh2YWx1ZSwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKlxuICogRm9yIGluZXF1YWxpdGllcywgVCBtdXN0IGJlIGVpdGhlciB2YWx1ZSwgc3RyaW5nLCBvciBudW1iZXIuIEZvciA9PS8hPSwgaXRcbiAqIGNhbiBhbHNvIGJlIGJvb2xlYW4gb3IgbnVsbC5cbiAqXG4gKiBFcXVhbGl0eSBzZW1hbnRpY3MgYXJlIGVxdWl2YWxlbnQgdG8gSmF2YXNjcmlwdCdzIHN0cmljdCBlcXVhbGl0eSAoPT09LyE9PSlcbiAqIC0tIGkuZS4sIHdoZW4gdGhlIGFyZ3VtZW50cycgdHlwZXMgZG9uJ3QgbWF0Y2gsID09IGV2YWx1YXRlcyB0byBmYWxzZSwgIT0gdG9cbiAqIHRydWUuXG4gKlxuICogV2hlbiB0eXBlcyBkb24ndCBtYXRjaCBpbiBhbiBvcmRlcmluZyBjb21wYXJpc29uLCBhIHJ1bnRpbWUgZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VDb21wYXJpc29uKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIGNvbXBhcmVCYXNpYywgY29tcGFyZVdpdGhDb2xsYXRvcikge1xuICAgIGNvbnN0IGlzT3JkZXJDb21wYXJpc29uID0gb3AgIT09ICc9PScgJiYgb3AgIT09ICchPSc7XG5cbiAgICByZXR1cm4gY2xhc3MgQ29tcGFyaXNvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgICAgICB0eXBlOiBUeXBlO1xuICAgICAgICBsaHM6IEV4cHJlc3Npb247XG4gICAgICAgIHJoczogRXhwcmVzc2lvbjtcbiAgICAgICAgY29sbGF0b3I6ID9FeHByZXNzaW9uO1xuICAgICAgICBoYXNVbnR5cGVkQXJndW1lbnQ6IGJvb2xlYW47XG5cbiAgICAgICAgY29uc3RydWN0b3IobGhzOiBFeHByZXNzaW9uLCByaHM6IEV4cHJlc3Npb24sIGNvbGxhdG9yOiA/RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICAgICAgdGhpcy5jb2xsYXRvciA9IGNvbGxhdG9yO1xuICAgICAgICAgICAgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQgPSBsaHMudHlwZS5raW5kID09PSAndmFsdWUnIHx8IHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMyAmJiBhcmdzLmxlbmd0aCAhPT0gNClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICAgICAgY29uc3Qgb3A6IENvbXBhcmlzb25PcGVyYXRvciA9IChhcmdzWzBdOiBhbnkpO1xuXG4gICAgICAgICAgICBsZXQgbGhzID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFsaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCBsaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMSkuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhsaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByaHMgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJocykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQ29tcGFyYWJsZVR5cGUob3AsIHJocy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbmNhdCgyKS5lcnJvcihgXCIke29wfVwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGhzLnR5cGUua2luZCAhPT0gcmhzLnR5cGUua2luZCAmJlxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAndmFsdWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScgYW5kICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBpbmcgcnVsZXMgc3BlY2lmaWMgdG8gbGVzcy9ncmVhdGVyIHRoYW4gb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgaWYgKGxocy50eXBlLmtpbmQgPT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAodmFsdWUsIFQpXG4gICAgICAgICAgICAgICAgICAgIGxocyA9IG5ldyBBc3NlcnRpb24ocmhzLnR5cGUsIFtsaHNdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAoVCwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJocyA9IG5ldyBBc3NlcnRpb24obGhzLnR5cGUsIFtyaHNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb2xsYXRvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbGxhdG9yID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBDb2xsYXRvclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sbGF0b3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb24obGhzLCByaHMsIGNvbGxhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxocyA9IHRoaXMubGhzLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocy5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24gJiYgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsdCA9IHR5cGVPZihsaHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ0ID0gdHlwZU9mKHJocyk7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0eXBlIGlzIHN0cmluZyBvciBudW1iZXIsIGFuZCBlcXVhbFxuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSBydC5raW5kIHx8ICEobHQua2luZCA9PT0gJ3N0cmluZycgfHwgbHQua2luZCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgXCIke29wfVwiIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgke2x0LmtpbmR9LCAke3J0LmtpbmR9KSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IgJiYgIWlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSAnc3RyaW5nJyB8fCBydC5raW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IgP1xuICAgICAgICAgICAgICAgIGNvbXBhcmVXaXRoQ29sbGF0b3IoY3R4LCBsaHMsIHJocywgdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShjdHgpKSA6XG4gICAgICAgICAgICAgICAgY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICAgICAgZm4odGhpcy5saHMpO1xuICAgICAgICAgICAgZm4odGhpcy5yaHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IpIHtcbiAgICAgICAgICAgICAgICBmbih0aGlzLmNvbGxhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbb3BdO1xuICAgICAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCc9PScsIGVxLCBlcUNvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IE5vdEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCchPScsIG5lcSwgbmVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTGVzc1RoYW4gPSBtYWtlQ29tcGFyaXNvbignPCcsIGx0LCBsdENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IEdyZWF0ZXJUaGFuID0gbWFrZUNvbXBhcmlzb24oJz4nLCBndCwgZ3RDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPD0nLCBsdGVxLCBsdGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW5PckVxdWFsID0gbWFrZUNvbXBhcmlzb24oJz49JywgZ3RlcSwgZ3RlcUNvbGxhdGUpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtTdHJpbmdUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIE51bWJlckZvcm1hdDogQ2xhc3M8SW50bCROdW1iZXJGb3JtYXQ+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkTnVtYmVyRm9ybWF0IHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIGZvcm1hdChhOiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgc3R5bGU/OiAnZGVjaW1hbCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnQnO1xuICAgIGN1cnJlbmN5PzogbnVsbCB8IHN0cmluZztcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJGb3JtYXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG51bWJlcjogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsOyAgIC8vIEJDUCA0NyBsYW5ndWFnZSB0YWdcbiAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGw7IC8vIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIHJlcXVpcmVkIGlmIHN0eWxlPWN1cnJlbmN5XG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsOyAvLyBEZWZhdWx0IDBcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgM1xuXG4gICAgY29uc3RydWN0b3IobnVtYmVyOiBFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gU3RyaW5nVHlwZTtcbiAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gICAgICAgIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBjb25zdCBudW1iZXIgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIW51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzJdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydjdXJyZW5jeSddKSB7XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snY3VycmVuY3knXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtaW5GcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddKSB7XG4gICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghbWF4RnJhY3Rpb25EaWdpdHMpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQobnVtYmVyLCBsb2NhbGUsIGN1cnJlbmN5LCBtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlLmV2YWx1YXRlKGN0eCkgOiBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5jdXJyZW5jeSA/IFwiY3VycmVuY3lcIiA6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5ID8gdGhpcy5jdXJyZW5jeS5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPyB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUoY3R4KSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBmbih0aGlzLmN1cnJlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2xvY2FsZSddID0gdGhpcy5sb2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5LnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtYXgtZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJudW1iZXItZm9ybWF0XCIsIHRoaXMubnVtYmVyLnNlcmlhbGl6ZSgpLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGUsIHRvU3RyaW5nfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jbGFzcyBMZW5ndGggaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gTnVtYmVyVHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAnYXJyYXknICYmIGlucHV0LnR5cGUua2luZCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50IG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgJHt0b1N0cmluZyhpbnB1dC50eXBlKX0gaW5zdGVhZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IExlbmd0aChpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGlucHV0KSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZW5ndGhcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGVuZ3RoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICB0eXBlIFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBFcnJvclR5cGUsXG4gICAgQ29sbGF0b3JUeXBlLFxuICAgIGFycmF5LFxuICAgIHRvU3RyaW5nIGFzIHR5cGVUb1N0cmluZ1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mLCBDb2xvciwgdmFsaWRhdGVSR0JBLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgTGV0IGZyb20gJy4vbGV0JztcbmltcG9ydCBWYXIgZnJvbSAnLi92YXInO1xuaW1wb3J0IExpdGVyYWwgZnJvbSAnLi9saXRlcmFsJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IENvZXJjaW9uIGZyb20gJy4vY29lcmNpb24nO1xuaW1wb3J0IEF0IGZyb20gJy4vYXQnO1xuaW1wb3J0IEluIGZyb20gJy4vaW4nO1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuaW1wb3J0IENhc2UgZnJvbSAnLi9jYXNlJztcbmltcG9ydCBTdGVwIGZyb20gJy4vc3RlcCc7XG5pbXBvcnQgSW50ZXJwb2xhdGUgZnJvbSAnLi9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgQ29hbGVzY2UgZnJvbSAnLi9jb2FsZXNjZSc7XG5pbXBvcnQge1xuICAgIEVxdWFscyxcbiAgICBOb3RFcXVhbHMsXG4gICAgTGVzc1RoYW4sXG4gICAgR3JlYXRlclRoYW4sXG4gICAgTGVzc1RoYW5PckVxdWFsLFxuICAgIEdyZWF0ZXJUaGFuT3JFcXVhbFxufSBmcm9tICcuL2NvbXBhcmlzb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2NvbGxhdG9yJztcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSAnLi9udW1iZXJfZm9ybWF0JztcbmltcG9ydCBGb3JtYXRFeHByZXNzaW9uIGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCBJbWFnZUV4cHJlc3Npb24gZnJvbSAnLi9pbWFnZSc7XG5pbXBvcnQgTGVuZ3RoIGZyb20gJy4vbGVuZ3RoJztcbmltcG9ydCBXaXRoaW4gZnJvbSAnLi93aXRoaW4nO1xuXG5pbXBvcnQgdHlwZSB7VmFyYXJnc30gZnJvbSAnLi4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvblJlZ2lzdHJ5fSBmcm9tICcuLi9leHByZXNzaW9uJztcblxuY29uc3QgZXhwcmVzc2lvbnM6IEV4cHJlc3Npb25SZWdpc3RyeSA9IHtcbiAgICAvLyBzcGVjaWFsIGZvcm1zXG4gICAgJz09JzogRXF1YWxzLFxuICAgICchPSc6IE5vdEVxdWFscyxcbiAgICAnPic6IEdyZWF0ZXJUaGFuLFxuICAgICc8JzogTGVzc1RoYW4sXG4gICAgJz49JzogR3JlYXRlclRoYW5PckVxdWFsLFxuICAgICc8PSc6IExlc3NUaGFuT3JFcXVhbCxcbiAgICAnYXJyYXknOiBBc3NlcnRpb24sXG4gICAgJ2F0JzogQXQsXG4gICAgJ2Jvb2xlYW4nOiBBc3NlcnRpb24sXG4gICAgJ2Nhc2UnOiBDYXNlLFxuICAgICdjb2FsZXNjZSc6IENvYWxlc2NlLFxuICAgICdjb2xsYXRvcic6IENvbGxhdG9yRXhwcmVzc2lvbixcbiAgICAnZm9ybWF0JzogRm9ybWF0RXhwcmVzc2lvbixcbiAgICAnaW1hZ2UnOiBJbWFnZUV4cHJlc3Npb24sXG4gICAgJ2luJzogSW4sXG4gICAgJ2ludGVycG9sYXRlJzogSW50ZXJwb2xhdGUsXG4gICAgJ2ludGVycG9sYXRlLWhjbCc6IEludGVycG9sYXRlLFxuICAgICdpbnRlcnBvbGF0ZS1sYWInOiBJbnRlcnBvbGF0ZSxcbiAgICAnbGVuZ3RoJzogTGVuZ3RoLFxuICAgICdsZXQnOiBMZXQsXG4gICAgJ2xpdGVyYWwnOiBMaXRlcmFsLFxuICAgICdtYXRjaCc6IE1hdGNoLFxuICAgICdudW1iZXInOiBBc3NlcnRpb24sXG4gICAgJ251bWJlci1mb3JtYXQnOiBOdW1iZXJGb3JtYXQsXG4gICAgJ29iamVjdCc6IEFzc2VydGlvbixcbiAgICAnc3RlcCc6IFN0ZXAsXG4gICAgJ3N0cmluZyc6IEFzc2VydGlvbixcbiAgICAndG8tYm9vbGVhbic6IENvZXJjaW9uLFxuICAgICd0by1jb2xvcic6IENvZXJjaW9uLFxuICAgICd0by1udW1iZXInOiBDb2VyY2lvbixcbiAgICAndG8tc3RyaW5nJzogQ29lcmNpb24sXG4gICAgJ3Zhcic6IFZhcixcbiAgICAnd2l0aGluJzogV2l0aGluXG59O1xuXG5mdW5jdGlvbiByZ2JhKGN0eCwgW3IsIGcsIGIsIGFdKSB7XG4gICAgciA9IHIuZXZhbHVhdGUoY3R4KTtcbiAgICBnID0gZy5ldmFsdWF0ZShjdHgpO1xuICAgIGIgPSBiLmV2YWx1YXRlKGN0eCk7XG4gICAgY29uc3QgYWxwaGEgPSBhID8gYS5ldmFsdWF0ZShjdHgpIDogMTtcbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRlUkdCQShyLCBnLCBiLCBhbHBoYSk7XG4gICAgaWYgKGVycm9yKSB0aHJvdyBuZXcgUnVudGltZUVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gbmV3IENvbG9yKHIgLyAyNTUgKiBhbHBoYSwgZyAvIDI1NSAqIGFscGhhLCBiIC8gMjU1ICogYWxwaGEsIGFscGhhKTtcbn1cblxuZnVuY3Rpb24gaGFzKGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdldChrZXksIG9iaikge1xuICAgIGNvbnN0IHYgPSBvYmpba2V5XTtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHY7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaCh2LCBhLCBpLCBqKSB7XG4gICAgd2hpbGUgKGkgPD0gaikge1xuICAgICAgICBjb25zdCBtID0gKGkgKyBqKSA+PiAxO1xuICAgICAgICBpZiAoYVttXSA9PT0gdilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYVttXSA+IHYpXG4gICAgICAgICAgICBqID0gbSAtIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGkgPSBtICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YXJhcmdzKHR5cGU6IFR5cGUpOiBWYXJhcmdzIHtcbiAgICByZXR1cm4ge3R5cGV9O1xufVxuXG5Db21wb3VuZEV4cHJlc3Npb24ucmVnaXN0ZXIoZXhwcmVzc2lvbnMsIHtcbiAgICAnZXJyb3InOiBbXG4gICAgICAgIEVycm9yVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHsgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcih2LmV2YWx1YXRlKGN0eCkpOyB9XG4gICAgXSxcbiAgICAndHlwZW9mJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB0eXBlVG9TdHJpbmcodHlwZU9mKHYuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAndG8tcmdiYSc6IFtcbiAgICAgICAgYXJyYXkoTnVtYmVyVHlwZSwgNCksXG4gICAgICAgIFtDb2xvclR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2LmV2YWx1YXRlKGN0eCkudG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAncmdiJzogW1xuICAgICAgICBDb2xvclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgcmdiYVxuICAgIF0sXG4gICAgJ3JnYmEnOiBbXG4gICAgICAgIENvbG9yVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGUsIE51bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICByZ2JhXG4gICAgXSxcbiAgICAnaGFzJzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXldKSA9PiBoYXMoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5wcm9wZXJ0aWVzKCkpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGUsIE9iamVjdFR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXksIG9ial0pID0+IGhhcyhrZXkuZXZhbHVhdGUoY3R4KSwgb2JqLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICdnZXQnOiB7XG4gICAgICAgIHR5cGU6IFZhbHVlVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXldKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5wcm9wZXJ0aWVzKCkpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW1N0cmluZ1R5cGUsIE9iamVjdFR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFtrZXksIG9ial0pID0+IGdldChrZXkuZXZhbHVhdGUoY3R4KSwgb2JqLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICdmZWF0dXJlLXN0YXRlJzogW1xuICAgICAgICBWYWx1ZVR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW2tleV0pID0+IGdldChrZXkuZXZhbHVhdGUoY3R4KSwgY3R4LmZlYXR1cmVTdGF0ZSB8fCB7fSlcbiAgICBdLFxuICAgICdwcm9wZXJ0aWVzJzogW1xuICAgICAgICBPYmplY3RUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4LnByb3BlcnRpZXMoKVxuICAgIF0sXG4gICAgJ2dlb21ldHJ5LXR5cGUnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2VvbWV0cnlUeXBlKClcbiAgICBdLFxuICAgICdpZCc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4LmlkKClcbiAgICBdLFxuICAgICd6b29tJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMuem9vbVxuICAgIF0sXG4gICAgJ2hlYXRtYXAtZGVuc2l0eSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5IHx8IDBcbiAgICBdLFxuICAgICdsaW5lLXByb2dyZXNzJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMubGluZVByb2dyZXNzIHx8IDBcbiAgICBdLFxuICAgICdhY2N1bXVsYXRlZCc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdsb2JhbHMuYWNjdW11bGF0ZWQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjdHguZ2xvYmFscy5hY2N1bXVsYXRlZFxuICAgIF0sXG4gICAgJysnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICcqJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKj0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnLSc6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIC0gYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLCBbXG4gICAgICAgICAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthXSkgPT4gLWEuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnLyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAvIGIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJyUnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgJSBiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICdsbjInOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoKSA9PiBNYXRoLkxOMlxuICAgIF0sXG4gICAgJ3BpJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5QSVxuICAgIF0sXG4gICAgJ2UnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoKSA9PiBNYXRoLkVcbiAgICBdLFxuICAgICdeJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtiLCBlXSkgPT4gTWF0aC5wb3coYi5ldmFsdWF0ZShjdHgpLCBlLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnc3FydCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbeF0pID0+IE1hdGguc3FydCh4LmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnbG9nMTAnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpIC8gTWF0aC5MTjEwXG4gICAgXSxcbiAgICAnbG4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnbG9nMic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgubG9nKG4uZXZhbHVhdGUoY3R4KSkgLyBNYXRoLkxOMlxuICAgIF0sXG4gICAgJ3Npbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguc2luKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdjb3MnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmNvcyhuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAndGFuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC50YW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2FzaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmFzaW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2Fjb3MnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmFjb3Mobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2F0YW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmF0YW4obi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ21pbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4gTWF0aC5taW4oLi4uYXJncy5tYXAoYXJnID0+IGFyZy5ldmFsdWF0ZShjdHgpKSlcbiAgICBdLFxuICAgICdtYXgnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IE1hdGgubWF4KC4uLmFyZ3MubWFwKGFyZyA9PiBhcmcuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAnYWJzJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hYnMobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3JvdW5kJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdiA9IG4uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIC8vIEphdmFzY3JpcHQncyBNYXRoLnJvdW5kKCkgcm91bmRzIHRvd2FyZHMgK0luZmluaXR5IGZvciBoYWxmd2F5XG4gICAgICAgICAgICAvLyB2YWx1ZXMsIGV2ZW4gd2hlbiB0aGV5J3JlIG5lZ2F0aXZlLiBJdCdzIG1vcmUgY29tbW9uIHRvIHJvdW5kXG4gICAgICAgICAgICAvLyBhd2F5IGZyb20gMCAoZS5nLiwgdGhpcyBpcyB3aGF0IHB5dGhvbiBhbmQgQysrIGRvKVxuICAgICAgICAgICAgcmV0dXJuIHYgPCAwID8gLU1hdGgucm91bmQoLXYpIDogTWF0aC5yb3VuZCh2KTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2Zsb29yJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5mbG9vcihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnY2VpbCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguY2VpbChuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnZmlsdGVyLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0gPT09ICh2OiBhbnkpLnZhbHVlXG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gY3R4LmlkKCkgPT09ICh2OiBhbnkpLnZhbHVlXG4gICAgXSxcbiAgICAnZmlsdGVyLXR5cGUtPT0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gY3R4Lmdlb21ldHJ5VHlwZSgpID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci08JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDwgYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC08JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDwgYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci0+JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID4gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC0+JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID4gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci08PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWlkLTw9JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5pZCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhIDw9IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPj0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPj0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC0+PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLWhhcyc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBba10pID0+IChrOiBhbnkpLnZhbHVlIGluIGN0eC5wcm9wZXJ0aWVzKClcbiAgICBdLFxuICAgICdmaWx0ZXItaGFzLWlkJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IChjdHguaWQoKSAhPT0gbnVsbCAmJiBjdHguaWQoKSAhPT0gdW5kZWZpbmVkKVxuICAgIF0sXG4gICAgJ2ZpbHRlci10eXBlLWluJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW2FycmF5KFN0cmluZ1R5cGUpXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5nZW9tZXRyeVR5cGUoKSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC1pbic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFthcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5pZCgpKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWluLXNtYWxsJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIGFycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAvLyBhc3N1bWVzIHYgaXMgYW4gYXJyYXkgbGl0ZXJhbFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+ICh2OiBhbnkpLnZhbHVlLmluZGV4T2YoY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0pID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaW4tbGFyZ2UnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIC8vIGFzc3VtZXMgdiBpcyBhIGFycmF5IGxpdGVyYWwgd2l0aCB2YWx1ZXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBhbmQgb2YgYSBzaW5nbGUgdHlwZVxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IGJpbmFyeVNlYXJjaChjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXSwgKHY6IGFueSkudmFsdWUsIDAsICh2OiBhbnkpLnZhbHVlLmxlbmd0aCAtIDEpXG4gICAgXSxcbiAgICAnYWxsJzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW0Jvb2xlYW5UeXBlLCBCb29sZWFuVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgJiYgYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhcmFyZ3MoQm9vbGVhblR5cGUpLFxuICAgICAgICAgICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnYW55Jzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuVHlwZSxcbiAgICAgICAgb3ZlcmxvYWRzOiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW0Jvb2xlYW5UeXBlLCBCb29sZWFuVHlwZV0sXG4gICAgICAgICAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgfHwgYi5ldmFsdWF0ZShjdHgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhcmFyZ3MoQm9vbGVhblR5cGUpLFxuICAgICAgICAgICAgICAgIChjdHgsIGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICB9LFxuICAgICchJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW0Jvb2xlYW5UeXBlXSxcbiAgICAgICAgKGN0eCwgW2JdKSA9PiAhYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnaXMtc3VwcG9ydGVkLXNjcmlwdCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgLy8gQXQgcGFyc2UgdGltZSB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLCBzbyB3ZSBuZWVkIHRvIGV4Y2x1ZGUgdGhpcyBleHByZXNzaW9uIHdpdGggaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50XG4gICAgICAgIChjdHgsIFtzXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTdXBwb3J0ZWRTY3JpcHQgPSBjdHguZ2xvYmFscyAmJiBjdHguZ2xvYmFscy5pc1N1cHBvcnRlZFNjcmlwdDtcbiAgICAgICAgICAgIGlmIChpc1N1cHBvcnRlZFNjcmlwdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1N1cHBvcnRlZFNjcmlwdChzLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICd1cGNhc2UnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3NdKSA9PiBzLmV2YWx1YXRlKGN0eCkudG9VcHBlckNhc2UoKVxuICAgIF0sXG4gICAgJ2Rvd25jYXNlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtzXSkgPT4gcy5ldmFsdWF0ZShjdHgpLnRvTG93ZXJDYXNlKClcbiAgICBdLFxuICAgICdjb25jYXQnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIHZhcmFyZ3MoVmFsdWVUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4gYXJncy5tYXAoYXJnID0+IHZhbHVlVG9TdHJpbmcoYXJnLmV2YWx1YXRlKGN0eCkpKS5qb2luKCcnKVxuICAgIF0sXG4gICAgJ3Jlc29sdmVkLWxvY2FsZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW0NvbGxhdG9yVHlwZV0sXG4gICAgICAgIChjdHgsIFtjb2xsYXRvcl0pID0+IGNvbGxhdG9yLmV2YWx1YXRlKGN0eCkucmVzb2x2ZWRMb2NhbGUoKVxuICAgIF1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBleHByZXNzaW9ucztcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogQSB0eXBlIHVzZWQgZm9yIHJldHVybmluZyBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzLiBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdW5pb25cbiAqIHJlcHJlc2VudHMgc3VjY2VzcyBhbmQgY29udGFpbnMgYSB2YWx1ZSwgYW5kIHRoZSBzZWNvbmQgcmVwcmVzZW50cyBhbiBlcnJvciBhbmRcbiAqIGNvbnRhaW5zIGFuIGVycm9yIHZhbHVlLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQsIEU+ID1cbiAgICB8IHt8IHJlc3VsdDogJ3N1Y2Nlc3MnLCB2YWx1ZTogVCB8fVxuICAgIHwge3wgcmVzdWx0OiAnZXJyb3InLCB2YWx1ZTogRSB8fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VCwgRT4odmFsdWU6IFQpOiBSZXN1bHQ8VCwgRT4ge1xuICAgIHJldHVybiB7cmVzdWx0OiAnc3VjY2VzcycsIHZhbHVlfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yPFQsIEU+KHZhbHVlOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICByZXR1cm4ge3Jlc3VsdDogJ2Vycm9yJywgdmFsdWV9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNwZWNbJ3Byb3BlcnR5LXR5cGUnXSA9PT0gJ2RhdGEtZHJpdmVuJyB8fCBzcGVjWydwcm9wZXJ0eS10eXBlJ10gPT09ICdjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1pvb21FeHByZXNzaW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3BlYy5leHByZXNzaW9uICYmIHNwZWMuZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmluZGV4T2YoJ3pvb20nKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNJbnRlcnBvbGF0aW9uKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3BlYy5leHByZXNzaW9uICYmIHNwZWMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0ZWQ7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUeXBlKHZhbDogbWl4ZWQpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0ICogYXMgY29sb3JTcGFjZXMgZnJvbSAnLi4vdXRpbC9jb2xvcl9zcGFjZXMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3V0aWwvY29sb3InO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCAqIGFzIGludGVycG9sYXRlIGZyb20gJy4uL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4uL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB7c3VwcG9ydHNJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvfSBmcm9tICcuLi9leHByZXNzaW9uL3N0b3BzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5RnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjKSB7XG4gICAgY29uc3QgaXNDb2xvciA9IHByb3BlcnR5U3BlYy50eXBlID09PSAnY29sb3InO1xuICAgIGNvbnN0IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50ID0gcGFyYW1ldGVycy5zdG9wcyAmJiB0eXBlb2YgcGFyYW1ldGVycy5zdG9wc1swXVswXSA9PT0gJ29iamVjdCc7XG4gICAgY29uc3QgZmVhdHVyZURlcGVuZGVudCA9IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50IHx8IHBhcmFtZXRlcnMucHJvcGVydHkgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCB6b29tRGVwZW5kZW50ID0gem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQgfHwgIWZlYXR1cmVEZXBlbmRlbnQ7XG4gICAgY29uc3QgdHlwZSA9IHBhcmFtZXRlcnMudHlwZSB8fCAoc3VwcG9ydHNJbnRlcnBvbGF0aW9uKHByb3BlcnR5U3BlYykgPyAnZXhwb25lbnRpYWwnIDogJ2ludGVydmFsJyk7XG5cbiAgICBpZiAoaXNDb2xvcikge1xuICAgICAgICBwYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVycy5zdG9wcykge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5zdG9wcyA9IHBhcmFtZXRlcnMuc3RvcHMubWFwKChzdG9wKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzdG9wWzBdLCBDb2xvci5wYXJzZShzdG9wWzFdKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdCA9IENvbG9yLnBhcnNlKHBhcmFtZXRlcnMuZGVmYXVsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHQgPSBDb2xvci5wYXJzZShwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1ldGVycy5jb2xvclNwYWNlICYmIHBhcmFtZXRlcnMuY29sb3JTcGFjZSAhPT0gJ3JnYicgJiYgIWNvbG9yU3BhY2VzW3BhcmFtZXRlcnMuY29sb3JTcGFjZV0pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb2xvciBzcGFjZTogJHtwYXJhbWV0ZXJzLmNvbG9yU3BhY2V9YCk7XG4gICAgfVxuXG4gICAgbGV0IGlubmVyRnVuO1xuICAgIGxldCBoYXNoZWRTdG9wcztcbiAgICBsZXQgY2F0ZWdvcmljYWxLZXlUeXBlO1xuICAgIGlmICh0eXBlID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVFeHBvbmVudGlhbEZ1bmN0aW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ludGVydmFsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlSW50ZXJ2YWxGdW5jdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjYXRlZ29yaWNhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUNhdGVnb3JpY2FsRnVuY3Rpb247XG5cbiAgICAgICAgLy8gRm9yIGNhdGVnb3JpY2FsIGZ1bmN0aW9ucywgZ2VuZXJhdGUgYW4gT2JqZWN0IGFzIGEgaGFzaG1hcCBvZiB0aGUgc3RvcHMgZm9yIGZhc3Qgc2VhcmNoaW5nXG4gICAgICAgIGhhc2hlZFN0b3BzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZm9yIChjb25zdCBzdG9wIG9mIHBhcmFtZXRlcnMuc3RvcHMpIHtcbiAgICAgICAgICAgIGhhc2hlZFN0b3BzW3N0b3BbMF1dID0gc3RvcFsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluZmVyIGtleSB0eXBlIGJhc2VkIG9uIGZpcnN0IHN0b3Aga2V5LS0gdXNlZCB0byBlbmNmb3JjZSBzdHJpY3QgdHlwZSBjaGVja2luZyBsYXRlclxuICAgICAgICBjYXRlZ29yaWNhbEtleVR5cGUgPSB0eXBlb2YgcGFyYW1ldGVycy5zdG9wc1swXVswXTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlSWRlbnRpdHlGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVuY3Rpb24gdHlwZSBcIiR7dHlwZX1cImApO1xuICAgIH1cblxuICAgIGlmICh6b29tQW5kRmVhdHVyZURlcGVuZGVudCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlRnVuY3Rpb25zID0ge307XG4gICAgICAgIGNvbnN0IHpvb21TdG9wcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSBwYXJhbWV0ZXJzLnN0b3BzW3NdO1xuICAgICAgICAgICAgY29uc3Qgem9vbSA9IHN0b3BbMF0uem9vbTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlRnVuY3Rpb25zW3pvb21dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25zW3pvb21dID0ge1xuICAgICAgICAgICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXJhbWV0ZXJzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBwYXJhbWV0ZXJzLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBwYXJhbWV0ZXJzLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAgIHN0b3BzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgem9vbVN0b3BzLnB1c2goem9vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25zW3pvb21dLnN0b3BzLnB1c2goW3N0b3BbMF0udmFsdWUsIHN0b3BbMV1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVGdW5jdGlvblN0b3BzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgeiBvZiB6b29tU3RvcHMpIHtcbiAgICAgICAgICAgIGZlYXR1cmVGdW5jdGlvblN0b3BzLnB1c2goW2ZlYXR1cmVGdW5jdGlvbnNbel0uem9vbSwgY3JlYXRlRnVuY3Rpb24oZmVhdHVyZUZ1bmN0aW9uc1t6XSwgcHJvcGVydHlTcGVjKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB7bmFtZTogJ2xpbmVhcid9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgICAgICAgIGludGVycG9sYXRpb25GYWN0b3I6IEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh1bmRlZmluZWQsIGludGVycG9sYXRpb25UeXBlKSxcbiAgICAgICAgICAgIHpvb21TdG9wczogZmVhdHVyZUZ1bmN0aW9uU3RvcHMubWFwKHMgPT4gc1swXSksXG4gICAgICAgICAgICBldmFsdWF0ZSh7em9vbX0sIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVFeHBvbmVudGlhbEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcHM6IGZlYXR1cmVGdW5jdGlvblN0b3BzLFxuICAgICAgICAgICAgICAgICAgICBiYXNlOiBwYXJhbWV0ZXJzLmJhc2VcbiAgICAgICAgICAgICAgICB9LCBwcm9wZXJ0eVNwZWMsIHpvb20pLmV2YWx1YXRlKHpvb20sIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoem9vbURlcGVuZGVudCkge1xuICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uVHlwZSA9IHR5cGUgPT09ICdleHBvbmVudGlhbCcgP1xuICAgICAgICAgICAge25hbWU6ICdleHBvbmVudGlhbCcsIGJhc2U6IHBhcmFtZXRlcnMuYmFzZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5iYXNlIDogMX0gOiBudWxsO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ2NhbWVyYScsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgICAgICAgIGludGVycG9sYXRpb25GYWN0b3I6IEludGVycG9sYXRlLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh1bmRlZmluZWQsIGludGVycG9sYXRpb25UeXBlKSxcbiAgICAgICAgICAgIHpvb21TdG9wczogcGFyYW1ldGVycy5zdG9wcy5tYXAocyA9PiBzWzBdKSxcbiAgICAgICAgICAgIGV2YWx1YXRlOiAoe3pvb219KSA9PiBpbm5lckZ1bihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIHpvb20sIGhhc2hlZFN0b3BzLCBjYXRlZ29yaWNhbEtleVR5cGUpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdzb3VyY2UnLFxuICAgICAgICAgICAgZXZhbHVhdGUoXywgZmVhdHVyZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmVhdHVyZSAmJiBmZWF0dXJlLnByb3BlcnRpZXMgPyBmZWF0dXJlLnByb3BlcnRpZXNbcGFyYW1ldGVycy5wcm9wZXJ0eV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvYWxlc2NlKHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXJGdW4ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCB2YWx1ZSwgaGFzaGVkU3RvcHMsIGNhdGVnb3JpY2FsS2V5VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb2FsZXNjZShhLCBiLCBjKSB7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGE7XG4gICAgaWYgKGIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGI7XG4gICAgaWYgKGMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlQ2F0ZWdvcmljYWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0LCBoYXNoZWRTdG9wcywga2V5VHlwZSkge1xuICAgIGNvbnN0IGV2YWx1YXRlZCA9IHR5cGVvZiBpbnB1dCA9PT0ga2V5VHlwZSA/IGhhc2hlZFN0b3BzW2lucHV0XSA6IHVuZGVmaW5lZDsgLy8gRW5mb3JjZSBzdHJpY3QgdHlwaW5nIG9uIGlucHV0XG4gICAgcmV0dXJuIGNvYWxlc2NlKGV2YWx1YXRlZCwgcGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlSW50ZXJ2YWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgLy8gRWRnZSBjYXNlc1xuICAgIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gJ251bWJlcicpIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICBjb25zdCBuID0gcGFyYW1ldGVycy5zdG9wcy5sZW5ndGg7XG4gICAgaWYgKG4gPT09IDEpIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzFdO1xuICAgIGlmIChpbnB1dCA8PSBwYXJhbWV0ZXJzLnN0b3BzWzBdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPj0gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMF0pIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzW24gLSAxXVsxXTtcblxuICAgIGNvbnN0IGluZGV4ID0gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4gc3RvcFswXSksIGlucHV0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVsxXTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVFeHBvbmVudGlhbEZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICBjb25zdCBiYXNlID0gcGFyYW1ldGVycy5iYXNlICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmJhc2UgOiAxO1xuXG4gICAgLy8gRWRnZSBjYXNlc1xuICAgIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gJ251bWJlcicpIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICBjb25zdCBuID0gcGFyYW1ldGVycy5zdG9wcy5sZW5ndGg7XG4gICAgaWYgKG4gPT09IDEpIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzWzBdWzFdO1xuICAgIGlmIChpbnB1dCA8PSBwYXJhbWV0ZXJzLnN0b3BzWzBdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPj0gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMF0pIHJldHVybiBwYXJhbWV0ZXJzLnN0b3BzW24gLSAxXVsxXTtcblxuICAgIGNvbnN0IGluZGV4ID0gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4gc3RvcFswXSksIGlucHV0KTtcbiAgICBjb25zdCB0ID0gaW50ZXJwb2xhdGlvbkZhY3RvcihcbiAgICAgICAgaW5wdXQsIGJhc2UsXG4gICAgICAgIHBhcmFtZXRlcnMuc3RvcHNbaW5kZXhdWzBdLFxuICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4ICsgMV1bMF0pO1xuXG4gICAgY29uc3Qgb3V0cHV0TG93ZXIgPSBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVsxXTtcbiAgICBjb25zdCBvdXRwdXRVcHBlciA9IHBhcmFtZXRlcnMuc3RvcHNbaW5kZXggKyAxXVsxXTtcbiAgICBsZXQgaW50ZXJwID0gaW50ZXJwb2xhdGVbcHJvcGVydHlTcGVjLnR5cGVdIHx8IGlkZW50aXR5RnVuY3Rpb247IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuXG4gICAgaWYgKHBhcmFtZXRlcnMuY29sb3JTcGFjZSAmJiBwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT09ICdyZ2InKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yc3BhY2UgPSBjb2xvclNwYWNlc1twYXJhbWV0ZXJzLmNvbG9yU3BhY2VdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgaW50ZXJwID0gKGEsIGIpID0+IGNvbG9yc3BhY2UucmV2ZXJzZShjb2xvcnNwYWNlLmludGVycG9sYXRlKGNvbG9yc3BhY2UuZm9yd2FyZChhKSwgY29sb3JzcGFjZS5mb3J3YXJkKGIpLCB0KSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdXRwdXRMb3dlci5ldmFsdWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZhbHVhdGUoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRlZExvd2VyID0gb3V0cHV0TG93ZXIuZXZhbHVhdGUuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRVcHBlciA9IG91dHB1dFVwcGVyLmV2YWx1YXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBmaWxsLW91dGxpbmUtY29sb3IsIHdoaWNoIGhhcyBubyBzcGVjIGRlZmF1bHQuXG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZExvd2VyID09PSB1bmRlZmluZWQgfHwgZXZhbHVhdGVkVXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJwKGV2YWx1YXRlZExvd2VyLCBldmFsdWF0ZWRVcHBlciwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycChvdXRwdXRMb3dlciwgb3V0cHV0VXBwZXIsIHQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUlkZW50aXR5RnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICBpbnB1dCA9IENvbG9yLnBhcnNlKGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAnZm9ybWF0dGVkJykge1xuICAgICAgICBpbnB1dCA9IEZvcm1hdHRlZC5mcm9tU3RyaW5nKGlucHV0LnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdyZXNvbHZlZEltYWdlJykge1xuICAgICAgICBpbnB1dCA9IFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyhpbnB1dC50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKGdldFR5cGUoaW5wdXQpICE9PSBwcm9wZXJ0eVNwZWMudHlwZSAmJiAocHJvcGVydHlTcGVjLnR5cGUgIT09ICdlbnVtJyB8fCAhcHJvcGVydHlTcGVjLnZhbHVlc1tpbnB1dF0pKSB7XG4gICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY29hbGVzY2UoaW5wdXQsIHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYXRpbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gZXhwb25lbnRpYWwgZnVuY3Rpb25cbiAqIHN0b3BzLlxuICpcbiAqIEhvdyBpdCB3b3JrczpcbiAqIFR3byBjb25zZWN1dGl2ZSBzdG9wIHZhbHVlcyBkZWZpbmUgYSAoc2NhbGVkIGFuZCBzaGlmdGVkKSBleHBvbmVudGlhbFxuICogZnVuY3Rpb24gYGYoeCkgPSBhICogYmFzZV54ICsgYmAsIHdoZXJlIGBiYXNlYCBpcyB0aGUgdXNlci1zcGVjaWZpZWQgYmFzZSxcbiAqIGFuZCBgYWAgYW5kIGBiYCBhcmUgY29uc3RhbnRzIGFmZm9yZGluZyBzdWZmaWNpZW50IGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBmaXRcbiAqIHRoZSBmdW5jdGlvbiB0byB0aGUgZ2l2ZW4gc3RvcHMuXG4gKlxuICogSGVyZSdzIGEgYml0IG9mIGFsZ2VicmEgdGhhdCBsZXRzIHVzIGNvbXB1dGUgYGYoeClgIGRpcmVjdGx5IGZyb20gdGhlIHN0b3BcbiAqIHZhbHVlcyB3aXRob3V0IGV4cGxpY2l0bHkgc29sdmluZyBmb3IgYGFgIGFuZCBgYmA6XG4gKlxuICogRmlyc3Qgc3RvcCB2YWx1ZTogYGYoeDApID0geTAgPSBhICogYmFzZV54MCArIGJgXG4gKiBTZWNvbmQgc3RvcCB2YWx1ZTogYGYoeDEpID0geTEgPSBhICogYmFzZV54MSArIGJgXG4gKiA9PiBgeTEgLSB5MCA9IGEoYmFzZV54MSAtIGJhc2VeeDApYFxuICogPT4gYGEgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqXG4gKiBEZXNpcmVkIHZhbHVlOiBgZih4KSA9IHkgPSBhICogYmFzZV54ICsgYmBcbiAqID0+IGBmKHgpID0geTAgKyBhICogKGJhc2VeeCAtIGJhc2VeeDApYFxuICpcbiAqIEZyb20gdGhlIGFib3ZlLCB3ZSBjYW4gcmVwbGFjZSB0aGUgYGFgIGluIGBhICogKGJhc2VeeCAtIGJhc2VeeDApYCBhbmQgZG8gYVxuICogbGl0dGxlIGFsZ2VicmE6XG4gKiBgYGBcbiAqIGEgKiAoYmFzZV54IC0gYmFzZV54MCkgPSAoeTEgLSB5MCkvKGJhc2VeeDEgLSBiYXNlXngwKSAqIChiYXNlXnggLSBiYXNlXngwKVxuICogICAgICAgICAgICAgICAgICAgICA9ICh5MSAtIHkwKSAqIChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIC0gYmFzZV54MClcbiAqIGBgYFxuICpcbiAqIElmIHdlIGxldCBgKGJhc2VeeCAtIGJhc2VeeDApIC8gKGJhc2VeeDEgYmFzZV54MClgLCB0aGVuIHdlIGhhdmVcbiAqIGBmKHgpID0geTAgKyAoeTEgLSB5MCkgKiByYXRpb2AuICBJbiBvdGhlciB3b3JkcywgYHJhdGlvYCBtYXkgYmUgdHJlYXRlZCBhc1xuICogYW4gaW50ZXJwb2xhdGlvbiBmYWN0b3IgYmV0d2VlbiB0aGUgdHdvIHN0b3BzJyBvdXRwdXQgdmFsdWVzLlxuICpcbiAqIChOb3RlOiBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtIGZvciBgcmF0aW9gLFxuICogYChiYXNlXih4LXgwKSAtIDEpIC8gKGJhc2VeKHgxLXgwKSAtIDEpIGAsIGlzIGVxdWl2YWxlbnQsIGJ1dCByZXF1aXJlcyBmZXdlclxuICogZXhwZW5zaXZlIGBNYXRoLnBvdygpYCBvcGVyYXRpb25zLilcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0aW9uRmFjdG9yKGlucHV0LCBiYXNlLCBsb3dlclZhbHVlLCB1cHBlclZhbHVlKSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHVwcGVyVmFsdWUgLSBsb3dlclZhbHVlO1xuICAgIGNvbnN0IHByb2dyZXNzID0gaW5wdXQgLSBsb3dlclZhbHVlO1xuXG4gICAgaWYgKGRpZmZlcmVuY2UgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmIChiYXNlID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwcm9ncmVzcyAvIGRpZmZlcmVuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChNYXRoLnBvdyhiYXNlLCBwcm9ncmVzcykgLSAxKSAvIChNYXRoLnBvdyhiYXNlLCBkaWZmZXJlbmNlKSAtIDEpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCBDb21wb3VuZEV4cHJlc3Npb24gZnJvbSAnLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBTdGVwIGZyb20gJy4vZGVmaW5pdGlvbnMvc3RlcCc7XG5pbXBvcnQgSW50ZXJwb2xhdGUgZnJvbSAnLi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgQ29hbGVzY2UgZnJvbSAnLi9kZWZpbml0aW9ucy9jb2FsZXNjZSc7XG5pbXBvcnQgTGV0IGZyb20gJy4vZGVmaW5pdGlvbnMvbGV0JztcbmltcG9ydCBkZWZpbml0aW9ucyBmcm9tICcuL2RlZmluaXRpb25zJztcbmltcG9ydCAqIGFzIGlzQ29uc3RhbnQgZnJvbSAnLi9pc19jb25zdGFudCc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQge3N1Y2Nlc3MsIGVycm9yfSBmcm9tICcuLi91dGlsL3Jlc3VsdCc7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uLCBzdXBwb3J0c1pvb21FeHByZXNzaW9uLCBzdXBwb3J0c0ludGVycG9sYXRpb259IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtUeXBlLCBFdmFsdWF0aW9uS2luZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjJztcbmltcG9ydCB0eXBlIHtSZXN1bHR9IGZyb20gJy4uL3V0aWwvcmVzdWx0JztcbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uVHlwZX0gZnJvbSAnLi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgdHlwZSB7UHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IHR5cGUgRmVhdHVyZSA9IHtcbiAgICArdHlwZTogMSB8IDIgfCAzIHwgJ1Vua25vd24nIHwgJ1BvaW50JyB8ICdNdWx0aVBvaW50JyB8ICdMaW5lU3RyaW5nJyB8ICdNdWx0aUxpbmVTdHJpbmcnIHwgJ1BvbHlnb24nIHwgJ011bHRpUG9seWdvbicsXG4gICAgK2lkPzogYW55LFxuICAgICtwcm9wZXJ0aWVzOiB7W186IHN0cmluZ106IGFueX0sXG4gICAgK3BhdHRlcm5zPzoge1tfOiBzdHJpbmddOiB7XCJtaW5cIjogc3RyaW5nLCBcIm1pZFwiOiBzdHJpbmcsIFwibWF4XCI6IHN0cmluZ319LFxuICAgICtnZW9tZXRyeT86IEFycmF5PEFycmF5PFBvaW50Pj5cbn07XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZSA9IHtbXzogc3RyaW5nXTogYW55fTtcblxuZXhwb3J0IHR5cGUgR2xvYmFsUHJvcGVydGllcyA9ICRSZWFkT25seTx7XG4gICAgem9vbTogbnVtYmVyLFxuICAgIGhlYXRtYXBEZW5zaXR5PzogbnVtYmVyLFxuICAgIGxpbmVQcm9ncmVzcz86IG51bWJlcixcbiAgICBpc1N1cHBvcnRlZFNjcmlwdD86IChfOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4gICAgYWNjdW11bGF0ZWQ/OiBWYWx1ZVxufT47XG5cbmV4cG9ydCBjbGFzcyBTdHlsZUV4cHJlc3Npb24ge1xuICAgIGV4cHJlc3Npb246IEV4cHJlc3Npb247XG5cbiAgICBfZXZhbHVhdG9yOiBFdmFsdWF0aW9uQ29udGV4dDtcbiAgICBfZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbiAgICBfd2FybmluZ0hpc3Rvcnk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgICBfZW51bVZhbHVlczogP3tbXzogc3RyaW5nXTogYW55fTtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEV4cHJlc3Npb24sIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuX3dhcm5pbmdIaXN0b3J5ID0ge307XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvciA9IG5ldyBFdmFsdWF0aW9uQ29udGV4dCgpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBwcm9wZXJ0eVNwZWMgPyBnZXREZWZhdWx0VmFsdWUocHJvcGVydHlTcGVjKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX2VudW1WYWx1ZXMgPSBwcm9wZXJ0eVNwZWMgJiYgcHJvcGVydHlTcGVjLnR5cGUgPT09ICdlbnVtJyA/IHByb3BlcnR5U3BlYy52YWx1ZXMgOiBudWxsO1xuICAgIH1cblxuICAgIGV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzID0gZ2xvYmFscztcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZVN0YXRlID0gZmVhdHVyZVN0YXRlO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsID0gY2Fub25pY2FsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzID0gYXZhaWxhYmxlSW1hZ2VzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uID0gZm9ybWF0dGVkU2VjdGlvbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzID0gZ2xvYmFscztcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmUgPSBmZWF0dXJlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGUgPSBmZWF0dXJlU3RhdGUgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb24gfHwgbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8ICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgIT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1WYWx1ZXMgJiYgISh2YWwgaW4gdGhpcy5fZW51bVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgJHtPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAodiA9PiBKU09OLnN0cmluZ2lmeSh2KSkuam9pbignLCAnKX0sIGJ1dCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHZhbCl9IGluc3RlYWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dhcm5pbmdIaXN0b3J5W2UubWVzc2FnZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93YXJuaW5nSGlzdG9yeVtlLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIGV4cHJlc3Npb25bMF0gPT09ICdzdHJpbmcnICYmIGV4cHJlc3Npb25bMF0gaW4gZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogUGFyc2UgYW5kIHR5cGVjaGVjayB0aGUgZ2l2ZW4gc3R5bGUgc3BlYyBKU09OIGV4cHJlc3Npb24uICBJZlxuICogb3B0aW9ucy5kZWZhdWx0VmFsdWUgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIHJlc3VsdGluZyBTdHlsZUV4cHJlc3Npb24nc1xuICogYGV2YWx1YXRlKClgIG1ldGhvZCB3aWxsIGhhbmRsZSBlcnJvcnMgYnkgbG9nZ2luZyBhIHdhcm5pbmcgKG9uY2UgcGVyXG4gKiBtZXNzYWdlKSBhbmQgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHRocm93XG4gKiBldmFsdWF0aW9uIGVycm9ycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCwgcHJvcGVydHlTcGVjOiA/U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBSZXN1bHQ8U3R5bGVFeHByZXNzaW9uLCBBcnJheTxQYXJzaW5nRXJyb3I+PiB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNpbmdDb250ZXh0KGRlZmluaXRpb25zLCBbXSwgcHJvcGVydHlTcGVjID8gZ2V0RXhwZWN0ZWRUeXBlKHByb3BlcnR5U3BlYykgOiB1bmRlZmluZWQpO1xuXG4gICAgLy8gRm9yIHN0cmluZy12YWx1ZWQgcHJvcGVydGllcywgY29lcmNlIHRvIHN0cmluZyBhdCB0aGUgdG9wIGxldmVsIHJhdGhlciB0aGFuIGFzc2VydGluZy5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZXIucGFyc2UoZXhwcmVzc2lvbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydHlTcGVjICYmIHByb3BlcnR5U3BlYy50eXBlID09PSAnc3RyaW5nJyA/IHt0eXBlQW5ub3RhdGlvbjogJ2NvZXJjZSd9IDogdW5kZWZpbmVkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIGFzc2VydChwYXJzZXIuZXJyb3JzLmxlbmd0aCA+IDApO1xuICAgICAgICByZXR1cm4gZXJyb3IocGFyc2VyLmVycm9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3MobmV3IFN0eWxlRXhwcmVzc2lvbihwYXJzZWQsIHByb3BlcnR5U3BlYykpO1xufVxuXG5leHBvcnQgY2xhc3MgWm9vbUNvbnN0YW50RXhwcmVzc2lvbjxLaW5kOiBFdmFsdWF0aW9uS2luZD4ge1xuICAgIGtpbmQ6IEtpbmQ7XG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbjtcbiAgICBfc3R5bGVFeHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihraW5kOiBLaW5kLCBleHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy5fc3R5bGVFeHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5pc1N0YXRlRGVwZW5kZW50ID0ga2luZCAhPT0gKCdjb25zdGFudCc6IEV2YWx1YXRpb25LaW5kKSAmJiAhaXNDb25zdGFudC5pc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgWm9vbURlcGVuZGVudEV4cHJlc3Npb248S2luZDogRXZhbHVhdGlvbktpbmQ+IHtcbiAgICBraW5kOiBLaW5kO1xuICAgIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPjtcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuO1xuXG4gICAgX3N0eWxlRXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uO1xuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihraW5kOiBLaW5kLCBleHByZXNzaW9uOiBTdHlsZUV4cHJlc3Npb24sIHpvb21TdG9wczogQXJyYXk8bnVtYmVyPiwgaW50ZXJwb2xhdGlvblR5cGU/OiBJbnRlcnBvbGF0aW9uVHlwZSkge1xuICAgICAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgICAgICB0aGlzLnpvb21TdG9wcyA9IHpvb21TdG9wcztcbiAgICAgICAgdGhpcy5fc3R5bGVFeHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5pc1N0YXRlRGVwZW5kZW50ID0ga2luZCAhPT0gKCdjYW1lcmEnOiBFdmFsdWF0aW9uS2luZCkgJiYgIWlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvblR5cGUgPSBpbnRlcnBvbGF0aW9uVHlwZTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcywgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvblR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvblR5cGUsIGlucHV0LCBsb3dlciwgdXBwZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY29uc3RhbnQnLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPikgPT4gYW55LFxufVxuXG5leHBvcnQgdHlwZSBTb3VyY2VFeHByZXNzaW9uID0ge1xuICAgIGtpbmQ6ICdzb3VyY2UnLFxuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW4sXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+LCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikgPT4gYW55LFxufTtcblxuZXhwb3J0IHR5cGUgQ2FtZXJhRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY2FtZXJhJyxcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pID0+IGFueSxcbiAgICAraW50ZXJwb2xhdGlvbkZhY3RvcjogKGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcixcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuZXhwb3J0IHR5cGUgQ29tcG9zaXRlRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnY29tcG9zaXRlJyxcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pID0+IGFueSxcbiAgICAraW50ZXJwb2xhdGlvbkZhY3RvcjogKGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcixcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24gPVxuICAgIHwgQ29uc3RhbnRFeHByZXNzaW9uXG4gICAgfCBTb3VyY2VFeHByZXNzaW9uXG4gICAgfCBDYW1lcmFFeHByZXNzaW9uXG4gICAgfCBDb21wb3NpdGVFeHByZXNzaW9uO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkLCBwcm9wZXJ0eVNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogUmVzdWx0PFN0eWxlUHJvcGVydHlFeHByZXNzaW9uLCBBcnJheTxQYXJzaW5nRXJyb3I+PiB7XG4gICAgZXhwcmVzc2lvbiA9IGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcHJvcGVydHlTcGVjKTtcbiAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gZXhwcmVzc2lvbi52YWx1ZS5leHByZXNzaW9uO1xuXG4gICAgY29uc3QgaXNGZWF0dXJlQ29uc3RhbnQgPSBpc0NvbnN0YW50LmlzRmVhdHVyZUNvbnN0YW50KHBhcnNlZCk7XG4gICAgaWYgKCFpc0ZlYXR1cmVDb25zdGFudCAmJiAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdkYXRhIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQnKV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlzWm9vbUNvbnN0YW50ID0gaXNDb25zdGFudC5pc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQocGFyc2VkLCBbJ3pvb20nXSk7XG4gICAgaWYgKCFpc1pvb21Db25zdGFudCAmJiAhc3VwcG9ydHNab29tRXhwcmVzc2lvbihwcm9wZXJ0eVNwZWMpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ3pvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCcpXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgem9vbUN1cnZlID0gZmluZFpvb21DdXJ2ZShwYXJzZWQpO1xuICAgIGlmICghem9vbUN1cnZlICYmICFpc1pvb21Db25zdGFudCkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyldKTtcbiAgICB9IGVsc2UgaWYgKHpvb21DdXJ2ZSBpbnN0YW5jZW9mIFBhcnNpbmdFcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IoW3pvb21DdXJ2ZV0pO1xuICAgIH0gZWxzZSBpZiAoem9vbUN1cnZlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUgJiYgIXN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcihbbmV3IFBhcnNpbmdFcnJvcignJywgJ1wiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pO1xuICAgIH1cblxuICAgIGlmICghem9vbUN1cnZlKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzKGlzRmVhdHVyZUNvbnN0YW50ID9cbiAgICAgICAgICAgIChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignY29uc3RhbnQnLCBleHByZXNzaW9uLnZhbHVlKTogQ29uc3RhbnRFeHByZXNzaW9uKSA6XG4gICAgICAgICAgICAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ3NvdXJjZScsIGV4cHJlc3Npb24udmFsdWUpOiBTb3VyY2VFeHByZXNzaW9uKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB6b29tQ3VydmUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZSA/IHpvb21DdXJ2ZS5pbnRlcnBvbGF0aW9uIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3MoaXNGZWF0dXJlQ29uc3RhbnQgP1xuICAgICAgICAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjYW1lcmEnLCBleHByZXNzaW9uLnZhbHVlLCB6b29tQ3VydmUubGFiZWxzLCBpbnRlcnBvbGF0aW9uVHlwZSk6IENhbWVyYUV4cHJlc3Npb24pIDpcbiAgICAgICAgKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY29tcG9zaXRlJywgZXhwcmVzc2lvbi52YWx1ZSwgem9vbUN1cnZlLmxhYmVscywgaW50ZXJwb2xhdGlvblR5cGUpOiBDb21wb3NpdGVFeHByZXNzaW9uKSk7XG59XG5cbmltcG9ydCB7aXNGdW5jdGlvbiwgY3JlYXRlRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcbmltcG9ydCB7Q29sb3J9IGZyb20gJy4vdmFsdWVzJztcblxuLy8gc2VyaWFsaXphdGlvbiB3cmFwcGVyIGZvciBvbGQtc3R5bGUgc3RvcCBmdW5jdGlvbnMgbm9ybWFsaXplZCB0byB0aGVcbi8vIGV4cHJlc3Npb24gaW50ZXJmYWNlXG5leHBvcnQgY2xhc3MgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+IHtcbiAgICBfcGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD47XG4gICAgX3NwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAga2luZDogRXZhbHVhdGlvbktpbmQ7XG4gICAgZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSkgPT4gYW55O1xuICAgIGludGVycG9sYXRpb25GYWN0b3I6ID8oaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIHpvb21TdG9wczogP0FycmF5PG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIHRoaXMuX3NwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgICAgICBleHRlbmQodGhpcywgY3JlYXRlRnVuY3Rpb24odGhpcy5fcGFyYW1ldGVycywgdGhpcy5fc3BlY2lmaWNhdGlvbikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShzZXJpYWxpemVkOiB7X3BhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+LCBfc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259KSB7XG4gICAgICAgIHJldHVybiAoKG5ldyBTdHlsZVByb3BlcnR5RnVuY3Rpb24oc2VyaWFsaXplZC5fcGFyYW1ldGVycywgc2VyaWFsaXplZC5fc3BlY2lmaWNhdGlvbikpOiBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXJpYWxpemUoaW5wdXQ6IFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX3BhcmFtZXRlcnM6IGlucHV0Ll9wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgX3NwZWNpZmljYXRpb246IGlucHV0Ll9zcGVjaWZpY2F0aW9uXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9uPFQ+KHZhbHVlOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAobmV3IFN0eWxlUHJvcGVydHlGdW5jdGlvbih2YWx1ZSwgc3BlY2lmaWNhdGlvbik6IGFueSk7XG5cbiAgICB9IGVsc2UgaWYgKGlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbih2YWx1ZSwgc3BlY2lmaWNhdGlvbik7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBpbiB2YWxpZGF0aW9uXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwcmVzc2lvbi52YWx1ZS5tYXAoZXJyID0+IGAke2Vyci5rZXl9OiAke2Vyci5tZXNzYWdlfWApLmpvaW4oJywgJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbnN0YW50OiBhbnkgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgc3BlY2lmaWNhdGlvbi50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdGFudCA9IENvbG9yLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ2NvbnN0YW50JyxcbiAgICAgICAgICAgIGV2YWx1YXRlOiAoKSA9PiBjb25zdGFudFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLy8gWm9vbS1kZXBlbmRlbnQgZXhwcmVzc2lvbnMgbWF5IG9ubHkgdXNlIFtcInpvb21cIl0gYXMgdGhlIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIlxuLy8gZXhwcmVzc2lvbiAoY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIGEgXCJjdXJ2ZVwiKS4gVGhlIGN1cnZlIG1heSBiZSB3cmFwcGVkIGluIG9uZSBvciBtb3JlIFwibGV0XCIgb3Jcbi8vIFwiY29hbGVzY2VcIiBleHByZXNzaW9ucy5cbmZ1bmN0aW9uIGZpbmRab29tQ3VydmUoZXhwcmVzc2lvbjogRXhwcmVzc2lvbik6IFN0ZXAgfCBJbnRlcnBvbGF0ZSB8IFBhcnNpbmdFcnJvciB8IG51bGwge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgTGV0KSB7XG4gICAgICAgIHJlc3VsdCA9IGZpbmRab29tQ3VydmUoZXhwcmVzc2lvbi5yZXN1bHQpO1xuXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29hbGVzY2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgZXhwcmVzc2lvbi5hcmdzKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGFyZyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBTdGVwIHx8IGV4cHJlc3Npb24gaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZSkgJiZcbiAgICAgICAgZXhwcmVzc2lvbi5pbnB1dCBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbiAmJlxuICAgICAgICBleHByZXNzaW9uLmlucHV0Lm5hbWUgPT09ICd6b29tJykge1xuXG4gICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdFcnJvcikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGV4cHJlc3Npb24uZWFjaENoaWxkKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IGZpbmRab29tQ3VydmUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGRSZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNoaWxkUmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKCFyZXN1bHQgJiYgY2hpbGRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYXJzaW5nRXJyb3IoJycsICdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICYmIGNoaWxkUmVzdWx0ICYmIHJlc3VsdCAhPT0gY2hpbGRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYXJzaW5nRXJyb3IoJycsICdPbmx5IG9uZSB6b29tLWJhc2VkIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmltcG9ydCB7Q29sb3JUeXBlLCBTdHJpbmdUeXBlLCBOdW1iZXJUeXBlLCBCb29sZWFuVHlwZSwgVmFsdWVUeXBlLCBGb3JtYXR0ZWRUeXBlLCBSZXNvbHZlZEltYWdlVHlwZSwgYXJyYXl9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBnZXRFeHBlY3RlZFR5cGUoc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBUeXBlIHtcbiAgICBjb25zdCB0eXBlcyA9IHtcbiAgICAgICAgY29sb3I6IENvbG9yVHlwZSxcbiAgICAgICAgc3RyaW5nOiBTdHJpbmdUeXBlLFxuICAgICAgICBudW1iZXI6IE51bWJlclR5cGUsXG4gICAgICAgIGVudW06IFN0cmluZ1R5cGUsXG4gICAgICAgIGJvb2xlYW46IEJvb2xlYW5UeXBlLFxuICAgICAgICBmb3JtYXR0ZWQ6IEZvcm1hdHRlZFR5cGUsXG4gICAgICAgIHJlc29sdmVkSW1hZ2U6IFJlc29sdmVkSW1hZ2VUeXBlXG4gICAgfTtcblxuICAgIGlmIChzcGVjLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5KHR5cGVzW3NwZWMudmFsdWVdIHx8IFZhbHVlVHlwZSwgc3BlYy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlc1tzcGVjLnR5cGVdO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc3BlYzogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb24pOiBWYWx1ZSB7XG4gICAgaWYgKHNwZWMudHlwZSA9PT0gJ2NvbG9yJyAmJiBpc0Z1bmN0aW9uKHNwZWMuZGVmYXVsdCkpIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBoZWF0bWFwLWNvbG9yOiBpdCB1c2VzIHRoZSAnZGVmYXVsdDonIHRvIGRlZmluZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgY29sb3IgcmFtcCwgYnV0IGNyZWF0ZUV4cHJlc3Npb24gZXhwZWN0cyBhIHNpbXBsZSB2YWx1ZSB0byBmYWxsXG4gICAgICAgIC8vIGJhY2sgdG8gaW4gY2FzZSBvZiBydW50aW1lIGVycm9yc1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKDAsIDAsIDAsIDApO1xuICAgIH0gZWxzZSBpZiAoc3BlYy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgIHJldHVybiBDb2xvci5wYXJzZShzcGVjLmRlZmF1bHQpIHx8IG51bGw7XG4gICAgfSBlbHNlIGlmIChzcGVjLmRlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3BlYy5kZWZhdWx0O1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlU3BlYyBmcm9tICcuL3ZhbGlkYXRlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IG9iamVjdCA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgZWxlbWVudFNwZWNzID0gb3B0aW9ucy52YWx1ZVNwZWMgfHwge307XG4gICAgY29uc3QgZWxlbWVudFZhbGlkYXRvcnMgPSBvcHRpb25zLm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShvYmplY3QpO1xuICAgIGlmICh0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBvYmplY3QsIGBvYmplY3QgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvYmplY3RLZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTcGVjS2V5ID0gb2JqZWN0S2V5LnNwbGl0KCcuJylbMF07IC8vIHRyZWF0ICdwYWludC4qJyBhcyAncGFpbnQnXG4gICAgICAgIGNvbnN0IGVsZW1lbnRTcGVjID0gZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XSB8fCBlbGVtZW50U3BlY3NbJyonXTtcblxuICAgICAgICBsZXQgdmFsaWRhdGVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50VmFsaWRhdG9yc1tlbGVtZW50U3BlY0tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gdmFsaWRhdGVTcGVjO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRWYWxpZGF0b3JzWycqJ10pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IGVsZW1lbnRWYWxpZGF0b3JzWycqJ107XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFNwZWNzWycqJ10pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IHZhbGlkYXRlU3BlYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBvYmplY3Rbb2JqZWN0S2V5XSwgYHVua25vd24gcHJvcGVydHkgXCIke29iamVjdEtleX1cImApKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVsZW1lbnQoe1xuICAgICAgICAgICAga2V5OiAoa2V5ID8gYCR7a2V5fS5gIDoga2V5KSArIG9iamVjdEtleSxcbiAgICAgICAgICAgIHZhbHVlOiBvYmplY3Rbb2JqZWN0S2V5XSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZWxlbWVudFNwZWMsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIG9iamVjdEtleVxuICAgICAgICB9LCBvYmplY3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRTcGVjS2V5IGluIGVsZW1lbnRTcGVjcykge1xuICAgICAgICAvLyBEb24ndCBjaGVjayBgcmVxdWlyZWRgIHdoZW4gdGhlcmUncyBhIGN1c3RvbSB2YWxpZGF0b3IgZm9yIHRoYXQgcHJvcGVydHkuXG4gICAgICAgIGlmIChlbGVtZW50VmFsaWRhdG9yc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0ucmVxdWlyZWQgJiYgZWxlbWVudFNwZWNzW2VsZW1lbnRTcGVjS2V5XVsnZGVmYXVsdCddID09PSB1bmRlZmluZWQgJiYgb2JqZWN0W2VsZW1lbnRTcGVjS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0LCBgbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcIiR7ZWxlbWVudFNwZWNLZXl9XCJgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkob3B0aW9ucykge1xuICAgIGNvbnN0IGFycmF5ID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBhcnJheVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsaWRhdGVBcnJheUVsZW1lbnQgPSBvcHRpb25zLmFycmF5RWxlbWVudFZhbGlkYXRvciB8fCB2YWxpZGF0ZTtcblxuICAgIGlmIChnZXRUeXBlKGFycmF5KSAhPT0gJ2FycmF5Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBhcnJheSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUoYXJyYXkpfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlTcGVjLmxlbmd0aCAmJiBhcnJheS5sZW5ndGggIT09IGFycmF5U3BlYy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBsZW5ndGggJHthcnJheVNwZWMubGVuZ3RofSBleHBlY3RlZCwgbGVuZ3RoICR7YXJyYXkubGVuZ3RofSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlTcGVjWydtaW4tbGVuZ3RoJ10gJiYgYXJyYXkubGVuZ3RoIDwgYXJyYXlTcGVjWydtaW4tbGVuZ3RoJ10pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBsZW5ndGggYXQgbGVhc3QgJHthcnJheVNwZWNbJ21pbi1sZW5ndGgnXX0gZXhwZWN0ZWQsIGxlbmd0aCAke2FycmF5Lmxlbmd0aH0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgbGV0IGFycmF5RWxlbWVudFNwZWMgPSB7XG4gICAgICAgIFwidHlwZVwiOiBhcnJheVNwZWMudmFsdWUsXG4gICAgICAgIFwidmFsdWVzXCI6IGFycmF5U3BlYy52YWx1ZXNcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlU3BlYy4kdmVyc2lvbiA8IDcpIHtcbiAgICAgICAgYXJyYXlFbGVtZW50U3BlYy5mdW5jdGlvbiA9IGFycmF5U3BlYy5mdW5jdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VHlwZShhcnJheVNwZWMudmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhcnJheUVsZW1lbnRTcGVjID0gYXJyYXlTcGVjLnZhbHVlO1xuICAgIH1cblxuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVBcnJheUVsZW1lbnQoe1xuICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICBhcnJheUluZGV4OiBpLFxuICAgICAgICAgICAgdmFsdWU6IGFycmF5W2ldLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBhcnJheUVsZW1lbnRTcGVjLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcihvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGxldCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0eXBlID0gJ05hTic7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgbnVtYmVyIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmICgnbWluaW11bScgaW4gdmFsdWVTcGVjICYmIHZhbHVlIDwgdmFsdWVTcGVjLm1pbmltdW0pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGAke3ZhbHVlfSBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgJHt2YWx1ZVNwZWMubWluaW11bX1gKV07XG4gICAgfVxuXG4gICAgaWYgKCdtYXhpbXVtJyBpbiB2YWx1ZVNwZWMgJiYgdmFsdWUgPiB2YWx1ZVNwZWMubWF4aW11bSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYCR7dmFsdWV9IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAke3ZhbHVlU3BlYy5tYXhpbXVtfWApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVBcnJheSBmcm9tICcuL3ZhbGlkYXRlX2FycmF5JztcbmltcG9ydCB2YWxpZGF0ZU51bWJlciBmcm9tICcuL3ZhbGlkYXRlX251bWJlcic7XG5pbXBvcnQge2lzRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtcbiAgICBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbixcbiAgICBzdXBwb3J0c1pvb21FeHByZXNzaW9uLFxuICAgIHN1cHBvcnRzSW50ZXJwb2xhdGlvblxufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBjb25zdCBmdW5jdGlvblZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IGZ1bmN0aW9uVHlwZSA9IHVuYnVuZGxlKG9wdGlvbnMudmFsdWUudHlwZSk7XG4gICAgbGV0IHN0b3BLZXlUeXBlO1xuICAgIGxldCBzdG9wRG9tYWluVmFsdWVzID0ge307XG4gICAgbGV0IHByZXZpb3VzU3RvcERvbWFpblZhbHVlO1xuICAgIGxldCBwcmV2aW91c1N0b3BEb21haW5ab29tO1xuXG4gICAgY29uc3QgaXNab29tRnVuY3Rpb24gPSBmdW5jdGlvblR5cGUgIT09ICdjYXRlZ29yaWNhbCcgJiYgb3B0aW9ucy52YWx1ZS5wcm9wZXJ0eSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzUHJvcGVydHlGdW5jdGlvbiA9ICFpc1pvb21GdW5jdGlvbjtcbiAgICBjb25zdCBpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uID1cbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHNbMF0pID09PSAnYXJyYXknICYmXG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wc1swXVswXSkgPT09ICdvYmplY3QnO1xuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgdmFsdWVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYy5mdW5jdGlvbixcbiAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICBzdG9wczogdmFsaWRhdGVGdW5jdGlvblN0b3BzLFxuICAgICAgICAgICAgZGVmYXVsdDogdmFsaWRhdGVGdW5jdGlvbkRlZmF1bHRcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2lkZW50aXR5JyAmJiBpc1pvb21GdW5jdGlvbikge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInByb3BlcnR5XCInKSk7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmN0aW9uVHlwZSAhPT0gJ2lkZW50aXR5JyAmJiAhb3B0aW9ucy52YWx1ZS5zdG9wcykge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInN0b3BzXCInKSk7XG4gICAgfVxuXG4gICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2V4cG9uZW50aWFsJyAmJiBvcHRpb25zLnZhbHVlU3BlYy5leHByZXNzaW9uICYmICFzdXBwb3J0c0ludGVycG9sYXRpb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZVNwZWMuJHZlcnNpb24gPj0gOCkge1xuICAgICAgICBpZiAoaXNQcm9wZXJ0eUZ1bmN0aW9uICYmICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihvcHRpb25zLnZhbHVlU3BlYykpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdwcm9wZXJ0eSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1pvb21GdW5jdGlvbiAmJiAhc3VwcG9ydHNab29tRXhwcmVzc2lvbihvcHRpb25zLnZhbHVlU3BlYykpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICd6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChmdW5jdGlvblR5cGUgPT09ICdjYXRlZ29yaWNhbCcgfHwgaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbikgJiYgb3B0aW9ucy52YWx1ZS5wcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcInByb3BlcnR5XCIgcHJvcGVydHkgaXMgcmVxdWlyZWQnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25TdG9wcyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ2lkZW50aXR5IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBhIFwic3RvcHNcIiBwcm9wZXJ0eScpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVBcnJheSh7XG4gICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IG9wdGlvbnMudmFsdWVTcGVjLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgYXJyYXlFbGVtZW50VmFsaWRhdG9yOiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnYXJyYXknICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgdmFsdWUsICdhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AnKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25TdG9wKG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgICAgIGlmIChnZXRUeXBlKHZhbHVlKSAhPT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBhcnJheSBleHBlY3RlZCwgJHtnZXRUeXBlKHZhbHVlKX0gZm91bmRgKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGFycmF5IGxlbmd0aCAyIGV4cGVjdGVkLCBsZW5ndGggJHt2YWx1ZS5sZW5ndGh9IGZvdW5kYCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChnZXRUeXBlKHZhbHVlWzBdKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYG9iamVjdCBleHBlY3RlZCwgJHtnZXRUeXBlKHZhbHVlWzBdKX0gZm91bmRgKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbMF0uem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20nKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbMF0udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnb2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZScpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1N0b3BEb21haW5ab29tICYmIHByZXZpb3VzU3RvcERvbWFpblpvb20gPiB1bmJ1bmRsZSh2YWx1ZVswXS56b29tKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlWzBdLnpvb20sICdzdG9wIHpvb20gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlcicpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZSh2YWx1ZVswXS56b29tKSAhPT0gcHJldmlvdXNTdG9wRG9tYWluWm9vbSkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU3RvcERvbWFpblpvb20gPSB1bmJ1bmRsZSh2YWx1ZVswXS56b29tKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzdG9wRG9tYWluVmFsdWVzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bMF1gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHt6b29tOiB7fX0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge3pvb206IHZhbGlkYXRlTnVtYmVyLCB2YWx1ZTogdmFsaWRhdGVTdG9wRG9tYWluVmFsdWV9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlU3RvcERvbWFpblZhbHVlKHtcbiAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bMF1gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHt9LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgICAgIH0sIHZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFeHByZXNzaW9uKGRlZXBVbmJ1bmRsZSh2YWx1ZVsxXSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdChbbmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sICdleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gc3RvcHMuJyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleTogYCR7a2V5fVsxXWAsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVbMV0sXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGZ1bmN0aW9uVmFsdWVTcGVjLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZShvcHRpb25zLCBzdG9wKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKG9wdGlvbnMudmFsdWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHVuYnVuZGxlKG9wdGlvbnMudmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IHJlcG9ydFZhbHVlID0gb3B0aW9ucy52YWx1ZSAhPT0gbnVsbCA/IG9wdGlvbnMudmFsdWUgOiBzdG9wO1xuXG4gICAgICAgIGlmICghc3RvcEtleVR5cGUpIHtcbiAgICAgICAgICAgIHN0b3BLZXlUeXBlID0gdHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSBzdG9wS2V5VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgYCR7dHlwZX0gc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgJHtzdG9wS2V5VHlwZX1gKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSAhPT0gJ251bWJlcicgJiYgdHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCAnc3RvcCBkb21haW4gdmFsdWUgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuJyldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIGZ1bmN0aW9uVHlwZSAhPT0gJ2NhdGVnb3JpY2FsJykge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgbnVtYmVyIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYDtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihmdW5jdGlvblZhbHVlU3BlYykgJiYgZnVuY3Rpb25UeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICdcXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYFwidHlwZVwiOiBcImNhdGVnb3JpY2FsXCJgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBtZXNzYWdlKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnY2F0ZWdvcmljYWwnICYmIHR5cGUgPT09ICdudW1iZXInICYmICghaXNGaW5pdGUodmFsdWUpIHx8IE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIGBpbnRlZ2VyIGV4cGVjdGVkLCBmb3VuZCAke3ZhbHVlfWApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT09ICdjYXRlZ29yaWNhbCcgJiYgdHlwZSA9PT0gJ251bWJlcicgJiYgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA8IHByZXZpb3VzU3RvcERvbWFpblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCAnc3RvcCBkb21haW4gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlcicpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZpb3VzU3RvcERvbWFpblZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnY2F0ZWdvcmljYWwnICYmIHZhbHVlIGluIHN0b3BEb21haW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsICdzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUnKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdG9wRG9tYWluVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkRlZmF1bHQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUoe1xuICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBmdW5jdGlvblZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5pbXBvcnQge2NyZWF0ZUV4cHJlc3Npb24sIGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge2RlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge2lzU3RhdGVDb25zdGFudCwgaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc0ZlYXR1cmVDb25zdGFudH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9pc19jb25zdGFudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zOiBhbnkpOiBBcnJheTxWYWxpZGF0aW9uRXJyb3I+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdwcm9wZXJ0eScgPyBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb24gOiBjcmVhdGVFeHByZXNzaW9uKShkZWVwVW5idW5kbGUob3B0aW9ucy52YWx1ZSksIG9wdGlvbnMudmFsdWVTcGVjKTtcbiAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24udmFsdWUubWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IoYCR7b3B0aW9ucy5rZXl9JHtlcnJvci5rZXl9YCwgb3B0aW9ucy52YWx1ZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cHJlc3Npb25PYmogPSAoZXhwcmVzc2lvbi52YWx1ZTogYW55KS5leHByZXNzaW9uIHx8IChleHByZXNzaW9uLnZhbHVlOiBhbnkpLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbjtcblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAncHJvcGVydHknICYmIChvcHRpb25zLnByb3BlcnR5S2V5ID09PSAndGV4dC1mb250JykgJiZcbiAgICAgICAgIWV4cHJlc3Npb25PYmoub3V0cHV0RGVmaW5lZCgpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgYEludmFsaWQgZGF0YSBleHByZXNzaW9uIGZvciBcIiR7b3B0aW9ucy5wcm9wZXJ0eUtleX1cIi4gT3V0cHV0IHZhbHVlcyBtdXN0IGJlIGNvbnRhaW5lZCBhcyBsaXRlcmFscyB3aXRoaW4gdGhlIGV4cHJlc3Npb24uYCldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAncHJvcGVydHknICYmIG9wdGlvbnMucHJvcGVydHlUeXBlID09PSAnbGF5b3V0JyAmJlxuICAgICAgICAoIWlzU3RhdGVDb25zdGFudChleHByZXNzaW9uT2JqKSkpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJmZWF0dXJlLXN0YXRlXCIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGxheW91dCBwcm9wZXJ0aWVzLicpXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ2ZpbHRlcicgJiYgIWlzU3RhdGVDb25zdGFudChleHByZXNzaW9uT2JqKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcImZlYXR1cmUtc3RhdGVcIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggZmlsdGVycy4nKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgJiYgb3B0aW9ucy5leHByZXNzaW9uQ29udGV4dC5pbmRleE9mKCdjbHVzdGVyJykgPT09IDApIHtcbiAgICAgICAgaWYgKCFpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZXhwcmVzc2lvbk9iaiwgWyd6b29tJywgJ2ZlYXR1cmUtc3RhdGUnXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiem9vbVwiIGFuZCBcImZlYXR1cmUtc3RhdGVcIiBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGNsdXN0ZXIgcHJvcGVydGllcy4nKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdjbHVzdGVyLWluaXRpYWwnICYmICFpc0ZlYXR1cmVDb25zdGFudChleHByZXNzaW9uT2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnRmVhdHVyZSBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggaW5pdGlhbCBleHByZXNzaW9uIHBhcnQgb2YgY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4ob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYm9vbGVhbiBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB7cGFyc2VDU1NDb2xvcn0gZnJvbSAnY3NzY29sb3JwYXJzZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUNvbG9yKG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgY29sb3IgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlQ1NTQ29sb3IodmFsdWUpID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgY29sb3IgZXhwZWN0ZWQsIFwiJHt2YWx1ZX1cIiBmb3VuZGApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQge3VuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVFbnVtKG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVNwZWMudmFsdWVzKSkgeyAvLyA8PXY3XG4gICAgICAgIGlmICh2YWx1ZVNwZWMudmFsdWVzLmluZGV4T2YodW5idW5kbGUodmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGV4cGVjdGVkIG9uZSBvZiBbJHt2YWx1ZVNwZWMudmFsdWVzLmpvaW4oJywgJyl9XSwgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGZvdW5kYCkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gPj12OFxuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWVTcGVjLnZhbHVlcykuaW5kZXhPZih1bmJ1bmRsZSh2YWx1ZSkpID09PSAtMSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZXhwZWN0ZWQgb25lIG9mIFske09iamVjdC5rZXlzKHZhbHVlU3BlYy52YWx1ZXMpLmpvaW4oJywgJyl9XSwgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IGZvdW5kYCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZUV4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0dsb2JhbFByb3BlcnRpZXMsIEZlYXR1cmV9IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuXG50eXBlIEZpbHRlckV4cHJlc3Npb24gPSAoZ2xvYmFsUHJvcGVydGllczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZTogRmVhdHVyZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlEKSA9PiBib29sZWFuO1xuZXhwb3J0IHR5cGUgRmVhdHVyZUZpbHRlciA9e2ZpbHRlcjogRmlsdGVyRXhwcmVzc2lvbiwgbmVlZEdlb21ldHJ5OiBib29sZWFufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRmlsdGVyO1xuZXhwb3J0IHtpc0V4cHJlc3Npb25GaWx0ZXJ9O1xuXG5mdW5jdGlvbiBpc0V4cHJlc3Npb25GaWx0ZXIoZmlsdGVyOiBhbnkpIHtcbiAgICBpZiAoZmlsdGVyID09PSB0cnVlIHx8IGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcikgfHwgZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN3aXRjaCAoZmlsdGVyWzBdKSB7XG4gICAgY2FzZSAnaGFzJzpcbiAgICAgICAgcmV0dXJuIGZpbHRlci5sZW5ndGggPj0gMiAmJiBmaWx0ZXJbMV0gIT09ICckaWQnICYmIGZpbHRlclsxXSAhPT0gJyR0eXBlJztcblxuICAgIGNhc2UgJ2luJzpcbiAgICAgICAgcmV0dXJuIGZpbHRlci5sZW5ndGggPj0gMyAmJiAodHlwZW9mIGZpbHRlclsxXSAhPT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXJbMl0pKTtcblxuICAgIGNhc2UgJyFpbic6XG4gICAgY2FzZSAnIWhhcyc6XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgJz09JzpcbiAgICBjYXNlICchPSc6XG4gICAgY2FzZSAnPic6XG4gICAgY2FzZSAnPj0nOlxuICAgIGNhc2UgJzwnOlxuICAgIGNhc2UgJzw9JzpcbiAgICAgICAgcmV0dXJuIGZpbHRlci5sZW5ndGggIT09IDMgfHwgKEFycmF5LmlzQXJyYXkoZmlsdGVyWzFdKSB8fCBBcnJheS5pc0FycmF5KGZpbHRlclsyXSkpO1xuXG4gICAgY2FzZSAnYW55JzpcbiAgICBjYXNlICdhbGwnOlxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsdGVyLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzRXhwcmVzc2lvbkZpbHRlcihmKSAmJiB0eXBlb2YgZiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5jb25zdCBmaWx0ZXJTcGVjID0ge1xuICAgICd0eXBlJzogJ2Jvb2xlYW4nLFxuICAgICdkZWZhdWx0JzogZmFsc2UsXG4gICAgJ3RyYW5zaXRpb24nOiBmYWxzZSxcbiAgICAncHJvcGVydHktdHlwZSc6ICdkYXRhLWRyaXZlbicsXG4gICAgJ2V4cHJlc3Npb24nOiB7XG4gICAgICAgICdpbnRlcnBvbGF0ZWQnOiBmYWxzZSxcbiAgICAgICAgJ3BhcmFtZXRlcnMnOiBbJ3pvb20nLCAnZmVhdHVyZSddXG4gICAgfVxufTtcblxuLyoqXG4gKiBHaXZlbiBhIGZpbHRlciBleHByZXNzZWQgYXMgbmVzdGVkIGFycmF5cywgcmV0dXJuIGEgbmV3IGZ1bmN0aW9uXG4gKiB0aGF0IGV2YWx1YXRlcyB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSAod2l0aCBhIC5wcm9wZXJ0aWVzIG9yIC50YWdzIHByb3BlcnR5KVxuICogcGFzc2VzIGl0cyB0ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXIgbWFwYm94IGdsIGZpbHRlclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBmaWx0ZXItZXZhbHVhdGluZyBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXIoZmlsdGVyOiBhbnkpOiBGZWF0dXJlRmlsdGVyIHtcbiAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7ZmlsdGVyOiAoKSA9PiB0cnVlLCBuZWVkR2VvbWV0cnk6IGZhbHNlfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXhwcmVzc2lvbkZpbHRlcihmaWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IGNvbnZlcnRGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21waWxlZCA9IGNyZWF0ZUV4cHJlc3Npb24oZmlsdGVyLCBmaWx0ZXJTcGVjKTtcbiAgICBpZiAoY29tcGlsZWQucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjb21waWxlZC52YWx1ZS5tYXAoZXJyID0+IGAke2Vyci5rZXl9OiAke2Vyci5tZXNzYWdlfWApLmpvaW4oJywgJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IEFycmF5LmlzQXJyYXkoZmlsdGVyKSAmJiBmaWx0ZXIubGVuZ3RoICE9PSAwICYmIGZpbHRlclswXSA9PT0gJ3dpdGhpbic7XG4gICAgICAgIHJldHVybiB7ZmlsdGVyOiAoZ2xvYmFsUHJvcGVydGllczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZTogRmVhdHVyZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlEKSA9PiBjb21waWxlZC52YWx1ZS5ldmFsdWF0ZShnbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgIG5lZWRHZW9tZXRyeX07XG4gICAgfVxufVxuXG4vLyBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIHNvcnQgbnVtYmVycyBhbmQgc3RyaW5nc1xuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RmlsdGVyKGZpbHRlcjogP0FycmF5PGFueT4pOiBtaXhlZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IG9wID0gZmlsdGVyWzBdO1xuICAgIGlmIChmaWx0ZXIubGVuZ3RoIDw9IDEpIHJldHVybiAob3AgIT09ICdhbnknKTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPVxuICAgICAgICBvcCA9PT0gJz09JyA/IGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sICc9PScpIDpcbiAgICAgICAgb3AgPT09ICchPScgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgJz09JykpIDpcbiAgICAgICAgb3AgPT09ICc8JyB8fFxuICAgICAgICBvcCA9PT0gJz4nIHx8XG4gICAgICAgIG9wID09PSAnPD0nIHx8XG4gICAgICAgIG9wID09PSAnPj0nID8gY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgb3ApIDpcbiAgICAgICAgb3AgPT09ICdhbnknID8gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyLnNsaWNlKDEpKSA6XG4gICAgICAgIG9wID09PSAnYWxsJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikpIDpcbiAgICAgICAgb3AgPT09ICdub25lJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikubWFwKGNvbnZlcnROZWdhdGlvbikpIDpcbiAgICAgICAgb3AgPT09ICdpbicgPyBjb252ZXJ0SW5PcChmaWx0ZXJbMV0sIGZpbHRlci5zbGljZSgyKSkgOlxuICAgICAgICBvcCA9PT0gJyFpbicgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydEluT3AoZmlsdGVyWzFdLCBmaWx0ZXIuc2xpY2UoMikpKSA6XG4gICAgICAgIG9wID09PSAnaGFzJyA/IGNvbnZlcnRIYXNPcChmaWx0ZXJbMV0pIDpcbiAgICAgICAgb3AgPT09ICchaGFzJyA/IGNvbnZlcnROZWdhdGlvbihjb252ZXJ0SGFzT3AoZmlsdGVyWzFdKSkgOlxuICAgICAgICB0cnVlO1xuICAgIHJldHVybiBjb252ZXJ0ZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDb21wYXJpc29uT3AocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSwgb3A6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci10eXBlLSR7b3B9YCwgdmFsdWVdO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC0ke29wfWAsIHZhbHVlXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItJHtvcH1gLCBwcm9wZXJ0eSwgdmFsdWVdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyczogQXJyYXk8QXJyYXk8YW55Pj4pIHtcbiAgICByZXR1cm4gWydhbnknXS5jb25jYXQoZmlsdGVycy5tYXAoY29udmVydEZpbHRlcikpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0SW5PcChwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZXM6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItdHlwZS1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMjAwICYmICF2YWx1ZXMuc29tZSh2ID0+IHR5cGVvZiB2ICE9PSB0eXBlb2YgdmFsdWVzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsnZmlsdGVyLWluLWxhcmdlJywgcHJvcGVydHksIFsnbGl0ZXJhbCcsIHZhbHVlcy5zb3J0KGNvbXBhcmUpXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWydmaWx0ZXItaW4tc21hbGwnLCBwcm9wZXJ0eSwgWydsaXRlcmFsJywgdmFsdWVzXV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRIYXNPcChwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnJGlkJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWhhcy1pZGBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1oYXNgLCBwcm9wZXJ0eV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0TmVnYXRpb24oZmlsdGVyOiBtaXhlZCkge1xuICAgIHJldHVybiBbJyEnLCBmaWx0ZXJdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbkZpbHRlcn0gZnJvbSAnLi4vZmVhdHVyZV9maWx0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcihvcHRpb25zKSB7XG4gICAgaWYgKGlzRXhwcmVzc2lvbkZpbHRlcihkZWVwVW5idW5kbGUob3B0aW9ucy52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24oZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2ZpbHRlcicsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZTogJ2Jvb2xlYW4nfVxuICAgICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGxldCB0eXBlO1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCcpXTtcbiAgICB9XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlRW51bSh7XG4gICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVswXSxcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuZmlsdGVyX29wZXJhdG9yLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgIH0pKTtcblxuICAgIHN3aXRjaCAodW5idW5kbGUodmFsdWVbMF0pKSB7XG4gICAgY2FzZSAnPCc6XG4gICAgY2FzZSAnPD0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyICYmIHVuYnVuZGxlKHZhbHVlWzFdKSA9PT0gJyR0eXBlJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgXCIkdHlwZVwiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciBcIiR7dmFsdWVbMF19XCJgKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgJz09JzpcbiAgICBjYXNlICchPSc6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgXCIke3ZhbHVlWzBdfVwiIG11c3QgaGF2ZSAzIGVsZW1lbnRzYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICdpbic6XG4gICAgY2FzZSAnIWluJzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVsxXSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVtpXSk7XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMV0pID09PSAnJHR5cGUnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmdlb21ldHJ5X3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bJHtpfV1gLCB2YWx1ZVtpXSwgYHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYW55JzpcbiAgICBjYXNlICdhbGwnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcih7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaGFzJzpcbiAgICBjYXNlICchaGFzJzpcbiAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIFwiJHt2YWx1ZVswXX1cIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50c2ApKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsIHByb3BlcnR5VHlwZSkge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgcHJvcGVydHlLZXkgPSBvcHRpb25zLm9iamVjdEtleTtcbiAgICBjb25zdCBsYXllclNwZWMgPSBzdHlsZVNwZWNbYCR7cHJvcGVydHlUeXBlfV8ke29wdGlvbnMubGF5ZXJUeXBlfWBdO1xuXG4gICAgaWYgKCFsYXllclNwZWMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHRyYW5zaXRpb25NYXRjaCA9IHByb3BlcnR5S2V5Lm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO1xuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdwYWludCcgJiYgdHJhbnNpdGlvbk1hdGNoICYmIGxheWVyU3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dICYmIGxheWVyU3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dLnRyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMudHJhbnNpdGlvbixcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjIHx8IGxheWVyU3BlY1twcm9wZXJ0eUtleV07XG4gICAgaWYgKCF2YWx1ZVNwZWMpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGB1bmtub3duIHByb3BlcnR5IFwiJHtwcm9wZXJ0eUtleX1cImApXTtcbiAgICB9XG5cbiAgICBsZXQgdG9rZW5NYXRjaDtcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnICYmIHN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlU3BlYykgJiYgIXZhbHVlU3BlYy50b2tlbnMgJiYgKHRva2VuTWF0Y2ggPSAvXnsoW159XSspfSQvLmV4ZWModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBrZXksIHZhbHVlLFxuICAgICAgICAgICAgYFwiJHtwcm9wZXJ0eUtleX1cIiBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gc3ludGF4XFxuYCArXG4gICAgICAgICAgICAgICAgYFVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBcXGB7IFwidHlwZVwiOiBcImlkZW50aXR5XCIsIFwicHJvcGVydHlcIjogJHtKU09OLnN0cmluZ2lmeSh0b2tlbk1hdGNoWzFdKX0gfVxcYC5gKV07XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5sYXllclR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gJ3RleHQtZmllbGQnICYmIHN0eWxlICYmICFzdHlsZS5nbHlwaHMpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ3VzZSBvZiBcInRleHQtZmllbGRcIiByZXF1aXJlcyBhIHN0eWxlIFwiZ2x5cGhzXCIgcHJvcGVydHknKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnR5S2V5ID09PSAndGV4dC1mb250JyAmJiBpc0Z1bmN0aW9uKGRlZXBVbmJ1bmRsZSh2YWx1ZSkpICYmIHVuYnVuZGxlKHZhbHVlLnR5cGUpID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcInRleHQtZm9udFwiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVTcGVjLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ3Byb3BlcnR5JyxcbiAgICAgICAgcHJvcGVydHlUeXBlLFxuICAgICAgICBwcm9wZXJ0eUtleVxuICAgIH0pKTtcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlUHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wcm9wZXJ0eSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgJ3BhaW50Jyk7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZVByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcHJvcGVydHknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxheW91dFByb3BlcnR5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCAnbGF5b3V0Jyk7XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQge3VuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZUxheW91dFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZVNwZWMgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcihvcHRpb25zKSB7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3QgbGF5ZXIgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcblxuICAgIGlmICghbGF5ZXIudHlwZSAmJiAhbGF5ZXIucmVmKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgJ2VpdGhlciBcInR5cGVcIiBvciBcInJlZlwiIGlzIHJlcXVpcmVkJykpO1xuICAgIH1cbiAgICBsZXQgdHlwZSA9IHVuYnVuZGxlKGxheWVyLnR5cGUpO1xuICAgIGNvbnN0IHJlZiA9IHVuYnVuZGxlKGxheWVyLnJlZik7XG5cbiAgICBpZiAobGF5ZXIuaWQpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHVuYnVuZGxlKGxheWVyLmlkKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmFycmF5SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXllciA9IHN0eWxlLmxheWVyc1tpXTtcbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZShvdGhlckxheWVyLmlkKSA9PT0gbGF5ZXJJZCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5pZCwgYGR1cGxpY2F0ZSBsYXllciBpZCBcIiR7bGF5ZXIuaWR9XCIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICR7b3RoZXJMYXllci5pZC5fX2xpbmVfX31gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ3JlZicgaW4gbGF5ZXIpIHtcbiAgICAgICAgWyd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnZmlsdGVyJywgJ2xheW91dCddLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIGlmIChwIGluIGxheWVyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyW3BdLCBgXCIke3B9XCIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVyc2ApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHBhcmVudDtcblxuICAgICAgICBzdHlsZS5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmICh1bmJ1bmRsZShsYXllci5pZCkgPT09IHJlZikgcGFyZW50ID0gbGF5ZXI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIucmVmLCBgcmVmIGxheWVyIFwiJHtyZWZ9XCIgbm90IGZvdW5kYCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC5yZWYpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5yZWYsICdyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllcicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHR5cGUgPSB1bmJ1bmRsZShwYXJlbnQudHlwZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdiYWNrZ3JvdW5kJykge1xuICAgICAgICBpZiAoIWxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCAnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInNvdXJjZVwiJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc3R5bGUuc291cmNlcyAmJiBzdHlsZS5zb3VyY2VzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlICYmIHVuYnVuZGxlKHNvdXJjZS50eXBlKTtcbiAgICAgICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYHNvdXJjZSBcIiR7bGF5ZXIuc291cmNlfVwiIG5vdCBmb3VuZGApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgdHlwZSA9PT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZWApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3Jhc3RlcicgJiYgdHlwZSAhPT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZWApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgJiYgIWxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgYGxheWVyIFwiJHtsYXllci5pZH1cIiBtdXN0IHNwZWNpZnkgYSBcInNvdXJjZS1sYXllclwiYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAncmFzdGVyLWRlbScgJiYgdHlwZSAhPT0gJ2hpbGxzaGFkZScpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCAncmFzdGVyLWRlbSBzb3VyY2UgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGxheWVyIHR5cGUgXFwnaGlsbHNoYWRlXFwnLicpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xpbmUnICYmIGxheWVyLnBhaW50ICYmIGxheWVyLnBhaW50WydsaW5lLWdyYWRpZW50J10gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVR5cGUgIT09ICdnZW9qc29uJyB8fCAhc291cmNlLmxpbmVNZXRyaWNzKSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgYGxheWVyIFwiJHtsYXllci5pZH1cIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggXFxgbGluZU1ldHJpY3NcXGAgZW5hYmxlZC5gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogbGF5ZXIsXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmxheWVyLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICcqJygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBlbmZvcmNlIHRoZSBzcGVjJ3MgYFwicmVxdWlyZXNcIjogdHJ1ZWAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCByZWZzO1xuICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZXF1aXJlbWVudCBpcyB2YWxpZGF0ZWQgYWJvdmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTc3Mi5cbiAgICAgICAgICAgIHR5cGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3BlYyh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS50eXBlYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxheWVyLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmxheWVyLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RLZXk6ICd0eXBlJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXIsXG4gICAgICAgICAgICBsYXlvdXQob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnKicob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUxheW91dFByb3BlcnR5KGV4dGVuZCh7bGF5ZXJUeXBlOiB0eXBlfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFpbnQob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnKicob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVBhaW50UHJvcGVydHkoZXh0ZW5kKHtsYXllclR5cGU6IHR5cGV9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuXG5jb25zdCBvYmplY3RFbGVtZW50VmFsaWRhdG9ycyA9IHtcbiAgICBwcm9tb3RlSWQ6IHZhbGlkYXRlUHJvbW90ZUlkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVNvdXJjZShvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcblxuICAgIGlmICghdmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1widHlwZVwiIGlzIHJlcXVpcmVkJyldO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB1bmJ1bmRsZSh2YWx1ZS50eXBlKTtcbiAgICBsZXQgZXJyb3JzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICdyYXN0ZXInOlxuICAgIGNhc2UgJ3Jhc3Rlci1kZW0nOlxuICAgICAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjW2Bzb3VyY2VfJHt0eXBlLnJlcGxhY2UoJy0nLCAnXycpfWBdLFxuICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcblxuICAgIGNhc2UgJ2dlb2pzb24nOlxuICAgICAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnNvdXJjZV9nZW9qc29uLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmNsdXN0ZXIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZS5jbHVzdGVyUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcl0gPSB2YWx1ZS5jbHVzdGVyUHJvcGVydGllc1twcm9wXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWR1Y2VFeHByID0gdHlwZW9mIG9wZXJhdG9yID09PSAnc3RyaW5nJyA/IFtvcGVyYXRvciwgWydhY2N1bXVsYXRlZCddLCBbJ2dldCcsIHByb3BdXSA6IG9wZXJhdG9yO1xuXG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LiR7cHJvcH0ubWFwYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hcEV4cHIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnY2x1c3Rlci1tYXAnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS4ke3Byb3B9LnJlZHVjZWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZWR1Y2VFeHByLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2NsdXN0ZXItcmVkdWNlJ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfdmlkZW8sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcblxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX2ltYWdlLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG5cbiAgICBjYXNlICdjYW52YXMnOlxuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBudWxsLCBgUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy5gLCAnc291cmNlLmNhbnZhcycpXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAga2V5OiBgJHtrZXl9LnR5cGVgLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZXM6IFsndmVjdG9yJywgJ3Jhc3RlcicsICdyYXN0ZXItZGVtJywgJ2dlb2pzb24nLCAndmlkZW8nLCAnaW1hZ2UnXX0sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvbW90ZUlkKHtrZXksIHZhbHVlfSkge1xuICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3RyaW5nKHtrZXksIHZhbHVlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmcoe2tleTogYCR7a2V5fS4ke3Byb3B9YCwgdmFsdWU6IHZhbHVlW3Byb3BdfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGlnaHQob3B0aW9ucykge1xuICAgIGNvbnN0IGxpZ2h0ID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCBsaWdodFNwZWMgPSBzdHlsZVNwZWMubGlnaHQ7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3Qgcm9vdFR5cGUgPSBnZXRUeXBlKGxpZ2h0KTtcbiAgICBpZiAobGlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH0gZWxzZSBpZiAocm9vdFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3IoJ2xpZ2h0JywgbGlnaHQsIGBvYmplY3QgZXhwZWN0ZWQsICR7cm9vdFR5cGV9IGZvdW5kYCldKTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBsaWdodCkge1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uTWF0Y2ggPSBrZXkubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb25NYXRjaCAmJiBsaWdodFNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXSAmJiBsaWdodFNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXS50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxpZ2h0W2tleV0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMudHJhbnNpdGlvbixcbiAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChsaWdodFNwZWNba2V5XSkge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsaWdodFtrZXldLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogbGlnaHRTcGVjW2tleV0sXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGlnaHRba2V5XSwgYHVua25vd24gcHJvcGVydHkgXCIke2tleX1cImApXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0dGVkKG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh2YWxpZGF0ZVN0cmluZyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZShvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodmFsaWRhdGVTdHJpbmcob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xufVxuIiwiXG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4uL3V0aWwvZXh0ZW5kJztcbmltcG9ydCB7dW5idW5kbGUsIGRlZXBVbmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJy4uL2Z1bmN0aW9uJztcblxuaW1wb3J0IHZhbGlkYXRlRnVuY3Rpb24gZnJvbSAnLi92YWxpZGF0ZV9mdW5jdGlvbic7XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVCb29sZWFuIGZyb20gJy4vdmFsaWRhdGVfYm9vbGVhbic7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHZhbGlkYXRlQ29sb3IgZnJvbSAnLi92YWxpZGF0ZV9jb2xvcic7XG5pbXBvcnQgdmFsaWRhdGVDb25zdGFudHMgZnJvbSAnLi92YWxpZGF0ZV9jb25zdGFudHMnO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZUxheWVyIGZyb20gJy4vdmFsaWRhdGVfbGF5ZXInO1xuaW1wb3J0IHZhbGlkYXRlU291cmNlIGZyb20gJy4vdmFsaWRhdGVfc291cmNlJztcbmltcG9ydCB2YWxpZGF0ZUxpZ2h0IGZyb20gJy4vdmFsaWRhdGVfbGlnaHQnO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcbmltcG9ydCB2YWxpZGF0ZUZvcm1hdHRlZCBmcm9tICcuL3ZhbGlkYXRlX2Zvcm1hdHRlZCc7XG5pbXBvcnQgdmFsaWRhdGVJbWFnZSBmcm9tICcuL3ZhbGlkYXRlX2ltYWdlJztcblxuY29uc3QgVkFMSURBVE9SUyA9IHtcbiAgICAnKicoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgICdhcnJheSc6IHZhbGlkYXRlQXJyYXksXG4gICAgJ2Jvb2xlYW4nOiB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgJ251bWJlcic6IHZhbGlkYXRlTnVtYmVyLFxuICAgICdjb2xvcic6IHZhbGlkYXRlQ29sb3IsXG4gICAgJ2NvbnN0YW50cyc6IHZhbGlkYXRlQ29uc3RhbnRzLFxuICAgICdlbnVtJzogdmFsaWRhdGVFbnVtLFxuICAgICdmaWx0ZXInOiB2YWxpZGF0ZUZpbHRlcixcbiAgICAnZnVuY3Rpb24nOiB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgICdsYXllcic6IHZhbGlkYXRlTGF5ZXIsXG4gICAgJ29iamVjdCc6IHZhbGlkYXRlT2JqZWN0LFxuICAgICdzb3VyY2UnOiB2YWxpZGF0ZVNvdXJjZSxcbiAgICAnbGlnaHQnOiB2YWxpZGF0ZUxpZ2h0LFxuICAgICdzdHJpbmcnOiB2YWxpZGF0ZVN0cmluZyxcbiAgICAnZm9ybWF0dGVkJzogdmFsaWRhdGVGb3JtYXR0ZWQsXG4gICAgJ3Jlc29sdmVkSW1hZ2UnOiB2YWxpZGF0ZUltYWdlXG59O1xuXG4vLyBNYWluIHJlY3Vyc2l2ZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUcmFja3M6XG4vL1xuLy8gLSBrZXk6IHN0cmluZyByZXByZXNlbnRpbmcgbG9jYXRpb24gb2YgdmFsaWRhdGlvbiBpbiBzdHlsZSB0cmVlLiBVc2VkIG9ubHlcbi8vICAgZm9yIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgcmVwb3J0aW5nLlxuLy8gLSB2YWx1ZTogY3VycmVudCB2YWx1ZSBmcm9tIHN0eWxlIGJlaW5nIGV2YWx1YXRlZC4gTWF5IGJlIGFueXRoaW5nIGZyb20gYVxuLy8gICBoaWdoIGxldmVsIG9iamVjdCB0aGF0IG5lZWRzIHRvIGJlIGRlc2NlbmRlZCBpbnRvIGRlZXBlciBvciBhIHNpbXBsZVxuLy8gICBzY2FsYXIgdmFsdWUuXG4vLyAtIHZhbHVlU3BlYzogY3VycmVudCBzcGVjIGJlaW5nIGV2YWx1YXRlZC4gVHJhY2tzIHZhbHVlLlxuLy8gLSBzdHlsZVNwZWM6IGN1cnJlbnQgZnVsbCBzcGVjIGJlaW5nIGV2YWx1YXRlZC5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGUob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcblxuICAgIGlmICh2YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiBpc0Z1bmN0aW9uKHVuYnVuZGxlKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRnVuY3Rpb24ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2UgaWYgKHZhbHVlU3BlYy5leHByZXNzaW9uICYmIGlzRXhwcmVzc2lvbihkZWVwVW5idW5kbGUodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIGlmICh2YWx1ZVNwZWMudHlwZSAmJiBWQUxJREFUT1JTW3ZhbHVlU3BlYy50eXBlXSkge1xuICAgICAgICByZXR1cm4gVkFMSURBVE9SU1t2YWx1ZVNwZWMudHlwZV0ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KGV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgdmFsdWVTcGVjOiB2YWx1ZVNwZWMudHlwZSA/IHN0eWxlU3BlY1t2YWx1ZVNwZWMudHlwZV0gOiB2YWx1ZVNwZWNcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoKSByZXR1cm4gZXJyb3JzO1xuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJ3tmb250c3RhY2t9JykgPT09IC0xKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie2ZvbnRzdGFja31cIiB0b2tlbicpKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZigne3JhbmdlfScpID09PSAtMSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcImdseXBoc1wiIHVybCBtdXN0IGluY2x1ZGUgYSBcIntyYW5nZX1cIiB0b2tlbicpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVDb25zdGFudHMgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGUnO1xuaW1wb3J0IGxhdGVzdFN0eWxlU3BlYyBmcm9tICcuL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IHZhbGlkYXRlR2x5cGhzVVJMIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybCc7XG5cbmltcG9ydCB2YWxpZGF0ZVNvdXJjZSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSc7XG5pbXBvcnQgdmFsaWRhdGVMaWdodCBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xpZ2h0JztcbmltcG9ydCB2YWxpZGF0ZUxheWVyIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5ZXInO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSc7XG5cbi8qKlxuICogVmFsaWRhdGUgYSBNYXBib3ggR0wgc3R5bGUgYWdhaW5zdCB0aGUgc3R5bGUgc3BlY2lmaWNhdGlvbi4gVGhpcyBlbnRyeXBvaW50LFxuICogYG1hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW5gLCBpcyBkZXNpZ25lZCB0byBwcm9kdWNlIGFzXG4gKiBzbWFsbCBhIGJyb3dzZXJpZnkgYnVuZGxlIGFzIHBvc3NpYmxlIGJ5IG9taXR0aW5nIHVubmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHlcbiAqIGFuZCBsZWdhY3kgc3R5bGUgc3BlY2lmaWNhdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZSBUaGUgc3R5bGUgdG8gYmUgdmFsaWRhdGVkLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdHlsZVNwZWNdIFRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uIHRvIHZhbGlkYXRlIGFnYWluc3QuXG4gKiAgICAgSWYgb21pdHRlZCwgdGhlIGxhdGVzdCBzdHlsZSBzcGVjIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7QXJyYXk8VmFsaWRhdGlvbkVycm9yPn1cbiAqIEBleGFtcGxlXG4gKiAgIHZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJ21hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW4nKTtcbiAqICAgdmFyIGVycm9ycyA9IHZhbGlkYXRlKHN0eWxlKTtcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHlsZU1pbihzdHlsZSwgc3R5bGVTcGVjID0gbGF0ZXN0U3R5bGVTcGVjKSB7XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAga2V5OiAnJyxcbiAgICAgICAgdmFsdWU6IHN0eWxlLFxuICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy4kcm9vdCxcbiAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgIGdseXBoczogdmFsaWRhdGVHbHlwaHNVUkwsXG4gICAgICAgICAgICAnKicoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgaWYgKHN0eWxlLmNvbnN0YW50cykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQ29uc3RhbnRzKHtcbiAgICAgICAgICAgIGtleTogJ2NvbnN0YW50cycsXG4gICAgICAgICAgICB2YWx1ZTogc3R5bGUuY29uc3RhbnRzLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0RXJyb3JzKGVycm9ycyk7XG59XG5cbnZhbGlkYXRlU3R5bGVNaW4uc291cmNlID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlU291cmNlKTtcbnZhbGlkYXRlU3R5bGVNaW4ubGlnaHQgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMaWdodCk7XG52YWxpZGF0ZVN0eWxlTWluLmxheWVyID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGF5ZXIpO1xudmFsaWRhdGVTdHlsZU1pbi5maWx0ZXIgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVGaWx0ZXIpO1xudmFsaWRhdGVTdHlsZU1pbi5wYWludFByb3BlcnR5ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSk7XG52YWxpZGF0ZVN0eWxlTWluLmxheW91dFByb3BlcnR5ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGF5b3V0UHJvcGVydHkpO1xuXG5mdW5jdGlvbiBzb3J0RXJyb3JzKGVycm9ycykge1xuICAgIHJldHVybiBbXS5jb25jYXQoZXJyb3JzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBhLmxpbmUgLSBiLmxpbmU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHdyYXBDbGVhbkVycm9ycyhpbm5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBzb3J0RXJyb3JzKGlubmVyLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZVN0eWxlTWluO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZVN0eWxlTWluIGZyb20gJy4uL3N0eWxlLXNwZWMvdmFsaWRhdGVfc3R5bGUubWluJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbnR5cGUgVmFsaWRhdGlvbkVycm9yID0ge1xuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBsaW5lOiBudW1iZXIsXG4gICAgaWRlbnRpZmllcj86IHN0cmluZ1xufTtcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yID0gKE9iamVjdCkgPT4gJFJlYWRPbmx5QXJyYXk8VmFsaWRhdGlvbkVycm9yPjtcblxudHlwZSBWYWxpZGF0ZVN0eWxlID0ge1xuICAgIChPYmplY3QsID9PYmplY3QpOiAkUmVhZE9ubHlBcnJheTxWYWxpZGF0aW9uRXJyb3I+LFxuICAgIHNvdXJjZTogVmFsaWRhdG9yLFxuICAgIGxheWVyOiBWYWxpZGF0b3IsXG4gICAgbGlnaHQ6IFZhbGlkYXRvcixcbiAgICBmaWx0ZXI6IFZhbGlkYXRvcixcbiAgICBwYWludFByb3BlcnR5OiBWYWxpZGF0b3IsXG4gICAgbGF5b3V0UHJvcGVydHk6IFZhbGlkYXRvclxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3R5bGUgPSAodmFsaWRhdGVTdHlsZU1pbjogVmFsaWRhdGVTdHlsZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVNvdXJjZSA9IHZhbGlkYXRlU3R5bGUuc291cmNlO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTGlnaHQgPSB2YWxpZGF0ZVN0eWxlLmxpZ2h0O1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRmlsdGVyID0gdmFsaWRhdGVTdHlsZS5maWx0ZXI7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYWludFByb3BlcnR5ID0gdmFsaWRhdGVTdHlsZS5wYWludFByb3BlcnR5O1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgPSB2YWxpZGF0ZVN0eWxlLmxheW91dFByb3BlcnR5O1xuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFZhbGlkYXRpb25FcnJvcnMoZW1pdHRlcjogRXZlbnRlZCwgZXJyb3JzOiA/JFJlYWRPbmx5QXJyYXk8e21lc3NhZ2U6IHN0cmluZywgaWRlbnRpZmllcj86IHN0cmluZ30+KTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9ycykge1xuICAgICAgICAgICAgZW1pdHRlci5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKSkpO1xuICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzRXJyb3JzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdyaWRJbmRleDtcblxudmFyIE5VTV9QQVJBTVMgPSAzO1xuXG5mdW5jdGlvbiBHcmlkSW5kZXgoZXh0ZW50LCBuLCBwYWRkaW5nKSB7XG4gICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscyA9IFtdO1xuXG4gICAgaWYgKGV4dGVudCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBleHRlbnQ7XG4gICAgICAgIHZhciBhcnJheSA9IG5ldyBJbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICBleHRlbnQgPSBhcnJheVswXTtcbiAgICAgICAgbiA9IGFycmF5WzFdO1xuICAgICAgICBwYWRkaW5nID0gYXJyYXlbMl07XG5cbiAgICAgICAgdGhpcy5kID0gbiArIDIgKiBwYWRkaW5nO1xuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuZCAqIHRoaXMuZDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBhcnJheVtOVU1fUEFSQU1TICsga107XG4gICAgICAgICAgICB2YXIgZW5kID0gYXJyYXlbTlVNX1BBUkFNUyArIGsgKyAxXTtcbiAgICAgICAgICAgIGNlbGxzLnB1c2goc3RhcnQgPT09IGVuZCA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICBhcnJheS5zdWJhcnJheShzdGFydCwgZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXNPZmZzZXQgPSBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoXTtcbiAgICAgICAgdmFyIGJib3hlc09mZnNldCA9IGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGggKyAxXTtcbiAgICAgICAgdGhpcy5rZXlzID0gYXJyYXkuc3ViYXJyYXkoa2V5c09mZnNldCwgYmJveGVzT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5iYm94ZXMgPSBhcnJheS5zdWJhcnJheShiYm94ZXNPZmZzZXQpO1xuXG4gICAgICAgIHRoaXMuaW5zZXJ0ID0gdGhpcy5faW5zZXJ0UmVhZG9ubHk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmQgPSBuICsgMiAqIHBhZGRpbmc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kICogdGhpcy5kOyBpKyspIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmJib3hlcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5leHRlbnQgPSBleHRlbnQ7XG4gICAgdGhpcy5wYWRkaW5nID0gcGFkZGluZztcbiAgICB0aGlzLnNjYWxlID0gbiAvIGV4dGVudDtcbiAgICB0aGlzLnVpZCA9IDA7XG5cbiAgICB2YXIgcCA9IChwYWRkaW5nIC8gbikgKiBleHRlbnQ7XG4gICAgdGhpcy5taW4gPSAtcDtcbiAgICB0aGlzLm1heCA9IGV4dGVudCArIHA7XG59XG5cblxuR3JpZEluZGV4LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihrZXksIHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX2luc2VydENlbGwsIHRoaXMudWlkKyspO1xuICAgIHRoaXMua2V5cy5wdXNoKGtleSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh5MSk7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh4Mik7XG4gICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seSA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93ICdDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLic7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9pbnNlcnRDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgdWlkKSB7XG4gICAgdGhpcy5jZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XG4gICAgaWYgKHgxIDw9IG1pbiAmJiB5MSA8PSBtaW4gJiYgbWF4IDw9IHgyICYmIG1heCA8PSB5MiAmJiAhaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgICAgICAvLyBXZSB1c2UgYEFycmF5I3NsaWNlYCBiZWNhdXNlIGB0aGlzLmtleXNgIG1heSBiZSBhIGBJbnQzMkFycmF5YCBhbmRcbiAgICAgICAgLy8gc29tZSBicm93c2VycyAoU2FmYXJpIGFuZCBJRSkgZG8gbm90IHN1cHBvcnQgYFR5cGVkQXJyYXkjc2xpY2VgXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1R5cGVkQXJyYXkvc2xpY2UjQnJvd3Nlcl9jb21wYXRpYmlsaXR5XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICB2YXIgc2VlblVpZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBzZWVuVWlkcywgaW50ZXJzZWN0aW9uVGVzdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fcXVlcnlDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgcmVzdWx0LCBzZWVuVWlkcywgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBjZWxsID0gdGhpcy5jZWxsc1tjZWxsSW5kZXhdO1xuICAgIGlmIChjZWxsICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xuICAgICAgICB2YXIgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgY2VsbC5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgdmFyIHVpZCA9IGNlbGxbdV07XG4gICAgICAgICAgICBpZiAoc2VlblVpZHNbdWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvblRlc3QgP1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25UZXN0KGJib3hlc1tvZmZzZXQgKyAwXSwgYmJveGVzW29mZnNldCArIDFdLCBiYm94ZXNbb2Zmc2V0ICsgMl0sIGJib3hlc1tvZmZzZXQgKyAzXSkgOlxuICAgICAgICAgICAgICAgICAgICAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHkxIDw9IGJib3hlc1tvZmZzZXQgKyAzXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHgyID49IGJib3hlc1tvZmZzZXQgKyAwXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzW3VpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChrZXlzW3VpZF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzW3VpZF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9mb3JFYWNoQ2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBmbiwgYXJnMSwgYXJnMiwgaW50ZXJzZWN0aW9uVGVzdCkge1xuICAgIHZhciBjeDEgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeDEpO1xuICAgIHZhciBjeTEgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeTEpO1xuICAgIHZhciBjeDIgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeDIpO1xuICAgIHZhciBjeTIgPSB0aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoeTIpO1xuICAgIGZvciAodmFyIHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgZm9yICh2YXIgeSA9IGN5MTsgeSA8PSBjeTI7IHkrKykge1xuICAgICAgICAgICAgdmFyIGNlbGxJbmRleCA9IHRoaXMuZCAqIHkgKyB4O1xuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvblRlc3QgJiYgIWludGVyc2VjdGlvblRlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeCArIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeSArIDEpKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBpbnRlcnNlY3Rpb25UZXN0KSkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fY29udmVydEZyb21DZWxsQ29vcmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy5wYWRkaW5nKSAvIHRoaXMuc2NhbGU7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuZCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMuc2NhbGUpICsgdGhpcy5wYWRkaW5nKSk7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLnRvQXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hcnJheUJ1ZmZlcikgcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7XG5cbiAgICB2YXIgY2VsbHMgPSB0aGlzLmNlbGxzO1xuXG4gICAgdmFyIG1ldGFkYXRhTGVuZ3RoID0gTlVNX1BBUkFNUyArIHRoaXMuY2VsbHMubGVuZ3RoICsgMSArIDE7XG4gICAgdmFyIHRvdGFsQ2VsbExlbmd0aCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRvdGFsQ2VsbExlbmd0aCArPSB0aGlzLmNlbGxzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXkgPSBuZXcgSW50MzJBcnJheShtZXRhZGF0YUxlbmd0aCArIHRvdGFsQ2VsbExlbmd0aCArIHRoaXMua2V5cy5sZW5ndGggKyB0aGlzLmJib3hlcy5sZW5ndGgpO1xuICAgIGFycmF5WzBdID0gdGhpcy5leHRlbnQ7XG4gICAgYXJyYXlbMV0gPSB0aGlzLm47XG4gICAgYXJyYXlbMl0gPSB0aGlzLnBhZGRpbmc7XG5cbiAgICB2YXIgb2Zmc2V0ID0gbWV0YWRhdGFMZW5ndGg7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBjZWxscy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgY2VsbCA9IGNlbGxzW2tdO1xuICAgICAgICBhcnJheVtOVU1fUEFSQU1TICsga10gPSBvZmZzZXQ7XG4gICAgICAgIGFycmF5LnNldChjZWxsLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2VsbC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aF0gPSBvZmZzZXQ7XG4gICAgYXJyYXkuc2V0KHRoaXMua2V5cywgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5rZXlzLmxlbmd0aDtcblxuICAgIGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGggKyAxXSA9IG9mZnNldDtcbiAgICBhcnJheS5zZXQodGhpcy5iYm94ZXMsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMuYmJveGVzLmxlbmd0aDtcblxuICAgIHJldHVybiBhcnJheS5idWZmZXI7XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgR3JpZCBmcm9tICdncmlkLWluZGV4JztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtTdHlsZVByb3BlcnR5RnVuY3Rpb24sIFN0eWxlRXhwcmVzc2lvbiwgWm9vbURlcGVuZGVudEV4cHJlc3Npb24sIFpvb21Db25zdGFudEV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBleHByZXNzaW9ucyBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuY29uc3Qge0ltYWdlRGF0YSwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG50eXBlIFNlcmlhbGl6ZWRPYmplY3QgPSB7W186IHN0cmluZ106IFNlcmlhbGl6ZWQgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZCA9XG4gICAgfCBudWxsXG4gICAgfCB2b2lkXG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgQm9vbGVhblxuICAgIHwgTnVtYmVyXG4gICAgfCBTdHJpbmdcbiAgICB8IERhdGVcbiAgICB8IFJlZ0V4cFxuICAgIHwgQXJyYXlCdWZmZXJcbiAgICB8ICRBcnJheUJ1ZmZlclZpZXdcbiAgICB8IEltYWdlRGF0YVxuICAgIHwgQXJyYXk8U2VyaWFsaXplZD5cbiAgICB8IFNlcmlhbGl6ZWRPYmplY3Q7XG5cbnR5cGUgUmVnaXN0cnkgPSB7XG4gICAgW186IHN0cmluZ106IHtcbiAgICAgICAga2xhc3M6IENsYXNzPGFueT4sXG4gICAgICAgIG9taXQ6ICRSZWFkT25seUFycmF5PHN0cmluZz4sXG4gICAgICAgIHNoYWxsb3c6ICRSZWFkT25seUFycmF5PHN0cmluZz5cbiAgICB9XG59O1xuXG50eXBlIFJlZ2lzdGVyT3B0aW9uczxUPiA9IHtcbiAgICBvbWl0PzogJFJlYWRPbmx5QXJyYXk8JEtleXM8VD4+LFxuICAgIHNoYWxsb3c/OiAkUmVhZE9ubHlBcnJheTwkS2V5czxUPj5cbn1cblxuY29uc3QgcmVnaXN0cnk6IFJlZ2lzdHJ5ID0ge307XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGdpdmVuIGNsYXNzIGFzIHNlcmlhbGl6YWJsZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMub21pdCBMaXN0IG9mIHByb3BlcnRpZXMgdG8gb21pdCBmcm9tIHNlcmlhbGl6YXRpb24gKGUuZy4sIGNhY2hlZC9jb21wdXRlZCBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIG9wdGlvbnMuc2hhbGxvdyBMaXN0IG9mIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCBieSBhIHNpbXBsZSBzaGFsbG93IGNvcHksIHJhdGhlciB0aGFuIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gc2VyaWFsaXplKCkuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyPFQ6IGFueT4obmFtZTogc3RyaW5nLCBrbGFzczogQ2xhc3M8VD4sIG9wdGlvbnM6IFJlZ2lzdGVyT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgYXNzZXJ0KCFyZWdpc3RyeVtuYW1lXSwgYCR7bmFtZX0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHk6IGFueSkoa2xhc3MsICdfY2xhc3NSZWdpc3RyeUtleScsIHtcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHdyaXRlYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICByZWdpc3RyeVtuYW1lXSA9IHtcbiAgICAgICAga2xhc3MsXG4gICAgICAgIG9taXQ6IG9wdGlvbnMub21pdCB8fCBbXSxcbiAgICAgICAgc2hhbGxvdzogb3B0aW9ucy5zaGFsbG93IHx8IFtdXG4gICAgfTtcbn1cblxucmVnaXN0ZXIoJ09iamVjdCcsIE9iamVjdCk7XG5cbnR5cGUgU2VyaWFsaXplZEdyaWQgPSB7IGJ1ZmZlcjogQXJyYXlCdWZmZXIgfTtcblxuR3JpZC5zZXJpYWxpemUgPSBmdW5jdGlvbiBzZXJpYWxpemUoZ3JpZDogR3JpZCwgdHJhbnNmZXJhYmxlcz86IEFycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkR3JpZCB7XG4gICAgY29uc3QgYnVmZmVyID0gZ3JpZC50b0FycmF5QnVmZmVyKCk7XG4gICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiB7YnVmZmVyfTtcbn07XG5cbkdyaWQuZGVzZXJpYWxpemUgPSBmdW5jdGlvbiBkZXNlcmlhbGl6ZShzZXJpYWxpemVkOiBTZXJpYWxpemVkR3JpZCk6IEdyaWQge1xuICAgIHJldHVybiBuZXcgR3JpZChzZXJpYWxpemVkLmJ1ZmZlcik7XG59O1xucmVnaXN0ZXIoJ0dyaWQnLCBHcmlkKTtcblxucmVnaXN0ZXIoJ0NvbG9yJywgQ29sb3IpO1xucmVnaXN0ZXIoJ0Vycm9yJywgRXJyb3IpO1xucmVnaXN0ZXIoJ1Jlc29sdmVkSW1hZ2UnLCBSZXNvbHZlZEltYWdlKTtcblxucmVnaXN0ZXIoJ1N0eWxlUHJvcGVydHlGdW5jdGlvbicsIFN0eWxlUHJvcGVydHlGdW5jdGlvbik7XG5yZWdpc3RlcignU3R5bGVFeHByZXNzaW9uJywgU3R5bGVFeHByZXNzaW9uLCB7b21pdDogWydfZXZhbHVhdG9yJ119KTtcblxucmVnaXN0ZXIoJ1pvb21EZXBlbmRlbnRFeHByZXNzaW9uJywgWm9vbURlcGVuZGVudEV4cHJlc3Npb24pO1xucmVnaXN0ZXIoJ1pvb21Db25zdGFudEV4cHJlc3Npb24nLCBab29tQ29uc3RhbnRFeHByZXNzaW9uKTtcbnJlZ2lzdGVyKCdDb21wb3VuZEV4cHJlc3Npb24nLCBDb21wb3VuZEV4cHJlc3Npb24sIHtvbWl0OiBbJ19ldmFsdWF0ZSddfSk7XG5mb3IgKGNvbnN0IG5hbWUgaW4gZXhwcmVzc2lvbnMpIHtcbiAgICBpZiAoKGV4cHJlc3Npb25zW25hbWVdOiBhbnkpLl9jbGFzc1JlZ2lzdHJ5S2V5KSBjb250aW51ZTtcbiAgICByZWdpc3RlcihgRXhwcmVzc2lvbl8ke25hbWV9YCwgZXhwcmVzc2lvbnNbbmFtZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICh2YWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInKSk7XG59XG5cbmZ1bmN0aW9uIGlzSW1hZ2VCaXRtYXAodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1hZ2VCaXRtYXAgJiZcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBnaXZlbiBvYmplY3QgZm9yIHRyYW5zZmVyIHRvIG9yIGZyb20gYSB3ZWIgd29ya2VyLlxuICpcbiAqIEZvciBub24tYnVpbHRpbiB0eXBlcywgcmVjdXJzaXZlbHkgc2VyaWFsaXplIGVhY2ggcHJvcGVydHkgKHBvc3NpYmx5XG4gKiBvbWl0dGluZyBjZXJ0YWluIHByb3BlcnRpZXMgLSBzZWUgcmVnaXN0ZXIoKSksIGFuZCBwYWNrYWdlIHRoZSByZXN1bHQgYWxvbmdcbiAqIHdpdGggdGhlIGNvbnN0cnVjdG9yJ3MgYG5hbWVgIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGNvbnN0cnVjdG9yIGNhbiBiZVxuICogbG9va2VkIHVwIGluIGBkZXNlcmlhbGl6ZSgpYC5cbiAqXG4gKiBJZiBhIGB0cmFuc2ZlcmFibGVzYCBhcnJheSBpcyBwcm92aWRlZCwgYWRkIGFueSB0cmFuc2ZlcmFibGUgb2JqZWN0cyAoaS5lLixcbiAqIGFueSBBcnJheUJ1ZmZlcnMgb3IgQXJyYXlCdWZmZXIgdmlld3MpIHRvIHRoZSBsaXN0LiAoSWYgYSBjb3B5IGlzIG5lZWRlZCxcbiAqIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGUgY2xpZW50IGNvZGUsIGJlZm9yZSB1c2luZyBzZXJpYWxpemUoKS4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShpbnB1dDogbWl4ZWQsIHRyYW5zZmVyYWJsZXM6ID9BcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZCB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIGlucHV0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgQm9vbGVhbiB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIE51bWJlciB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5QnVmZmVyKGlucHV0KSB8fCBpc0ltYWdlQml0bWFwKGlucHV0KSkge1xuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKCgoaW5wdXQ6IGFueSk6IEFycmF5QnVmZmVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IHZpZXc6ICRBcnJheUJ1ZmZlclZpZXcgPSAoaW5wdXQ6IGFueSk7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2godmlldy5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3O1xuICAgIH1cblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEltYWdlRGF0YSkge1xuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGlucHV0LmRhdGEuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IEFycmF5PFNlcmlhbGl6ZWQ+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dCkge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlcmlhbGl6ZShpdGVtLCB0cmFuc2ZlcmFibGVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3Qga2xhc3MgPSAoaW5wdXQuY29uc3RydWN0b3I6IGFueSk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrbGFzcy5fY2xhc3NSZWdpc3RyeUtleTtcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHJlZ2lzdHJ5W25hbWVdKTtcblxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBTZXJpYWxpemVkT2JqZWN0ID0ga2xhc3Muc2VyaWFsaXplID9cbiAgICAgICAgICAgIC8vIChUZW1wb3Jhcnkgd29ya2Fyb3VuZCkgYWxsb3cgYSBjbGFzcyB0byBwcm92aWRlIHN0YXRpY1xuICAgICAgICAgICAgLy8gYHNlcmlhbGl6ZSgpYCBhbmQgYGRlc2VyaWFsaXplKClgIG1ldGhvZHMgdG8gYnlwYXNzIHRoZSBnZW5lcmljXG4gICAgICAgICAgICAvLyBhcHByb2FjaC5cbiAgICAgICAgICAgIC8vIFRoaXMgdGVtcG9yYXJ5IHdvcmthcm91bmQgbGV0cyB1cyB1c2UgdGhlIGdlbmVyaWMgc2VyaWFsaXphdGlvblxuICAgICAgICAgICAgLy8gYXBwcm9hY2ggZm9yIG9iamVjdHMgd2hvc2UgbWVtYmVycyBpbmNsdWRlIGluc3RhbmNlcyBvZiBkeW5hbWljXG4gICAgICAgICAgICAvLyBTdHJ1Y3RBcnJheSB0eXBlcy4gT25jZSB3ZSByZWZhY3RvciBTdHJ1Y3RBcnJheSB0byBiZSBzdGF0aWMsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoaXMgY29tcGxleGl0eS5cbiAgICAgICAgICAgIChrbGFzcy5zZXJpYWxpemUoaW5wdXQsIHRyYW5zZmVyYWJsZXMpOiBTZXJpYWxpemVkT2JqZWN0KSA6IHt9O1xuXG4gICAgICAgIGlmICgha2xhc3Muc2VyaWFsaXplKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIGFueSBjYXN0IGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTM5M1xuICAgICAgICAgICAgICAgIGlmICghKGlucHV0OiBhbnkpLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RyeVtuYW1lXS5vbWl0LmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IChpbnB1dDogYW55KVtrZXldO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHJlZ2lzdHJ5W25hbWVdLnNoYWxsb3cuaW5kZXhPZihrZXkpID49IDAgP1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA6XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZShwcm9wZXJ0eSwgdHJhbnNmZXJhYmxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMubWVzc2FnZSA9IGlucHV0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgc3RhdGljYWxseSBzZXJpYWxpemVkIG9iamVjdCBzdXJ2aXZlcyB0cmFuc2ZlciBvZiAkbmFtZSBwcm9wZXJ0eVxuICAgICAgICAgICAgYXNzZXJ0KCF0cmFuc2ZlcmFibGVzIHx8IHByb3BlcnRpZXMgIT09IHRyYW5zZmVyYWJsZXNbdHJhbnNmZXJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy4kbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCckbmFtZSBwcm9wZXJ0eSBpcyByZXNlcnZlZCBmb3Igd29ya2VyIHNlcmlhbGl6YXRpb24gbG9naWMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLiRuYW1lID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICR7dHlwZW9mIGlucHV0fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoaW5wdXQ6IFNlcmlhbGl6ZWQpOiBtaXhlZCB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIGlucHV0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgQm9vbGVhbiB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIE51bWJlciB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBSZWdFeHAgfHxcbiAgICAgICAgaXNBcnJheUJ1ZmZlcihpbnB1dCkgfHxcbiAgICAgICAgaXNJbWFnZUJpdG1hcChpbnB1dCkgfHxcbiAgICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEltYWdlRGF0YSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoZGVzZXJpYWxpemUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAoaW5wdXQ6IGFueSkuJG5hbWUgfHwgJ09iamVjdCc7XG5cbiAgICAgICAgY29uc3Qge2tsYXNzfSA9IHJlZ2lzdHJ5W25hbWVdO1xuICAgICAgICBpZiAoIWtsYXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAke25hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2xhc3MuZGVzZXJpYWxpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAoa2xhc3MuZGVzZXJpYWxpemU6IHR5cGVvZiBkZXNlcmlhbGl6ZSkoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShrbGFzcy5wcm90b3R5cGUpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJyRuYW1lJykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChpbnB1dDogU2VyaWFsaXplZE9iamVjdClba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gcmVnaXN0cnlbbmFtZV0uc2hhbGxvdy5pbmRleE9mKGtleSkgPj0gMCA/IHZhbHVlIDogZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICR7dHlwZW9mIGlucHV0fWApO1xufVxuIiwiLy8gQGZsb3dcblxuY2xhc3MgWm9vbUhpc3Rvcnkge1xuICAgIGxhc3Rab29tOiBudW1iZXI7XG4gICAgbGFzdEZsb29yWm9vbTogbnVtYmVyO1xuICAgIGxhc3RJbnRlZ2VyWm9vbTogbnVtYmVyO1xuICAgIGxhc3RJbnRlZ2VyWm9vbVRpbWU6IG51bWJlcjtcbiAgICBmaXJzdDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZpcnN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGUoejogbnVtYmVyLCBub3c6IG51bWJlcikge1xuICAgICAgICBjb25zdCBmbG9vclogPSBNYXRoLmZsb29yKHopO1xuXG4gICAgICAgIGlmICh0aGlzLmZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmxhc3Rab29tID0gejtcbiAgICAgICAgICAgIHRoaXMubGFzdEZsb29yWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdEZsb29yWm9vbSA+IGZsb29yWikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclogKyAxO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdEZsb29yWm9vbSA8IGZsb29yWikge1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSBub3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeiAhPT0gdGhpcy5sYXN0Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0Wm9vbSA9IHo7XG4gICAgICAgICAgICB0aGlzLmxhc3RGbG9vclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFpvb21IaXN0b3J5O1xuIiwiLy8gQGZsb3dcblxuLy8gVGhlIGZvbGxvd2luZyB0YWJsZSBjb21lcyBmcm9tIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8xMi4wLjAvdWNkL0Jsb2Nrcy50eHQ+LlxuLy8gS2VlcCBpdCBzeW5jaHJvbml6ZWQgd2l0aCA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvQmxvY2tzLnR4dD4uXG5cbnR5cGUgVW5pY29kZUJsb2NrTG9va3VwID0ge1trZXk6IHN0cmluZ106IChjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59O1xuXG5jb25zdCB1bmljb2RlQmxvY2tMb29rdXA6IFVuaWNvZGVCbG9ja0xvb2t1cCA9IHtcbiAgICAvLyAnQmFzaWMgTGF0aW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDAwMDAgJiYgY2hhciA8PSAweDAwN0YsXG4gICAgJ0xhdGluLTEgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDA4MCAmJiBjaGFyIDw9IDB4MDBGRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDEwMCAmJiBjaGFyIDw9IDB4MDE3RixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MDE4MCAmJiBjaGFyIDw9IDB4MDI0RixcbiAgICAvLyAnSVBBIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAyNTAgJiYgY2hhciA8PSAweDAyQUYsXG4gICAgLy8gJ1NwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDJCMCAmJiBjaGFyIDw9IDB4MDJGRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMzAwICYmIGNoYXIgPD0gMHgwMzZGLFxuICAgIC8vICdHcmVlayBhbmQgQ29wdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMzcwICYmIGNoYXIgPD0gMHgwM0ZGLFxuICAgIC8vICdDeXJpbGxpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDQwMCAmJiBjaGFyIDw9IDB4MDRGRixcbiAgICAvLyAnQ3lyaWxsaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDUwMCAmJiBjaGFyIDw9IDB4MDUyRixcbiAgICAvLyAnQXJtZW5pYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDA1MzAgJiYgY2hhciA8PSAweDA1OEYsXG4gICAgLy8nSGVicmV3JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTkwICYmIGNoYXIgPD0gMHgwNUZGLFxuICAgICdBcmFiaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA2MDAgJiYgY2hhciA8PSAweDA2RkYsXG4gICAgLy8nU3lyaWFjJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzAwICYmIGNoYXIgPD0gMHgwNzRGLFxuICAgICdBcmFiaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDc1MCAmJiBjaGFyIDw9IDB4MDc3RixcbiAgICAvLyAnVGhhYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzgwICYmIGNoYXIgPD0gMHgwN0JGLFxuICAgIC8vICdOS28nOiAoY2hhcikgPT4gY2hhciA+PSAweDA3QzAgJiYgY2hhciA8PSAweDA3RkYsXG4gICAgLy8gJ1NhbWFyaXRhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDgwMCAmJiBjaGFyIDw9IDB4MDgzRixcbiAgICAvLyAnTWFuZGFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDg0MCAmJiBjaGFyIDw9IDB4MDg1RixcbiAgICAvLyAnU3lyaWFjIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4NjAgJiYgY2hhciA8PSAweDA4NkYsXG4gICAgJ0FyYWJpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOEEwICYmIGNoYXIgPD0gMHgwOEZGLFxuICAgIC8vICdEZXZhbmFnYXJpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOTAwICYmIGNoYXIgPD0gMHgwOTdGLFxuICAgIC8vICdCZW5nYWxpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwOTgwICYmIGNoYXIgPD0gMHgwOUZGLFxuICAgIC8vICdHdXJtdWtoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEEwMCAmJiBjaGFyIDw9IDB4MEE3RixcbiAgICAvLyAnR3VqYXJhdGknOiAoY2hhcikgPT4gY2hhciA+PSAweDBBODAgJiYgY2hhciA8PSAweDBBRkYsXG4gICAgLy8gJ09yaXlhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQjAwICYmIGNoYXIgPD0gMHgwQjdGLFxuICAgIC8vICdUYW1pbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MEI4MCAmJiBjaGFyIDw9IDB4MEJGRixcbiAgICAvLyAnVGVsdWd1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQzAwICYmIGNoYXIgPD0gMHgwQzdGLFxuICAgIC8vICdLYW5uYWRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQzgwICYmIGNoYXIgPD0gMHgwQ0ZGLFxuICAgIC8vICdNYWxheWFsYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDBEMDAgJiYgY2hhciA8PSAweDBEN0YsXG4gICAgLy8gJ1NpbmhhbGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBEODAgJiYgY2hhciA8PSAweDBERkYsXG4gICAgLy8gJ1RoYWknOiAoY2hhcikgPT4gY2hhciA+PSAweDBFMDAgJiYgY2hhciA8PSAweDBFN0YsXG4gICAgLy8gJ0xhbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MEU4MCAmJiBjaGFyIDw9IDB4MEVGRixcbiAgICAvLyAnVGliZXRhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MEYwMCAmJiBjaGFyIDw9IDB4MEZGRixcbiAgICAvLyAnTXlhbm1hcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMCAmJiBjaGFyIDw9IDB4MTA5RixcbiAgICAvLyAnR2VvcmdpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTAgJiYgY2hhciA8PSAweDEwRkYsXG4gICAgJ0hhbmd1bCBKYW1vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTAwICYmIGNoYXIgPD0gMHgxMUZGLFxuICAgIC8vICdFdGhpb3BpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTIwMCAmJiBjaGFyIDw9IDB4MTM3RixcbiAgICAvLyAnRXRoaW9waWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTM4MCAmJiBjaGFyIDw9IDB4MTM5RixcbiAgICAvLyAnQ2hlcm9rZWUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzQTAgJiYgY2hhciA8PSAweDEzRkYsXG4gICAgJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDE0MDAgJiYgY2hhciA8PSAweDE2N0YsXG4gICAgLy8gJ09naGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNjgwICYmIGNoYXIgPD0gMHgxNjlGLFxuICAgIC8vICdSdW5pYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBMCAmJiBjaGFyIDw9IDB4MTZGRixcbiAgICAvLyAnVGFnYWxvZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcwMCAmJiBjaGFyIDw9IDB4MTcxRixcbiAgICAvLyAnSGFudW5vbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcyMCAmJiBjaGFyIDw9IDB4MTczRixcbiAgICAvLyAnQnVoaWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3NDAgJiYgY2hhciA8PSAweDE3NUYsXG4gICAgLy8gJ1RhZ2JhbndhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzYwICYmIGNoYXIgPD0gMHgxNzdGLFxuICAgICdLaG1lcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTc4MCAmJiBjaGFyIDw9IDB4MTdGRixcbiAgICAvLyAnTW9uZ29saWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxODAwICYmIGNoYXIgPD0gMHgxOEFGLFxuICAgICdVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOEIwICYmIGNoYXIgPD0gMHgxOEZGLFxuICAgIC8vICdMaW1idSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTkwMCAmJiBjaGFyIDw9IDB4MTk0RixcbiAgICAvLyAnVGFpIExlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTUwICYmIGNoYXIgPD0gMHgxOTdGLFxuICAgIC8vICdOZXcgVGFpIEx1ZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTk4MCAmJiBjaGFyIDw9IDB4MTlERixcbiAgICAvLyAnS2htZXIgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTlFMCAmJiBjaGFyIDw9IDB4MTlGRixcbiAgICAvLyAnQnVnaW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFBMDAgJiYgY2hhciA8PSAweDFBMUYsXG4gICAgLy8gJ1RhaSBUaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQTIwICYmIGNoYXIgPD0gMHgxQUFGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFBQjAgJiYgY2hhciA8PSAweDFBRkYsXG4gICAgLy8gJ0JhbGluZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjAwICYmIGNoYXIgPD0gMHgxQjdGLFxuICAgIC8vICdTdW5kYW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCODAgJiYgY2hhciA8PSAweDFCQkYsXG4gICAgLy8gJ0JhdGFrJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkMwICYmIGNoYXIgPD0gMHgxQkZGLFxuICAgIC8vICdMZXBjaGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDMDAgJiYgY2hhciA8PSAweDFDNEYsXG4gICAgLy8gJ09sIENoaWtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzUwICYmIGNoYXIgPD0gMHgxQzdGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzgwICYmIGNoYXIgPD0gMHgxQzhGLFxuICAgIC8vICdHZW9yZ2lhbiBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM5MCAmJiBjaGFyIDw9IDB4MUNCRixcbiAgICAvLyAnU3VuZGFuZXNlIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDQzAgJiYgY2hhciA8PSAweDFDQ0YsXG4gICAgLy8gJ1ZlZGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDRDAgJiYgY2hhciA8PSAweDFDRkYsXG4gICAgLy8gJ1Bob25ldGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMDAgJiYgY2hhciA8PSAweDFEN0YsXG4gICAgLy8gJ1Bob25ldGljIEV4dGVuc2lvbnMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ4MCAmJiBjaGFyIDw9IDB4MURCRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEQzAgJiYgY2hhciA8PSAweDFERkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMDAgJiYgY2hhciA8PSAweDFFRkYsXG4gICAgLy8gJ0dyZWVrIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAwICYmIGNoYXIgPD0gMHgxRkZGLFxuICAgICdHZW5lcmFsIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDAwICYmIGNoYXIgPD0gMHgyMDZGLFxuICAgIC8vICdTdXBlcnNjcmlwdHMgYW5kIFN1YnNjcmlwdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwNzAgJiYgY2hhciA8PSAweDIwOUYsXG4gICAgLy8gJ0N1cnJlbmN5IFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwQTAgJiYgY2hhciA8PSAweDIwQ0YsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBmb3IgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjBEMCAmJiBjaGFyIDw9IDB4MjBGRixcbiAgICAnTGV0dGVybGlrZSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTAwICYmIGNoYXIgPD0gMHgyMTRGLFxuICAgICdOdW1iZXIgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxNTAgJiYgY2hhciA8PSAweDIxOEYsXG4gICAgLy8gJ0Fycm93cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjE5MCAmJiBjaGFyIDw9IDB4MjFGRixcbiAgICAvLyAnTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjIwMCAmJiBjaGFyIDw9IDB4MjJGRixcbiAgICAnTWlzY2VsbGFuZW91cyBUZWNobmljYWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDIzMDAgJiYgY2hhciA8PSAweDIzRkYsXG4gICAgJ0NvbnRyb2wgUGljdHVyZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI0MDAgJiYgY2hhciA8PSAweDI0M0YsXG4gICAgJ09wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDQwICYmIGNoYXIgPD0gMHgyNDVGLFxuICAgICdFbmNsb3NlZCBBbHBoYW51bWVyaWNzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDYwICYmIGNoYXIgPD0gMHgyNEZGLFxuICAgIC8vICdCb3ggRHJhd2luZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjUwMCAmJiBjaGFyIDw9IDB4MjU3RixcbiAgICAvLyAnQmxvY2sgRWxlbWVudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1ODAgJiYgY2hhciA8PSAweDI1OUYsXG4gICAgJ0dlb21ldHJpYyBTaGFwZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1QTAgJiYgY2hhciA8PSAweDI1RkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjYwMCAmJiBjaGFyIDw9IDB4MjZGRixcbiAgICAvLyAnRGluZ2JhdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3MDAgJiYgY2hhciA8PSAweDI3QkYsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgTWF0aGVtYXRpY2FsIFN5bWJvbHMtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MjdDMCAmJiBjaGFyIDw9IDB4MjdFRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyN0YwICYmIGNoYXIgPD0gMHgyN0ZGLFxuICAgIC8vICdCcmFpbGxlIFBhdHRlcm5zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyODAwICYmIGNoYXIgPD0gMHgyOEZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDI5MDAgJiYgY2hhciA8PSAweDI5N0YsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgTWF0aGVtYXRpY2FsIFN5bWJvbHMtQic6IChjaGFyKSA9PiBjaGFyID49IDB4Mjk4MCAmJiBjaGFyIDw9IDB4MjlGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJBMDAgJiYgY2hhciA8PSAweDJBRkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjAwICYmIGNoYXIgPD0gMHgyQkZGLFxuICAgIC8vICdHbGFnb2xpdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzAwICYmIGNoYXIgPD0gMHgyQzVGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzYwICYmIGNoYXIgPD0gMHgyQzdGLFxuICAgIC8vICdDb3B0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDODAgJiYgY2hhciA8PSAweDJDRkYsXG4gICAgLy8gJ0dlb3JnaWFuIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEMDAgJiYgY2hhciA8PSAweDJEMkYsXG4gICAgLy8gJ1RpZmluYWdoJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDMwICYmIGNoYXIgPD0gMHgyRDdGLFxuICAgIC8vICdFdGhpb3BpYyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQ4MCAmJiBjaGFyIDw9IDB4MkRERixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MkRFMCAmJiBjaGFyIDw9IDB4MkRGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRTAwICYmIGNoYXIgPD0gMHgyRTdGLFxuICAgICdDSksgUmFkaWNhbHMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkU4MCAmJiBjaGFyIDw9IDB4MkVGRixcbiAgICAnS2FuZ3hpIFJhZGljYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRjAwICYmIGNoYXIgPD0gMHgyRkRGLFxuICAgICdJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRkYwICYmIGNoYXIgPD0gMHgyRkZGLFxuICAgICdDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDMwMDAgJiYgY2hhciA8PSAweDMwM0YsXG4gICAgJ0hpcmFnYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMDQwICYmIGNoYXIgPD0gMHgzMDlGLFxuICAgICdLYXRha2FuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzBBMCAmJiBjaGFyIDw9IDB4MzBGRixcbiAgICAnQm9wb21vZm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxMDAgJiYgY2hhciA8PSAweDMxMkYsXG4gICAgJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxMzAgJiYgY2hhciA8PSAweDMxOEYsXG4gICAgJ0thbmJ1bic6IChjaGFyKSA9PiBjaGFyID49IDB4MzE5MCAmJiBjaGFyIDw9IDB4MzE5RixcbiAgICAnQm9wb21vZm8gRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxQTAgJiYgY2hhciA8PSAweDMxQkYsXG4gICAgJ0NKSyBTdHJva2VzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUMwICYmIGNoYXIgPD0gMHgzMUVGLFxuICAgICdLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUYwICYmIGNoYXIgPD0gMHgzMUZGLFxuICAgICdFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMjAwICYmIGNoYXIgPD0gMHgzMkZGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzMwMCAmJiBjaGFyIDw9IDB4MzNGRixcbiAgICAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzQwMCAmJiBjaGFyIDw9IDB4NERCRixcbiAgICAnWWlqaW5nIEhleGFncmFtIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDREQzAgJiYgY2hhciA8PSAweDRERkYsXG4gICAgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDRFMDAgJiYgY2hhciA8PSAweDlGRkYsXG4gICAgJ1lpIFN5bGxhYmxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTAwMCAmJiBjaGFyIDw9IDB4QTQ4RixcbiAgICAnWWkgUmFkaWNhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE0OTAgJiYgY2hhciA8PSAweEE0Q0YsXG4gICAgLy8gJ0xpc3UnOiAoY2hhcikgPT4gY2hhciA+PSAweEE0RDAgJiYgY2hhciA8PSAweEE0RkYsXG4gICAgLy8gJ1ZhaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTUwMCAmJiBjaGFyIDw9IDB4QTYzRixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4QTY0MCAmJiBjaGFyIDw9IDB4QTY5RixcbiAgICAvLyAnQmFtdW0nOiAoY2hhcikgPT4gY2hhciA+PSAweEE2QTAgJiYgY2hhciA8PSAweEE2RkYsXG4gICAgLy8gJ01vZGlmaWVyIFRvbmUgTGV0dGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTcwMCAmJiBjaGFyIDw9IDB4QTcxRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtRCc6IChjaGFyKSA9PiBjaGFyID49IDB4QTcyMCAmJiBjaGFyIDw9IDB4QTdGRixcbiAgICAvLyAnU3lsb3RpIE5hZ3JpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODAwICYmIGNoYXIgPD0gMHhBODJGLFxuICAgIC8vICdDb21tb24gSW5kaWMgTnVtYmVyIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODMwICYmIGNoYXIgPD0gMHhBODNGLFxuICAgIC8vICdQaGFncy1wYSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTg0MCAmJiBjaGFyIDw9IDB4QTg3RixcbiAgICAvLyAnU2F1cmFzaHRyYSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTg4MCAmJiBjaGFyIDw9IDB4QThERixcbiAgICAvLyAnRGV2YW5hZ2FyaSBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4QThFMCAmJiBjaGFyIDw9IDB4QThGRixcbiAgICAvLyAnS2F5YWggTGknOiAoY2hhcikgPT4gY2hhciA+PSAweEE5MDAgJiYgY2hhciA8PSAweEE5MkYsXG4gICAgLy8gJ1JlamFuZyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTkzMCAmJiBjaGFyIDw9IDB4QTk1RixcbiAgICAnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTk2MCAmJiBjaGFyIDw9IDB4QTk3RixcbiAgICAvLyAnSmF2YW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5ODAgJiYgY2hhciA8PSAweEE5REYsXG4gICAgLy8gJ015YW5tYXIgRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4QTlFMCAmJiBjaGFyIDw9IDB4QTlGRixcbiAgICAvLyAnQ2hhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUEwMCAmJiBjaGFyIDw9IDB4QUE1RixcbiAgICAvLyAnTXlhbm1hciBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTYwICYmIGNoYXIgPD0gMHhBQTdGLFxuICAgIC8vICdUYWkgVmlldCc6IChjaGFyKSA9PiBjaGFyID49IDB4QUE4MCAmJiBjaGFyIDw9IDB4QUFERixcbiAgICAvLyAnTWVldGVpIE1heWVrIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBRTAgJiYgY2hhciA8PSAweEFBRkYsXG4gICAgLy8gJ0V0aGlvcGljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCMDAgJiYgY2hhciA8PSAweEFCMkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUUnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCMzAgJiYgY2hhciA8PSAweEFCNkYsXG4gICAgLy8gJ0NoZXJva2VlIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCNzAgJiYgY2hhciA8PSAweEFCQkYsXG4gICAgLy8gJ01lZXRlaSBNYXllayc6IChjaGFyKSA9PiBjaGFyID49IDB4QUJDMCAmJiBjaGFyIDw9IDB4QUJGRixcbiAgICAnSGFuZ3VsIFN5bGxhYmxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QUMwMCAmJiBjaGFyIDw9IDB4RDdBRixcbiAgICAnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQic6IChjaGFyKSA9PiBjaGFyID49IDB4RDdCMCAmJiBjaGFyIDw9IDB4RDdGRixcbiAgICAvLyAnSGlnaCBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEODAwICYmIGNoYXIgPD0gMHhEQjdGLFxuICAgIC8vICdIaWdoIFByaXZhdGUgVXNlIFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweERCODAgJiYgY2hhciA8PSAweERCRkYsXG4gICAgLy8gJ0xvdyBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEQzAwICYmIGNoYXIgPD0gMHhERkZGLFxuICAgICdQcml2YXRlIFVzZSBBcmVhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDAwICYmIGNoYXIgPD0gMHhGOEZGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGOTAwICYmIGNoYXIgPD0gMHhGQUZGLFxuICAgIC8vICdBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkIwMCAmJiBjaGFyIDw9IDB4RkI0RixcbiAgICAnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGQjUwICYmIGNoYXIgPD0gMHhGREZGLFxuICAgIC8vICdWYXJpYXRpb24gU2VsZWN0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTAwICYmIGNoYXIgPD0gMHhGRTBGLFxuICAgICdWZXJ0aWNhbCBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUxMCAmJiBjaGFyIDw9IDB4RkUxRixcbiAgICAvLyAnQ29tYmluaW5nIEhhbGYgTWFya3MnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMjAgJiYgY2hhciA8PSAweEZFMkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTMwICYmIGNoYXIgPD0gMHhGRTRGLFxuICAgICdTbWFsbCBGb3JtIFZhcmlhbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTUwICYmIGNoYXIgPD0gMHhGRTZGLFxuICAgICdBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEZFNzAgJiYgY2hhciA8PSAweEZFRkYsXG4gICAgJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRjAwICYmIGNoYXIgPD0gMHhGRkVGXG4gICAgLy8gJ1NwZWNpYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRkYwICYmIGNoYXIgPD0gMHhGRkZGLFxuICAgIC8vICdMaW5lYXIgQiBTeWxsYWJhcnknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAwICYmIGNoYXIgPD0gMHgxMDA3RixcbiAgICAvLyAnTGluZWFyIEIgSWRlb2dyYW1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDA4MCAmJiBjaGFyIDw9IDB4MTAwRkYsXG4gICAgLy8gJ0FlZ2VhbiBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDEwMCAmJiBjaGFyIDw9IDB4MTAxM0YsXG4gICAgLy8gJ0FuY2llbnQgR3JlZWsgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxNDAgJiYgY2hhciA8PSAweDEwMThGLFxuICAgIC8vICdBbmNpZW50IFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTkwICYmIGNoYXIgPD0gMHgxMDFDRixcbiAgICAvLyAnUGhhaXN0b3MgRGlzYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxRDAgJiYgY2hhciA8PSAweDEwMUZGLFxuICAgIC8vICdMeWNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMjgwICYmIGNoYXIgPD0gMHgxMDI5RixcbiAgICAvLyAnQ2FyaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDJBMCAmJiBjaGFyIDw9IDB4MTAyREYsXG4gICAgLy8gJ0NvcHRpYyBFcGFjdCBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDJFMCAmJiBjaGFyIDw9IDB4MTAyRkYsXG4gICAgLy8gJ09sZCBJdGFsaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzAwICYmIGNoYXIgPD0gMHgxMDMyRixcbiAgICAvLyAnR290aGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDMzMCAmJiBjaGFyIDw9IDB4MTAzNEYsXG4gICAgLy8gJ09sZCBQZXJtaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzUwICYmIGNoYXIgPD0gMHgxMDM3RixcbiAgICAvLyAnVWdhcml0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzgwICYmIGNoYXIgPD0gMHgxMDM5RixcbiAgICAvLyAnT2xkIFBlcnNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwM0EwICYmIGNoYXIgPD0gMHgxMDNERixcbiAgICAvLyAnRGVzZXJldCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0MDAgJiYgY2hhciA8PSAweDEwNDRGLFxuICAgIC8vICdTaGF2aWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQ1MCAmJiBjaGFyIDw9IDB4MTA0N0YsXG4gICAgLy8gJ09zbWFueWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDgwICYmIGNoYXIgPD0gMHgxMDRBRixcbiAgICAvLyAnT3NhZ2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNEIwICYmIGNoYXIgPD0gMHgxMDRGRixcbiAgICAvLyAnRWxiYXNhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA1MDAgJiYgY2hhciA8PSAweDEwNTJGLFxuICAgIC8vICdDYXVjYXNpYW4gQWxiYW5pYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNTMwICYmIGNoYXIgPD0gMHgxMDU2RixcbiAgICAvLyAnTGluZWFyIEEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNjAwICYmIGNoYXIgPD0gMHgxMDc3RixcbiAgICAvLyAnQ3lwcmlvdCBTeWxsYWJhcnknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODAwICYmIGNoYXIgPD0gMHgxMDgzRixcbiAgICAvLyAnSW1wZXJpYWwgQXJhbWFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4NDAgJiYgY2hhciA8PSAweDEwODVGLFxuICAgIC8vICdQYWxteXJlbmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODYwICYmIGNoYXIgPD0gMHgxMDg3RixcbiAgICAvLyAnTmFiYXRhZWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg4MCAmJiBjaGFyIDw9IDB4MTA4QUYsXG4gICAgLy8gJ0hhdHJhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4RTAgJiYgY2hhciA8PSAweDEwOEZGLFxuICAgIC8vICdQaG9lbmljaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDkwMCAmJiBjaGFyIDw9IDB4MTA5MUYsXG4gICAgLy8gJ0x5ZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5MjAgJiYgY2hhciA8PSAweDEwOTNGLFxuICAgIC8vICdNZXJvaXRpYyBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5ODAgJiYgY2hhciA8PSAweDEwOTlGLFxuICAgIC8vICdNZXJvaXRpYyBDdXJzaXZlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDlBMCAmJiBjaGFyIDw9IDB4MTA5RkYsXG4gICAgLy8gJ0toYXJvc2h0aGknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTAwICYmIGNoYXIgPD0gMHgxMEE1RixcbiAgICAvLyAnT2xkIFNvdXRoIEFyYWJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTYwICYmIGNoYXIgPD0gMHgxMEE3RixcbiAgICAvLyAnT2xkIE5vcnRoIEFyYWJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQTgwICYmIGNoYXIgPD0gMHgxMEE5RixcbiAgICAvLyAnTWFuaWNoYWVhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBQzAgJiYgY2hhciA8PSAweDEwQUZGLFxuICAgIC8vICdBdmVzdGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEIwMCAmJiBjaGFyIDw9IDB4MTBCM0YsXG4gICAgLy8gJ0luc2NyaXB0aW9uYWwgUGFydGhpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjQwICYmIGNoYXIgPD0gMHgxMEI1RixcbiAgICAvLyAnSW5zY3JpcHRpb25hbCBQYWhsYXZpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI2MCAmJiBjaGFyIDw9IDB4MTBCN0YsXG4gICAgLy8gJ1BzYWx0ZXIgUGFobGF2aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCODAgJiYgY2hhciA8PSAweDEwQkFGLFxuICAgIC8vICdPbGQgVHVya2ljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEMwMCAmJiBjaGFyIDw9IDB4MTBDNEYsXG4gICAgLy8gJ09sZCBIdW5nYXJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQzgwICYmIGNoYXIgPD0gMHgxMENGRixcbiAgICAvLyAnSGFuaWZpIFJvaGluZ3lhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEQwMCAmJiBjaGFyIDw9IDB4MTBEM0YsXG4gICAgLy8gJ1J1bWkgTnVtZXJhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEU2MCAmJiBjaGFyIDw9IDB4MTBFN0YsXG4gICAgLy8gJ09sZCBTb2dkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEYwMCAmJiBjaGFyIDw9IDB4MTBGMkYsXG4gICAgLy8gJ1NvZ2RpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRjMwICYmIGNoYXIgPD0gMHgxMEY2RixcbiAgICAvLyAnRWx5bWFpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGRTAgJiYgY2hhciA8PSAweDEwRkZGLFxuICAgIC8vICdCcmFobWknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDAwICYmIGNoYXIgPD0gMHgxMTA3RixcbiAgICAvLyAnS2FpdGhpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTA4MCAmJiBjaGFyIDw9IDB4MTEwQ0YsXG4gICAgLy8gJ1NvcmEgU29tcGVuZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwRDAgJiYgY2hhciA8PSAweDExMEZGLFxuICAgIC8vICdDaGFrbWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTAwICYmIGNoYXIgPD0gMHgxMTE0RixcbiAgICAvLyAnTWFoYWphbmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTUwICYmIGNoYXIgPD0gMHgxMTE3RixcbiAgICAvLyAnU2hhcmFkYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExODAgJiYgY2hhciA8PSAweDExMURGLFxuICAgIC8vICdTaW5oYWxhIEFyY2hhaWMgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExRTAgJiYgY2hhciA8PSAweDExMUZGLFxuICAgIC8vICdLaG9qa2knOiAoY2hhcikgPT4gY2hhciA+PSAweDExMjAwICYmIGNoYXIgPD0gMHgxMTI0RixcbiAgICAvLyAnTXVsdGFuaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyODAgJiYgY2hhciA8PSAweDExMkFGLFxuICAgIC8vICdLaHVkYXdhZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMkIwICYmIGNoYXIgPD0gMHgxMTJGRixcbiAgICAvLyAnR3JhbnRoYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEzMDAgJiYgY2hhciA8PSAweDExMzdGLFxuICAgIC8vICdOZXdhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTQwMCAmJiBjaGFyIDw9IDB4MTE0N0YsXG4gICAgLy8gJ1Rpcmh1dGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNDgwICYmIGNoYXIgPD0gMHgxMTRERixcbiAgICAvLyAnU2lkZGhhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE1ODAgJiYgY2hhciA8PSAweDExNUZGLFxuICAgIC8vICdNb2RpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTYwMCAmJiBjaGFyIDw9IDB4MTE2NUYsXG4gICAgLy8gJ01vbmdvbGlhbiBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTY2MCAmJiBjaGFyIDw9IDB4MTE2N0YsXG4gICAgLy8gJ1Rha3JpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTY4MCAmJiBjaGFyIDw9IDB4MTE2Q0YsXG4gICAgLy8gJ0Fob20nOiAoY2hhcikgPT4gY2hhciA+PSAweDExNzAwICYmIGNoYXIgPD0gMHgxMTczRixcbiAgICAvLyAnRG9ncmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExODAwICYmIGNoYXIgPD0gMHgxMTg0RixcbiAgICAvLyAnV2FyYW5nIENpdGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExOEEwICYmIGNoYXIgPD0gMHgxMThGRixcbiAgICAvLyAnTmFuZGluYWdhcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExOUEwICYmIGNoYXIgPD0gMHgxMTlGRixcbiAgICAvLyAnWmFuYWJhemFyIFNxdWFyZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBMDAgJiYgY2hhciA8PSAweDExQTRGLFxuICAgIC8vICdTb3lvbWJvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUE1MCAmJiBjaGFyIDw9IDB4MTFBQUYsXG4gICAgLy8gJ1BhdSBDaW4gSGF1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUFDMCAmJiBjaGFyIDw9IDB4MTFBRkYsXG4gICAgLy8gJ0JoYWlrc3VraSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFDMDAgJiYgY2hhciA8PSAweDExQzZGLFxuICAgIC8vICdNYXJjaGVuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUM3MCAmJiBjaGFyIDw9IDB4MTFDQkYsXG4gICAgLy8gJ01hc2FyYW0gR29uZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExRDAwICYmIGNoYXIgPD0gMHgxMUQ1RixcbiAgICAvLyAnR3VuamFsYSBHb25kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFENjAgJiYgY2hhciA8PSAweDExREFGLFxuICAgIC8vICdNYWthc2FyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUVFMCAmJiBjaGFyIDw9IDB4MTFFRkYsXG4gICAgLy8gJ1RhbWlsIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDExRkMwICYmIGNoYXIgPD0gMHgxMUZGRixcbiAgICAvLyAnQ3VuZWlmb3JtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjAwMCAmJiBjaGFyIDw9IDB4MTIzRkYsXG4gICAgLy8gJ0N1bmVpZm9ybSBOdW1iZXJzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTI0MDAgJiYgY2hhciA8PSAweDEyNDdGLFxuICAgIC8vICdFYXJseSBEeW5hc3RpYyBDdW5laWZvcm0nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyNDgwICYmIGNoYXIgPD0gMHgxMjU0RixcbiAgICAvLyAnRWd5cHRpYW4gSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzMDAwICYmIGNoYXIgPD0gMHgxMzQyRixcbiAgICAvLyAnRWd5cHRpYW4gSGllcm9nbHlwaCBGb3JtYXQgQ29udHJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzNDMwICYmIGNoYXIgPD0gMHgxMzQzRixcbiAgICAvLyAnQW5hdG9saWFuIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNDQwMCAmJiBjaGFyIDw9IDB4MTQ2N0YsXG4gICAgLy8gJ0JhbXVtIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2ODAwICYmIGNoYXIgPD0gMHgxNkEzRixcbiAgICAvLyAnTXJvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkE0MCAmJiBjaGFyIDw9IDB4MTZBNkYsXG4gICAgLy8gJ0Jhc3NhIFZhaCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBRDAgJiYgY2hhciA8PSAweDE2QUZGLFxuICAgIC8vICdQYWhhd2ggSG1vbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QjAwICYmIGNoYXIgPD0gMHgxNkI4RixcbiAgICAvLyAnTWVkZWZhaWRyaW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RTQwICYmIGNoYXIgPD0gMHgxNkU5RixcbiAgICAvLyAnTWlhbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZGMDAgJiYgY2hhciA8PSAweDE2RjlGLFxuICAgIC8vICdJZGVvZ3JhcGhpYyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTZGRTAgJiYgY2hhciA8PSAweDE2RkZGLFxuICAgIC8vICdUYW5ndXQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MDAwICYmIGNoYXIgPD0gMHgxODdGRixcbiAgICAvLyAnVGFuZ3V0IENvbXBvbmVudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE4ODAwICYmIGNoYXIgPD0gMHgxOEFGRixcbiAgICAvLyAnS2FuYSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjAwMCAmJiBjaGFyIDw9IDB4MUIwRkYsXG4gICAgLy8gJ0thbmEgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxMDAgJiYgY2hhciA8PSAweDFCMTJGLFxuICAgIC8vICdTbWFsbCBLYW5hIEV4dGVuc2lvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxMzAgJiYgY2hhciA8PSAweDFCMTZGLFxuICAgIC8vICdOdXNodSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIxNzAgJiYgY2hhciA8PSAweDFCMkZGLFxuICAgIC8vICdEdXBsb3lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDMDAgJiYgY2hhciA8PSAweDFCQzlGLFxuICAgIC8vICdTaG9ydGhhbmQgRm9ybWF0IENvbnRyb2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkNBMCAmJiBjaGFyIDw9IDB4MUJDQUYsXG4gICAgLy8gJ0J5emFudGluZSBNdXNpY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMDAwICYmIGNoYXIgPD0gMHgxRDBGRixcbiAgICAvLyAnTXVzaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDEwMCAmJiBjaGFyIDw9IDB4MUQxRkYsXG4gICAgLy8gJ0FuY2llbnQgR3JlZWsgTXVzaWNhbCBOb3RhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MUQyMDAgJiYgY2hhciA8PSAweDFEMjRGLFxuICAgIC8vICdNYXlhbiBOdW1lcmFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQyRTAgJiYgY2hhciA8PSAweDFEMkZGLFxuICAgIC8vICdUYWkgWHVhbiBKaW5nIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMzAwICYmIGNoYXIgPD0gMHgxRDM1RixcbiAgICAvLyAnQ291bnRpbmcgUm9kIE51bWVyYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDM2MCAmJiBjaGFyIDw9IDB4MUQzN0YsXG4gICAgLy8gJ01hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ0MDAgJiYgY2hhciA8PSAweDFEN0ZGLFxuICAgIC8vICdTdXR0b24gU2lnbldyaXRpbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEODAwICYmIGNoYXIgPD0gMHgxREFBRixcbiAgICAvLyAnR2xhZ29saXRpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTAwMCAmJiBjaGFyIDw9IDB4MUUwMkYsXG4gICAgLy8gJ055aWFrZW5nIFB1YWNodWUgSG1vbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMTAwICYmIGNoYXIgPD0gMHgxRTE0RixcbiAgICAvLyAnV2FuY2hvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTJDMCAmJiBjaGFyIDw9IDB4MUUyRkYsXG4gICAgLy8gJ01lbmRlIEtpa2FrdWknOiAoY2hhcikgPT4gY2hhciA+PSAweDFFODAwICYmIGNoYXIgPD0gMHgxRThERixcbiAgICAvLyAnQWRsYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDFFOTAwICYmIGNoYXIgPD0gMHgxRTk1RixcbiAgICAvLyAnSW5kaWMgU2l5YXEgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVDNzAgJiYgY2hhciA8PSAweDFFQ0JGLFxuICAgIC8vICdPdHRvbWFuIFNpeWFxIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFRDAwICYmIGNoYXIgPD0gMHgxRUQ0RixcbiAgICAvLyAnQXJhYmljIE1hdGhlbWF0aWNhbCBBbHBoYWJldGljIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFRTAwICYmIGNoYXIgPD0gMHgxRUVGRixcbiAgICAvLyAnTWFoam9uZyBUaWxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMDAgJiYgY2hhciA8PSAweDFGMDJGLFxuICAgIC8vICdEb21pbm8gVGlsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDMwICYmIGNoYXIgPD0gMHgxRjA5RixcbiAgICAvLyAnUGxheWluZyBDYXJkcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwQTAgJiYgY2hhciA8PSAweDFGMEZGLFxuICAgIC8vICdFbmNsb3NlZCBBbHBoYW51bWVyaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYxMDAgJiYgY2hhciA8PSAweDFGMUZGLFxuICAgIC8vICdFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjIwMCAmJiBjaGFyIDw9IDB4MUYyRkYsXG4gICAgLy8gJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgUGljdG9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMzAwICYmIGNoYXIgPD0gMHgxRjVGRixcbiAgICAvLyAnRW1vdGljb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjYwMCAmJiBjaGFyIDw9IDB4MUY2NEYsXG4gICAgLy8gJ09ybmFtZW50YWwgRGluZ2JhdHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjUwICYmIGNoYXIgPD0gMHgxRjY3RixcbiAgICAvLyAnVHJhbnNwb3J0IGFuZCBNYXAgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2ODAgJiYgY2hhciA8PSAweDFGNkZGLFxuICAgIC8vICdBbGNoZW1pY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNzAwICYmIGNoYXIgPD0gMHgxRjc3RixcbiAgICAvLyAnR2VvbWV0cmljIFNoYXBlcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY3ODAgJiYgY2hhciA8PSAweDFGN0ZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGODAwICYmIGNoYXIgPD0gMHgxRjhGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIFN5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjkwMCAmJiBjaGFyIDw9IDB4MUY5RkYsXG4gICAgLy8gJ0NoZXNzIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGQTAwICYmIGNoYXIgPD0gMHgxRkE2RixcbiAgICAvLyAnU3ltYm9scyBhbmQgUGljdG9ncmFwaHMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUZBNzAgJiYgY2hhciA8PSAweDFGQUZGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDAwMCAmJiBjaGFyIDw9IDB4MkE2REYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJBNzAwICYmIGNoYXIgPD0gMHgyQjczRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkI3NDAgJiYgY2hhciA8PSAweDJCODFGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBFJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjgyMCAmJiBjaGFyIDw9IDB4MkNFQUYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEYnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDRUIwICYmIGNoYXIgPD0gMHgyRUJFRixcbiAgICAvLyAnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRjgwMCAmJiBjaGFyIDw9IDB4MkZBMUYsXG4gICAgLy8gJ1RhZ3MnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMDAwICYmIGNoYXIgPD0gMHhFMDA3RixcbiAgICAvLyAnVmFyaWF0aW9uIFNlbGVjdG9ycyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDEwMCAmJiBjaGFyIDw9IDB4RTAxRUYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhcnkgUHJpdmF0ZSBVc2UgQXJlYS1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGMDAwMCAmJiBjaGFyIDw9IDB4RkZGRkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhcnkgUHJpdmF0ZSBVc2UgQXJlYS1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwMDAgJiYgY2hhciA8PSAweDEwRkZGRixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVCbG9ja0xvb2t1cDtcbiIsIi8vIEBmbG93XG5cbi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cblxuaW1wb3J0IGlzQ2hhciBmcm9tICcuL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jayc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKCFjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZShjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmIChjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c0xldHRlclNwYWNpbmcoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJBbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFyQWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgRXh0ZW5kZWQtQSddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyOiBudW1iZXIpIHtcbiAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGNoYXJhY3RlcnMgb3V0c2lkZSBhbGwgaWRlb2dyYXBoaWMgcmFuZ2VzLlxuICAgIGlmIChjaGFyIDwgMHgyRTgwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTdHJva2VzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIaXJhZ2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmd4aSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ZlcnRpY2FsIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBjb21lcyBmcm9tXG4vLyA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvMTIuMC4wL3VjZC9WZXJ0aWNhbE9yaWVudGF0aW9uLnR4dD4uXG4vLyBLZWVwIGl0IHN5bmNocm9uaXplZCB3aXRoXG4vLyA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvVmVydGljYWxPcmllbnRhdGlvbi50eHQ+LlxuLy8gVGhlIGRhdGEgZmlsZSBkZW5vdGVzIHdpdGggw6LCgMKcVcOiwoDCnSBvciDDosKAwpxUdcOiwoDCnSBhbnkgY29kZXBvaW50IHRoYXQgbWF5IGJlIGRyYXduXG4vLyB1cHJpZ2h0IGluIHZlcnRpY2FsIHRleHQgYnV0IGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdXByaWdodCBhbmRcbi8vIMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVycy5cblxuLy8gQmxvY2tzIGluIHRoZSBVbmljb2RlIHN1cHBsZW1lbnRhcnkgcGxhbmVzIGFyZSBleGNsdWRlZCBmcm9tIHRoaXMgbW9kdWxlIGR1ZVxuLy8gdG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsL2lzc3Vlcy8yOT4uXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIHVwcmlnaHQgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIHVwcmlnaHQgb3JpZW50YXRpb24gaWYgaXQgaXMgZHJhd24gdXByaWdodCAodW5yb3RhdGVkKVxuICogd2hldGhlciB0aGUgbGluZSBpcyBvcmllbnRlZCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSwgZXZlbiBpZiBib3RoXG4gKiBhZGphY2VudCBjaGFyYWN0ZXJzIGNhbiBiZSByb3RhdGVkLiBGb3IgZXhhbXBsZSwgYSBDaGluZXNlIGNoYXJhY3RlciBpc1xuICogYWx3YXlzIGRyYXduIHVwcmlnaHQuIEFuIHVwcmlnaHRseSBvcmllbnRlZCBjaGFyYWN0ZXIgY2F1c2VzIGFuIGFkamFjZW50XG4gKiDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlciB0byBiZSBkcmF3biB1cHJpZ2h0IGFzIHdlbGwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChjaGFyID09PSAweDAyRUEgLyogbW9kaWZpZXIgbGV0dGVyIHlpbiBkZXBhcnRpbmcgdG9uZSBtYXJrICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MDJFQiAvKiBtb2RpZmllciBsZXR0ZXIgeWFuZyBkZXBhcnRpbmcgdG9uZSBtYXJrICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBlYXJseSBmb3IgY2hhcmFjdGVycyBvdXRzaWRlIGFsbCByYW5nZXMgd2hvc2UgY2hhcmFjdGVycyByZW1haW5cbiAgICAvLyB1cHJpZ2h0IGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZS5cbiAgICBpZiAoY2hhciA8IDB4MTEwMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8gRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweEZFNDkgLyogZGFzaGVkIG92ZXJsaW5lICovICYmIGNoYXIgPD0gMHhGRTRGKSAvKiB3YXZ5IGxvdyBsaW5lICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgUmFkaWNhbHMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3Ryb2tlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweDMwMDggLyogbGVmdCBhbmdsZSBicmFja2V0ICovICYmIGNoYXIgPD0gMHgzMDExKSAvKiByaWdodCBibGFjayBsZW50aWN1bGFyIGJyYWNrZXQgKi8pICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4MzAxNCAvKiBsZWZ0IHRvcnRvaXNlIHNoZWxsIGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweDMwMUYpIC8qIGxvdyBkb3VibGUgcHJpbWUgcXVvdGF0aW9uIG1hcmsgKi8pICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweDMwMzAgLyogd2F2eSBkYXNoICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hpcmFnYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuYnVuJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmd4aSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IDB4MzBGQyAvKiBrYXRha2FuYS1oaXJhZ2FuYSBwcm9sb25nZWQgc291bmQgbWFyayAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciAhPT0gMHhGRjA4IC8qIGZ1bGx3aWR0aCBsZWZ0IHBhcmVudGhlc2lzICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGMDkgLyogZnVsbHdpZHRoIHJpZ2h0IHBhcmVudGhlc2lzICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGMEQgLyogZnVsbHdpZHRoIGh5cGhlbi1taW51cyAqLyAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweEZGMUEgLyogZnVsbHdpZHRoIGNvbG9uICovICYmIGNoYXIgPD0gMHhGRjFFKSAvKiBmdWxsd2lkdGggZ3JlYXRlci10aGFuIHNpZ24gKi8pICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0IgLyogZnVsbHdpZHRoIGxlZnQgc3F1YXJlIGJyYWNrZXQgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzRCAvKiBmdWxsd2lkdGggcmlnaHQgc3F1YXJlIGJyYWNrZXQgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzRiAvKiBmdWxsd2lkdGggbG93IGxpbmUgKi8gJiZcbiAgICAgICAgICAgICEoY2hhciA+PSAweEZGNUIgLyogZnVsbHdpZHRoIGxlZnQgY3VybHkgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4RkZERikgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkZFMyAvKiBmdWxsd2lkdGggbWFjcm9uICovICYmXG4gICAgICAgICAgICAhKGNoYXIgPj0gMHhGRkU4IC8qIGhhbGZ3aWR0aCBmb3JtcyBsaWdodCB2ZXJ0aWNhbCAqLyAmJiBjaGFyIDw9IDB4RkZFRikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ1NtYWxsIEZvcm0gVmFyaWFudHMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweEZFNTggLyogc21hbGwgZW0gZGFzaCAqLyAmJiBjaGFyIDw9IDB4RkU1RSkgLyogc21hbGwgcmlnaHQgdG9ydG9pc2Ugc2hlbGwgYnJhY2tldCAqLykgJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHhGRTYzIC8qIHNtYWxsIGh5cGhlbi1taW51cyAqLyAmJiBjaGFyIDw9IDB4RkU2NikgLyogc21hbGwgZXF1YWxzIHNpZ24gKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVmVydGljYWwgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWlqaW5nIEhleGFncmFtIFN5bWJvbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiBuZXV0cmFsIG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyBuZXV0cmFsIG9yaWVudGF0aW9uIGlmIGl0IG1heSBiZSBkcmF3biByb3RhdGVkIG9yIHVucm90YXRlZFxuICogd2hlbiB0aGUgbGluZSBpcyBvcmllbnRlZCB2ZXJ0aWNhbGx5LCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZVxuICogYWRqYWNlbnQgY2hhcmFjdGVycy4gRm9yIGV4YW1wbGUsIGFsb25nIGEgdmVydGljbGx5IG9yaWVudGVkIGxpbmUsIHRoZSB2dWxnYXJcbiAqIGZyYWN0aW9uIMOCwr0gaXMgZHJhd24gdXByaWdodCBhbW9uZyBDaGluZXNlIGNoYXJhY3RlcnMgYnV0IHJvdGF0ZWQgYW1vbmcgTGF0aW5cbiAqIGxldHRlcnMuIEEgbmV1dHJhbGx5IG9yaWVudGVkIGNoYXJhY3RlciBkb2VzIG5vdCBpbmZsdWVuY2Ugd2hldGhlciBhblxuICogYWRqYWNlbnQgY2hhcmFjdGVyIGlzIGRyYXduIHVwcmlnaHQgb3Igcm90YXRlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzTmV1dHJhbFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGlzQ2hhclsnTGF0aW4tMSBTdXBwbGVtZW50J10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgPT09IDB4MDBBNyAvKiBzZWN0aW9uIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBBOSAvKiBjb3B5cmlnaHQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEFFIC8qIHJlZ2lzdGVyZWQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEIxIC8qIHBsdXMtbWludXMgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJDIC8qIHZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJEIC8qIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEJFIC8qIHZ1bGdhciBmcmFjdGlvbiB0aHJlZSBxdWFydGVycyAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEQ3IC8qIG11bHRpcGxpY2F0aW9uIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBGNyAvKiBkaXZpc2lvbiBzaWduICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydHZW5lcmFsIFB1bmN0dWF0aW9uJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgPT09IDB4MjAxNiAvKiBkb3VibGUgdmVydGljYWwgbGluZSAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDIwIC8qIGRhZ2dlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDIxIC8qIGRvdWJsZSBkYWdnZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzMCAvKiBwZXIgbWlsbGUgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDMxIC8qIHBlciB0ZW4gdGhvdXNhbmQgc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDNCIC8qIHJlZmVyZW5jZSBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwM0MgLyogZG91YmxlIGV4Y2xhbWF0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0MiAvKiBhc3RlcmlzbSAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ3IC8qIGRvdWJsZSBxdWVzdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDggLyogcXVlc3Rpb24gZXhjbGFtYXRpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ5IC8qIGV4Y2xhbWF0aW9uIHF1ZXN0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA1MSAvKiB0d28gYXN0ZXJpc2tzIGFsaWduZWQgdmVydGljYWxseSAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnTGV0dGVybGlrZSBTeW1ib2xzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ051bWJlciBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCddKGNoYXIpKSB7XG4gICAgICAgIGlmICgoY2hhciA+PSAweDIzMDAgLyogZGlhbWV0ZXIgc2lnbiAqLyAmJiBjaGFyIDw9IDB4MjMwNyAvKiB3YXZ5IGxpbmUgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzMEMgLyogYm90dG9tIHJpZ2h0IGNyb3AgKi8gJiYgY2hhciA8PSAweDIzMUYgLyogYm90dG9tIHJpZ2h0IGNvcm5lciAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjMyNCAvKiB1cCBhcnJvd2hlYWQgYmV0d2VlbiB0d28gaG9yaXpvbnRhbCBiYXJzICovICYmIGNoYXIgPD0gMHgyMzI4IC8qIGtleWJvYXJkICovKSB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMzJCIC8qIGVyYXNlIHRvIHRoZSBsZWZ0ICovIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzN0QgLyogc2hvdWxkZXJlZCBvcGVuIGJveCAqLyAmJiBjaGFyIDw9IDB4MjM5QSAvKiBjbGVhciBzY3JlZW4gc3ltYm9sICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0JFIC8qIGRlbnRpc3RyeSBzeW1ib2wgbGlnaHQgdmVydGljYWwgYW5kIHRvcCByaWdodCAqLyAmJiBjaGFyIDw9IDB4MjNDRCAvKiBzcXVhcmUgZm9vdCAqLykgfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjNDRiAvKiBlamVjdCBzeW1ib2wgKi8gfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNEMSAvKiBtZXRyaWNhbCBicmV2ZSAqLyAmJiBjaGFyIDw9IDB4MjNEQiAvKiBmdXNlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0UyIC8qIHdoaXRlIHRyYXBleml1bSAqLyAmJiBjaGFyIDw9IDB4MjNGRikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NvbnRyb2wgUGljdHVyZXMnXShjaGFyKSAmJiBjaGFyICE9PSAweDI0MjMgLyogb3BlbiBib3ggKi8pIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ09wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnR2VvbWV0cmljIFNoYXBlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFN5bWJvbHMnXShjaGFyKSkge1xuICAgICAgICBpZiAoISgoY2hhciA+PSAweDI2MUEgLyogYmxhY2sgbGVmdCBwb2ludGluZyBpbmRleCAqLyAmJiBjaGFyIDw9IDB4MjYxRikgLyogd2hpdGUgZG93biBwb2ludGluZyBpbmRleCAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKChjaGFyID49IDB4MkIxMiAvKiBzcXVhcmUgd2l0aCB0b3AgaGFsZiBibGFjayAqLyAmJiBjaGFyIDw9IDB4MkIyRiAvKiB3aGl0ZSB2ZXJ0aWNhbCBlbGxpcHNlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyQjUwIC8qIHdoaXRlIG1lZGl1bSBzdGFyICovICYmIGNoYXIgPD0gMHgyQjU5IC8qIGhlYXZ5IGNpcmNsZWQgc2FsdGlyZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MkJCOCAvKiB1cHdhcmRzIHdoaXRlIGFycm93IGZyb20gYmFyIHdpdGggaG9yaXpvbnRhbCBiYXIgKi8gJiYgY2hhciA8PSAweDJCRUIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnUHJpdmF0ZSBVc2UgQXJlYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydTbWFsbCBGb3JtIFZhcmlhbnRzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKGNoYXIgPT09IDB4MjIxRSAvKiBpbmZpbml0eSAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDIyMzQgLyogdGhlcmVmb3JlICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MjIzNSAvKiBiZWNhdXNlICovIHx8XG4gICAgICAgIChjaGFyID49IDB4MjcwMCAvKiBibGFjayBzYWZldHkgc2Npc3NvcnMgKi8gJiYgY2hhciA8PSAweDI3NjcgLyogcm90YXRlZCBmbG9yYWwgaGVhcnQgYnVsbGV0ICovKSB8fFxuICAgICAgICAoY2hhciA+PSAweDI3NzYgLyogZGluZ2JhdCBuZWdhdGl2ZSBjaXJjbGVkIGRpZ2l0IG9uZSAqLyAmJiBjaGFyIDw9IDB4Mjc5MyAvKiBkaW5nYmF0IG5lZ2F0aXZlIGNpcmNsZWQgc2Fucy1zZXJpZiBudW1iZXIgdGVuICovKSB8fFxuICAgICAgICBjaGFyID09PSAweEZGRkMgLyogb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciAqLyB8fFxuICAgICAgICBjaGFyID09PSAweEZGRkQgLyogcmVwbGFjZW1lbnQgY2hhcmFjdGVyICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogcm90YXRlZCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgcm90YXRlZCBvcmllbnRhdGlvbiBpZiBpdCBpcyBkcmF3biByb3RhdGVkIHdoZW4gdGhlIGxpbmUgaXNcbiAqIG9yaWVudGVkIHZlcnRpY2FsbHksIGV2ZW4gaWYgYm90aCBhZGphY2VudCBjaGFyYWN0ZXJzIGFyZSB1cHJpZ2h0LiBGb3JcbiAqIGV4YW1wbGUsIGEgTGF0aW4gbGV0dGVyIGlzIGRyYXduIHJvdGF0ZWQgYWxvbmcgYSB2ZXJ0aWNhbCBsaW5lLiBBIHJvdGF0ZWRcbiAqIGNoYXJhY3RlciBjYXVzZXMgYW4gYWRqYWNlbnQgw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXIgdG8gYmUgZHJhd24gcm90YXRlZCBhcyB3ZWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gIShjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcikgfHxcbiAgICAgICAgICAgICBjaGFySGFzTmV1dHJhbFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckluQ29tcGxleFNoYXBpbmdTY3JpcHQoY2hhcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzQ2hhclsnQXJhYmljJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgU3VwcGxlbWVudCddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIEV4dGVuZGVkLUEnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJ10oY2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFySW5SVExTY3JpcHQoY2hhcjogbnVtYmVyKSB7XG4gICAgLy8gTWFpbiBibG9ja3MgZm9yIEhlYnJldywgQXJhYmljLCBUaGFhbmEgYW5kIG90aGVyIFJUTCBzY3JpcHRzXG4gICAgcmV0dXJuIChjaGFyID49IDB4MDU5MCAmJiBjaGFyIDw9IDB4MDhGRikgfHxcbiAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSB8fFxuICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckluU3VwcG9ydGVkU2NyaXB0KGNoYXI6IG51bWJlciwgY2FuUmVuZGVyUlRMOiBib29sZWFuKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJvdWdoIGhldXJpc3RpYzogd2hldGhlciB3ZSBcImNhbiByZW5kZXJcIiBhIHNjcmlwdFxuICAgIC8vIGFjdHVhbGx5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgb2YgdGhlIGZvbnQgYmVpbmcgdXNlZFxuICAgIC8vIGFuZCB3aGV0aGVyIGRpZmZlcmVuY2VzIGZyb20gdGhlIGlkZWFsIHJlbmRlcmluZyBhcmUgY29uc2lkZXJlZFxuICAgIC8vIHNlbWFudGljYWxseSBzaWduaWZpY2FudC5cblxuICAgIC8vIEV2ZW4gaW4gTGF0aW4gc2NyaXB0LCB3ZSBcImNhbid0IHJlbmRlclwiIGNvbWJpbmF0aW9ucyBzdWNoIGFzIHRoZSBmaVxuICAgIC8vIGxpZ2F0dXJlLCBidXQgd2UgZG9uJ3QgY29uc2lkZXIgdGhhdCBzZW1hbnRpY2FsbHkgc2lnbmlmaWNhbnQuXG4gICAgaWYgKCFjYW5SZW5kZXJSVEwgJiYgY2hhckluUlRMU2NyaXB0KGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKChjaGFyID49IDB4MDkwMCAmJiBjaGFyIDw9IDB4MERGRikgfHxcbiAgICAgICAgLy8gTWFpbiBibG9ja3MgZm9yIEluZGljIHNjcmlwdHMgYW5kIFNpbmhhbGFcbiAgICAgICAgKGNoYXIgPj0gMHgwRjAwICYmIGNoYXIgPD0gMHgxMDlGKSB8fFxuICAgICAgICAvLyBNYWluIGJsb2NrcyBmb3IgVGliZXRhbiBhbmQgTXlhbm1hclxuICAgICAgICBpc0NoYXJbJ0tobWVyJ10oY2hhcikpIHtcbiAgICAgICAgLy8gVGhlc2UgYmxvY2tzIGNvdmVyIGNvbW1vbiBzY3JpcHRzIHRoYXQgcmVxdWlyZVxuICAgICAgICAvLyBjb21wbGV4IHRleHQgc2hhcGluZywgYmFzZWQgb24gdW5pY29kZSBzY3JpcHQgbWV0YWRhdGE6XG4gICAgICAgIC8vIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3MvY2xkci90cnVuay9jb21tb24vcHJvcGVydGllcy9zY3JpcHRNZXRhZGF0YS50eHRcbiAgICAgICAgLy8gd2hlcmUgXCJXZWIgUmFuayA8PSAzMlwiIFwiU2hhcGluZyBSZXF1aXJlZCA9IFlFU1wiXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdDb250YWluc1JUTFRleHQoY2hhcnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoY2hhckluUlRMU2NyaXB0KGNoYXIuY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHQoY2hhcnM6IHN0cmluZywgY2FuUmVuZGVyUlRMOiBib29sZWFuKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckluU3VwcG9ydGVkU2NyaXB0KGNoYXIuY2hhckNvZGVBdCgwKSwgY2FuUmVuZGVyUlRMKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7Z2V0QXJyYXlCdWZmZXJ9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtpc1dvcmtlcn0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuY29uc3Qgc3RhdHVzID0ge1xuICAgIHVuYXZhaWxhYmxlOiAndW5hdmFpbGFibGUnLCAvLyBOb3QgbG9hZGVkXG4gICAgZGVmZXJyZWQ6ICdkZWZlcnJlZCcsIC8vIFRoZSBwbHVnaW4gVVJMIGhhcyBiZWVuIHNwZWNpZmllZCwgYnV0IGxvYWRpbmcgaGFzIGJlZW4gZGVmZXJyZWRcbiAgICBsb2FkaW5nOiAnbG9hZGluZycsIC8vIHJlcXVlc3QgaW4tZmxpZ2h0XG4gICAgbG9hZGVkOiAnbG9hZGVkJyxcbiAgICBlcnJvcjogJ2Vycm9yJ1xufTtcblxuZXhwb3J0IHR5cGUgUGx1Z2luU3RhdGUgPSB7XG4gICAgcGx1Z2luU3RhdHVzOiAkVmFsdWVzPHR5cGVvZiBzdGF0dXM+O1xuICAgIHBsdWdpblVSTDogP3N0cmluZ1xufTtcblxudHlwZSBFcnJvckNhbGxiYWNrID0gKGVycm9yOiA/RXJyb3IpID0+IHZvaWQ7XG50eXBlIFBsdWdpblN0YXRlU3luY0NhbGxiYWNrID0gKHN0YXRlOiBQbHVnaW5TdGF0ZSkgPT4gdm9pZDtcbmxldCBfY29tcGxldGlvbkNhbGxiYWNrID0gbnVsbDtcblxuLy9WYXJpYWJsZXMgZGVmaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBsdWdpblxubGV0IHBsdWdpblN0YXR1cyA9IHN0YXR1cy51bmF2YWlsYWJsZTtcbmxldCBwbHVnaW5VUkwgPSBudWxsO1xuXG5leHBvcnQgY29uc3QgdHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudCA9IGZ1bmN0aW9uKGVycm9yOiA/RXJyb3IpIHtcbiAgICBpZiAoX2NvbXBsZXRpb25DYWxsYmFjaykge1xuICAgICAgICBfY29tcGxldGlvbkNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBzZW5kUGx1Z2luU3RhdGVUb1dvcmtlcigpIHtcbiAgICBldmVudGVkLmZpcmUobmV3IEV2ZW50KCdwbHVnaW5TdGF0ZUNoYW5nZScsIHtwbHVnaW5TdGF0dXMsIHBsdWdpblVSTH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IGV2ZW50ZWQgPSBuZXcgRXZlbnRlZCgpO1xuXG5leHBvcnQgY29uc3QgZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGx1Z2luU3RhdHVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbihjYWxsYmFjazogUGx1Z2luU3RhdGVTeW5jQ2FsbGJhY2spIHtcbiAgICAvLyBEbyBhbiBpbml0aWFsIHN5bmMgb2YgdGhlIHN0YXRlXG4gICAgY2FsbGJhY2soe3BsdWdpblN0YXR1cywgcGx1Z2luVVJMfSk7XG4gICAgLy8gTGlzdGVuIGZvciBhbGwgZnV0dXJlIHN0YXRlIGNoYW5nZXNcbiAgICBldmVudGVkLm9uKCdwbHVnaW5TdGF0ZUNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLnVuYXZhaWxhYmxlO1xuICAgIHBsdWdpblVSTCA9IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKHVybDogc3RyaW5nLCBjYWxsYmFjazogP0Vycm9yQ2FsbGJhY2ssIGRlZmVycmVkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luU3RhdHVzID09PSBzdGF0dXMuZGVmZXJyZWQgfHwgcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGluZyB8fCBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuJyk7XG4gICAgfVxuICAgIHBsdWdpblVSTCA9IGJyb3dzZXIucmVzb2x2ZVVSTCh1cmwpO1xuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5kZWZlcnJlZDtcbiAgICBfY29tcGxldGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcblxuICAgIC8vU3RhcnQgZG93bmxvYWRpbmcgdGhlIHBsdWdpbiBpbW1lZGlhdGVseSBpZiBub3QgaW50ZW5kaW5nIHRvIGxhenktbG9hZFxuICAgIGlmICghZGVmZXJyZWQpIHtcbiAgICAgICAgZG93bmxvYWRSVExUZXh0UGx1Z2luKCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkUlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChwbHVnaW5TdGF0dXMgIT09IHN0YXR1cy5kZWZlcnJlZCB8fCAhcGx1Z2luVVJMKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncnRsLXRleHQtcGx1Z2luIGNhbm5vdCBiZSBkb3dubG9hZGVkIHVubGVzcyBhIHBsdWdpblVSTCBpcyBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLmxvYWRpbmc7XG4gICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcbiAgICBpZiAocGx1Z2luVVJMKSB7XG4gICAgICAgIGdldEFycmF5QnVmZmVyKHt1cmw6IHBsdWdpblVSTH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudChlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5sb2FkZWQ7XG4gICAgICAgICAgICAgICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBsdWdpbjoge1xuICAgIGFwcGx5QXJhYmljU2hhcGluZzogP0Z1bmN0aW9uLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogPyhzdHJpbmcsIEFycmF5PG51bWJlcj4pID0+IEFycmF5PHN0cmluZz4sXG4gICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0OiA/KHN0cmluZywgQXJyYXk8bnVtYmVyPiwgQXJyYXk8bnVtYmVyPikgPT4gQXJyYXk8W3N0cmluZywgQXJyYXk8bnVtYmVyPl0+LFxuICAgIGlzTG9hZGVkOiAoKSA9PiBib29sZWFuLFxuICAgIGlzTG9hZGluZzogKCkgPT4gYm9vbGVhbixcbiAgICBzZXRTdGF0ZTogKHN0YXRlOiBQbHVnaW5TdGF0ZSkgPT4gdm9pZCxcbiAgICBpc1BhcnNlZDogKCkgPT4gYm9vbGVhbixcbiAgICBnZXRQbHVnaW5VUkw6ICgpID0+ID9zdHJpbmdcbn0gPSB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiBudWxsLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogbnVsbCxcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkZWQgfHwgLy8gTWFpbiBUaHJlYWQ6IGxvYWRlZCBpZiB0aGUgY29tcGxldGlvbiBjYWxsYmFjayByZXR1cm5lZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgICAgIHBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcgIT0gbnVsbDsgLy8gV2ViLXdvcmtlcjogbG9hZGVkIGlmIHRoZSBwbHVnaW4gZnVuY3Rpb25zIGhhdmUgYmVlbiBjb21waWxlZFxuICAgIH0sXG4gICAgaXNMb2FkaW5nKCkgeyAvLyBNYWluIFRocmVhZCBPbmx5OiBxdWVyeSB0aGUgbG9hZGluZyBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGluIHRoZSB3b3JrZXIgY29udGV4dC5cbiAgICAgICAgcmV0dXJuIHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmxvYWRpbmc7XG4gICAgfSxcbiAgICBzZXRTdGF0ZShzdGF0ZTogUGx1Z2luU3RhdGUpIHsgLy8gV29ya2VyIHRocmVhZCBvbmx5OiB0aGlzIHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkcyB0aGF0IHRoZSBwbHVnaW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBNYWluIHRocmVhZFxuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ0Nhbm5vdCBzZXQgdGhlIHN0YXRlIG9mIHRoZSBydGwtdGV4dC1wbHVnaW4gd2hlbiBub3QgaW4gdGhlIHdlYi13b3JrZXIgY29udGV4dCcpO1xuXG4gICAgICAgIHBsdWdpblN0YXR1cyA9IHN0YXRlLnBsdWdpblN0YXR1cztcbiAgICAgICAgcGx1Z2luVVJMID0gc3RhdGUucGx1Z2luVVJMO1xuICAgIH0sXG4gICAgaXNQYXJzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGFzc2VydChpc1dvcmtlcigpLCAncnRsLXRleHQtcGx1Z2luIGlzIG9ubHkgcGFyc2VkIG9uIHRoZSB3b3JrZXItdGhyZWFkcycpO1xuXG4gICAgICAgIHJldHVybiBwbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nICE9IG51bGwgJiZcbiAgICAgICAgICAgIHBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgcGx1Z2luLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCAhPSBudWxsO1xuICAgIH0sXG4gICAgZ2V0UGx1Z2luVVJMKCk6ID9zdHJpbmcge1xuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ3J0bC10ZXh0LXBsdWdpbiB1cmwgY2FuIG9ubHkgYmUgcXVlcmllZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcycpO1xuICAgICAgICByZXR1cm4gcGx1Z2luVVJMO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsYXp5TG9hZFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXBsdWdpbi5pc0xvYWRpbmcoKSAmJlxuICAgICAgICAhcGx1Z2luLmlzTG9hZGVkKCkgJiZcbiAgICAgICAgZ2V0UlRMVGV4dFBsdWdpblN0YXR1cygpID09PSAnZGVmZXJyZWQnXG4gICAgKSB7XG4gICAgICAgIGRvd25sb2FkUlRMVGV4dFBsdWdpbigpO1xuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IHtpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0fSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHtwbHVnaW4gYXMgcnRsVGV4dFBsdWdpbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENyb3NzZmFkZVBhcmFtZXRlcnMgPSB7XG4gICAgZnJvbVNjYWxlOiBudW1iZXIsXG4gICAgdG9TY2FsZTogbnVtYmVyLFxuICAgIHQ6IG51bWJlclxufTtcblxuY2xhc3MgRXZhbHVhdGlvblBhcmFtZXRlcnMge1xuICAgIHpvb206IG51bWJlcjtcbiAgICBub3c6IG51bWJlcjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICB6b29tSGlzdG9yeTogWm9vbUhpc3Rvcnk7XG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb247XG5cbiAgICAvLyBcIm9wdGlvbnNcIiBtYXkgYWxzbyBiZSBhbm90aGVyIEV2YWx1YXRpb25QYXJhbWV0ZXJzIHRvIGNvcHksIHNlZSBDcm9zc0ZhZGVkUHJvcGVydHkucG9zc2libHlFdmFsdWF0ZVxuICAgIGNvbnN0cnVjdG9yKHpvb206IG51bWJlciwgb3B0aW9ucz86ICopIHtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5ub3cgPSBvcHRpb25zLm5vdztcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gb3B0aW9ucy5mYWRlRHVyYXRpb247XG4gICAgICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gb3B0aW9ucy56b29tSGlzdG9yeTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm93ID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHRoaXMuem9vbUhpc3RvcnkgPSBuZXcgWm9vbUhpc3RvcnkoKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHQoc3RyLCBydGxUZXh0UGx1Z2luLmlzTG9hZGVkKCkpO1xuICAgIH1cblxuICAgIGNyb3NzRmFkaW5nRmFjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5mYWRlRHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKCh0aGlzLm5vdyAtIHRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkgLyB0aGlzLmZhZGVEdXJhdGlvbiwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk6IENyb3NzZmFkZVBhcmFtZXRlcnMge1xuICAgICAgICBjb25zdCB6ID0gdGhpcy56b29tO1xuICAgICAgICBjb25zdCBmcmFjdGlvbiA9IHogLSBNYXRoLmZsb29yKHopO1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO1xuXG4gICAgICAgIHJldHVybiB6ID4gdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gP1xuICAgICAgICAgICAge2Zyb21TY2FsZTogMiwgdG9TY2FsZTogMSwgdDogZnJhY3Rpb24gKyAoMSAtIGZyYWN0aW9uKSAqIHR9IDpcbiAgICAgICAgICAgIHtmcm9tU2NhbGU6IDAuNSwgdG9TY2FsZTogMSwgdDogMSAtICgxIC0gdCkgKiBmcmFjdGlvbn07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uUGFyYW1ldGVycztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7Y2xvbmUsIGV4dGVuZCwgZWFzZUN1YmljSW5PdXR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgVHJhbnNpdGlvblNwZWNpZmljYXRpb24sXG4gICAgUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBGZWF0dXJlLFxuICAgIEZlYXR1cmVTdGF0ZSxcbiAgICBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbixcbiAgICBTb3VyY2VFeHByZXNzaW9uLFxuICAgIENvbXBvc2l0ZUV4cHJlc3Npb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxudHlwZSBUaW1lUG9pbnQgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENyb3NzRmFkZWQ8VD4gPSB7XG4gICAgdG86IFQsXG4gICAgZnJvbTogVFxufTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgbnVtYmVyIG9mIGNsYXNzZXMgdGhhdCBkZWZpbmUgc3RhdGUgYW5kIGJlaGF2aW9yIGZvciBwYWludCBhbmQgbGF5b3V0IHByb3BlcnRpZXMsIG1vc3RcbiAqIGltcG9ydGFudGx5IHRoZWlyIHJlc3BlY3RpdmUgZXZhbHVhdGlvbiBjaGFpbnM6XG4gKlxuICogICAgICAgVHJhbnNpdGlvbmFibGUgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgVHJhbnNpdGlvbmluZyBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBQb3NzaWJseSBldmFsdWF0ZWQgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKlxuICogICAgICAgTGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFBvc3NpYmx5IGV2YWx1YXRlZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIGxheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqIEBtb2R1bGVcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiAgSW1wbGVtZW50YXRpb25zIG9mIHRoZSBgUHJvcGVydHlgIGludGVyZmFjZTpcbiAqXG4gKiAgKiBIb2xkIG1ldGFkYXRhIGFib3V0IGEgcHJvcGVydHkgdGhhdCdzIGluZGVwZW5kZW50IG9mIGFueSBzcGVjaWZpYyB2YWx1ZTogc3R1ZmYgbGlrZSB0aGUgdHlwZSBvZiB0aGUgdmFsdWUsXG4gKiAgICB0aGUgZGVmYXVsdCB2YWx1ZSwgZXRjLiBUaGlzIGNvbWVzIGZyb20gdGhlIHN0eWxlIHNwZWNpZmljYXRpb24gSlNPTi5cbiAqICAqIERlZmluZSBiZWhhdmlvciB0aGF0IG5lZWRzIHRvIGJlIHBvbHltb3JwaGljIGFjcm9zcyBkaWZmZXJlbnQgcHJvcGVydGllczogXCJwb3NzaWJseSBldmFsdWF0aW5nXCJcbiAqICAgIGFuIGlucHV0IHZhbHVlIChzZWUgYmVsb3cpLCBhbmQgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHR3byBwb3NzaWJseS1ldmFsdXRlZCB2YWx1ZXMuXG4gKlxuICogIFRoZSB0eXBlIGBUYCBpcyB0aGUgZnVsbHktZXZhbHVhdGVkIHZhbHVlIHR5cGUgKGUuZy4gYG51bWJlcmAsIGBzdHJpbmdgLCBgQ29sb3JgKS5cbiAqICBUaGUgdHlwZSBgUmAgaXMgdGhlIGludGVybWVkaWF0ZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHZhbHVlIHR5cGUuIFNlZSBiZWxvdy5cbiAqXG4gKiAgVGhlcmUgYXJlIHR3byBtYWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIC0tIG9uZSBmb3IgcHJvcGVydGllcyB0aGF0IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcyxcbiAqICBhbmQgb25lIGZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QuIFRoZXJlIGFyZSBhIGZldyBcInNwZWNpYWwgY2FzZVwiIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsOiBvbmUgZm9yIHByb3BlcnRpZXNcbiAqICB3aGljaCBjcm9zcy1mYWRlIGJldHdlZW4gdHdvIHZhbHVlcyByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW5nLCBvbmUgZm9yIGBoZWF0bWFwLWNvbG9yYCBhbmQgYGxpbmUtZ3JhZGllbnRgLFxuICogIGFuZCBvbmUgZm9yIGBsaWdodC1wb3NpdGlvbmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eTxULCBSPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFI7XG4gICAgaW50ZXJwb2xhdGUoYTogUiwgYjogUiwgdDogbnVtYmVyKTogUjtcbn1cblxuLyoqXG4gKiAgYFByb3BlcnR5VmFsdWVgIHJlcHJlc2VudHMgdGhlIHZhbHVlIHBhcnQgb2YgYSBwcm9wZXJ0eSBrZXktdmFsdWUgdW5pdC4gSXQncyB1c2VkIHRvIHJlcHJlc2VudCBib3RoXG4gKiAgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMsIGFuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZWlyIHByb3BlcnR5IHN1cHBvcnRzIGRhdGEtZHJpdmVuXG4gKiAgZXhwcmVzc2lvbnMuXG4gKlxuICogIGBQcm9wZXJ0eVZhbHVlYCBzdG9yZXMgdGhlIHJhdyBpbnB1dCB2YWx1ZSBhcyBzZWVuIGluIGEgc3R5bGUgb3IgYSBydW50aW1lIHN0eWxpbmcgQVBJIGNhbGwsIGkuZS4gb25lIG9mIHRoZVxuICogIGZvbGxvd2luZzpcbiAqXG4gKiAgICAqIEEgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eVxuICogICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlIChidXQgZnVuY3Rpb25zIGFyZSBxdWFzaS1kZXByZWNhdGVkIGluIGZhdm9yIG9mIGV4cHJlc3Npb25zKVxuICogICAgKiBBbiBleHByZXNzaW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlXG4gKiAgICAqIFwidW5kZWZpbmVkXCIvXCJub3QgcHJlc2VudFwiLCBpbiB3aGljaCBjYXNlIHRoZSBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIHRha2Ugb24gaXRzIGRlZmF1bHQgdmFsdWUuXG4gKlxuICogIEluIGFkZGl0aW9uIHRvIHN0b3JpbmcgdGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLCBgUHJvcGVydHlWYWx1ZWAgYWxzbyBzdG9yZXMgYSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLFxuICogIGVmZmVjdGl2ZWx5IHRyZWF0aW5nIGZ1bmN0aW9ucyBhcyBpZiB0aGV5IGFyZSBleHByZXNzaW9ucywgYW5kIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWVzIGFzIGlmIHRoZXkgYXJlXG4gKiAgKGNvbnN0YW50KSBleHByZXNzaW9ucy5cbiAqXG4gKiAgQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkO1xuICAgIGV4cHJlc3Npb246IFN0eWxlUHJvcGVydHlFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IFByb3BlcnR5PFQsIFI+LCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUgPT09IHVuZGVmaW5lZCA/IHByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdCA6IHZhbHVlLCBwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICBpc0RhdGFEcml2ZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScgfHwgdGhpcy5leHByZXNzaW9uLmtpbmQgPT09ICdjb21wb3NpdGUnO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFIge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsIHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gVHJhbnNpdGlvbmFibGUgLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBUcmFuc2l0aW9uUGFyYW1ldGVycyA9IHtcbiAgICBub3c6IFRpbWVQb2ludCxcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvblxufTtcblxuLyoqXG4gKiBQYWludCBwcm9wZXJ0aWVzIGFyZSBfdHJhbnNpdGlvbmFibGVfOiB0aGV5IGNhbiBjaGFuZ2UgaW4gYSBmbHVpZCBtYW5uZXIsIGludGVycG9sYXRpbmcgb3IgY3Jvc3MtZmFkaW5nIGJldHdlZW5cbiAqIG9sZCBhbmQgbmV3IHZhbHVlLiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGFuZCB0aGUgZGVsYXkgYmVmb3JlIGl0IGJlZ2lucywgaXMgY29uZmlndXJhYmxlLlxuICpcbiAqIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgIGlzIGEgY29tcG9zaXRpb25hbCBjbGFzcyB0aGF0IHN0b3JlcyBib3RoIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhbmQgdGhhdCB0cmFuc2l0aW9uXG4gKiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEEgYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZWAgY2FuIGNhbGN1bGF0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBldmFsdWF0aW9uIGNoYWluIGZvciBwYWludCBwcm9wZXJ0eSB2YWx1ZXM6XG4gKiBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPikge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgUHJvcGVydHlWYWx1ZShwcm9wZXJ0eSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgIHByaW9yOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPik6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZSh0aGlzLnByb3BlcnR5LCB0aGlzLnZhbHVlLCBwcmlvciwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzLnRyYW5zaXRpb24sIHRoaXMudHJhbnNpdGlvbiksIHBhcmFtZXRlcnMubm93KTtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWUodGhpcy5wcm9wZXJ0eSwgdGhpcy52YWx1ZSwgbnVsbCwge30sIDApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmFibGVgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgcGFpbnQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLiBJdCBjYW4gY2FsY3VsYXRlIHRoZSBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBUcmFuc2l0aW9uaW5nYCBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zaXRpb25hYmxlPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTKTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTLCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBfcmVtb3ZlXyBhbiBvd24gcHJvcGVydHkgaW4gdGhlIGNhc2Ugd2hlcmUgYSB2YWx1ZSBpcyBiZWluZyByZXNldFxuICAgICAgICAvLyB0byB0aGUgZGVmYXVsdDogdGhlIHRyYW5zaXRpb24gbWlnaHQgc3RpbGwgYmUgbm9uLWRlZmF1bHQuXG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSwgdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBjbG9uZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldFRyYW5zaXRpb248Uzogc3RyaW5nPihuYW1lOiBTKTogVHJhbnNpdGlvblNwZWNpZmljYXRpb24gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZXRUcmFuc2l0aW9uPFM6IHN0cmluZz4obmFtZTogUywgdmFsdWU6IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uID0gY2xvbmUodmFsdWUpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbYCR7cHJvcGVydHl9LXRyYW5zaXRpb25gXSA9IHRyYW5zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsIHByaW9yOiBUcmFuc2l0aW9uaW5nPFByb3BzPik6IFRyYW5zaXRpb25pbmc8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRyYW5zaXRpb25pbmcodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnRyYW5zaXRpb25lZChwYXJhbWV0ZXJzLCBwcmlvci5fdmFsdWVzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUcmFuc2l0aW9uaW5nKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFRyYW5zaXRpb25pbmcgLS0tLS0tLVxuXG4vKipcbiAqIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgaW1wbGVtZW50cyB0aGUgZmlyc3Qgb2YgdHdvIGludGVybWVkaWF0ZSBzdGVwcyBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBvZiBhIHBhaW50XG4gKiBwcm9wZXJ0eSB2YWx1ZS4gSW4gdGhpcyBzdGVwLCB0cmFuc2l0aW9ucyBiZXR3ZWVuIG9sZCBhbmQgbmV3IHZhbHVlcyBhcmUgaGFuZGxlZDogYXMgbG9uZyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBpblxuICogcHJvZ3Jlc3MsIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBwcmlvciB2YWx1ZSwgYW5kIGludGVycG9sYXRlcyBiZXR3ZWVuIGl0IGFuZFxuICogdGhlIG5ldyB2YWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lIGFuZCB0aGUgY29uZmlndXJlZCB0cmFuc2l0aW9uIGR1cmF0aW9uIGFuZCBkZWxheS4gVGhlIHByb2R1Y3QgaXMgdGhlIG5leHRcbiAqIHN0ZXAgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW46IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCB0eXBlIGBSYC4gU2VlIGJlbG93IGZvciBtb3JlIG9uIHRoaXMgY29uY2VwdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHByaW9yOiA/VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj47XG4gICAgYmVnaW46IFRpbWVQb2ludDtcbiAgICBlbmQ6IFRpbWVQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPixcbiAgICAgICAgICAgICAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPixcbiAgICAgICAgICAgICAgICBwcmlvcjogP1RyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgIG5vdzogVGltZVBvaW50KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmJlZ2luID0gbm93ICsgdHJhbnNpdGlvbi5kZWxheSB8fCAwO1xuICAgICAgICB0aGlzLmVuZCA9IHRoaXMuYmVnaW4gKyB0cmFuc2l0aW9uLmR1cmF0aW9uIHx8IDA7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24gJiYgKHRyYW5zaXRpb24uZGVsYXkgfHwgdHJhbnNpdGlvbi5kdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBwcmlvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pOiBSIHtcbiAgICAgICAgY29uc3Qgbm93ID0gcGFyYW1ldGVycy5ub3cgfHwgMDtcbiAgICAgICAgY29uc3QgZmluYWxWYWx1ZSA9IHRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5wcmlvcjtcbiAgICAgICAgaWYgKCFwcmlvcikge1xuICAgICAgICAgICAgLy8gTm8gcHJpb3IgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPiB0aGlzLmVuZCkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBmcm9tIHByaW9yIHZhbHVlIGlzIG5vdyBjb21wbGV0ZS5cbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbnMgdG8gZGF0YS1kcml2ZW4gcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICAgIC8vIFdlIHNuYXAgaW1tZWRpYXRlbHkgdG8gdGhlIGRhdGEtZHJpdmVuIHZhbHVlIHNvIHRoYXQsIHdoZW4gd2UgcGVyZm9ybSBsYXlvdXQsXG4gICAgICAgICAgICAvLyB3ZSBzZWUgdGhlIGRhdGEtZHJpdmVuIGZ1bmN0aW9uIGFuZCBjYW4gdXNlIGl0IHRvIHBvcHVsYXRlIHZlcnRleCBidWZmZXJzLlxuICAgICAgICAgICAgdGhpcy5wcmlvciA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPCB0aGlzLmJlZ2luKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2l0aW9uIGhhc24ndCBzdGFydGVkIHlldC5cbiAgICAgICAgICAgIHJldHVybiBwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gcmVjdXJzaXZlbHktY2FsY3VsYXRlZCBwcmlvciB2YWx1ZSBhbmQgZmluYWwuXG4gICAgICAgICAgICBjb25zdCB0ID0gKG5vdyAtIHRoaXMuYmVnaW4pIC8gKHRoaXMuZW5kIC0gdGhpcy5iZWdpbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKSwgZmluYWxWYWx1ZSwgZWFzZUN1YmljSW5PdXQodCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmluZ2Agc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIHBhaW50IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0aW9uaW5nPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucHJpb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIExheW91dCAtLS0tLS0tXG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIG9mIHR5cGUgYFByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFByb3BlcnR5VmFsdWU8VCwgUj4+PlxuXG4vKipcbiAqIEJlY2F1c2UgbGF5b3V0IHByb3BlcnRpZXMgYXJlIG5vdCB0cmFuc2l0aW9uYWJsZSwgdGhleSBoYXZlIGEgc2ltcGxlciByZXByZXNlbnRhdGlvbiBhbmQgZXZhbHVhdGlvbiBjaGFpbiB0aGFuXG4gKiBwYWludCBwcm9wZXJ0aWVzOiBgUHJvcGVydHlWYWx1ZWBzIGFyZSBwb3NzaWJseSBldmFsdWF0ZWQsIHByb2R1Y2luZyBwb3NzaWJseSBldmFsdWF0ZWQgdmFsdWVzLCB3aGljaCBhcmUgdGhlblxuICogZnVsbHkgZXZhbHVhdGVkLlxuICpcbiAqIGBMYXlvdXRgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIGxheW91dCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZXMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTGF5b3V0PFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZTxTOiBzdHJpbmc+KG5hbWU6IFMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nPihuYW1lOiBTLCB2YWx1ZTogKikge1xuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHksIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogY2xvbmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQb3NzaWJseUV2YWx1YXRlZCh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFBvc3NpYmx5RXZhbHVhdGVkIC0tLS0tLS1cblxuLyoqXG4gKiBcIlBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZVwiIGlzIGFuIGludGVybWVkaWF0ZSBzdGFnZSBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgYm90aCBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5XG4gKiB2YWx1ZXMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3RhZ2UgaXMgdG8gb3B0aW1pemUgYXdheSB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucyBmb3IgZGF0YS1kcml2ZW4gcHJvcGVydGllcy4gQ29kZVxuICogd2hpY2ggdXNlcyBkYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgaXMgZGVwZW5kZW50IG9uIGZlYXR1cmUgZGF0YSwgYW5kIHJlcXVlc3QgdGhhdCBpdFxuICogYmUgZXZhbHVhdGVkIGZvciBlYWNoIGZlYXR1cmUuIEJ1dCB3aGVuIHRoYXQgcHJvcGVydHkgdmFsdWUgaXMgaW4gZmFjdCBhIGNvbnN0YW50IG9yIGNhbWVyYSBmdW5jdGlvbiwgdGhlIGNhbGN1bGF0aW9uXG4gKiB3aWxsIG5vdCBhY3R1YWxseSBkZXBlbmQgb24gdGhlIGZlYXR1cmUsIGFuZCB3ZSBjYW4gYmVuZWZpdCBmcm9tIHJldHVybmluZyB0aGUgcHJpb3IgcmVzdWx0IG9mIGhhdmluZyBkb25lIHRoZVxuICogZXZhbHVhdGlvbiBvbmNlLCBhaGVhZCBvZiB0aW1lLCBpbiBhbiBpbnRlcm1lZGlhdGUgc3RlcCB3aG9zZSBpbnB1dHMgYXJlIGp1c3QgdGhlIHZhbHVlIGFuZCBcImdsb2JhbFwiIHBhcmFtZXRlcnNcbiAqIHN1Y2ggYXMgY3VycmVudCB6b29tIGxldmVsLlxuICpcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCByZXByZXNlbnRzIHRoZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBvZiB0aGlzIHN0ZXA6IGlmIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvclxuICogY2FtZXJhIGV4cHJlc3Npb24sIHRoZW4gdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IGlzIGEgY29uc3RhbnQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGlucHV0IHZhbHVlIHdhcyBlaXRoZXJcbiAqIGEgc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uLCBhbmQgd2UgbXVzdCBkZWZlciBmaW5hbCBldmFsdWF0aW9uIHVudGlsIHN1cHBsaWVkIGEgZmVhdHVyZS4gV2Ugc2VwYXJhdGVcbiAqIHRoZSBzb3VyY2UgYW5kIGNvbXBvc2l0ZSBjYXNlcyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgd2hlbiBnZW5lcmF0aW5nIEdMIGF0dHJpYnV0ZXMsIGJ1ZmZlcnMsIGFuZFxuICogdW5pZm9ybXMuXG4gKlxuICogTm90ZSB0aGF0IGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCAoYW5kIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLCBiZWxvdykgYXJlIF9ub3RfIHVzZWQgZm9yIHByb3BlcnRpZXMgdGhhdFxuICogZG8gbm90IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcy4gRm9yIHN1Y2ggcHJvcGVydGllcywgd2Uga25vdyB0aGF0IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCBpcyBhbHdheXMgYSBjb25zdGFudFxuICogc2NhbGFyIHZhbHVlLiBTZWUgYmVsb3cuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+ID1cbiAgICB8IHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogVH1cbiAgICB8IFNvdXJjZUV4cHJlc3Npb25cbiAgICB8IENvbXBvc2l0ZUV4cHJlc3Npb247XG5cbi8qKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAgaXMgdXNlZCBmb3IgZGF0YS1kcml2ZW4gcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMuIEl0IGhvbGRzIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCBhbmQgdGhlIGBHbG9iYWxQcm9wZXJ0aWVzYCB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSBpdC4gWW91J3JlIG5vdCBhbGxvd2VkIHRvIHN1cHBseVxuICogYSBkaWZmZXJlbnQgc2V0IG9mIGBHbG9iYWxQcm9wZXJ0aWVzYCB3aGVuIHBlcmZvcm1pbmcgdGhlIGZpbmFsIGV2YWx1YXRpb24gYmVjYXVzZSB0aGV5IHdvdWxkIGJlIGlnbm9yZWQgaW4gdGhlXG4gKiBjYXNlIHdoZXJlIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvciBjYW1lcmEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgcHJvcGVydHk6IERhdGFEcml2ZW5Qcm9wZXJ0eTxUPjtcbiAgICB2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPjtcbiAgICBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBEYXRhRHJpdmVuUHJvcGVydHk8VD4sIHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBpc0NvbnN0YW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGNvbnN0YW50T3IodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsIHRoaXMucGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMsIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUmAuXG4gKlxuICogRm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsIGBSYCBpcyBhIHNjYWxhciB0eXBlIHN1Y2ggYXMgYG51bWJlcmAsIGBzdHJpbmdgLCBvciBgQ29sb3JgLlxuICogRm9yIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMsIGl0IGlzIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLiBDcml0aWNhbGx5LCB0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgc2V0IHVwXG4gKiBpbiBhIHdheSB0aGF0IGFsbG93cyBmbG93IHRvIGtub3cgd2hpY2ggb2YgdGhlc2UgdHdvIGNhc2VzIGFwcGxpZXMgZm9yIGFueSBnaXZlbiBwcm9wZXJ0eSBuYW1lLCBhbmQgaWYgeW91IGF0dGVtcHRcbiAqIHRvIHVzZSBhIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgIGFzIGlmIGl0IHdhcyBhIHNjYWxhciwgb3IgdmljZSB2ZXJzYSwgeW91IHdpbGwgZ2V0IGEgdHlwZSBlcnJvci4gKEhvd2V2ZXIsXG4gKiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjYXNlIGluIHdoaWNoIGZsb3cgZmFpbHMgdG8gcHJvZHVjZSBhIHR5cGUgZXJyb3IgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOiBpbiBhIGNvbnRleHQgc3VjaFxuICogYXMgYGxheWVyLnBhaW50LmdldCgnZm9vLW9wYWNpdHknKSA9PT0gMGAsIGlmIGBmb28tb3BhY2l0eWAgaXMgZGF0YS1kcml2ZW4sIHRoYW4gdGhlIGxlZnQtaGFuZCBzaWRlIGlzIG9mIHR5cGVcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPmAsIGJ1dCBmbG93IHdpbGwgbm90IGNvbXBsYWluIGFib3V0IGNvbXBhcmluZyB0aGlzIHRvIGEgbnVtYmVyIHVzaW5nIGA9PT1gLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMzU5LilcbiAqXG4gKiBUaGVyZSdzIGFsc28gYSB0aGlyZCwgc3BlY2lhbCBjYXNlIHBvc3NpYmxpdHkgZm9yIGBSYDogZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGl0J3MgYD9Dcm9zc0ZhZGVkPFQ+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFI+PlxuXG4vKipcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFJgKSBwYWlycyBmb3IgcGFpbnQgb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3NzaWJseUV2YWx1YXRlZDxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXQ8Uzogc3RyaW5nPihuYW1lOiBTKTogJEVsZW1lbnRUeXBlPFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+LCBTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoaXMgcmVzdHJpY3Rpb24gYWxsb3dzIHVzIHRvIGRlY2xhcmUgc3RhdGljYWxseSB0aGF0IHRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHlcbiAqIGlzIGluIGZhY3QgYWx3YXlzIHRoZSBzY2FsYXIgdHlwZSBgVGAsIGFuZCBjYW4gYmUgdXNlZCB3aXRob3V0IGZ1cnRoZXIgZXZhbHVhdGluZyB0aGUgdmFsdWUgb24gYSBwZXItZmVhdHVyZSBiYXNpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNvbnN0YW50UHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBUPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgVD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogVCB7XG4gICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICByZXR1cm4gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBULCBiOiBULCB0OiBudW1iZXIpOiBUIHtcbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnAoYSwgYiwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBwcm9wZXJ0aWVzIHRoYXQgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHkgaXMgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPmA7IG9idGFpbmluZ1xuICogYSBzY2FsYXIgdmFsdWUgYFRgIHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvbiBhIHBlci1mZWF0dXJlIGJhc2lzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhRHJpdmVuUHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcbiAgICBvdmVycmlkZXM6ID9PYmplY3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbiwgb3ZlcnJpZGVzPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzID0gb3ZlcnJpZGVzO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+PiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcgfHwgdmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPixcbiAgICAgICAgICAgICAgICBiOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sXG4gICAgICAgICAgICAgICAgdDogbnVtYmVyKTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICAgICAgLy8gSWYgZWl0aGVyIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZSBpcyBub24tY29uc3RhbnQsIGdpdmUgdXA6IHdlIGFyZW4ndCBhYmxlIHRvIGludGVycG9sYXRlIGRhdGEtZHJpdmVuIHZhbHVlcy5cbiAgICAgICAgaWYgKGEudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCBiLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgc29sZWx5IGZvciBmaWxsLW91dGxpbmUtY29sb3IuIFRoZSB1bmRlZmluZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IGhhbmRsZWQgaW5cbiAgICAgICAgLy8gRmlsbFN0eWxlTGF5ZXIjcmVjYWxjdWxhdGUsIHdoaWNoIHNldHMgZmlsbC1vdXRsaW5lLWNvbG9yIHRvIHRoZSBmaWxsLWNvbG9yIHZhbHVlIGlmIHRoZSBmb3JtZXJcbiAgICAgICAgLy8gaXMgYSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUgY29udGFpbmluZyBhIGNvbnN0YW50IHVuZGVmaW5lZCB2YWx1ZS4gSW4gYWRkaXRpb24gdG8gdGhlXG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBoZXJlLCB0aGUgb3RoZXIgc291cmNlIG9mIGEgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlIGNvbnRhaW5pbmcgYSBjb25zdGFudFxuICAgICAgICAvLyB1bmRlZmluZWQgdmFsdWUgaXMgdGhlIFwiZGVmYXVsdCB2YWx1ZVwiIGZvciBmaWxsLW91dGxpbmUtY29sb3IgaGVsZCBpblxuICAgICAgICAvLyBgUHJvcGVydGllcyNkZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNgLCB3aGljaCBzZXJ2ZXMgYXMgdGhlIHByb3RvdHlwZSBvZlxuICAgICAgICAvLyBgUG9zc2libHlFdmFsdWF0ZWQjX3ZhbHVlc2AuXG4gICAgICAgIGlmIChhLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYi52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6ICh1bmRlZmluZWQ6IGFueSl9LCBhLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogaW50ZXJwKGEudmFsdWUudmFsdWUsIGIudmFsdWUudmFsdWUsIHQpfSwgYS5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuZXZhbHVhdGUocGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgIGRhdGEgZHJpdmVuIGBsaW5lLXBhdHRlcm5gIHdoaWNoIGFyZSB0cmFuc2l0aW9uZWQgYnkgY3Jvc3MtZmFkaW5nXG4gKiByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8VD4gZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8P0Nyb3NzRmFkZWQ8VD4+IHtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IHVuZGVmaW5lZH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgY29uc3QgaXNJbWFnZUV4cHJlc3Npb24gPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUgPT09ICdyZXNvbHZlZEltYWdlJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50VmFsdWUgPSBpc0ltYWdlRXhwcmVzc2lvbiAmJiB0eXBlb2YgZXZhbHVhdGVkVmFsdWUgIT09ICdzdHJpbmcnID8gZXZhbHVhdGVkVmFsdWUubmFtZSA6IGV2YWx1YXRlZFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB0aGlzLl9jYWxjdWxhdGUoY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGNvbnN0YW50fSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgY29uc3QgY2FtZXJhVmFsID0gdGhpcy5fY2FsY3VsYXRlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb20gLSAxLjB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbSArIDEuMH0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogY2FtZXJhVmFsfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzb3VyY2Ugb3IgY29tcG9zaXRlIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHZhbHVlLmV4cHJlc3Npb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8P0Nyb3NzRmFkZWQ8VD4+LCBnbG9iYWxzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIC0gMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pICsgMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBDcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIGAqLXBhdHRlcm5gIGFuZCBgbGluZS1kYXNoYXJyYXlgLCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgP0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCA/Q3Jvc3NGYWRlZDxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSAtIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSArIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGNvbnN0IHogPSBwYXJhbWV0ZXJzLnpvb207XG4gICAgICAgIHJldHVybiB6ID4gcGFyYW1ldGVycy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gPyB7ZnJvbTogbWluLCB0bzogbWlkfSA6IHtmcm9tOiBtYXgsIHRvOiBtaWR9O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6ID9Dcm9zc0ZhZGVkPFQ+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgYGhlYXRtYXAtY29sb3JgIGFuZCBgbGluZS1ncmFkaWVudGAuIEludGVycG9sYXRpb24gaXMgYSBuby1vcCwgYW5kXG4gKiBldmFsdWF0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluIG9yZGVyIHRvIGluZGljYXRlIGl0cyBwcmVzZW5jZSwgYnV0IHRoZSByZWFsXG4gKiBldmFsdWF0aW9uIGhhcHBlbnMgaW4gU3R5bGVMYXllciBjbGFzc2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENvbG9yUmFtcFByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8Q29sb3IsIGJvb2xlYW4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxDb2xvciwgYm9vbGVhbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XG59XG5cbi8qKlxuICogYFByb3BlcnRpZXNgIGhvbGRzIG9iamVjdHMgY29udGFpbmluZyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGxheW91dCBvciBwYWludCBwcm9wZXJ0eSBzZXQgb2YgYSBnaXZlblxuICogbGF5ZXIgdHlwZS4gVGhlc2Ugb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCBhbmQgdGhleSBhcmUgdXNlZCBhcyB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIGBfdmFsdWVzYCBtZW1iZXJzIG9mXG4gKiBgVHJhbnNpdGlvbmFibGVgLCBgVHJhbnNpdGlvbmluZ2AsIGBMYXlvdXRgLCBhbmQgYFBvc3NpYmx5RXZhbHVhdGVkYC4gVGhpcyBhbGxvd3MgdGhlc2UgY2xhc3NlcyB0byBhdm9pZFxuICogZG9pbmcgd29yayBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBwcm9wZXJ0eSBoYXMgbm8gZXhwbGljaXQgdmFsdWUgc2V0IGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCB0byB0YWtlXG4gKiBvbiB0aGUgZGVmYXVsdCB2YWx1ZTogdXNpbmcgYGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSlgLCB0aGV5IGNhbiBpdGVyYXRlIG92ZXJcbiAqIG9ubHkgdGhlIF9vd25fIHByb3BlcnRpZXMgb2YgYF92YWx1ZXNgLCBza2lwcGluZyByZXBlYXRlZCBjYWxjdWxhdGlvbiBvZiB0cmFuc2l0aW9ucyBhbmQgcG9zc2libGUvZmluYWxcbiAqIGV2YWx1YXRpb25zIGZvciBkZWZhdWx0cywgdGhlIHJlc3VsdCBvZiB3aGljaCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydGllczxQcm9wczogT2JqZWN0PiB7XG4gICAgcHJvcGVydGllczogUHJvcHM7XG4gICAgZGVmYXVsdFByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBvdmVycmlkYWJsZVByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wcykge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMgPSAoW106IGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAocHJvcC5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0UHJvcGVydHlWYWx1ZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFByb3BlcnR5VmFsdWUocHJvcCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUgPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUudW50cmFuc2l0aW9uZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3BlcnR5VmFsdWUucG9zc2libHlFdmFsdWF0ZSgoe306IGFueSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5yZWdpc3RlcignRGF0YURyaXZlblByb3BlcnR5JywgRGF0YURyaXZlblByb3BlcnR5KTtcbnJlZ2lzdGVyKCdEYXRhQ29uc3RhbnRQcm9wZXJ0eScsIERhdGFDb25zdGFudFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5JywgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSk7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZFByb3BlcnR5JywgQ3Jvc3NGYWRlZFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDb2xvclJhbXBQcm9wZXJ0eScsIENvbG9yUmFtcFByb3BlcnR5KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZW5kc1dpdGgsIGZpbHRlck9iamVjdH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0eWxlLFxuICAgIHZhbGlkYXRlTGF5b3V0UHJvcGVydHksXG4gICAgdmFsaWRhdGVQYWludFByb3BlcnR5LFxuICAgIGVtaXRWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtMYXlvdXQsIFRyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQcm9wZXJ0aWVzLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4vcHJvcGVydGllcyc7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlRmlsdGVyfSBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCB0eXBlIHtUcmFuc2l0aW9uUGFyYW1ldGVycywgUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzLCB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1xuICAgIExheWVyU3BlY2lmaWNhdGlvbixcbiAgICBGaWx0ZXJTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIHtTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4vc3R5bGUnO1xuXG5jb25zdCBUUkFOU0lUSU9OX1NVRkZJWCA9ICctdHJhbnNpdGlvbic7XG5cbmNsYXNzIFN0eWxlTGF5ZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBtaXhlZDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgc291cmNlTGF5ZXI6ID9zdHJpbmc7XG4gICAgbWluem9vbTogP251bWJlcjtcbiAgICBtYXh6b29tOiA/bnVtYmVyO1xuICAgIGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiB8IHZvaWQ7XG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnIHwgJ25vbmUnIHwgdm9pZDtcbiAgICBfY3Jvc3NmYWRlUGFyYW1ldGVyczogQ3Jvc3NmYWRlUGFyYW1ldGVycztcblxuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PGFueT47XG4gICAgK2xheW91dDogbWl4ZWQ7XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8YW55PjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPGFueT47XG4gICAgK3BhaW50OiBtaXhlZDtcblxuICAgIF9mZWF0dXJlRmlsdGVyOiBGZWF0dXJlRmlsdGVyO1xuXG4gICAgK3F1ZXJ5UmFkaXVzOiAoYnVja2V0OiBCdWNrZXQpID0+IG51bWJlcjtcbiAgICArcXVlcnlJbnRlcnNlY3RzRmVhdHVyZTogKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpID0+IGJvb2xlYW4gfCBudW1iZXI7XG5cbiAgICArb25BZGQ6ID8obWFwOiBNYXApID0+IHZvaWQ7XG4gICAgK29uUmVtb3ZlOiA/KG1hcDogTWFwKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbiB8IEN1c3RvbUxheWVySW50ZXJmYWNlLCBwcm9wZXJ0aWVzOiAkUmVhZE9ubHk8e2xheW91dD86IFByb3BlcnRpZXM8Kj4sIHBhaW50PzogUHJvcGVydGllczwqPn0+KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pZCA9IGxheWVyLmlkO1xuICAgICAgICB0aGlzLnR5cGUgPSBsYXllci50eXBlO1xuICAgICAgICB0aGlzLl9mZWF0dXJlRmlsdGVyID0ge2ZpbHRlcjogKCkgPT4gdHJ1ZSwgbmVlZEdlb21ldHJ5OiBmYWxzZX07XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdjdXN0b20nKSByZXR1cm47XG5cbiAgICAgICAgbGF5ZXIgPSAoKGxheWVyOiBhbnkpOiBMYXllclNwZWNpZmljYXRpb24pO1xuXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBsYXllci5tZXRhZGF0YTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbGF5ZXIubWluem9vbTtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gbGF5ZXIubWF4em9vbTtcblxuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IGxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXIgPSBsYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IGxheWVyLmZpbHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxheW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQgPSBuZXcgTGF5b3V0KHByb3BlcnRpZXMubGF5b3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50ID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMucGFpbnQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWludFByb3BlcnR5KHByb3BlcnR5LCBsYXllci5wYWludFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXIubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIubGF5b3V0W3Byb3BlcnR5XSwge3ZhbGlkYXRlOiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBnZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ubGF5b3V0LiR7bmFtZX1gO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGF5b3V0UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBtaXhlZCwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBsYXllcnMuJHt0aGlzLmlkfS5wYWludC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVBhaW50UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksICh2YWx1ZTogYW55KSB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFibGUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWRQcm9wZXJ0eSA9IHRyYW5zaXRpb25hYmxlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS10eXBlXCJdID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xuICAgICAgICAgICAgY29uc3Qgd2FzRGF0YURyaXZlbiA9IHRyYW5zaXRpb25hYmxlLnZhbHVlLmlzRGF0YURyaXZlbigpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0cmFuc2l0aW9uYWJsZS52YWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGFEcml2ZW4gPSBuZXdWYWx1ZS5pc0RhdGFEcml2ZW4oKTtcblxuICAgICAgICAgICAgLy8gaWYgYSBjcm9zcy1mYWRlZCB2YWx1ZSBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGljb25zIGdldCBhZGRlZCB0byBlYWNoIHRpbGUncyBpY29uQXRsYXNcbiAgICAgICAgICAgIC8vIHNvIGEgY2FsbCB0byBfdXBkYXRlTGF5ZXIgaXMgbmVjZXNzYXJ5LCBhbmQgd2UgcmV0dXJuIHRydWUgZnJvbSB0aGlzIGZ1bmN0aW9uIHNvIGl0IGdldHMgY2FsbGVkIGluXG4gICAgICAgICAgICAvLyBTdHlsZSNzZXRQYWludFByb3BlcnR5XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRhRHJpdmVuIHx8IHdhc0RhdGFEcml2ZW4gfHwgaXNDcm9zc0ZhZGVkUHJvcGVydHkgfHwgdGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUoXzogc3RyaW5nKSB7XG4gICAgICAgIC8vIE5vLW9wOyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXMuXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNIaWRkZW4oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbnpvb20gJiYgem9vbSA8IHRoaXMubWluem9vbSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm1heHpvb20gJiYgem9vbSA+PSB0aGlzLm1heHpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5ID09PSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl91bmV2YWx1YXRlZExheW91dCkge1xuICAgICAgICAgICAgKHRoaXM6IGFueSkubGF5b3V0ID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXM6IGFueSkucGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBhbnkgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLmlkLFxuICAgICAgICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICAnc291cmNlJzogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAnc291cmNlLWxheWVyJzogdGhpcy5zb3VyY2VMYXllcixcbiAgICAgICAgICAgICdtZXRhZGF0YSc6IHRoaXMubWV0YWRhdGEsXG4gICAgICAgICAgICAnbWluem9vbSc6IHRoaXMubWluem9vbSxcbiAgICAgICAgICAgICdtYXh6b29tJzogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgJ2ZpbHRlcic6IHRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgJ2xheW91dCc6IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ICYmIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgJ3BhaW50JzogdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCAmJiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgb3V0cHV0LmxheW91dCA9IG91dHB1dC5sYXlvdXQgfHwge307XG4gICAgICAgICAgICBvdXRwdXQubGF5b3V0LnZpc2liaWxpdHkgPSB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KG91dHB1dCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIShrZXkgPT09ICdsYXlvdXQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICEoa2V5ID09PSAncGFpbnQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwga2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IG1peGVkLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGxheWVyVHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb2JqZWN0S2V5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX1cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlzM0QoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGlzU3RhdGVEZXBlbmRlbnQoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gKHRoaXM6IGFueSkucGFpbnQuX3ZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpczogYW55KS5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnIHx8IHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb21wb3NpdGUnKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmlzU3RhdGVEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuLy8gTm90ZTogYWxsIFwic2l6ZXNcIiBhcmUgbWVhc3VyZWQgaW4gYnl0ZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG5jb25zdCB2aWV3VHlwZXMgPSB7XG4gICAgJ0ludDgnOiBJbnQ4QXJyYXksXG4gICAgJ1VpbnQ4JzogVWludDhBcnJheSxcbiAgICAnSW50MTYnOiBJbnQxNkFycmF5LFxuICAgICdVaW50MTYnOiBVaW50MTZBcnJheSxcbiAgICAnSW50MzInOiBJbnQzMkFycmF5LFxuICAgICdVaW50MzInOiBVaW50MzJBcnJheSxcbiAgICAnRmxvYXQzMic6IEZsb2F0MzJBcnJheVxufTtcblxuZXhwb3J0IHR5cGUgVmlld1R5cGUgPSAkS2V5czx0eXBlb2Ygdmlld1R5cGVzPjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3Qge1xuICAgIF9wb3MxOiBudW1iZXI7XG4gICAgX3BvczI6IG51bWJlcjtcbiAgICBfcG9zNDogbnVtYmVyO1xuICAgIF9wb3M4OiBudW1iZXI7XG4gICAgK19zdHJ1Y3RBcnJheTogU3RydWN0QXJyYXk7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBvZiBzdWIgY2xhc3Nlcy5cbiAgICBzaXplOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cnVjdEFycmF5fSBzdHJ1Y3RBcnJheSBUaGUgU3RydWN0QXJyYXkgdGhlIHN0cnVjdCBpcyBzdG9yZWQgaW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3QgaW4gdGhlIFN0cnVjdEFycmF5LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RydWN0QXJyYXk6IFN0cnVjdEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICh0aGlzOiBhbnkpLl9zdHJ1Y3RBcnJheSA9IHN0cnVjdEFycmF5O1xuICAgICAgICB0aGlzLl9wb3MxID0gaW5kZXggKiB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3BvczIgPSB0aGlzLl9wb3MxIC8gMjtcbiAgICAgICAgdGhpcy5fcG9zNCA9IHRoaXMuX3BvczEgLyA0O1xuICAgICAgICB0aGlzLl9wb3M4ID0gdGhpcy5fcG9zMSAvIDg7XG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0NBUEFDSVRZID0gMTI4O1xuY29uc3QgUkVTSVpFX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheU1lbWJlciA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogVmlld1R5cGUsXG4gICAgY29tcG9uZW50czogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheUxheW91dCA9IHtcbiAgICBtZW1iZXJzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGFsaWdubWVudDogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkU3RydWN0QXJyYXkgPSB7XG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG59O1xuXG4vKipcbiAqIGBTdHJ1Y3RBcnJheWAgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb3ZlciBgQXJyYXlCdWZmZXJgIGFuZCBgVHlwZWRBcnJheWBcbiAqIG1ha2luZyBpdCBiZWhhdmUgbGlrZSBhbiBhcnJheSBvZiB0eXBlZCBzdHJ1Y3RzLlxuICpcbiAqIENvbmNlcHR1YWxseSwgYSBTdHJ1Y3RBcnJheSBpcyBjb21wcmlzZWQgb2YgZWxlbWVudHMsIGkuZS4sIGluc3RhbmNlcyBvZiBpdHNcbiAqIGFzc29jaWF0ZWQgc3RydWN0IHR5cGUuIEVhY2ggcGFydGljdWxhciBzdHJ1Y3QgdHlwZSwgdG9nZXRoZXIgd2l0aCBhblxuICogYWxpZ25tZW50IHNpemUsIGRldGVybWluZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYSBTdHJ1Y3RBcnJheSB3aG9zZSBlbGVtZW50c1xuICogYXJlIG9mIHRoYXQgdHlwZS4gIFRodXMsIGZvciBlYWNoIHN1Y2ggbGF5b3V0IHRoYXQgd2UgbmVlZCwgd2UgaGF2ZVxuICogYSBjb3Jyc2Vwb25kaW5nIFN0cnVjdEFycmF5TGF5b3V0IGNsYXNzLCBpbmhlcml0aW5nIGZyb20gU3RydWN0QXJyYXkgYW5kXG4gKiBpbXBsZW1lbnRpbmcgYGVtcGxhY2VCYWNrKClgIGFuZCBgX3JlZnJlc2hWaWV3cygpYC5cbiAqXG4gKiBJbiBzb21lIGNhc2VzLCB3aGVyZSB3ZSBuZWVkIHRvIGFjY2VzcyBwYXJ0aWN1bGFyIGVsZW1lbnRzIG9mIGEgU3RydWN0QXJyYXksXG4gKiB3ZSBpbXBsZW1lbnQgYSBtb3JlIHNwZWNpZmljIHN1YmNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBvbmUgb2YgdGhlXG4gKiBTdHJ1Y3RBcnJheUxheW91dHMgYW5kIGFkZHMgYSBgZ2V0KGkpOiBUYCBhY2Nlc3NvciB0aGF0IHJldHVybnMgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgcHJveGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBzcGFjZSBmb3IgdGhlXG4gKiBpLXRoIGVsZW1lbnQuICBUaGlzIGFmZm9yZHMgdGhlIGNvbnZpZW5jZSBvZiB3b3JraW5nIHdpdGggKHNlZW1pbmdseSkgcGxhaW5cbiAqIEphdmFzY3JpcHQgb2JqZWN0cyB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBzZXJpYWxpemluZy9kZXNlcmlhbGl6aW5nIHRoZW1cbiAqIGludG8gQXJyYXlCdWZmZXJzIGZvciBlZmZpY2llbnQgd2ViIHdvcmtlciB0cmFuc2Zlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheSB7XG4gICAgY2FwYWNpdHk6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBpc1RyYW5zZmVycmVkOiBib29sZWFuO1xuICAgIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICB1aW50ODogVWludDhBcnJheTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlLlxuICAgIG1lbWJlcnM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBieXRlc1BlckVsZW1lbnQ6IG51bWJlcjtcbiAgICArZW1wbGFjZUJhY2s6IEZ1bmN0aW9uO1xuICAgICtlbXBsYWNlOiBGdW5jdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlzVHJhbnNmZXJyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IC0xO1xuICAgICAgICB0aGlzLnJlc2l6ZSgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBTdHJ1Y3RBcnJheSBpbnN0YW5jZS4gIFNlcmlhbGl6ZXMgYm90aCB0aGUgcmF3IGRhdGEgYW5kIHRoZVxuICAgICAqIG1ldGFkYXRhIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGUgU3RydWN0QXJyYXkgYmFzZSBjbGFzcyBkdXJpbmdcbiAgICAgKiBkZXNlcmlhbGl6YXRpb24uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplKGFycmF5OiBTdHJ1Y3RBcnJheSwgdHJhbnNmZXJhYmxlcz86IEFycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkU3RydWN0QXJyYXkge1xuICAgICAgICBhc3NlcnQoIWFycmF5LmlzVHJhbnNmZXJyZWQpO1xuXG4gICAgICAgIGFycmF5Ll90cmltKCk7XG5cbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIGFycmF5LmlzVHJhbnNmZXJyZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGFycmF5LmFycmF5QnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZW5ndGg6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgIGFycmF5QnVmZmVyOiBhcnJheS5hcnJheUJ1ZmZlcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IFNlcmlhbGl6ZWRTdHJ1Y3RBcnJheSkge1xuICAgICAgICBjb25zdCBzdHJ1Y3RBcnJheSA9IE9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpO1xuICAgICAgICBzdHJ1Y3RBcnJheS5hcnJheUJ1ZmZlciA9IGlucHV0LmFycmF5QnVmZmVyO1xuICAgICAgICBzdHJ1Y3RBcnJheS5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIHN0cnVjdEFycmF5LmNhcGFjaXR5ID0gaW5wdXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCAvIHN0cnVjdEFycmF5LmJ5dGVzUGVyRWxlbWVudDtcbiAgICAgICAgc3RydWN0QXJyYXkuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICByZXR1cm4gc3RydWN0QXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcnJheSB0byBkaXNjYXJkIHVudXNlZCBjYXBhY2l0eS5cbiAgICAgKi9cbiAgICBfdHJpbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9PSB0aGlzLmNhcGFjaXR5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcGFjaXR5ID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gdGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLCB0aGlzLmxlbmd0aCAqIHRoaXMuYnl0ZXNQZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSB0byAwIHdpdGhvdXQgZGUtYWxsb2NhdGluZyBjYXBjYWNpdHkuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemUgdGhlIGFycmF5LlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoIHRoZW4gYWRkaXRpb25hbCBlbGVtZW50cyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGFkZGVkLlxuICAgICAqIElmIGBuYCBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoIHRoZW4gdGhlIGFycmF5IHdpbGwgYmUgcmVkdWNlZCB0byB0aGUgZmlyc3QgYG5gIGVsZW1lbnRzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBuZXcgc2l6ZSBvZiB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgcmVzaXplKG46IG51bWJlcikge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHRoaXMucmVzZXJ2ZShuKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlIGEgcGxhbm5lZCBpbmNyZWFzZSBpbiBzaXplLCBzbyB0aGF0IGFueSBuZWNlc3NhcnkgYWxsb2NhdGlvbiBtYXlcbiAgICAgKiBiZSBkb25lIG9uY2UsIGFoZWFkIG9mIHRpbWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHJlc2VydmUobjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChuID4gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA9IE1hdGgubWF4KG4sIE1hdGguZmxvb3IodGhpcy5jYXBhY2l0eSAqIFJFU0laRV9NVUxUSVBMSUVSKSwgREVGQVVMVF9DQVBBQ0lUWSk7XG4gICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkgKiB0aGlzLmJ5dGVzUGVyRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9sZFVpbnQ4QXJyYXkgPSB0aGlzLnVpbnQ4O1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgICAgICBpZiAob2xkVWludDhBcnJheSkgdGhpcy51aW50OC5zZXQob2xkVWludDhBcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgVHlwZWRBcnJheSB2aWV3cyBmb3IgdGhlIGN1cnJlbnQgQXJyYXlCdWZmZXIuXG4gICAgICovXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgbWVtYmVyIGZpZWxkcywgY3JlYXRlIGEgZnVsbCBTdHJ1Y3RBcnJheUxheW91dCwgaW5cbiAqIHBhcnRpY3VsYXIgY2FsY3VsYXRpbmcgdGhlIGNvcnJlY3QgYnl0ZSBvZmZzZXQgZm9yIGVhY2ggZmllbGQuICBUaGlzIGRhdGFcbiAqIGlzIHVzZWQgYXQgYnVpbGQgdGltZSB0byBnZW5lcmF0ZSBTdHJ1Y3RBcnJheUxheW91dF8qI2VtcGxhY2VCYWNrKCkgYW5kXG4gKiBvdGhlciBhY2Nlc3NvcnMsIGFuZCBhdCBydW50aW1lIGZvciBiaW5kaW5nIHZlcnRleCBidWZmZXIgYXR0cmlidXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVMYXlvdXQoXG4gICAgbWVtYmVyczogQXJyYXk8eyBuYW1lOiBzdHJpbmcsIHR5cGU6IFZpZXdUeXBlLCArY29tcG9uZW50cz86IG51bWJlciwgfT4sXG4gICAgYWxpZ25tZW50OiBudW1iZXIgPSAxXG4pOiBTdHJ1Y3RBcnJheUxheW91dCB7XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgbWF4U2l6ZSA9IDA7XG4gICAgY29uc3QgbGF5b3V0TWVtYmVycyA9IG1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgYXNzZXJ0KG1lbWJlci5uYW1lLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHR5cGVTaXplID0gc2l6ZU9mKG1lbWJlci50eXBlKTtcbiAgICAgICAgY29uc3QgbWVtYmVyT2Zmc2V0ID0gb2Zmc2V0ID0gYWxpZ24ob2Zmc2V0LCBNYXRoLm1heChhbGlnbm1lbnQsIHR5cGVTaXplKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBtZW1iZXIuY29tcG9uZW50cyB8fCAxO1xuXG4gICAgICAgIG1heFNpemUgPSBNYXRoLm1heChtYXhTaXplLCB0eXBlU2l6ZSk7XG4gICAgICAgIG9mZnNldCArPSB0eXBlU2l6ZSAqIGNvbXBvbmVudHM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IG1lbWJlci5uYW1lLFxuICAgICAgICAgICAgdHlwZTogbWVtYmVyLnR5cGUsXG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgb2Zmc2V0OiBtZW1iZXJPZmZzZXQsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaXplID0gYWxpZ24ob2Zmc2V0LCBNYXRoLm1heChtYXhTaXplLCBhbGlnbm1lbnQpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG1lbWJlcnM6IGxheW91dE1lbWJlcnMsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGFsaWdubWVudFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNpemVPZih0eXBlOiBWaWV3VHlwZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHZpZXdUeXBlc1t0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbn1cblxuZnVuY3Rpb24gYWxpZ24ob2Zmc2V0OiBudW1iZXIsIHNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChvZmZzZXQgLyBzaXplKSAqIHNpemU7XG59XG5cbmV4cG9ydCB7U3RydWN0QXJyYXksIFN0cnVjdCwgdmlld1R5cGVzLCBjcmVhdGVMYXlvdXR9O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHJ1Y3QtYXJyYXlzLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1N0cnVjdCwgU3RydWN0QXJyYXl9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTQnLCBTdHJ1Y3RBcnJheUxheW91dDJpNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDRpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGk4JywgU3RydWN0QXJyYXlMYXlvdXQ0aTgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0aTEyJywgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IFVpbnQ4WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDRdID0gdjI7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA1XSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNl0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDddID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgnLCBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzhdXG4gKiBbMTZdOiBVaW50OFsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogOTtcbiAgICAgICAgY29uc3QgbzEgPSBpICogMTg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMTZdID0gdjg7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxN10gPSB2OTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4JywgU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNF1cbiAqIFs4XTogVWludDE2WzRdXG4gKiBbMTZdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxMjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgN10gPSB2NztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDhdID0gdjg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA5XSA9IHY5O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTBdID0gdjEwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTFdID0gdjExO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCcsIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzZjEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDM7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzZjEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDNmMTInLCBTdHJ1Y3RBcnJheUxheW91dDNmMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWw0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsNCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNl1cbiAqIFsxMl06IFVpbnQzMlsxXVxuICogWzE2XTogVWludDE2WzJdXG4gKiBbMjBdOiBJbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDEyO1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDNdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOF0gPSB2NztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA5XSA9IHY4O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTBdID0gdjk7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMV0gPSB2MTA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDI0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0JywgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IEludDE2WzJdXG4gKiBbOF06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyJywgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDhbMl1cbiAqIFs0XTogRmxvYXQzMlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2Myk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzEgPSBpICogMTI7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDM7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MnViMmYxMicsIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogVWludDE2WzJdXG4gKiBbOF06IFVpbnQzMlszXVxuICogWzIwXTogVWludDE2WzNdXG4gKiBbMjhdOiBGbG9hdDMyWzJdXG4gKiBbMzZdOiBVaW50OFszXVxuICogWzQwXTogVWludDMyWzFdXG4gKiBbNDRdOiBJbnQxNlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI0O1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzEgPSBpICogNDg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMl0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAzXSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDRdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTBdID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTFdID0gdjg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTJdID0gdjk7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDddID0gdjEwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyA4XSA9IHYxMTtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM2XSA9IHYxMjtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM3XSA9IHYxMztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM4XSA9IHYxNDtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAxMF0gPSB2MTU7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyMl0gPSB2MTY7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCcsIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzhdXG4gKiBbMTZdOiBVaW50MTZbMTRdXG4gKiBbNDRdOiBVaW50MzJbMV1cbiAqIFs0OF06IEZsb2F0MzJbM11cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIsIHYxNzogbnVtYmVyLCB2MTg6IG51bWJlciwgdjE5OiBudW1iZXIsIHYyMDogbnVtYmVyLCB2MjE6IG51bWJlciwgdjIyOiBudW1iZXIsIHYyMzogbnVtYmVyLCB2MjQ6IG51bWJlciwgdjI1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyLCB2MTc6IG51bWJlciwgdjE4OiBudW1iZXIsIHYxOTogbnVtYmVyLCB2MjA6IG51bWJlciwgdjIxOiBudW1iZXIsIHYyMjogbnVtYmVyLCB2MjM6IG51bWJlciwgdjI0OiBudW1iZXIsIHYyNTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDMwO1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxNTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDhdID0gdjg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOV0gPSB2OTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMF0gPSB2MTA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTFdID0gdjExO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEyXSA9IHYxMjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxM10gPSB2MTM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTRdID0gdjE0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE1XSA9IHYxNTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNl0gPSB2MTY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTddID0gdjE3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE4XSA9IHYxODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxOV0gPSB2MTk7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMjBdID0gdjIwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDIxXSA9IHYyMTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAxMV0gPSB2MjI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDEyXSA9IHYyMztcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTNdID0gdjI0O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxNF0gPSB2MjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ4aTE0dWkxdWwzZjYwLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2MDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAnLCBTdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjApO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDFmNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDFmNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDFmNCcsIFN0cnVjdEFycmF5TGF5b3V0MWY0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0M2k2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0M2k2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M2k2JywgU3RydWN0QXJyYXlMYXlvdXQzaTYpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQzMlsxXVxuICogWzRdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAyO1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAzXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgnLCBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzdWk2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M3VpNicsIFN0cnVjdEFycmF5TGF5b3V0M3VpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQydWk0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJ1aTQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQydWk0JywgU3RydWN0QXJyYXlMYXlvdXQydWk0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDF1aTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MXVpMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDF1aTInLCBTdHJ1Y3RBcnJheUxheW91dDF1aTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJmOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyZjgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyZjgnLCBTdHJ1Y3RBcnJheUxheW91dDJmOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGYxNiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2Myk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogNDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgM10gPSB2MztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDRmMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGYxNicsIFN0cnVjdEFycmF5TGF5b3V0NGYxNik7XG5cbmNsYXNzIENvbGxpc2lvbkJveFN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheTtcbiAgICBhbmNob3JQb2ludFg6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFk6IG51bWJlcjtcbiAgICB4MTogbnVtYmVyO1xuICAgIHkxOiBudW1iZXI7XG4gICAgeDI6IG51bWJlcjtcbiAgICB5MjogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIHJhZGl1czogbnVtYmVyO1xuICAgIHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcjogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50OiBQb2ludDtcbiAgICBnZXQgYW5jaG9yUG9pbnRYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgZ2V0IGFuY2hvclBvaW50WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIGdldCB4MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIGdldCB5MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXTsgfVxuICAgIGdldCB4MigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XTsgfVxuICAgIGdldCB5MigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XTsgfVxuICAgIGdldCBmZWF0dXJlSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDNdOyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIGdldCByYWRpdXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMTBdOyB9XG4gICAgZ2V0IHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBnZXQgYW5jaG9yUG9pbnQoKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy5hbmNob3JQb2ludFgsIHRoaXMuYW5jaG9yUG9pbnRZKTsgfVxufVxuXG5Db2xsaXNpb25Cb3hTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSAyNDtcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uQm94ID0gQ29sbGlzaW9uQm94U3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsaXNpb25Cb3hBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIENvbGxpc2lvbkJveFN0cnVjdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gaW4gdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkJveFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsaXNpb25Cb3hTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJveEFycmF5JywgQ29sbGlzaW9uQm94QXJyYXkpO1xuXG5jbGFzcyBQbGFjZWRTeW1ib2xTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBnbHlwaFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBudW1HbHlwaHM6IG51bWJlcjtcbiAgICB2ZXJ0ZXhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsaW5lTGVuZ3RoOiBudW1iZXI7XG4gICAgc2VnbWVudDogbnVtYmVyO1xuICAgIGxvd2VyU2l6ZTogbnVtYmVyO1xuICAgIHVwcGVyU2l6ZTogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRYOiBudW1iZXI7XG4gICAgbGluZU9mZnNldFk6IG51bWJlcjtcbiAgICB3cml0aW5nTW9kZTogbnVtYmVyO1xuICAgIHBsYWNlZE9yaWVudGF0aW9uOiBudW1iZXI7XG4gICAgaGlkZGVuOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBnZXQgYW5jaG9yWSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIGdldCBnbHlwaFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgZ2V0IG51bUdseXBocygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBnZXQgdmVydGV4U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMl07IH1cbiAgICBnZXQgbGluZVN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDNdOyB9XG4gICAgZ2V0IGxpbmVMZW5ndGgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDRdOyB9XG4gICAgZ2V0IHNlZ21lbnQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIGdldCBsb3dlclNpemUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXTsgfVxuICAgIGdldCB1cHBlclNpemUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXTsgfVxuICAgIGdldCBsaW5lT2Zmc2V0WCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDddOyB9XG4gICAgZ2V0IGxpbmVPZmZzZXRZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgOF07IH1cbiAgICBnZXQgd3JpdGluZ01vZGUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxICsgMzZdOyB9XG4gICAgZ2V0IHBsYWNlZE9yaWVudGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XTsgfVxuICAgIHNldCBwbGFjZWRPcmllbnRhdGlvbih4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XSA9IHg7IH1cbiAgICBnZXQgaGlkZGVuKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM4XTsgfVxuICAgIHNldCBoaWRkZW4oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF0gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMF07IH1cbiAgICBzZXQgY3Jvc3NUaWxlSUQoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCBhc3NvY2lhdGVkSWNvbkluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxufVxuXG5QbGFjZWRTeW1ib2xTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA0ODtcblxuZXhwb3J0IHR5cGUgUGxhY2VkU3ltYm9sID0gUGxhY2VkU3ltYm9sU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQbGFjZWRTeW1ib2xBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGxhY2VkU3ltYm9sU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogUGxhY2VkU3ltYm9sU3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFBsYWNlZFN5bWJvbFN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignUGxhY2VkU3ltYm9sQXJyYXknLCBQbGFjZWRTeW1ib2xBcnJheSk7XG5cbmNsYXNzIFN5bWJvbEluc3RhbmNlU3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IFN5bWJvbEluc3RhbmNlQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICByaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIHBsYWNlZEljb25TeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAga2V5OiBudW1iZXI7XG4gICAgdGV4dEJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICB0ZXh0Qm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBpY29uQm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIGljb25Cb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogbnVtYmVyO1xuICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtSWNvblZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtVmVydGljYWxJY29uVmVydGljZXM6IG51bWJlcjtcbiAgICBjcm9zc1RpbGVJRDogbnVtYmVyO1xuICAgIHRleHRCb3hTY2FsZTogbnVtYmVyO1xuICAgIHRleHRPZmZzZXQwOiBudW1iZXI7XG4gICAgdGV4dE9mZnNldDE6IG51bWJlcjtcbiAgICBnZXQgYW5jaG9yWCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXTsgfVxuICAgIGdldCBhbmNob3JZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDFdOyB9XG4gICAgZ2V0IHJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgZ2V0IGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXTsgfVxuICAgIGdldCBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDRdOyB9XG4gICAgZ2V0IHZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDVdOyB9XG4gICAgZ2V0IHBsYWNlZEljb25TeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA2XTsgfVxuICAgIGdldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA3XTsgfVxuICAgIGdldCBrZXkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgZ2V0IHRleHRCb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIGdldCB0ZXh0Qm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIGdldCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBnZXQgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXTsgfVxuICAgIGdldCBpY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTNdOyB9XG4gICAgZ2V0IGljb25Cb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTRdOyB9XG4gICAgZ2V0IHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE1XTsgfVxuICAgIGdldCB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTZdOyB9XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTddOyB9XG4gICAgZ2V0IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOF07IH1cbiAgICBnZXQgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxOV07IH1cbiAgICBnZXQgbnVtSWNvblZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMF07IH1cbiAgICBnZXQgbnVtVmVydGljYWxJY29uVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDIxXTsgfVxuICAgIGdldCBjcm9zc1RpbGVJRCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTFdOyB9XG4gICAgc2V0IGNyb3NzVGlsZUlEKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDExXSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFNjYWxlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTJdOyB9XG4gICAgZ2V0IHRleHRPZmZzZXQwKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTNdOyB9XG4gICAgZ2V0IHRleHRPZmZzZXQxKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTRdOyB9XG59XG5cblN5bWJvbEluc3RhbmNlU3RydWN0LnByb3RvdHlwZS5zaXplID0gNjA7XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEluc3RhbmNlID0gU3ltYm9sSW5zdGFuY2VTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN5bWJvbEluc3RhbmNlQXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDhpMTR1aTF1bDNmNjAge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgU3ltYm9sSW5zdGFuY2VTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0KGluZGV4OiBudW1iZXIpOiBTeW1ib2xJbnN0YW5jZVN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xJbnN0YW5jZVN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignU3ltYm9sSW5zdGFuY2VBcnJheScsIFN5bWJvbEluc3RhbmNlQXJyYXkpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBHbHlwaE9mZnNldEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQxZjQge1xuICAgIGdldG9mZnNldFgoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5mbG9hdDMyW2luZGV4ICogMSArIDBdOyB9XG59XG5cbnJlZ2lzdGVyKCdHbHlwaE9mZnNldEFycmF5JywgR2x5cGhPZmZzZXRBcnJheSk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN5bWJvbExpbmVWZXJ0ZXhBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0M2k2IHtcbiAgICBnZXR4KGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMF07IH1cbiAgICBnZXR5KGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMV07IH1cbiAgICBnZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihpbmRleDogbnVtYmVyKSB7IHJldHVybiB0aGlzLmludDE2W2luZGV4ICogMyArIDJdOyB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xMaW5lVmVydGV4QXJyYXknLCBTeW1ib2xMaW5lVmVydGV4QXJyYXkpO1xuXG5jbGFzcyBGZWF0dXJlSW5kZXhTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBnZXQgc291cmNlTGF5ZXJJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBnZXQgYnVja2V0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG59XG5cbkZlYXR1cmVJbmRleFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDg7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVJbmRleCA9IEZlYXR1cmVJbmRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZUluZGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgRmVhdHVyZUluZGV4U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogRmVhdHVyZUluZGV4U3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IEZlYXR1cmVJbmRleFN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmVhdHVyZUluZGV4QXJyYXknLCBGZWF0dXJlSW5kZXhBcnJheSk7XG5cbmV4cG9ydCB7XG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNmMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ4aTE0dWkxdWwzZjYwLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MWY0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2k2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDN1aTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVpMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJmOCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRmMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgUG9zQXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTggYXMgUmFzdGVyQm91bmRzQXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgRmlsbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIGFzIEZpbGxFeHRydXNpb25MYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBIZWF0bWFwTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjggYXMgTGluZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTggYXMgUGF0dGVybkxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0IGFzIFN5bWJvbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMiBhcyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGFzIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGFzIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIgYXMgQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGFzIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBhcyBUcmlhbmdsZUluZGV4QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWk0IGFzIExpbmVJbmRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVpMiBhcyBMaW5lU3RyaXBJbmRleEFycmF5XG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxheW91dCA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCB0eXBlIFNlZ21lbnQgPSB7XG4gICAgc29ydEtleTogbnVtYmVyIHwgdm9pZCxcbiAgICB2ZXJ0ZXhPZmZzZXQ6IG51bWJlcixcbiAgICBwcmltaXRpdmVPZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0ZXhMZW5ndGg6IG51bWJlcixcbiAgICBwcmltaXRpdmVMZW5ndGg6IG51bWJlcixcbiAgICB2YW9zOiB7W186IHN0cmluZ106IFZlcnRleEFycmF5T2JqZWN0fVxufVxuXG5jbGFzcyBTZWdtZW50VmVjdG9yIHtcbiAgICBzdGF0aWMgTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg6IG51bWJlcjtcbiAgICBzZWdtZW50czogQXJyYXk8U2VnbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihzZWdtZW50cz86IEFycmF5PFNlZ21lbnQ+ID0gW10pIHtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICAgIH1cblxuICAgIHByZXBhcmVTZWdtZW50KG51bVZlcnRpY2VzOiBudW1iZXIsIGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgaW5kZXhBcnJheTogU3RydWN0QXJyYXksIHNvcnRLZXk/OiBudW1iZXIpOiBTZWdtZW50IHtcbiAgICAgICAgbGV0IHNlZ21lbnQ6IFNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHdhcm5PbmNlKGBNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgJHtTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIfTogYnVja2V0IHJlcXVlc3RlZCAke251bVZlcnRpY2VzfWApO1xuICAgICAgICBpZiAoIXNlZ21lbnQgfHwgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyBudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEggfHwgc2VnbWVudC5zb3J0S2V5ICE9PSBzb3J0S2V5KSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gKHtcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQ6IGxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQ6IGluZGV4QXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHZlcnRleExlbmd0aDogMCxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVMZW5ndGg6IDBcbiAgICAgICAgICAgIH06IGFueSk7XG4gICAgICAgICAgICBpZiAoc29ydEtleSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnNvcnRLZXkgPSBzb3J0S2V5O1xuICAgICAgICAgICAgdGhpcy5zZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH1cblxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHM7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHRoaXMuc2VnbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiBzZWdtZW50LnZhb3MpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZhb3Nba10uZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNpbXBsZVNlZ21lbnQodmVydGV4T2Zmc2V0OiBudW1iZXIsIHByaW1pdGl2ZU9mZnNldDogbnVtYmVyLCB2ZXJ0ZXhMZW5ndGg6IG51bWJlciwgcHJpbWl0aXZlTGVuZ3RoOiBudW1iZXIpOiBTZWdtZW50VmVjdG9yIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWdtZW50VmVjdG9yKFt7XG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQsXG4gICAgICAgICAgICBwcmltaXRpdmVPZmZzZXQsXG4gICAgICAgICAgICB2ZXJ0ZXhMZW5ndGgsXG4gICAgICAgICAgICBwcmltaXRpdmVMZW5ndGgsXG4gICAgICAgICAgICB2YW9zOiB7fSxcbiAgICAgICAgICAgIHNvcnRLZXk6IDBcbiAgICAgICAgfV0pO1xuICAgIH1cbn1cblxuLypcbiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgYSB2ZXJ0ZXggYXJyYXkuIFRoaXMgbGltaXQgaXMgaW1wb3NlZCBieSBXZWJHTCdzIDE2IGJpdFxuICogYWRkcmVzc2luZyBvZiB2ZXJ0ZXggYnVmZmVycy5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCA9IE1hdGgucG93KDIsIDE2KSAtIDE7XG5cbnJlZ2lzdGVyKCdTZWdtZW50VmVjdG9yJywgU2VnbWVudFZlY3Rvcik7XG5leHBvcnQgZGVmYXVsdCBTZWdtZW50VmVjdG9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBQYWNrcyB0d28gbnVtYmVycywgaW50ZXJwcmV0ZWQgYXMgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGludG8gYSBzaW5nbGVcbiAqIGZsb2F0LiAgVW5wYWNrIHRoZW0gaW4gdGhlIHNoYWRlciB1c2luZyB0aGUgYHVucGFja19mbG9hdCgpYCBmdW5jdGlvbixcbiAqIGRlZmluZWQgaW4gX3ByZWx1ZGUudmVydGV4Lmdsc2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja1VpbnQ4VG9GbG9hdChhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgIC8vIGNvZXJjZSBhIGFuZCBiIHRvIDgtYml0IGludHNcbiAgICBhID0gY2xhbXAoTWF0aC5mbG9vcihhKSwgMCwgMjU1KTtcbiAgICBiID0gY2xhbXAoTWF0aC5mbG9vcihiKSwgMCwgMjU1KTtcbiAgICByZXR1cm4gMjU2ICogYSArIGI7XG59XG4iLCIvKipcbiAqIEpTIEltcGxlbWVudGF0aW9uIG9mIE11cm11ckhhc2gzIChyMTM2KSAoYXMgb2YgTWF5IDIwLCAyMDExKVxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2ggXG4gKi9cblxuZnVuY3Rpb24gbXVybXVyaGFzaDNfMzJfZ2Moa2V5LCBzZWVkKSB7XG5cdHZhciByZW1haW5kZXIsIGJ5dGVzLCBoMSwgaDFiLCBjMSwgYzFiLCBjMiwgYzJiLCBrMSwgaTtcblx0XG5cdHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuXHRieXRlcyA9IGtleS5sZW5ndGggLSByZW1haW5kZXI7XG5cdGgxID0gc2VlZDtcblx0YzEgPSAweGNjOWUyZDUxO1xuXHRjMiA9IDB4MWI4NzM1OTM7XG5cdGkgPSAwO1xuXHRcblx0d2hpbGUgKGkgPCBieXRlcykge1xuXHQgIFx0azEgPSBcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuXHRcdCsraTtcblx0XHRcblx0XHRrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuXHRcdGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cblx0XHRoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG5cdFx0aDFiID0gKCgoKGgxICYgMHhmZmZmKSAqIDUpICsgKCgoKGgxID4+PiAxNikgKiA1KSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGgxID0gKCgoaDFiICYgMHhmZmZmKSArIDB4NmI2NCkgKyAoKCgoaDFiID4+PiAxNikgKyAweGU2NTQpICYgMHhmZmZmKSA8PCAxNikpO1xuXHR9XG5cdFxuXHRrMSA9IDA7XG5cdFxuXHRzd2l0Y2ggKHJlbWFpbmRlcikge1xuXHRcdGNhc2UgMzogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXHRcdGNhc2UgMjogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cdFx0Y2FzZSAxOiBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcblx0XHRcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRoMSBePSBrMTtcblx0fVxuXHRcblx0aDEgXj0ga2V5Lmxlbmd0aDtcblxuXHRoMSBePSBoMSA+Pj4gMTY7XG5cdGgxID0gKCgoaDEgJiAweGZmZmYpICogMHg4NWViY2E2YikgKyAoKCgoaDEgPj4+IDE2KSAqIDB4ODVlYmNhNmIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDEzO1xuXHRoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDE2O1xuXG5cdHJldHVybiBoMSA+Pj4gMDtcbn1cblxuaWYodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gzXzMyX2djXG59IiwiLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMlxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2hcbiAqL1xuXG5mdW5jdGlvbiBtdXJtdXJoYXNoMl8zMl9nYyhzdHIsIHNlZWQpIHtcbiAgdmFyXG4gICAgbCA9IHN0ci5sZW5ndGgsXG4gICAgaCA9IHNlZWQgXiBsLFxuICAgIGkgPSAwLFxuICAgIGs7XG4gIFxuICB3aGlsZSAobCA+PSA0KSB7XG4gIFx0ayA9IFxuICBcdCAgKChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuICAgIFxuICAgIGsgPSAoKChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIGsgXj0gayA+Pj4gMjQ7XG4gICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG5cblx0aCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSkgXiBrO1xuXG4gICAgbCAtPSA0O1xuICAgICsraTtcbiAgfVxuICBcbiAgc3dpdGNoIChsKSB7XG4gIGNhc2UgMzogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG4gIGNhc2UgMjogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgY2FzZSAxOiBoIF49IChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuICAgICAgICAgIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICB9XG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gIGggXj0gaCA+Pj4gMTU7XG5cbiAgcmV0dXJuIGggPj4+IDA7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gyXzMyX2djXG59XG4iLCJ2YXIgbXVybXVyMyA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gzX2djLmpzXCIpXG52YXIgbXVybXVyMiA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gyX2djLmpzXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gbXVybXVyM1xubW9kdWxlLmV4cG9ydHMubXVybXVyMyA9IG11cm11cjNcbm1vZHVsZS5leHBvcnRzLm11cm11cjIgPSBtdXJtdXIyXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgbXVybXVyMyBmcm9tICdtdXJtdXJoYXNoLWpzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbnR5cGUgU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCA9IHtcbiAgICBpZHM6IEZsb2F0NjRBcnJheTtcbiAgICBwb3NpdGlvbnM6IFVpbnQzMkFycmF5O1xufTtcblxudHlwZSBGZWF0dXJlUG9zaXRpb24gPSB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufTtcblxuLy8gQSB0cmFuc2ZlcmFibGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBtYXBzIGZlYXR1cmUgaWRzIHRvIHRoZWlyIGluZGljZXMgYW5kIGJ1ZmZlciBvZmZzZXRzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgIGlkczogQXJyYXk8bnVtYmVyPjtcbiAgICBwb3NpdGlvbnM6IEFycmF5PG51bWJlcj47XG4gICAgaW5kZXhlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlkcyA9IFtdO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmluZGV4ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhZGQoaWQ6IG1peGVkLCBpbmRleDogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmlkcy5wdXNoKGdldE51bWVyaWNJZChpZCkpO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKGluZGV4LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBnZXRQb3NpdGlvbnMoaWQ6IG1peGVkKTogQXJyYXk8RmVhdHVyZVBvc2l0aW9uPiB7XG4gICAgICAgIGFzc2VydCh0aGlzLmluZGV4ZWQpO1xuXG4gICAgICAgIGNvbnN0IGludElkID0gZ2V0TnVtZXJpY0lkKGlkKTtcblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBpZCBpbiB0aGlzLmlkcztcbiAgICAgICAgLy8gcmVsaWVzIG9uIGlkcy9wb3NpdGlvbnMgYmVpbmcgc29ydGVkIGJ5IGlkLCB3aGljaCBoYXBwZW5zIGluIHNlcmlhbGl6YXRpb25cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgaiA9IHRoaXMuaWRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkc1ttXSA+PSBpbnRJZCkge1xuICAgICAgICAgICAgICAgIGogPSBtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gbSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLmlkc1tpXSA9PT0gaW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvc2l0aW9uc1szICogaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAyXTtcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHtpbmRleCwgc3RhcnQsIGVuZH0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShtYXA6IEZlYXR1cmVQb3NpdGlvbk1hcCwgdHJhbnNmZXJhYmxlczogQXJyYXk8QXJyYXlCdWZmZXI+KTogU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBGbG9hdDY0QXJyYXkobWFwLmlkcyk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBVaW50MzJBcnJheShtYXAucG9zaXRpb25zKTtcblxuICAgICAgICBzb3J0KGlkcywgcG9zaXRpb25zLCAwLCBpZHMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChpZHMuYnVmZmVyLCBwb3NpdGlvbnMuYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7aWRzLCBwb3NpdGlvbnN9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXApOiBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIC8vIGFmdGVyIHRyYW5zZmVycmluZywgd2Ugb25seSB1c2UgdGhlc2UgYXJyYXlzIHN0YXRpY2FsbHkgKG5vIHB1c2hlcyksXG4gICAgICAgIC8vIHNvIFR5cGVkQXJyYXkgdnMgQXJyYXkgZGlzdGluY3Rpb24gdGhhdCBmbG93IHBvaW50cyBvdXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgbWFwLmlkcyA9IChvYmouaWRzOiBhbnkpO1xuICAgICAgICBtYXAucG9zaXRpb25zID0gKG9iai5wb3NpdGlvbnM6IGFueSk7XG4gICAgICAgIG1hcC5pbmRleGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59XG5cbmNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuXG5mdW5jdGlvbiBnZXROdW1lcmljSWQodmFsdWU6IG1peGVkKSB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSArdmFsdWU7XG4gICAgaWYgKCFpc05hTihudW1WYWx1ZSkgJiYgbnVtVmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gbnVtVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBtdXJtdXIzKFN0cmluZyh2YWx1ZSkpO1xufVxuXG4vLyBjdXN0b20gcXVpY2tzb3J0IHRoYXQgc29ydHMgaWRzLCBpbmRpY2VzIGFuZCBvZmZzZXRzIHRvZ2V0aGVyIChieSBpZHMpXG5mdW5jdGlvbiBzb3J0KGlkcywgcG9zaXRpb25zLCBsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0ID49IHJpZ2h0KSByZXR1cm47XG5cbiAgICBjb25zdCBwaXZvdCA9IGlkc1sobGVmdCArIHJpZ2h0KSA+PiAxXTtcbiAgICBsZXQgaSA9IGxlZnQgLSAxO1xuICAgIGxldCBqID0gcmlnaHQgKyAxO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgZG8gaSsrOyB3aGlsZSAoaWRzW2ldIDwgcGl2b3QpO1xuICAgICAgICBkbyBqLS07IHdoaWxlIChpZHNbal0gPiBwaXZvdCk7XG4gICAgICAgIGlmIChpID49IGopIGJyZWFrO1xuICAgICAgICBzd2FwKGlkcywgaSwgaik7XG4gICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSwgMyAqIGopO1xuICAgICAgICBzd2FwKHBvc2l0aW9ucywgMyAqIGkgKyAxLCAzICogaiArIDEpO1xuICAgICAgICBzd2FwKHBvc2l0aW9ucywgMyAqIGkgKyAyLCAzICogaiArIDIpO1xuICAgIH1cblxuICAgIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGxlZnQsIGopO1xuICAgIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGogKyAxLCByaWdodCk7XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyLCBpLCBqKSB7XG4gICAgY29uc3QgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG5cbnJlZ2lzdGVyKCdGZWF0dXJlUG9zaXRpb25NYXAnLCBGZWF0dXJlUG9zaXRpb25NYXApO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmV4cG9ydCB0eXBlIFVuaWZvcm1WYWx1ZXM8VXM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFVzLCA8Vj4odTogVW5pZm9ybTxWPikgPT4gVj4+O1xuZXhwb3J0IHR5cGUgVW5pZm9ybUxvY2F0aW9ucyA9IHtbXzogc3RyaW5nXTogV2ViR0xVbmlmb3JtTG9jYXRpb259O1xuXG5jbGFzcyBVbmlmb3JtPFQ+IHtcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIGxvY2F0aW9uOiA/V2ViR0xVbmlmb3JtTG9jYXRpb247XG4gICAgY3VycmVudDogVDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICB0aGlzLmdsID0gY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIH1cblxuICAgICtzZXQ6ICh2OiBUKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBVbmlmb3JtMWkgZXh0ZW5kcyBVbmlmb3JtPG51bWJlcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IDA7XG4gICAgfVxuXG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50ICE9PSB2KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbiwgdik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm0xZiBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB9XG5cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0xZih0aGlzLmxvY2F0aW9uLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTJmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXJdPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gWzAsIDBdO1xuICAgIH1cblxuICAgIHNldCh2OiBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGlmICh2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0gfHwgdlsxXSAhPT0gdGhpcy5jdXJyZW50WzFdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtMmYodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm0zZiBleHRlbmRzIFVuaWZvcm08W251bWJlciwgbnVtYmVyLCBudW1iZXJdPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gWzAsIDAsIDBdO1xuICAgIH1cblxuICAgIHNldCh2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0gfHwgdlsyXSAhPT0gdGhpcy5jdXJyZW50WzJdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm00ZiBleHRlbmRzIFVuaWZvcm08W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGlmICh2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0gfHwgdlsxXSAhPT0gdGhpcy5jdXJyZW50WzFdIHx8XG4gICAgICAgICAgICB2WzJdICE9PSB0aGlzLmN1cnJlbnRbMl0gfHwgdlszXSAhPT0gdGhpcy5jdXJyZW50WzNdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm1Db2xvciBleHRlbmRzIFVuaWZvcm08Q29sb3I+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBDb2xvci50cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICBzZXQodjogQ29sb3IpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYuciAhPT0gdGhpcy5jdXJyZW50LnIgfHwgdi5nICE9PSB0aGlzLmN1cnJlbnQuZyB8fFxuICAgICAgICAgICAgdi5iICE9PSB0aGlzLmN1cnJlbnQuYiB8fCB2LmEgIT09IHRoaXMuY3VycmVudC5hKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbiwgdi5yLCB2LmcsIHYuYiwgdi5hKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgZW1wdHlNYXQ0ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG5jbGFzcyBVbmlmb3JtTWF0cml4NGYgZXh0ZW5kcyBVbmlmb3JtPEZsb2F0MzJBcnJheT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGVtcHR5TWF0NDtcbiAgICB9XG5cbiAgICBzZXQodjogRmxvYXQzMkFycmF5KTogdm9pZCB7XG4gICAgICAgIC8vIFRoZSB2YXN0IG1ham9yaXR5IG9mIG1hdHJpeCBjb21wYXJpc29ucyB0aGF0IHdpbGwgdHJpcCB0aGlzIHNldFxuICAgICAgICAvLyBoYXBwZW4gYXQgaT0xMiBvciBpPTAsIHNvIHdlIGNoZWNrIHRob3NlIGZpcnN0IHRvIGF2b2lkIGxvdHMgb2ZcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgaXRlcmF0aW9uOlxuICAgICAgICBpZiAodlsxMl0gIT09IHRoaXMuY3VycmVudFsxMl0gfHwgdlswXSAhPT0gdGhpcy5jdXJyZW50WzBdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sIGZhbHNlLCB2KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2W2ldICE9PSB0aGlzLmN1cnJlbnRbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCBmYWxzZSwgdik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB7XG4gICAgVW5pZm9ybSxcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybTRmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn07XG5cbmV4cG9ydCB0eXBlIFVuaWZvcm1CaW5kaW5ncyA9IHtbXzogc3RyaW5nXTogVW5pZm9ybTxhbnk+fTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGFja1VpbnQ4VG9GbG9hdH0gZnJvbSAnLi4vc2hhZGVycy9lbmNvZGVfYXR0cmlidXRlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB7U3RydWN0QXJyYXlMYXlvdXQxZjQsIFN0cnVjdEFycmF5TGF5b3V0MmY4LCBTdHJ1Y3RBcnJheUxheW91dDRmMTYsIFBhdHRlcm5MYXlvdXRBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBGZWF0dXJlUG9zaXRpb25NYXAgZnJvbSAnLi9mZWF0dXJlX3Bvc2l0aW9uX21hcCc7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0sXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtNGYsXG4gICAgdHlwZSBVbmlmb3JtTG9jYXRpb25zXG59IGZyb20gJy4uL3JlbmRlci91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7U3RydWN0QXJyYXksIFN0cnVjdEFycmF5TWVtYmVyfSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtcbiAgICBGZWF0dXJlLFxuICAgIEZlYXR1cmVTdGF0ZSxcbiAgICBHbG9iYWxQcm9wZXJ0aWVzLFxuICAgIFNvdXJjZUV4cHJlc3Npb24sXG4gICAgQ29tcG9zaXRlRXhwcmVzc2lvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuZXhwb3J0IHR5cGUgQmluZGVyVW5pZm9ybSA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBiaW5kaW5nOiBVbmlmb3JtPGFueT5cbn07XG5cbmZ1bmN0aW9uIHBhY2tDb2xvcihjb2xvcjogQ29sb3IpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYWNrVWludDhUb0Zsb2F0KDI1NSAqIGNvbG9yLnIsIDI1NSAqIGNvbG9yLmcpLFxuICAgICAgICBwYWNrVWludDhUb0Zsb2F0KDI1NSAqIGNvbG9yLmIsIDI1NSAqIGNvbG9yLmEpXG4gICAgXTtcbn1cblxuLyoqXG4gKiAgYEJpbmRlcmAgaXMgdGhlIGludGVyZmFjZSBkZWZpbml0aW9uIGZvciB0aGUgc3RyYXRlZ2llcyBmb3IgY29uc3RydWN0aW5nLFxuICogIHVwbG9hZGluZywgYW5kIGJpbmRpbmcgcGFpbnQgcHJvcGVydHkgZGF0YSBhcyBHTFNMIGF0dHJpYnV0ZXMuIE1vc3Qgc3R5bGUtXG4gKiAgc3BlYyBwcm9wZXJ0aWVzIGhhdmUgYSAxOjEgcmVsYXRpb25zaGlwIHRvIHNoYWRlciBhdHRyaWJ1dGUvdW5pZm9ybXMsIGJ1dFxuICogIHNvbWUgcmVxdWlyZSBtdWx0bGlwbGUgdmFsdWVzIHBlciBmZWF0dXJlIHRvIGJlIHBhc3NlZCB0byB0aGUgR1BVLCBhbmQgaW5cbiAqICB0aG9zZSBjYXNlcyB3ZSBiaW5kIG11bHRpcGxlIGF0dHJpYnV0ZXMvdW5pZm9ybXMuXG4gKlxuICogIEl0IGhhcyB0aHJlZSBpbXBsZW1lbnRhdGlvbnMsIG9uZSBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgc3RyYXRlZ2llcyB3ZSB1c2U6XG4gKlxuICogICogRm9yIF9jb25zdGFudF8gcHJvcGVydGllcyAtLSB0aG9zZSB3aG9zZSB2YWx1ZSBpcyBhIGNvbnN0YW50LCBvciB0aGUgY29uc3RhbnRcbiAqICAgIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgY2FtZXJhIGV4cHJlc3Npb24gYXQgYSBwYXJ0aWN1bGFyIGNhbWVyYSBwb3NpdGlvbiAtLSB3ZVxuICogICAgZG9uJ3QgbmVlZCBhIHZlcnRleCBhdHRyaWJ1dGUgYnVmZmVyLCBhbmQgaW5zdGVhZCB1c2UgYSB1bmlmb3JtLlxuICogICogRm9yIGRhdGEgZXhwcmVzc2lvbnMsIHdlIHVzZSBhIHZlcnRleCBidWZmZXIgd2l0aCBhIHNpbmdsZSBhdHRyaWJ1dGUgdmFsdWUsXG4gKiAgICB0aGUgZXZhbHVhdGVkIHJlc3VsdCBvZiB0aGUgc291cmNlIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gZmVhdHVyZS5cbiAqICAqIEZvciBjb21wb3NpdGUgZXhwcmVzc2lvbnMsIHdlIHVzZSBhIHZlcnRleCBidWZmZXIgd2l0aCB0d28gYXR0cmlidXRlczogbWluIGFuZFxuICogICAgbWF4IHZhbHVlcyBjb3ZlcmluZyB0aGUgcmFuZ2Ugb2Ygem9vbXMgYXQgd2hpY2ggd2UgZXhwZWN0IHRoZSB0aWxlIHRvIGJlXG4gKiAgICBkaXNwbGF5ZWQuIFRoZXNlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBieSBldmFsdWF0aW5nIHRoZSBjb21wb3NpdGUgZXhwcmVzc2lvbiBmb3JcbiAqICAgIHRoZSBnaXZlbiBmZWF0dXJlIGF0IHN0cmF0ZWdpY2FsbHkgY2hvc2VuIHpvb20gbGV2ZWxzLiBJbiBhZGRpdGlvbiB0byB0aGlzXG4gKiAgICBhdHRyaWJ1dGUgZGF0YSwgd2UgYWxzbyB1c2UgYSB1bmlmb3JtIHZhbHVlIHdoaWNoIHRoZSBzaGFkZXIgdXNlcyB0byBpbnRlcnBvbGF0ZVxuICogICAgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdmFsdWUgYXQgdGhlIGZpbmFsIGRpc3BsYXllZCB6b29tIGxldmVsLiBUaGUgdXNlIG9mIGFcbiAqICAgIHVuaWZvcm0gYWxsb3dzIHVzIHRvIGNoZWFwbHkgdXBkYXRlIHRoZSB2YWx1ZSBvbiBldmVyeSBmcmFtZS5cbiAqXG4gKiAgTm90ZSB0aGF0IHRoZSBzaGFkZXIgc291cmNlIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSB1c2luZyBhIHVuaWZvcm0gb3JcbiAqICBhdHRyaWJ1dGUuIFdlIGR5bmFtaWNhbGx5IGNvbXBpbGUgc2hhZGVycyBhdCBydW50aW1lIHRvIGFjY29tb2RhdGUgdGhpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmludGVyZmFjZSBBdHRyaWJ1dGVCaW5kZXIge1xuICAgIHBvcHVsYXRlUGFpbnRBcnJheShsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiB2b2lkO1xuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IHZvaWQ7XG4gICAgdXBsb2FkKENvbnRleHQpOiB2b2lkO1xuICAgIGRlc3Ryb3koKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFVuaWZvcm1CaW5kZXIge1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBzZXRVbmlmb3JtKHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGN1cnJlbnRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPCo+LCB1bmlmb3JtTmFtZTogc3RyaW5nKTogdm9pZDtcbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiwgbmFtZTogc3RyaW5nKTogJFNoYXBlPFVuaWZvcm08Kj4+O1xufVxuXG5jbGFzcyBDb25zdGFudEJpbmRlciBpbXBsZW1lbnRzIFVuaWZvcm1CaW5kZXIge1xuICAgIHZhbHVlOiBtaXhlZDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IG1peGVkLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSBuYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9YCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxtaXhlZD4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoY3VycmVudFZhbHVlLmNvbnN0YW50T3IodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBfOiBzdHJpbmcpOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiAodGhpcy50eXBlID09PSAnY29sb3InKSA/XG4gICAgICAgICAgICBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9uKSA6XG4gICAgICAgICAgICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzRmFkZWRDb25zdGFudEJpbmRlciBpbXBsZW1lbnRzIFVuaWZvcm1CaW5kZXIge1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuRnJvbTogP0FycmF5PG51bWJlcj47XG4gICAgcGF0dGVyblRvOiA/QXJyYXk8bnVtYmVyPjtcbiAgICBwaXhlbFJhdGlvRnJvbTogbnVtYmVyO1xuICAgIHBpeGVsUmF0aW9UbzogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IG1peGVkLCBuYW1lczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IG5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuRnJvbSA9IG51bGw7XG4gICAgICAgIHRoaXMucGF0dGVyblRvID0gbnVsbDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvRnJvbSA9IDEuMDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvVG8gPSAxLjA7XG4gICAgfVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvOiBJbWFnZVBvc2l0aW9uLCBwb3NGcm9tOiBJbWFnZVBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpb0Zyb20gPSBwb3NGcm9tLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpb1RvID0gcG9zVG8ucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5wYXR0ZXJuRnJvbSA9IHBvc0Zyb20udGxicjtcbiAgICAgICAgdGhpcy5wYXR0ZXJuVG8gPSBwb3NUby50bGJyO1xuICAgIH1cblxuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bWl4ZWQ+LCB1bmlmb3JtTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9XG4gICAgICAgICAgICB1bmlmb3JtTmFtZSA9PT0gJ3VfcGF0dGVybl90bycgPyB0aGlzLnBhdHRlcm5UbyA6XG4gICAgICAgICAgICB1bmlmb3JtTmFtZSA9PT0gJ3VfcGF0dGVybl9mcm9tJyA/IHRoaXMucGF0dGVybkZyb20gOlxuICAgICAgICAgICAgdW5pZm9ybU5hbWUgPT09ICd1X3BpeGVsX3JhdGlvX3RvJyA/IHRoaXMucGl4ZWxSYXRpb1RvIDpcbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9waXhlbF9yYXRpb19mcm9tJyA/IHRoaXMucGl4ZWxSYXRpb0Zyb20gOiBudWxsO1xuICAgICAgICBpZiAocG9zKSB1bmlmb3JtLnNldChwb3MpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCA5KSA9PT0gJ3VfcGF0dGVybicgP1xuICAgICAgICAgICAgbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbikgOlxuICAgICAgICAgICAgbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBTb3VyY2VFeHByZXNzaW9uQmluZGVyIGltcGxlbWVudHMgQXR0cmlidXRlQmluZGVyIHtcbiAgICBleHByZXNzaW9uOiBTb3VyY2VFeHByZXNzaW9uO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuXG4gICAgcGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgcGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBTb3VyY2VFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCBQYWludFZlcnRleEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4pIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICAgICAgbmFtZTogYGFfJHtuYW1lfWAsXG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQzMicsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB0eXBlID09PSAnY29sb3InID8gMiA6IDEsXG4gICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoMCksIGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZShuZXdMZW5ndGgpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBuZXdMZW5ndGgsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogMH0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWUoc3RhcnQsIGVuZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIF9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gcGFja0NvbG9yKHZhbHVlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgY29sb3JbMF0sIGNvbG9yWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIE1hdGguYWJzKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEFycmF5ICYmIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgJiYgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciBpbXBsZW1lbnRzIEF0dHJpYnV0ZUJpbmRlciwgVW5pZm9ybUJpbmRlciB7XG4gICAgZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVzZUludGVnZXJab29tOiBib29sZWFuO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuXG4gICAgcGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgcGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbiwgem9vbTogbnVtYmVyLCBQYWludFZlcnRleEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4pIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSBuYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9X3RgKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy51c2VJbnRlZ2VyWm9vbSA9IHVzZUludGVnZXJab29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHR5cGUgPT09ICdjb2xvcicgPyA0IDogMixcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20gKyAxKSwgZmVhdHVyZSwge30sIGNhbm9uaWNhbCwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUobmV3TGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZShzdGFydCwgbmV3TGVuZ3RoLCBtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiB0aGlzLnpvb219LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHRoaXMuem9vbSArIDF9LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIG1pbiwgbWF4KTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRWYWx1ZShzdGFydCwgZW5kLCBtaW4sIG1heCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5Db2xvciA9IHBhY2tDb2xvcihtaW4pO1xuICAgICAgICAgICAgY29uc3QgbWF4Q29sb3IgPSBwYWNrQ29sb3IobWF4KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgbWluQ29sb3JbMF0sIG1pbkNvbG9yWzFdLCBtYXhDb2xvclswXSwgbWF4Q29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLCBtaW4sIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgTWF0aC5hYnMobWluKSwgTWF0aC5hYnMobWF4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEFycmF5ICYmIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgJiYgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMudXNlSW50ZWdlclpvb20gPyBNYXRoLmZsb29yKGdsb2JhbHMuem9vbSkgOiBnbG9iYWxzLnpvb207XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGNsYW1wKHRoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKGN1cnJlbnRab29tLCB0aGlzLnpvb20sIHRoaXMuem9vbSArIDEpLCAwLCAxKTtcbiAgICAgICAgdW5pZm9ybS5zZXQoZmFjdG9yKTtcbiAgICB9XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiwgXzogc3RyaW5nKTogVW5pZm9ybTFmIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlciBpbXBsZW1lbnRzIEF0dHJpYnV0ZUJpbmRlciB7XG4gICAgZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlSW50ZWdlclpvb206IGJvb2xlYW47XG4gICAgem9vbTogbnVtYmVyO1xuICAgIGxheWVySWQ6IHN0cmluZztcblxuICAgIHpvb21JblBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHpvb21PdXRQYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICB6b29tSW5QYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB6b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbiwgem9vbTogbnVtYmVyLCBQYWludFZlcnRleEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4sIGxheWVySWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnVzZUludGVnZXJab29tID0gdXNlSW50ZWdlclpvb207XG4gICAgICAgIHRoaXMuem9vbSA9IHpvb207XG4gICAgICAgIHRoaXMubGF5ZXJJZCA9IGxheWVySWQ7XG5cbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgIHR5cGU6ICdVaW50MTYnLFxuICAgICAgICAgICAgY29tcG9uZW50czogNCxcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KGxlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUobGVuZ3RoKTtcbiAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZXMoc3RhcnQsIGxlbmd0aCwgZmVhdHVyZS5wYXR0ZXJucyAmJiBmZWF0dXJlLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0sIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZXMoc3RhcnQsIGVuZCwgZmVhdHVyZS5wYXR0ZXJucyAmJiBmZWF0dXJlLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0sIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRWYWx1ZXMoc3RhcnQsIGVuZCwgcGF0dGVybnMsIHBvc2l0aW9ucykge1xuICAgICAgICBpZiAoIXBvc2l0aW9ucyB8fCAhcGF0dGVybnMpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7bWluLCBtaWQsIG1heH0gPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgaW1hZ2VNaW4gPSBwb3NpdGlvbnNbbWluXTtcbiAgICAgICAgY29uc3QgaW1hZ2VNaWQgPSBwb3NpdGlvbnNbbWlkXTtcbiAgICAgICAgY29uc3QgaW1hZ2VNYXggPSBwb3NpdGlvbnNbbWF4XTtcbiAgICAgICAgaWYgKCFpbWFnZU1pbiB8fCAhaW1hZ2VNaWQgfHwgIWltYWdlTWF4KSByZXR1cm47XG5cbiAgICAgICAgLy8gV2UgcG9wdWxhdGUgdHdvIHBhaW50IGFycmF5cyBiZWNhdXNlLCBmb3IgY3Jvc3MtZmFkZWQgcHJvcGVydGllcywgd2UgZG9uJ3Qga25vdyB3aGljaCBkaXJlY3Rpb25cbiAgICAgICAgLy8gd2UncmUgY3Jvc3MtZmFkaW5nIHRvIGF0IGxheW91dCB0aW1lLiBJbiBvcmRlciB0byBrZWVwIHZlcnRleCBhdHRyaWJ1dGVzIHRvIGEgbWluaW11bSBhbmQgbm90IHBhc3NcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgdmVydGV4IGRhdGEgdG8gdGhlIHNoYWRlcnMsIHdlIGRldGVybWluZSB3aGljaCB0byB1cGxvYWQgYXQgZHJhdyB0aW1lLlxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSxcbiAgICAgICAgICAgICAgICBpbWFnZU1pZC50bFswXSwgaW1hZ2VNaWQudGxbMV0sIGltYWdlTWlkLmJyWzBdLCBpbWFnZU1pZC5iclsxXSxcbiAgICAgICAgICAgICAgICBpbWFnZU1pbi50bFswXSwgaW1hZ2VNaW4udGxbMV0sIGltYWdlTWluLmJyWzBdLCBpbWFnZU1pbi5iclsxXSxcbiAgICAgICAgICAgICAgICBpbWFnZU1pZC5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIGltYWdlTWluLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksXG4gICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgaW1hZ2VNYXgudGxbMF0sIGltYWdlTWF4LnRsWzFdLCBpbWFnZU1heC5iclswXSwgaW1hZ2VNYXguYnJbMV0sXG4gICAgICAgICAgICAgICAgaW1hZ2VNaWQucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICBpbWFnZU1heC5waXhlbFJhdGlvLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkgJiYgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyICYmIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkgJiYgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcikgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcikgdGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb2dyYW1Db25maWd1cmF0aW9uIGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgYmluZGluZyBzdHlsZSBsYXllciBwcm9wZXJ0aWVzIGFuZCB0aWxlXG4gKiBsYXllciBmZWF0dXJlIGRhdGEgaW50byBHTCBwcm9ncmFtIHVuaWZvcm1zIGFuZCB2ZXJ0ZXggYXR0cmlidXRlcy5cbiAqXG4gKiBOb24tZGF0YS1kcml2ZW4gcHJvcGVydHkgdmFsdWVzIGFyZSBib3VuZCB0byBzaGFkZXIgdW5pZm9ybXMuIERhdGEtZHJpdmVuIHByb3BlcnR5XG4gKiB2YWx1ZXMgYXJlIGJvdW5kIHRvIHZlcnRleCBhdHRyaWJ1dGVzLiBJbiBvcmRlciB0byBzdXBwb3J0IGEgdW5pZm9ybSBHTFNMIHN5bnRheCBvdmVyXG4gKiBib3RoLCBbTWFwYm94IEdMIFNoYWRlcnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLXNoYWRlcnMpIGRlZmluZXMgYSBgI3ByYWdtYWBcbiAqIGFic3RyYWN0aW9uLCB3aGljaCBQcm9ncmFtQ29uZmlndXJhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nLiBBdCBydW50aW1lLFxuICogaXQgZXhhbWluZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBwYXJ0aWN1bGFyIGxheWVyLCBjb21iaW5lcyB0aGlzIHdpdGggZml4ZWQga25vd2xlZGdlXG4gKiBhYm91dCBob3cgbGF5ZXJzIG9mIHRoZSBwYXJ0aWN1bGFyIHR5cGUgYXJlIGltcGxlbWVudGVkLCBhbmQgZGV0ZXJtaW5lcyB3aGljaCB1bmlmb3Jtc1xuICogYW5kIHZlcnRleCBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVxdWlyZWQuIEl0IGNhbiB0aGVuIHN1YnN0aXR1dGUgdGhlIGFwcHJvcHJpYXRlIHRleHRcbiAqIGludG8gdGhlIHNoYWRlciBzb3VyY2UgY29kZSwgY3JlYXRlIGFuZCBsaW5rIGEgcHJvZ3JhbSwgYW5kIGJpbmQgdGhlIHVuaWZvcm1zIGFuZFxuICogdmVydGV4IGF0dHJpYnV0ZXMgaW4gcHJlcGFyYXRpb24gZm9yIGRyYXdpbmcuXG4gKlxuICogV2hlbiBhIHZlY3RvciB0aWxlIGlzIHBhcnNlZCwgdGhpcyBzYW1lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgdXNlZCB0b1xuICogcG9wdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXJzIG5lZWRlZCBmb3IgZGF0YS1kcml2ZW4gc3R5bGluZyB1c2luZyB0aGUgem9vbVxuICogbGV2ZWwgYW5kIGZlYXR1cmUgcHJvcGVydHkgZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9ncmFtQ29uZmlndXJhdGlvbiB7XG4gICAgYmluZGVyczoge1tfOiBzdHJpbmddOiAoQXR0cmlidXRlQmluZGVyIHwgVW5pZm9ybUJpbmRlcikgfTtcbiAgICBjYWNoZUtleTogc3RyaW5nO1xuICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcblxuICAgIF9idWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IFR5cGVkU3R5bGVMYXllciwgem9vbTogbnVtYmVyLCBmaWx0ZXJQcm9wZXJ0aWVzOiAoXzogc3RyaW5nKSA9PiBib29sZWFuLCBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4pIHtcbiAgICAgICAgdGhpcy5iaW5kZXJzID0ge307XG4gICAgICAgIHRoaXMubGF5b3V0QXR0cmlidXRlcyA9IGxheW91dEF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBbXTtcblxuICAgICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllci5wYWludC5fdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlclByb3BlcnRpZXMocHJvcGVydHkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGF5ZXIucGFpbnQuZ2V0KHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKSB8fCAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gcGFpbnRBdHRyaWJ1dGVOYW1lcyhwcm9wZXJ0eSwgbGF5ZXIudHlwZSk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlO1xuICAgICAgICAgICAgY29uc3QgdXNlSW50ZWdlclpvb20gPSB2YWx1ZS5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvblsncHJvcGVydHktdHlwZSddO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZhZGVkID0gcHJvcFR5cGUgPT09ICdjcm9zcy1mYWRlZCcgfHwgcHJvcFR5cGUgPT09ICdjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbic7XG5cbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRlcnNbcHJvcGVydHldID0gaXNDcm9zc0ZhZGVkID9cbiAgICAgICAgICAgICAgICAgICAgbmV3IENyb3NzRmFkZWRDb25zdGFudEJpbmRlcihleHByZXNzaW9uLnZhbHVlLCBuYW1lcykgOlxuICAgICAgICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRCaW5kZXIoZXhwcmVzc2lvbi52YWx1ZSwgbmFtZXMsIHR5cGUpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChgL3VfJHtwcm9wZXJ0eX1gKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdzb3VyY2UnIHx8IGlzQ3Jvc3NGYWRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBpc0Nyb3NzRmFkZWQgP1xuICAgICAgICAgICAgICAgICAgICBuZXcgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcihleHByZXNzaW9uLCBuYW1lcywgdHlwZSwgdXNlSW50ZWdlclpvb20sIHpvb20sIFN0cnVjdEFycmF5TGF5b3V0LCBsYXllci5pZCkgOlxuICAgICAgICAgICAgICAgICAgICBuZXcgU291cmNlRXhwcmVzc2lvbkJpbmRlcihleHByZXNzaW9uLCBuYW1lcywgdHlwZSwgU3RydWN0QXJyYXlMYXlvdXQpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChgL2FfJHtwcm9wZXJ0eX1gKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3RBcnJheUxheW91dCA9IGxheW91dFR5cGUocHJvcGVydHksIHR5cGUsICdjb21wb3NpdGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRlcnNbcHJvcGVydHldID0gbmV3IENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIoZXhwcmVzc2lvbiwgbmFtZXMsIHR5cGUsIHVzZUludGVnZXJab29tLCB6b29tLCBTdHJ1Y3RBcnJheUxheW91dCk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvel8ke3Byb3BlcnR5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWNoZUtleSA9IGtleXMuc29ydCgpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIGdldE1heFZhbHVlKHByb3BlcnR5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICByZXR1cm4gYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyID8gYmluZGVyLm1heFZhbHVlIDogMDtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXlzKG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcilcbiAgICAgICAgICAgICAgICAoYmluZGVyOiBBdHRyaWJ1dGVCaW5kZXIpLnBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGgsIGZlYXR1cmUsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbzogSW1hZ2VQb3NpdGlvbiwgcG9zRnJvbTogSW1hZ2VQb3NpdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIpXG4gICAgICAgICAgICAgICAgYmluZGVyLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5cyhmZWF0dXJlU3RhdGVzOiBGZWF0dXJlU3RhdGVzLCBmZWF0dXJlTWFwOiBGZWF0dXJlUG9zaXRpb25NYXAsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgbGF5ZXI6IFR5cGVkU3R5bGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGRpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gZmVhdHVyZVN0YXRlcykge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZmVhdHVyZU1hcC5nZXRQb3NpdGlvbnMoaWQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvcyBvZiBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gdnRMYXllci5mZWF0dXJlKHBvcy5pbmRleCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpICYmIChiaW5kZXI6IGFueSkuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0FITTogUmVtb3ZlIGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82MjU1XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxheWVyLnBhaW50LmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYmluZGVyOiBhbnkpLmV4cHJlc3Npb24gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kZXI6IEF0dHJpYnV0ZUJpbmRlcikudXBkYXRlUGFpbnRBcnJheShwb3Muc3RhcnQsIHBvcy5lbmQsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZXNbaWRdLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgIH1cblxuICAgIGRlZmluZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBDb25zdGFudEJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5iaW5kZXIudW5pZm9ybU5hbWVzLm1hcChuYW1lID0+IGAjZGVmaW5lIEhBU19VTklGT1JNXyR7bmFtZX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRQYWludFZlcnRleEJ1ZmZlcnMoKTogQXJyYXk8VmVydGV4QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzO1xuICAgIH1cblxuICAgIGdldFVuaWZvcm1zKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEFycmF5PEJpbmRlclVuaWZvcm0+IHtcbiAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ29uc3RhbnRCaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYmluZGVyLnVuaWZvcm1OYW1lcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGVyLmdldEJpbmRpbmcoY29udGV4dCwgbG9jYXRpb25zW25hbWVdLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnB1c2goe25hbWUsIHByb3BlcnR5LCBiaW5kaW5nfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaWZvcm1zO1xuICAgIH1cblxuICAgIHNldFVuaWZvcm1zPFByb3BlcnRpZXM6IE9iamVjdD4oY29udGV4dDogQ29udGV4dCwgYmluZGVyVW5pZm9ybXM6IEFycmF5PEJpbmRlclVuaWZvcm0+LCBwcm9wZXJ0aWVzOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wZXJ0aWVzPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcykge1xuICAgICAgICAvLyBVbmlmb3JtIHN0YXRlIGJpbmRpbmdzIGFyZSBvd25lZCBieSB0aGUgUHJvZ3JhbSwgYnV0IHdlIHNldCB0aGVtXG4gICAgICAgIC8vIGZyb20gd2l0aGluIHRoZSBQcm9ncmFtQ29uZmlndXJhdG9uJ3MgYmluZGVyIG1lbWJlcnMuXG4gICAgICAgIGZvciAoY29uc3Qge25hbWUsIHByb3BlcnR5LCBiaW5kaW5nfSBvZiBiaW5kZXJVbmlmb3Jtcykge1xuICAgICAgICAgICAgKHRoaXMuYmluZGVyc1twcm9wZXJ0eV06IGFueSkuc2V0VW5pZm9ybShiaW5kaW5nLCBnbG9iYWxzLCBwcm9wZXJ0aWVzLmdldChwcm9wZXJ0eSksIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZT86IENyb3NzZmFkZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGNyb3NzZmFkZSAmJiBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVyblZlcnRleEJ1ZmZlciA9IGNyb3NzZmFkZS5mcm9tU2NhbGUgPT09IDIgPyBiaW5kZXIuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIgOiBiaW5kZXIuem9vbU91dFBhaW50VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuVmVydGV4QnVmZmVyKSB0aGlzLl9idWZmZXJzLnB1c2gocGF0dGVyblZlcnRleEJ1ZmZlcik7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcikgJiYgYmluZGVyLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5wdXNoKGJpbmRlci5wYWludFZlcnRleEJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcilcbiAgICAgICAgICAgICAgICBiaW5kZXIudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUGFpbnRCdWZmZXJzKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpXG4gICAgICAgICAgICAgICAgYmluZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+IHtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IHtbXzogc3RyaW5nXTogUHJvZ3JhbUNvbmZpZ3VyYXRpb259O1xuICAgIG5lZWRzVXBsb2FkOiBib29sZWFuO1xuICAgIF9mZWF0dXJlTWFwOiBGZWF0dXJlUG9zaXRpb25NYXA7XG4gICAgX2J1ZmZlck9mZnNldDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IobGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBsYXllcnM6ICRSZWFkT25seUFycmF5PExheWVyPiwgem9vbTogbnVtYmVyLCBmaWx0ZXJQcm9wZXJ0aWVzOiAoXzogc3RyaW5nKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSkge1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXIuaWRdID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uKGxheWVyLCB6b29tLCBmaWx0ZXJQcm9wZXJ0aWVzLCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVNYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIHRoaXMuX2J1ZmZlck9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5cyhsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW5kZXg6IG51bWJlciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNba2V5XS5wb3B1bGF0ZVBhaW50QXJyYXlzKGxlbmd0aCwgZmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnMsIGNhbm9uaWNhbCwgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mZWF0dXJlTWFwLmFkZChmZWF0dXJlLmlkLCBpbmRleCwgdGhpcy5fYnVmZmVyT2Zmc2V0LCBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2J1ZmZlck9mZnNldCA9IGxlbmd0aDtcblxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5cyhmZWF0dXJlU3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGxheWVyczogJFJlYWRPbmx5QXJyYXk8VHlwZWRTdHlsZUxheWVyPiwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllci5pZF0udXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlcywgdGhpcy5fZmVhdHVyZU1hcCwgdnRMYXllciwgbGF5ZXIsIGltYWdlUG9zaXRpb25zKSB8fCB0aGlzLm5lZWRzVXBsb2FkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0KGxheWVySWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXJJZF07XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5lZWRzVXBsb2FkKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXJJZF0udXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFpbnRBdHRyaWJ1dGVOYW1lcyhwcm9wZXJ0eSwgdHlwZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVFeGNlcHRpb25zID0ge1xuICAgICAgICAndGV4dC1vcGFjaXR5JzogWydvcGFjaXR5J10sXG4gICAgICAgICdpY29uLW9wYWNpdHknOiBbJ29wYWNpdHknXSxcbiAgICAgICAgJ3RleHQtY29sb3InOiBbJ2ZpbGxfY29sb3InXSxcbiAgICAgICAgJ2ljb24tY29sb3InOiBbJ2ZpbGxfY29sb3InXSxcbiAgICAgICAgJ3RleHQtaGFsby1jb2xvcic6IFsnaGFsb19jb2xvciddLFxuICAgICAgICAnaWNvbi1oYWxvLWNvbG9yJzogWydoYWxvX2NvbG9yJ10sXG4gICAgICAgICd0ZXh0LWhhbG8tYmx1cic6IFsnaGFsb19ibHVyJ10sXG4gICAgICAgICdpY29uLWhhbG8tYmx1cic6IFsnaGFsb19ibHVyJ10sXG4gICAgICAgICd0ZXh0LWhhbG8td2lkdGgnOiBbJ2hhbG9fd2lkdGgnXSxcbiAgICAgICAgJ2ljb24taGFsby13aWR0aCc6IFsnaGFsb193aWR0aCddLFxuICAgICAgICAnbGluZS1nYXAtd2lkdGgnOiBbJ2dhcHdpZHRoJ10sXG4gICAgICAgICdsaW5lLXBhdHRlcm4nOiBbJ3BhdHRlcm5fdG8nLCAncGF0dGVybl9mcm9tJywgJ3BpeGVsX3JhdGlvX3RvJywgJ3BpeGVsX3JhdGlvX2Zyb20nXSxcbiAgICAgICAgJ2ZpbGwtcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nLCAncGl4ZWxfcmF0aW9fdG8nLCAncGl4ZWxfcmF0aW9fZnJvbSddLFxuICAgICAgICAnZmlsbC1leHRydXNpb24tcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nLCAncGl4ZWxfcmF0aW9fdG8nLCAncGl4ZWxfcmF0aW9fZnJvbSddLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlTmFtZUV4Y2VwdGlvbnNbcHJvcGVydHldIHx8IFtwcm9wZXJ0eS5yZXBsYWNlKGAke3R5cGV9LWAsICcnKS5yZXBsYWNlKC8tL2csICdfJyldO1xufVxuXG5mdW5jdGlvbiBnZXRMYXlvdXRFeGNlcHRpb24ocHJvcGVydHkpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUV4Y2VwdGlvbnMgPSB7XG4gICAgICAgICdsaW5lLXBhdHRlcm4nOntcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH0sXG4gICAgICAgICdmaWxsLXBhdHRlcm4nOiB7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9LFxuICAgICAgICAnZmlsbC1leHRydXNpb24tcGF0dGVybic6e1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHlFeGNlcHRpb25zW3Byb3BlcnR5XTtcbn1cblxuZnVuY3Rpb24gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgYmluZGVyVHlwZSkge1xuICAgIGNvbnN0IGRlZmF1bHRMYXlvdXRzID0ge1xuICAgICAgICAnY29sb3InOiB7XG4gICAgICAgICAgICAnc291cmNlJzogU3RydWN0QXJyYXlMYXlvdXQyZjgsXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogU3RydWN0QXJyYXlMYXlvdXQ0ZjE2XG4gICAgICAgIH0sXG4gICAgICAgICdudW1iZXInOiB7XG4gICAgICAgICAgICAnc291cmNlJzogU3RydWN0QXJyYXlMYXlvdXQxZjQsXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogU3RydWN0QXJyYXlMYXlvdXQyZjhcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBsYXlvdXRFeGNlcHRpb24gPSBnZXRMYXlvdXRFeGNlcHRpb24ocHJvcGVydHkpO1xuICAgIHJldHVybiAgbGF5b3V0RXhjZXB0aW9uICYmIGxheW91dEV4Y2VwdGlvbltiaW5kZXJUeXBlXSB8fCBkZWZhdWx0TGF5b3V0c1t0eXBlXVtiaW5kZXJUeXBlXTtcbn1cblxucmVnaXN0ZXIoJ0NvbnN0YW50QmluZGVyJywgQ29uc3RhbnRCaW5kZXIpO1xucmVnaXN0ZXIoJ0Nyb3NzRmFkZWRDb25zdGFudEJpbmRlcicsIENyb3NzRmFkZWRDb25zdGFudEJpbmRlcik7XG5yZWdpc3RlcignU291cmNlRXhwcmVzc2lvbkJpbmRlcicsIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIpO1xucmVnaXN0ZXIoJ0Nyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXInLCBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKTtcbnJlZ2lzdGVyKCdDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyJywgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcik7XG5yZWdpc3RlcignUHJvZ3JhbUNvbmZpZ3VyYXRpb24nLCBQcm9ncmFtQ29uZmlndXJhdGlvbiwge29taXQ6IFsnX2J1ZmZlcnMnXX0pO1xucmVnaXN0ZXIoJ1Byb2dyYW1Db25maWd1cmF0aW9uU2V0JywgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgY2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCBFWFRFTlQgZnJvbSAnLi9leHRlbnQnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLy8gVGhlc2UgYm91bmRzIGRlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzdXBwb3J0ZWQgY29vcmRpbmF0ZSB2YWx1ZXMuXG4vLyBXaGlsZSB2aXNpYmxlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gWzAsIEVYVEVOVF0sIHRpbGVzIG1heSB0aGVvcmV0aWNhbGx5XG4vLyBjb250YWluIGNvcmRpbmF0ZXMgd2l0aGluIFstSW5maW5pdHksIEluZmluaXR5XS4gT3VyIHJhbmdlIGlzIGxpbWl0ZWQgYnkgdGhlXG4vLyBudW1iZXIgb2YgYml0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY29vcmRpbmF0ZS5cbmZ1bmN0aW9uIGNyZWF0ZUJvdW5kcyhiaXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiAtMSAqIE1hdGgucG93KDIsIGJpdHMgLSAxKSxcbiAgICAgICAgbWF4OiBNYXRoLnBvdygyLCBiaXRzIC0gMSkgLSAxXG4gICAgfTtcbn1cblxuY29uc3QgYm91bmRzID0gY3JlYXRlQm91bmRzKDE1KTtcblxuLyoqXG4gKiBMb2FkcyBhIGdlb21ldHJ5IGZyb20gYSBWZWN0b3JUaWxlRmVhdHVyZSBhbmQgc2NhbGVzIGl0IHRvIHRoZSBjb21tb24gZXh0ZW50XG4gKiB1c2VkIGludGVybmFsbHkuXG4gKiBAcGFyYW0ge1ZlY3RvclRpbGVGZWF0dXJlfSBmZWF0dXJlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2FkR2VvbWV0cnkoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUpOiBBcnJheTxBcnJheTxQb2ludD4+IHtcbiAgICBjb25zdCBzY2FsZSA9IEVYVEVOVCAvIGZlYXR1cmUuZXh0ZW50O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5sb2FkR2VvbWV0cnkoKTtcbiAgICBmb3IgKGxldCByID0gMDsgciA8IGdlb21ldHJ5Lmxlbmd0aDsgcisrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSBnZW9tZXRyeVtyXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByaW5nLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHJpbmdbcF07XG4gICAgICAgICAgICAvLyByb3VuZCBoZXJlIGJlY2F1c2UgbWFwYm94LWdsLW5hdGl2ZSB1c2VzIGludGVnZXJzIHRvIHJlcHJlc2VudFxuICAgICAgICAgICAgLy8gcG9pbnRzIGFuZCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHRvIGF2b2lkIHJlbmVyaW5nIGRpZmZlcmVuY2VzLlxuICAgICAgICAgICAgcG9pbnQueCA9IE1hdGgucm91bmQocG9pbnQueCAqIHNjYWxlKTtcbiAgICAgICAgICAgIHBvaW50LnkgPSBNYXRoLnJvdW5kKHBvaW50LnkgKiBzY2FsZSk7XG5cbiAgICAgICAgICAgIGlmIChwb2ludC54IDwgYm91bmRzLm1pbiB8fCBwb2ludC54ID4gYm91bmRzLm1heCB8fCBwb2ludC55IDwgYm91bmRzLm1pbiB8fCBwb2ludC55ID4gYm91bmRzLm1heCkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZScpO1xuICAgICAgICAgICAgICAgIHBvaW50LnggPSBjbGFtcChwb2ludC54LCBib3VuZHMubWluLCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgICAgICBwb2ludC55ID0gY2xhbXAocG9pbnQueSwgYm91bmRzLm1pbiwgYm91bmRzLm1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdlb21ldHJ5O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtDaXJjbGVMYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9jaXJjbGVfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1RyaWFuZ2xlSW5kZXhBcnJheX0gZnJvbSAnLi4vaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBJbmRleGVkRmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcbmltcG9ydCB0eXBlIENpcmNsZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5mdW5jdGlvbiBhZGRDaXJjbGVWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIHgsIHksIGV4dHJ1ZGVYLCBleHRydWRlWSkge1xuICAgIGxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAoeCAqIDIpICsgKChleHRydWRlWCArIDEpIC8gMiksXG4gICAgICAgICh5ICogMikgKyAoKGV4dHJ1ZGVZICsgMSkgLyAyKSk7XG59XG5cbi8qKlxuICogQ2lyY2xlcyBhcmUgcmVwcmVzZW50ZWQgYnkgdHdvIHRyaWFuZ2xlcy5cbiAqXG4gKiBFYWNoIGNvcm5lciBoYXMgYSBwb3MgdGhhdCBpcyB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUgYW5kIGFuIGV4dHJ1c2lvblxuICogdmVjdG9yIHRoYXQgaXMgd2hlcmUgaXQgcG9pbnRzLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2lyY2xlQnVja2V0PExheWVyOiBDaXJjbGVTdHlsZUxheWVyIHwgSGVhdG1hcFN0eWxlTGF5ZXI+IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIGxheWVyczogQXJyYXk8TGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBDaXJjbGVMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8TGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IENpcmNsZUxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KGxheW91dEF0dHJpYnV0ZXMsIG9wdGlvbnMubGF5ZXJzLCBvcHRpb25zLnpvb20pO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuICAgICAgICBsZXQgY2lyY2xlU29ydEtleSA9IG51bGw7XG5cbiAgICAgICAgLy8gSGVhdG1hcCBsYXllcnMgYXJlIGhhbmRsZWQgaW4gdGhpcyBidWNrZXQgYW5kIGhhdmUgbm8gZXZhbHVhdGVkIHByb3BlcnRpZXMsIHNvIHdlIGNoZWNrIG91ciBhY2Nlc3NcbiAgICAgICAgaWYgKHN0eWxlTGF5ZXIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgICAgIGNpcmNsZVNvcnRLZXkgPSAoKHN0eWxlTGF5ZXI6IGFueSk6IENpcmNsZVN0eWxlTGF5ZXIpLmxheW91dC5nZXQoJ2NpcmNsZS1zb3J0LWtleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3QgbmVlZEdlb21ldHJ5ID0gdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5O1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGlvbkZlYXR1cmUgPSB7dHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbmVlZEdlb21ldHJ5ID8gbG9hZEdlb21ldHJ5KGZlYXR1cmUpIDogW119O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZXZhbHVhdGlvbkZlYXR1cmUsIGNhbm9uaWNhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIW5lZWRHZW9tZXRyeSkgIGV2YWx1YXRpb25GZWF0dXJlLmdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGNpcmNsZVNvcnRLZXkgP1xuICAgICAgICAgICAgICAgIGNpcmNsZVNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5IDogZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVTb3J0S2V5KSB7XG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIGluIHVzZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGJ1Y2tldEZlYXR1cmUgb2YgYnVja2V0RmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9ID0gYnVja2V0RmVhdHVyZTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcblxuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQ7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54O1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55O1xuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgcG9pbnRzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHRpbGUgYm91bmRhcmllcy5cbiAgICAgICAgICAgICAgICBpZiAoeCA8IDAgfHwgeCA+PSBFWFRFTlQgfHwgeSA8IDAgfHwgeSA+PSBFWFRFTlQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBnZW9tZXRyeSB3aWxsIGJlIG9mIHRoZSBQb2ludCB0eXBlLCBhbmQgd2UnbGwgZGVyaXZlXG4gICAgICAgICAgICAgICAgLy8gdHdvIHRyaWFuZ2xlcyBmcm9tIGl0LlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gw6LClMKMw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKQXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCIDMgICAgIDIgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCICAgICAgICAgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKCIDAgICAgIDEgw6LClMKCXG4gICAgICAgICAgICAgICAgLy8gw6LClMKUw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKYXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXksIGZlYXR1cmUuc29ydEtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAtMSwgLTEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAxLCAtMSk7XG4gICAgICAgICAgICAgICAgYWRkQ2lyY2xlVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHgsIHksIDEsIDEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAtMSwgMSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMywgaW5kZXggKyAyKTtcblxuICAgICAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCB7fSwgY2Fub25pY2FsKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdDaXJjbGVCdWNrZXQnLCBDaXJjbGVCdWNrZXQsIHtvbWl0OiBbJ2xheWVycyddfSk7XG5cbmV4cG9ydCBkZWZhdWx0IENpcmNsZUJ1Y2tldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7aXNDb3VudGVyQ2xvY2t3aXNlfSBmcm9tICcuL3V0aWwnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmV4cG9ydCB7cG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50LCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbiwgcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZSwgcG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBkaXN0VG9TZWdtZW50U3F1YXJlZCwgcG9seWdvbkludGVyc2VjdHNCb3h9O1xuXG50eXBlIExpbmUgPSBBcnJheTxQb2ludD47XG50eXBlIE11bHRpTGluZSA9IEFycmF5PExpbmU+O1xudHlwZSBSaW5nID0gQXJyYXk8UG9pbnQ+O1xudHlwZSBQb2x5Z29uID0gQXJyYXk8UG9pbnQ+O1xudHlwZSBNdWx0aVBvbHlnb24gPSBBcnJheTxQb2x5Z29uPjtcblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHBvbHlnb25BOiBQb2x5Z29uLCBwb2x5Z29uQjogUG9seWdvbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbkEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb25CLCBwb2x5Z29uQVtpXSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbkIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb25BLCBwb2x5Z29uQltpXSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsaW5lSW50ZXJzZWN0c0xpbmUocG9seWdvbkEsIHBvbHlnb25CKSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludChwb2x5Z29uOiBQb2x5Z29uLCBwb2ludDogUG9pbnQsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwb2ludCwgcG9seWdvbiwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbihwb2x5Z29uOiBQb2x5Z29uLCBtdWx0aVBvbHlnb246IE11bHRpUG9seWdvbikge1xuXG4gICAgaWYgKHBvbHlnb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBtdWx0aVBvbHlnb25Db250YWluc1BvaW50KG11bHRpUG9seWdvbiwgcG9seWdvblswXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdWx0aVBvbHlnb24ubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IG11bHRpUG9seWdvblttXTtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByaW5nLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgcmluZ1tuXSkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtdWx0aVBvbHlnb25Db250YWluc1BvaW50KG11bHRpUG9seWdvbiwgcG9seWdvbltpXSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbXVsdGlQb2x5Z29uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0xpbmUocG9seWdvbiwgbXVsdGlQb2x5Z29uW2tdKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lKHBvbHlnb246IFBvbHlnb24sIG11bHRpTGluZTogTXVsdGlMaW5lLCByYWRpdXM6IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVsdGlMaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBtdWx0aUxpbmVbaV07XG5cbiAgICAgICAgaWYgKHBvbHlnb24ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCBsaW5lW2tdKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUludGVyc2VjdHNCdWZmZXJlZExpbmUocG9seWdvbiwgbGluZSwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZUludGVyc2VjdHNCdWZmZXJlZExpbmUobGluZUE6IExpbmUsIGxpbmVCOiBMaW5lLCByYWRpdXM6IG51bWJlcikge1xuXG4gICAgaWYgKGxpbmVBLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShsaW5lQSwgbGluZUIpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGFueSBwb2ludCBpbiBlaXRoZXIgbGluZSBpcyB3aXRoaW4gcmFkaXVzIG9mIHRoZSBvdGhlciBsaW5lXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZUIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUobGluZUJbal0sIGxpbmVBLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZUEubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaWYgKHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQVtrXSwgbGluZUIsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZUludGVyc2VjdHNMaW5lKGxpbmVBOiBMaW5lLCBsaW5lQjogTGluZSkge1xuICAgIGlmIChsaW5lQS5sZW5ndGggPT09IDAgfHwgbGluZUIubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQS5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgYTAgPSBsaW5lQVtpXTtcbiAgICAgICAgY29uc3QgYTEgPSBsaW5lQVtpICsgMV07XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZUIubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBiMCA9IGxpbmVCW2pdO1xuICAgICAgICAgICAgY29uc3QgYjEgPSBsaW5lQltqICsgMV07XG4gICAgICAgICAgICBpZiAobGluZVNlZ21lbnRJbnRlcnNlY3RzTGluZVNlZ21lbnQoYTAsIGExLCBiMCwgYjEpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVTZWdtZW50SW50ZXJzZWN0c0xpbmVTZWdtZW50KGEwOiBQb2ludCwgYTE6IFBvaW50LCBiMDogUG9pbnQsIGIxOiBQb2ludCkge1xuICAgIHJldHVybiBpc0NvdW50ZXJDbG9ja3dpc2UoYTAsIGIwLCBiMSkgIT09IGlzQ291bnRlckNsb2Nrd2lzZShhMSwgYjAsIGIxKSAmJlxuICAgICAgICBpc0NvdW50ZXJDbG9ja3dpc2UoYTAsIGExLCBiMCkgIT09IGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYTEsIGIxKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHA6IFBvaW50LCBsaW5lOiBMaW5lLCByYWRpdXM6IG51bWJlcikge1xuICAgIGNvbnN0IHJhZGl1c1NxdWFyZWQgPSByYWRpdXMgKiByYWRpdXM7XG5cbiAgICBpZiAobGluZS5sZW5ndGggPT09IDEpIHJldHVybiBwLmRpc3RTcXIobGluZVswXSkgPCByYWRpdXNTcXVhcmVkO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIEZpbmQgbGluZSBzZWdtZW50cyB0aGF0IGhhdmUgYSBkaXN0YW5jZSA8PSByYWRpdXNeMiB0byBwXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgdHJlYXQgdGhlIGxpbmUgYXMgXCJjb250YWluaW5nIHBvaW50IHBcIi5cbiAgICAgICAgY29uc3QgdiA9IGxpbmVbaSAtIDFdLCB3ID0gbGluZVtpXTtcbiAgICAgICAgaWYgKGRpc3RUb1NlZ21lbnRTcXVhcmVkKHAsIHYsIHcpIDwgcmFkaXVzU3F1YXJlZCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE1MDE3MjUvMzMxMzc5LlxuZnVuY3Rpb24gZGlzdFRvU2VnbWVudFNxdWFyZWQocDogUG9pbnQsIHY6IFBvaW50LCB3OiBQb2ludCkge1xuICAgIGNvbnN0IGwyID0gdi5kaXN0U3FyKHcpO1xuICAgIGlmIChsMiA9PT0gMCkgcmV0dXJuIHAuZGlzdFNxcih2KTtcbiAgICBjb25zdCB0ID0gKChwLnggLSB2LngpICogKHcueCAtIHYueCkgKyAocC55IC0gdi55KSAqICh3LnkgLSB2LnkpKSAvIGwyO1xuICAgIGlmICh0IDwgMCkgcmV0dXJuIHAuZGlzdFNxcih2KTtcbiAgICBpZiAodCA+IDEpIHJldHVybiBwLmRpc3RTcXIodyk7XG4gICAgcmV0dXJuIHAuZGlzdFNxcih3LnN1Yih2KS5fbXVsdCh0KS5fYWRkKHYpKTtcbn1cblxuLy8gcG9pbnQgaW4gcG9seWdvbiByYXkgY2FzdGluZyBhbGdvcml0aG1cbmZ1bmN0aW9uIG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQocmluZ3M6IEFycmF5PFJpbmc+LCBwOiBQb2ludCkge1xuICAgIGxldCBjID0gZmFsc2UsXG4gICAgICAgIHJpbmcsIHAxLCBwMjtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmluZ3MubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgcmluZyA9IHJpbmdzW2tdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IHJpbmcubGVuZ3RoIC0gMTsgaSA8IHJpbmcubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgICAgICAgICBwMSA9IHJpbmdbaV07XG4gICAgICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgICAgICBpZiAoKChwMS55ID4gcC55KSAhPT0gKHAyLnkgPiBwLnkpKSAmJiAocC54IDwgKHAyLnggLSBwMS54KSAqIChwLnkgLSBwMS55KSAvIChwMi55IC0gcDEueSkgKyBwMS54KSkge1xuICAgICAgICAgICAgICAgIGMgPSAhYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gcG9seWdvbkNvbnRhaW5zUG9pbnQocmluZzogUmluZywgcDogUG9pbnQpIHtcbiAgICBsZXQgYyA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwLCBqID0gcmluZy5sZW5ndGggLSAxOyBpIDwgcmluZy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgY29uc3QgcDEgPSByaW5nW2ldO1xuICAgICAgICBjb25zdCBwMiA9IHJpbmdbal07XG4gICAgICAgIGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gICAgICAgICAgICBjID0gIWM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzQm94KHJpbmc6IFJpbmcsIGJveFgxOiBudW1iZXIsIGJveFkxOiBudW1iZXIsIGJveFgyOiBudW1iZXIsIGJveFkyOiBudW1iZXIpIHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcmluZykge1xuICAgICAgICBpZiAoYm94WDEgPD0gcC54ICYmXG4gICAgICAgICAgICBib3hZMSA8PSBwLnkgJiZcbiAgICAgICAgICAgIGJveFgyID49IHAueCAmJlxuICAgICAgICAgICAgYm94WTIgPj0gcC55KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3JuZXJzID0gW1xuICAgICAgICBuZXcgUG9pbnQoYm94WDEsIGJveFkxKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgxLCBib3hZMiksXG4gICAgICAgIG5ldyBQb2ludChib3hYMiwgYm94WTIpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDIsIGJveFkxKV07XG5cbiAgICBpZiAocmluZy5sZW5ndGggPiAyKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29ybmVyIG9mIGNvcm5lcnMpIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChyaW5nLCBjb3JuZXIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgcDEgPSByaW5nW2ldO1xuICAgICAgICBjb25zdCBwMiA9IHJpbmdbaSArIDFdO1xuICAgICAgICBpZiAoZWRnZUludGVyc2VjdHNCb3gocDEsIHAyLCBjb3JuZXJzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBlZGdlSW50ZXJzZWN0c0JveChlMTogUG9pbnQsIGUyOiBQb2ludCwgY29ybmVyczogQXJyYXk8UG9pbnQ+KSB7XG4gICAgY29uc3QgdGwgPSBjb3JuZXJzWzBdO1xuICAgIGNvbnN0IGJyID0gY29ybmVyc1syXTtcbiAgICAvLyB0aGUgZWRnZSBhbmQgYm94IGRvIG5vdCBpbnRlcnNlY3QgaW4gZWl0aGVyIHRoZSB4IG9yIHkgZGltZW5zaW9uc1xuICAgIGlmICgoKGUxLnggPCB0bC54KSAmJiAoZTIueCA8IHRsLngpKSB8fFxuICAgICAgICAoKGUxLnggPiBici54KSAmJiAoZTIueCA+IGJyLngpKSB8fFxuICAgICAgICAoKGUxLnkgPCB0bC55KSAmJiAoZTIueSA8IHRsLnkpKSB8fFxuICAgICAgICAoKGUxLnkgPiBici55KSAmJiAoZTIueSA+IGJyLnkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gY2hlY2sgaWYgYWxsIGNvcm5lcnMgb2YgdGhlIGJveCBhcmUgb24gdGhlIHNhbWUgc2lkZSBvZiB0aGUgZWRnZVxuICAgIGNvbnN0IGRpciA9IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbMF0pO1xuICAgIHJldHVybiBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbMV0pIHx8XG4gICAgICAgIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1syXSkgfHxcbiAgICAgICAgZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzNdKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSBcIi4vcHJvcGVydGllc1wiO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDaXJjbGVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvY2lyY2xlX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBMaW5lQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1heGltdW1QYWludFZhbHVlKHByb3BlcnR5OiBzdHJpbmcsIGxheWVyOiBTdHlsZUxheWVyLCBidWNrZXQ6IENpcmNsZUJ1Y2tldDwqPiB8IExpbmVCdWNrZXQpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gKChsYXllci5wYWludDogYW55KS5nZXQocHJvcGVydHkpOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8YW55PikudmFsdWU7XG4gICAgaWYgKHZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCkuZ2V0TWF4VmFsdWUocHJvcGVydHkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZURpc3RhbmNlKHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSkge1xuICAgIHJldHVybiBNYXRoLnNxcnQodHJhbnNsYXRlWzBdICogdHJhbnNsYXRlWzBdICsgdHJhbnNsYXRlWzFdICogdHJhbnNsYXRlWzFdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUFuY2hvcjogJ3ZpZXdwb3J0JyB8ICdtYXAnLFxuICAgICAgICAgICAgICAgICAgIGJlYXJpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKCF0cmFuc2xhdGVbMF0gJiYgIXRyYW5zbGF0ZVsxXSkge1xuICAgICAgICByZXR1cm4gcXVlcnlHZW9tZXRyeTtcbiAgICB9XG4gICAgY29uc3QgcHQgPSBQb2ludC5jb252ZXJ0KHRyYW5zbGF0ZSkuX211bHQocGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgaWYgKHRyYW5zbGF0ZUFuY2hvciA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIHB0Ll9yb3RhdGUoLWJlYXJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5R2VvbWV0cnkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBxdWVyeUdlb21ldHJ5W2ldO1xuICAgICAgICB0cmFuc2xhdGVkLnB1c2gocG9pbnQuc3ViKHB0KSk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2xhdGVkO1xufVxuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiY2lyY2xlLXNvcnQta2V5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJjaXJjbGUtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfY2lyY2xlXCJdW1wiY2lyY2xlLXNvcnQta2V5XCJdKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImNpcmNsZS1yYWRpdXNcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImNpcmNsZS1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1zdHJva2UtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImNpcmNsZS1yYWRpdXNcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcmFkaXVzXCJdKSxcbiAgICBcImNpcmNsZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1jb2xvclwiXSksXG4gICAgXCJjaXJjbGUtYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1ibHVyXCJdKSxcbiAgICBcImNpcmNsZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLW9wYWNpdHlcIl0pLFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIl0pLFxuICAgIFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS13aWR0aFwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS1jb2xvclwiXSksXG4gICAgXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLyoqXHJcbiAqIENvbW1vbiB1dGlsaXRpZXNcclxuICogQG1vZHVsZSBnbE1hdHJpeFxyXG4gKi9cbi8vIENvbmZpZ3VyYXRpb24gQ29uc3RhbnRzXG5leHBvcnQgdmFyIEVQU0lMT04gPSAwLjAwMDAwMTtcbmV4cG9ydCB2YXIgQVJSQVlfVFlQRSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gRmxvYXQzMkFycmF5IDogQXJyYXk7XG5leHBvcnQgdmFyIFJBTkRPTSA9IE1hdGgucmFuZG9tO1xuLyoqXHJcbiAqIFNldHMgdGhlIHR5cGUgb2YgYXJyYXkgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB2ZWN0b3JzIGFuZCBtYXRyaWNlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1R5cGV9IHR5cGUgQXJyYXkgdHlwZSwgc3VjaCBhcyBGbG9hdDMyQXJyYXkgb3IgQXJyYXlcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNYXRyaXhBcnJheVR5cGUodHlwZSkge1xuICBBUlJBWV9UWVBFID0gdHlwZTtcbn1cbnZhciBkZWdyZWUgPSBNYXRoLlBJIC8gMTgwO1xuLyoqXHJcbiAqIENvbnZlcnQgRGVncmVlIFRvIFJhZGlhblxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBBbmdsZSBpbiBEZWdyZWVzXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdG9SYWRpYW4oYSkge1xuICByZXR1cm4gYSAqIGRlZ3JlZTtcbn1cbi8qKlxyXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYXJndW1lbnRzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSB2YWx1ZSwgd2l0aGluIGFuIGFic29sdXRlXHJcbiAqIG9yIHJlbGF0aXZlIHRvbGVyYW5jZSBvZiBnbE1hdHJpeC5FUFNJTE9OIChhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgaXMgdXNlZCBmb3IgdmFsdWVzIGxlc3NcclxuICogdGhhbiBvciBlcXVhbCB0byAxLjAsIGFuZCBhIHJlbGF0aXZlIHRvbGVyYW5jZSBpcyB1c2VkIGZvciBsYXJnZXIgdmFsdWVzKVxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBUaGUgZmlyc3QgbnVtYmVyIHRvIHRlc3QuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIFRoZSBzZWNvbmQgbnVtYmVyIHRvIHRlc3QuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBudW1iZXJzIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSBFUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhKSwgTWF0aC5hYnMoYikpO1xufVxuaWYgKCFNYXRoLmh5cG90KSBNYXRoLmh5cG90ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgeSA9IDAsXG4gICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgeSArPSBhcmd1bWVudHNbaV0gKiBhcmd1bWVudHNbaV07XG4gIH1cblxuICByZXR1cm4gTWF0aC5zcXJ0KHkpO1xufTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyeDIgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0MlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQyIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQyIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXQgQSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0xMCwgbTExKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0xMDtcbiAgb3V0WzNdID0gbTExO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDIgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTEwLCBtMTEpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0xMDtcbiAgb3V0WzNdID0gbTExO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShvdXQsIGEpIHtcbiAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZVxuICAvLyBzb21lIHZhbHVlc1xuICBpZiAob3V0ID09PSBhKSB7XG4gICAgdmFyIGExID0gYVsxXTtcbiAgICBvdXRbMV0gPSBhWzJdO1xuICAgIG91dFsyXSA9IGExO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsyXTtcbiAgICBvdXRbMl0gPSBhWzFdO1xuICAgIG91dFszXSA9IGFbM107XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGEwICogYTMgLSBhMiAqIGExO1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IGEzICogZGV0O1xuICBvdXRbMV0gPSAtYTEgKiBkZXQ7XG4gIG91dFsyXSA9IC1hMiAqIGRldDtcbiAgb3V0WzNdID0gYTAgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgLy8gQ2FjaGluZyB0aGlzIHZhbHVlIGlzIG5lc3NlY2FyeSBpZiBvdXQgPT0gYVxuICB2YXIgYTAgPSBhWzBdO1xuICBvdXRbMF0gPSBhWzNdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IGEwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsyXSAqIGFbMV07XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XG4gIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xuICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDIgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBhMCAqIGMgKyBhMiAqIHM7XG4gIG91dFsxXSA9IGExICogYyArIGEzICogcztcbiAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcbiAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDIgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciB2MCA9IHZbMF0sXG4gICAgICB2MSA9IHZbMV07XG4gIG91dFswXSA9IGEwICogdjA7XG4gIG91dFsxXSA9IGExICogdjA7XG4gIG91dFsyXSA9IGEyICogdjE7XG4gIG91dFszXSA9IGEzICogdjE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0Mi5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgbWF0MiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gYztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDIuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyLnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IG1hdDIgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gdlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiAnbWF0MignICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7XG59XG4vKipcclxuICogUmV0dXJucyBMLCBEIGFuZCBVIG1hdHJpY2VzIChMb3dlciB0cmlhbmd1bGFyLCBEaWFnb25hbCBhbmQgVXBwZXIgdHJpYW5ndWxhcikgYnkgZmFjdG9yaXppbmcgdGhlIGlucHV0IG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEwgdGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gRCB0aGUgZGlhZ29uYWwgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gVSB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBpbnB1dCBtYXRyaXggdG8gZmFjdG9yaXplXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gTERVKEwsIEQsIFUsIGEpIHtcbiAgTFsyXSA9IGFbMl0gLyBhWzBdO1xuICBVWzBdID0gYVswXTtcbiAgVVsxXSA9IGFbMV07XG4gIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XG4gIHJldHVybiBbTCwgRCwgVV07XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MidzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMngzIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDJkXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIG1hdDJkIGNvbnRhaW5zIHNpeCBlbGVtZW50cyBkZWZpbmVkIGFzOlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYiwgYyxcclxuICogIGQsIHR4LCB0eV1cclxuICogPC9wcmU+XHJcbiAqIFRoaXMgaXMgYSBzaG9ydCBmb3JtIGZvciB0aGUgM3gzIG1hdHJpeDpcclxuICogPHByZT5cclxuICogW2EsIGIsIDAsXHJcbiAqICBjLCBkLCAwLFxyXG4gKiAgdHgsIHR5LCAxXVxyXG4gKiA8L3ByZT5cclxuICogVGhlIGxhc3QgY29sdW1uIGlzIGlnbm9yZWQgc28gdGhlIGFycmF5IGlzIHNob3J0ZXIgYW5kIG9wZXJhdGlvbnMgYXJlIGZhc3Rlci5cclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MmQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDJkIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDJkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBDb21wb25lbnQgQSAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgQ29tcG9uZW50IEIgKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIENvbXBvbmVudCBDIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZCBDb21wb25lbnQgRCAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR4IENvbXBvbmVudCBUWCAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR5IENvbXBvbmVudCBUWSAoaW5kZXggNSlcclxuICogQHJldHVybnMge21hdDJkfSBBIG5ldyBtYXQyZFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoYSwgYiwgYywgZCwgdHgsIHR5KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcbiAgb3V0WzBdID0gYTtcbiAgb3V0WzFdID0gYjtcbiAgb3V0WzJdID0gYztcbiAgb3V0WzNdID0gZDtcbiAgb3V0WzRdID0gdHg7XG4gIG91dFs1XSA9IHR5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDJkIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIENvbXBvbmVudCBBIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBDb21wb25lbnQgQiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgQ29tcG9uZW50IEMgKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBkIENvbXBvbmVudCBEIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHggQ29tcG9uZW50IFRYIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHkgQ29tcG9uZW50IFRZIChpbmRleCA1KVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIGEsIGIsIGMsIGQsIHR4LCB0eSkge1xuICBvdXRbMF0gPSBhO1xuICBvdXRbMV0gPSBiO1xuICBvdXRbMl0gPSBjO1xuICBvdXRbM10gPSBkO1xuICBvdXRbNF0gPSB0eDtcbiAgb3V0WzVdID0gdHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYWEgPSBhWzBdLFxuICAgICAgYWIgPSBhWzFdLFxuICAgICAgYWMgPSBhWzJdLFxuICAgICAgYWQgPSBhWzNdO1xuICB2YXIgYXR4ID0gYVs0XSxcbiAgICAgIGF0eSA9IGFbNV07XG4gIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBhZCAqIGRldDtcbiAgb3V0WzFdID0gLWFiICogZGV0O1xuICBvdXRbMl0gPSAtYWMgKiBkZXQ7XG4gIG91dFszXSA9IGFhICogZGV0O1xuICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XG4gIG91dFs1XSA9IChhYiAqIGF0eCAtIGFhICogYXR5KSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdO1xuICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgb3V0WzFdID0gYTEgKiBiMCArIGEzICogYjE7XG4gIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xuICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgb3V0WzRdID0gYTAgKiBiNCArIGEyICogYjUgKyBhNDtcbiAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBhMCAqIGMgKyBhMiAqIHM7XG4gIG91dFsxXSA9IGExICogYyArIGEzICogcztcbiAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcbiAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcbiAgb3V0WzRdID0gYTQ7XG4gIG91dFs1XSA9IGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciB2MCA9IHZbMF0sXG4gICAgICB2MSA9IHZbMV07XG4gIG91dFswXSA9IGEwICogdjA7XG4gIG91dFsxXSA9IGExICogdjA7XG4gIG91dFsyXSA9IGEyICogdjE7XG4gIG91dFszXSA9IGEzICogdjE7XG4gIG91dFs0XSA9IGE0O1xuICBvdXRbNV0gPSBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gdHJhbnNsYXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMDtcbiAgb3V0WzFdID0gYTE7XG4gIG91dFsyXSA9IGEyO1xuICBvdXRbM10gPSBhMztcbiAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcbiAgb3V0WzVdID0gYTEgKiB2MCArIGEzICogdjEgKyBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IGM7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gdlsxXTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gdlswXTtcbiAgb3V0WzVdID0gdlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdtYXQyZCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcsICcgKyBhWzRdICsgJywgJyArIGFbNV0gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgMSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyZCdzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0MmQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAzeDMgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0M1xyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0M1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0M30gYSBuZXcgM3gzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs1XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBpbnRvIHRoZSBnaXZlbiBtYXQzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIDN4MyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhICAgdGhlIHNvdXJjZSA0eDQgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0NChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVs0XTtcbiAgb3V0WzRdID0gYVs1XTtcbiAgb3V0WzVdID0gYVs2XTtcbiAgb3V0WzZdID0gYVs4XTtcbiAgb3V0WzddID0gYVs5XTtcbiAgb3V0WzhdID0gYVsxMF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MyB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MyB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHJldHVybnMge21hdDN9IEEgbmV3IG1hdDNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMDIsIG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMTA7XG4gIG91dFs0XSA9IG0xMTtcbiAgb3V0WzVdID0gbTEyO1xuICBvdXRbNl0gPSBtMjA7XG4gIG91dFs3XSA9IG0yMTtcbiAgb3V0WzhdID0gbTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDMgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMikge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMTA7XG4gIG91dFs0XSA9IG0xMTtcbiAgb3V0WzVdID0gbTEyO1xuICBvdXRbNl0gPSBtMjA7XG4gIG91dFs3XSA9IG0yMTtcbiAgb3V0WzhdID0gbTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDMgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTAxID0gYVsxXSxcbiAgICAgICAgYTAyID0gYVsyXSxcbiAgICAgICAgYTEyID0gYVs1XTtcbiAgICBvdXRbMV0gPSBhWzNdO1xuICAgIG91dFsyXSA9IGFbNl07XG4gICAgb3V0WzNdID0gYTAxO1xuICAgIG91dFs1XSA9IGFbN107XG4gICAgb3V0WzZdID0gYTAyO1xuICAgIG91dFs3XSA9IGExMjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbM107XG4gICAgb3V0WzJdID0gYVs2XTtcbiAgICBvdXRbM10gPSBhWzFdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs3XTtcbiAgICBvdXRbNl0gPSBhWzJdO1xuICAgIG91dFs3XSA9IGFbNV07XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHZhciBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XG4gIHZhciBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xuICB2YXIgYjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBiMDEgKiBkZXQ7XG4gIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcbiAgb3V0WzJdID0gKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQ7XG4gIG91dFszXSA9IGIxMSAqIGRldDtcbiAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XG4gIG91dFs1XSA9ICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldDtcbiAgb3V0WzZdID0gYjIxICogZGV0O1xuICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIG91dFswXSA9IGExMSAqIGEyMiAtIGExMiAqIGEyMTtcbiAgb3V0WzFdID0gYTAyICogYTIxIC0gYTAxICogYTIyO1xuICBvdXRbMl0gPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIG91dFszXSA9IGExMiAqIGEyMCAtIGExMCAqIGEyMjtcbiAgb3V0WzRdID0gYTAwICogYTIyIC0gYTAyICogYTIwO1xuICBvdXRbNV0gPSBhMDIgKiBhMTAgLSBhMDAgKiBhMTI7XG4gIG91dFs2XSA9IGExMCAqIGEyMSAtIGExMSAqIGEyMDtcbiAgb3V0WzddID0gYTAxICogYTIwIC0gYTAwICogYTIxO1xuICBvdXRbOF0gPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICByZXR1cm4gYTAwICogKGEyMiAqIGExMSAtIGExMiAqIGEyMSkgKyBhMDEgKiAoLWEyMiAqIGExMCArIGExMiAqIGEyMCkgKyBhMDIgKiAoYTIxICogYTEwIC0gYTExICogYTIwKTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQzJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICB2YXIgYjAwID0gYlswXSxcbiAgICAgIGIwMSA9IGJbMV0sXG4gICAgICBiMDIgPSBiWzJdO1xuICB2YXIgYjEwID0gYlszXSxcbiAgICAgIGIxMSA9IGJbNF0sXG4gICAgICBiMTIgPSBiWzVdO1xuICB2YXIgYjIwID0gYls2XSxcbiAgICAgIGIyMSA9IGJbN10sXG4gICAgICBiMjIgPSBiWzhdO1xuICBvdXRbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XG4gIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcbiAgb3V0WzJdID0gYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyO1xuICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XG4gIG91dFs0XSA9IGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMTtcbiAgb3V0WzVdID0gYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyO1xuICBvdXRbNl0gPSBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjA7XG4gIG91dFs3XSA9IGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMTtcbiAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XSxcbiAgICAgIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XSxcbiAgICAgIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV07XG4gIG91dFswXSA9IGEwMDtcbiAgb3V0WzFdID0gYTAxO1xuICBvdXRbMl0gPSBhMDI7XG4gIG91dFszXSA9IGExMDtcbiAgb3V0WzRdID0gYTExO1xuICBvdXRbNV0gPSBhMTI7XG4gIG91dFs2XSA9IHggKiBhMDAgKyB5ICogYTEwICsgYTIwO1xuICBvdXRbN10gPSB4ICogYTAxICsgeSAqIGExMSArIGEyMTtcbiAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDMgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV0sXG4gICAgICBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF0sXG4gICAgICBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjICogYTAwICsgcyAqIGExMDtcbiAgb3V0WzFdID0gYyAqIGEwMSArIHMgKiBhMTE7XG4gIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xuICBvdXRbM10gPSBjICogYTEwIC0gcyAqIGEwMDtcbiAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XG4gIG91dFs1XSA9IGMgKiBhMTIgLSBzICogYTAyO1xuICBvdXRbNl0gPSBhMjA7XG4gIG91dFs3XSA9IGEyMTtcbiAgb3V0WzhdID0gYTIyO1xuICByZXR1cm4gb3V0O1xufVxuO1xuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV07XG4gIG91dFswXSA9IHggKiBhWzBdO1xuICBvdXRbMV0gPSB4ICogYVsxXTtcbiAgb3V0WzJdID0geCAqIGFbMl07XG4gIG91dFszXSA9IHkgKiBhWzNdO1xuICBvdXRbNF0gPSB5ICogYVs0XTtcbiAgb3V0WzVdID0geSAqIGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSB2WzBdO1xuICBvdXRbN10gPSB2WzFdO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gLXM7XG4gIG91dFs0XSA9IGM7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHZbMV07XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29waWVzIHRoZSB2YWx1ZXMgZnJvbSBhIG1hdDJkIGludG8gYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBjb3B5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDJkKG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSBhWzJdO1xuICBvdXRbNF0gPSBhWzNdO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSBhWzRdO1xuICBvdXRbN10gPSBhWzVdO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiogQ2FsY3VsYXRlcyBhIDN4MyBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4qXHJcbiogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4qIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQob3V0LCBxKSB7XG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeXggPSB5ICogeDI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHp4ID0geiAqIHgyO1xuICB2YXIgenkgPSB6ICogeTI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtIHl5IC0geno7XG4gIG91dFszXSA9IHl4IC0gd3o7XG4gIG91dFs2XSA9IHp4ICsgd3k7XG4gIG91dFsxXSA9IHl4ICsgd3o7XG4gIG91dFs0XSA9IDEgLSB4eCAtIHp6O1xuICBvdXRbN10gPSB6eSAtIHd4O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbNV0gPSB6eSArIHd4O1xuICBvdXRbOF0gPSAxIC0geHggLSB5eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsRnJvbU1hdDQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcbiAgb3V0WzFdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xuICBvdXRbM10gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs1XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xuICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcbiAgb3V0WzddID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIDJEIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBXaWR0aCBvZiB5b3VyIGdsIGNvbnRleHRcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBIZWlnaHQgb2YgZ2wgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdGlvbihvdXQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgb3V0WzBdID0gMiAvIHdpZHRoO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAtMiAvIGhlaWdodDtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gLTE7XG4gIG91dFs3XSA9IDE7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ21hdDMoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnLCAnICsgYVs0XSArICcsICcgKyBhWzVdICsgJywgJyArIGFbNl0gKyAnLCAnICsgYVs3XSArICcsICcgKyBhWzhdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddLCBhWzhdKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQzJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICBvdXRbNF0gPSBhWzRdIC0gYls0XTtcbiAgb3V0WzVdID0gYVs1XSAtIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gLSBiWzZdO1xuICBvdXRbN10gPSBhWzddIC0gYls3XTtcbiAgb3V0WzhdID0gYVs4XSAtIGJbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIG91dFs4XSA9IGFbOF0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDMncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0M30gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XSAmJiBhWzhdID09PSBiWzhdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0M30gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN10sXG4gICAgICBhOCA9IGFbOF07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN10sXG4gICAgICBiOCA9IGJbOF07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpICYmIE1hdGguYWJzKGE4IC0gYjgpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE4KSwgTWF0aC5hYnMoYjgpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiA0eDQgTWF0cml4PGJyPkZvcm1hdDogY29sdW1uLW1ham9yLCB3aGVuIHR5cGVkIG91dCBpdCBsb29rcyBsaWtlIHJvdy1tYWpvcjxicj5UaGUgbWF0cmljZXMgYXJlIGJlaW5nIHBvc3QgbXVsdGlwbGllZC5cclxuICogQG1vZHVsZSBtYXQ0XHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQ0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBhIG5ldyA0eDQgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFs1XSA9IDE7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0NCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gQSBuZXcgbWF0NFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQ0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShvdXQsIGEpIHtcbiAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICBpZiAob3V0ID09PSBhKSB7XG4gICAgdmFyIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGEwMyA9IGFbM107XG4gICAgdmFyIGExMiA9IGFbNl0sXG4gICAgICAgIGExMyA9IGFbN107XG4gICAgdmFyIGEyMyA9IGFbMTFdO1xuICAgIG91dFsxXSA9IGFbNF07XG4gICAgb3V0WzJdID0gYVs4XTtcbiAgICBvdXRbM10gPSBhWzEyXTtcbiAgICBvdXRbNF0gPSBhMDE7XG4gICAgb3V0WzZdID0gYVs5XTtcbiAgICBvdXRbN10gPSBhWzEzXTtcbiAgICBvdXRbOF0gPSBhMDI7XG4gICAgb3V0WzldID0gYTEyO1xuICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICBvdXRbMTJdID0gYTAzO1xuICAgIG91dFsxM10gPSBhMTM7XG4gICAgb3V0WzE0XSA9IGEyMztcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbNF07XG4gICAgb3V0WzJdID0gYVs4XTtcbiAgICBvdXRbM10gPSBhWzEyXTtcbiAgICBvdXRbNF0gPSBhWzFdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs5XTtcbiAgICBvdXRbN10gPSBhWzEzXTtcbiAgICBvdXRbOF0gPSBhWzJdO1xuICAgIG91dFs5XSA9IGFbNl07XG4gICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICBvdXRbMTJdID0gYVszXTtcbiAgICBvdXRbMTNdID0gYVs3XTtcbiAgICBvdXRbMTRdID0gYVsxMV07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xuICBvdXRbMV0gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xuICBvdXRbNF0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcbiAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbN10gPSAoYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxKSAqIGRldDtcbiAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xuICBvdXRbMTBdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcbiAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xuICBvdXRbMTNdID0gKGEwMCAqIGIwOSAtIGEwMSAqIGIwNyArIGEwMiAqIGIwNikgKiBkZXQ7XG4gIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcbiAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICBvdXRbMF0gPSBhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMik7XG4gIG91dFsxXSA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcbiAgb3V0WzJdID0gYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbM10gPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs0XSA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcbiAgb3V0WzVdID0gYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpO1xuICBvdXRbNl0gPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs3XSA9IGEwMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTEwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKTtcbiAgb3V0WzhdID0gYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpO1xuICBvdXRbOV0gPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XG4gIG91dFsxMF0gPSBhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSk7XG4gIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XG4gIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XG4gIG91dFsxM10gPSBhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSk7XG4gIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XG4gIG91dFsxNV0gPSBhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTsgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG5cbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgb3V0WzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls0XTtcbiAgYjEgPSBiWzVdO1xuICBiMiA9IGJbNl07XG4gIGIzID0gYls3XTtcbiAgb3V0WzRdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFs1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbNl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzddID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls4XTtcbiAgYjEgPSBiWzldO1xuICBiMiA9IGJbMTBdO1xuICBiMyA9IGJbMTFdO1xuICBvdXRbOF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzldID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzExXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbMTJdO1xuICBiMSA9IGJbMTNdO1xuICBiMiA9IGJbMTRdO1xuICBiMyA9IGJbMTVdO1xuICBvdXRbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzE0XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICB2YXIgYTAwLCBhMDEsIGEwMiwgYTAzO1xuICB2YXIgYTEwLCBhMTEsIGExMiwgYTEzO1xuICB2YXIgYTIwLCBhMjEsIGEyMiwgYTIzO1xuXG4gIGlmIChhID09PSBvdXQpIHtcbiAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcbiAgfSBlbHNlIHtcbiAgICBhMDAgPSBhWzBdO1xuICAgIGEwMSA9IGFbMV07XG4gICAgYTAyID0gYVsyXTtcbiAgICBhMDMgPSBhWzNdO1xuICAgIGExMCA9IGFbNF07XG4gICAgYTExID0gYVs1XTtcbiAgICBhMTIgPSBhWzZdO1xuICAgIGExMyA9IGFbN107XG4gICAgYTIwID0gYVs4XTtcbiAgICBhMjEgPSBhWzldO1xuICAgIGEyMiA9IGFbMTBdO1xuICAgIGEyMyA9IGFbMTFdO1xuICAgIG91dFswXSA9IGEwMDtcbiAgICBvdXRbMV0gPSBhMDE7XG4gICAgb3V0WzJdID0gYTAyO1xuICAgIG91dFszXSA9IGEwMztcbiAgICBvdXRbNF0gPSBhMTA7XG4gICAgb3V0WzVdID0gYTExO1xuICAgIG91dFs2XSA9IGExMjtcbiAgICBvdXRbN10gPSBhMTM7XG4gICAgb3V0WzhdID0gYTIwO1xuICAgIG91dFs5XSA9IGEyMTtcbiAgICBvdXRbMTBdID0gYTIyO1xuICAgIG91dFsxMV0gPSBhMjM7XG4gICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzMgbm90IHVzaW5nIHZlY3Rvcml6YXRpb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHRoZSB2ZWMzIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV0sXG4gICAgICB6ID0gdlsyXTtcbiAgb3V0WzBdID0gYVswXSAqIHg7XG4gIG91dFsxXSA9IGFbMV0gKiB4O1xuICBvdXRbMl0gPSBhWzJdICogeDtcbiAgb3V0WzNdID0gYVszXSAqIHg7XG4gIG91dFs0XSA9IGFbNF0gKiB5O1xuICBvdXRbNV0gPSBhWzVdICogeTtcbiAgb3V0WzZdID0gYVs2XSAqIHk7XG4gIG91dFs3XSA9IGFbN10gKiB5O1xuICBvdXRbOF0gPSBhWzhdICogejtcbiAgb3V0WzldID0gYVs5XSAqIHo7XG4gIG91dFsxMF0gPSBhWzEwXSAqIHo7XG4gIG91dFsxMV0gPSBhWzExXSAqIHo7XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBnaXZlbiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcbiAgdmFyIGIwMCwgYjAxLCBiMDI7XG4gIHZhciBiMTAsIGIxMSwgYjEyO1xuICB2YXIgYjIwLCBiMjEsIGIyMjtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7XG4gIGEwMCA9IGFbMF07XG4gIGEwMSA9IGFbMV07XG4gIGEwMiA9IGFbMl07XG4gIGEwMyA9IGFbM107XG4gIGExMCA9IGFbNF07XG4gIGExMSA9IGFbNV07XG4gIGExMiA9IGFbNl07XG4gIGExMyA9IGFbN107XG4gIGEyMCA9IGFbOF07XG4gIGEyMSA9IGFbOV07XG4gIGEyMiA9IGFbMTBdO1xuICBhMjMgPSBhWzExXTsgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XG5cbiAgYjAwID0geCAqIHggKiB0ICsgYztcbiAgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcbiAgYjExID0geSAqIHkgKiB0ICsgYztcbiAgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xuICBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcbiAgYjIyID0geiAqIHogKiB0ICsgYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcbiAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcbiAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xuICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcbiAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xuICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XG4gIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XTtcbiAgdmFyIGEyMSA9IGFbOV07XG4gIHZhciBhMjIgPSBhWzEwXTtcbiAgdmFyIGEyMyA9IGFbMTFdO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjICsgYTIyICogcztcbiAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XG4gIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xuICBvdXRbOV0gPSBhMjEgKiBjIC0gYTExICogcztcbiAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xuICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcbiAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcbiAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcbiAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcbiAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcbiAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcbiAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSB2WzFdO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gdlsyXTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlIGFyb3VuZCBhIGdpdmVuIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkLCBheGlzKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7IC8vIFBlcmZvcm0gcm90YXRpb24tc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0geCAqIHggKiB0ICsgYztcbiAgb3V0WzFdID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIG91dFsyXSA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4ICogeSAqIHQgLSB6ICogcztcbiAgb3V0WzVdID0geSAqIHkgKiB0ICsgYztcbiAgb3V0WzZdID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHggKiB6ICogdCArIHkgKiBzO1xuICBvdXRbOV0gPSB5ICogeiAqIHQgLSB4ICogcztcbiAgb3V0WzEwXSA9IHogKiB6ICogdCArIGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWChkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWFJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gcztcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gLXM7XG4gIG91dFsxMF0gPSBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVkoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVlSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSBzO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVaKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21aUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAtcztcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgcSwgdikge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xuICBvdXRbMV0gPSB4eSArIHd6O1xuICBvdXRbMl0gPSB4eiAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4eSAtIHd6O1xuICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xuICBvdXRbNl0gPSB5eiArIHd4O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4eiArIHd5O1xuICBvdXRbOV0gPSB5eiAtIHd4O1xuICBvdXRbMTBdID0gMSAtICh4eCArIHl5KTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0NCBmcm9tIGEgZHVhbCBxdWF0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBNYXRyaXhcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybnMge21hdDR9IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUXVhdDIob3V0LCBhKSB7XG4gIHZhciB0cmFuc2xhdGlvbiA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICB2YXIgbWFnbml0dWRlID0gYnggKiBieCArIGJ5ICogYnkgKyBieiAqIGJ6ICsgYncgKiBidzsgLy9Pbmx5IHNjYWxlIGlmIGl0IG1ha2VzIHNlbnNlXG5cbiAgaWYgKG1hZ25pdHVkZSA+IDApIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDIgLyBtYWduaXR1ZGU7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMiAvIG1hZ25pdHVkZTtcbiAgfSBlbHNlIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDI7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgfVxuXG4gIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgYSwgdHJhbnNsYXRpb24pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uLFxyXG4gKiAgdGhlIHJldHVybmVkIHZlY3RvciB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3JcclxuICogIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCBWZWN0b3IgdG8gcmVjZWl2ZSB0cmFuc2xhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtICB7bWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb24ob3V0LCBtYXQpIHtcbiAgb3V0WzBdID0gbWF0WzEyXTtcbiAgb3V0WzFdID0gbWF0WzEzXTtcbiAgb3V0WzJdID0gbWF0WzE0XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzY2FsaW5nIGZhY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVcclxuICogIHdpdGggYSBub3JtYWxpemVkIFF1YXRlcm5pb24gcGFyYW10ZXIsIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZVxyXG4gKiAgdGhlIHNhbWUgYXMgdGhlIHNjYWxpbmcgdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxpbmcob3V0LCBtYXQpIHtcbiAgdmFyIG0xMSA9IG1hdFswXTtcbiAgdmFyIG0xMiA9IG1hdFsxXTtcbiAgdmFyIG0xMyA9IG1hdFsyXTtcbiAgdmFyIG0yMSA9IG1hdFs0XTtcbiAgdmFyIG0yMiA9IG1hdFs1XTtcbiAgdmFyIG0yMyA9IG1hdFs2XTtcbiAgdmFyIG0zMSA9IG1hdFs4XTtcbiAgdmFyIG0zMiA9IG1hdFs5XTtcbiAgdmFyIG0zMyA9IG1hdFsxMF07XG4gIG91dFswXSA9IE1hdGguaHlwb3QobTExLCBtMTIsIG0xMyk7XG4gIG91dFsxXSA9IE1hdGguaHlwb3QobTIxLCBtMjIsIG0yMyk7XG4gIG91dFsyXSA9IE1hdGguaHlwb3QobTMxLCBtMzIsIG0zMyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHF1YXRlcm5pb24gcmVwcmVzZW50aW5nIHRoZSByb3RhdGlvbmFsIGNvbXBvbmVudFxyXG4gKiAgb2YgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIElmIGEgbWF0cml4IGlzIGJ1aWx0IHdpdGhcclxuICogIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uLCB0aGUgcmV0dXJuZWQgcXVhdGVybmlvbiB3aWxsIGJlIHRoZVxyXG4gKiAgc2FtZSBhcyB0aGUgcXVhdGVybmlvbiBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBRdWF0ZXJuaW9uIHRvIHJlY2VpdmUgdGhlIHJvdGF0aW9uIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdGF0aW9uKG91dCwgbWF0KSB7XG4gIHZhciBzY2FsaW5nID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIGdldFNjYWxpbmcoc2NhbGluZywgbWF0KTtcbiAgdmFyIGlzMSA9IDEgLyBzY2FsaW5nWzBdO1xuICB2YXIgaXMyID0gMSAvIHNjYWxpbmdbMV07XG4gIHZhciBpczMgPSAxIC8gc2NhbGluZ1syXTtcbiAgdmFyIHNtMTEgPSBtYXRbMF0gKiBpczE7XG4gIHZhciBzbTEyID0gbWF0WzFdICogaXMyO1xuICB2YXIgc20xMyA9IG1hdFsyXSAqIGlzMztcbiAgdmFyIHNtMjEgPSBtYXRbNF0gKiBpczE7XG4gIHZhciBzbTIyID0gbWF0WzVdICogaXMyO1xuICB2YXIgc20yMyA9IG1hdFs2XSAqIGlzMztcbiAgdmFyIHNtMzEgPSBtYXRbOF0gKiBpczE7XG4gIHZhciBzbTMyID0gbWF0WzldICogaXMyO1xuICB2YXIgc20zMyA9IG1hdFsxMF0gKiBpczM7XG4gIHZhciB0cmFjZSA9IHNtMTEgKyBzbTIyICsgc20zMztcbiAgdmFyIFMgPSAwO1xuXG4gIGlmICh0cmFjZSA+IDApIHtcbiAgICBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKSAqIDI7XG4gICAgb3V0WzNdID0gMC4yNSAqIFM7XG4gICAgb3V0WzBdID0gKHNtMjMgLSBzbTMyKSAvIFM7XG4gICAgb3V0WzFdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzJdID0gKHNtMTIgLSBzbTIxKSAvIFM7XG4gIH0gZWxzZSBpZiAoc20xMSA+IHNtMjIgJiYgc20xMSA+IHNtMzMpIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMTEgLSBzbTIyIC0gc20zMykgKiAyO1xuICAgIG91dFszXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFswXSA9IDAuMjUgKiBTO1xuICAgIG91dFsxXSA9IChzbTEyICsgc20yMSkgLyBTO1xuICAgIG91dFsyXSA9IChzbTMxICsgc20xMykgLyBTO1xuICB9IGVsc2UgaWYgKHNtMjIgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTIyIC0gc20xMSAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20zMSAtIHNtMTMpIC8gUztcbiAgICBvdXRbMF0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMV0gPSAwLjI1ICogUztcbiAgICBvdXRbMl0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgfSBlbHNlIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMzMgLSBzbTExIC0gc20yMikgKiAyO1xuICAgIG91dFszXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICAgIG91dFswXSA9IChzbTMxICsgc20xMykgLyBTO1xuICAgIG91dFsxXSA9IChzbTIzICsgc20zMikgLyBTO1xuICAgIG91dFsyXSA9IDAuMjUgKiBTO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgc2NhbGUpXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBzIFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlKG91dCwgcSwgdiwgcykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICBvdXRbMF0gPSAoMSAtICh5eSArIHp6KSkgKiBzeDtcbiAgb3V0WzFdID0gKHh5ICsgd3opICogc3g7XG4gIG91dFsyXSA9ICh4eiAtIHd5KSAqIHN4O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAoeHkgLSB3eikgKiBzeTtcbiAgb3V0WzVdID0gKDEgLSAoeHggKyB6eikpICogc3k7XG4gIG91dFs2XSA9ICh5eiArIHd4KSAqIHN5O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAoeHogKyB3eSkgKiBzejtcbiAgb3V0WzldID0gKHl6IC0gd3gpICogc3o7XG4gIG91dFsxMF0gPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24sIHZlY3RvciB0cmFuc2xhdGlvbiBhbmQgdmVjdG9yIHNjYWxlLCByb3RhdGluZyBhbmQgc2NhbGluZyBhcm91bmQgdGhlIGdpdmVuIG9yaWdpblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgb3JpZ2luKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgbmVnYXRpdmVPcmlnaW4pO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IG8gVGhlIG9yaWdpbiB2ZWN0b3IgYXJvdW5kIHdoaWNoIHRvIHNjYWxlIGFuZCByb3RhdGVcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVPcmlnaW4ob3V0LCBxLCB2LCBzLCBvKSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIHZhciBzeCA9IHNbMF07XG4gIHZhciBzeSA9IHNbMV07XG4gIHZhciBzeiA9IHNbMl07XG4gIHZhciBveCA9IG9bMF07XG4gIHZhciBveSA9IG9bMV07XG4gIHZhciBveiA9IG9bMl07XG4gIHZhciBvdXQwID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIHZhciBvdXQxID0gKHh5ICsgd3opICogc3g7XG4gIHZhciBvdXQyID0gKHh6IC0gd3kpICogc3g7XG4gIHZhciBvdXQ0ID0gKHh5IC0gd3opICogc3k7XG4gIHZhciBvdXQ1ID0gKDEgLSAoeHggKyB6eikpICogc3k7XG4gIHZhciBvdXQ2ID0gKHl6ICsgd3gpICogc3k7XG4gIHZhciBvdXQ4ID0gKHh6ICsgd3kpICogc3o7XG4gIHZhciBvdXQ5ID0gKHl6IC0gd3gpICogc3o7XG4gIHZhciBvdXQxMCA9ICgxIC0gKHh4ICsgeXkpKSAqIHN6O1xuICBvdXRbMF0gPSBvdXQwO1xuICBvdXRbMV0gPSBvdXQxO1xuICBvdXRbMl0gPSBvdXQyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSBvdXQ0O1xuICBvdXRbNV0gPSBvdXQ1O1xuICBvdXRbNl0gPSBvdXQ2O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSBvdXQ4O1xuICBvdXRbOV0gPSBvdXQ5O1xuICBvdXRbMTBdID0gb3V0MTA7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXSArIG94IC0gKG91dDAgKiBveCArIG91dDQgKiBveSArIG91dDggKiBveik7XG4gIG91dFsxM10gPSB2WzFdICsgb3kgLSAob3V0MSAqIG94ICsgb3V0NSAqIG95ICsgb3V0OSAqIG96KTtcbiAgb3V0WzE0XSA9IHZbMl0gKyBveiAtIChvdXQyICogb3ggKyBvdXQ2ICogb3kgKyBvdXQxMCAqIG96KTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBhIDR4NCBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQob3V0LCBxKSB7XG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeXggPSB5ICogeDI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHp4ID0geiAqIHgyO1xuICB2YXIgenkgPSB6ICogeTI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtIHl5IC0geno7XG4gIG91dFsxXSA9IHl4ICsgd3o7XG4gIG91dFsyXSA9IHp4IC0gd3k7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHl4IC0gd3o7XG4gIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xuICBvdXRbNl0gPSB6eSArIHd4O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6eCArIHd5O1xuICBvdXRbOV0gPSB6eSAtIHd4O1xuICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBmcnVzdHVtIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge051bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcnVzdHVtKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpO1xuICB2YXIgdGIgPSAxIC8gKHRvcCAtIGJvdHRvbSk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IG5lYXIgKiAyICogcmw7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IG5lYXIgKiAyICogdGI7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XG4gIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XG4gIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyICogMiAqIG5mO1xuICBvdXRbMTVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHMuXHJcbiAqIFBhc3NpbmcgbnVsbC91bmRlZmluZWQvbm8gdmFsdWUgZm9yIGZhciB3aWxsIGdlbmVyYXRlIGluZmluaXRlIHByb2plY3Rpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLCBjYW4gYmUgbnVsbCBvciBJbmZpbml0eVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmUob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcbiAgICAgIG5mO1xuICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBmO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTFdID0gLTE7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE1XSA9IDA7XG5cbiAgaWYgKGZhciAhPSBudWxsICYmIGZhciAhPT0gSW5maW5pdHkpIHtcbiAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICAgIG91dFsxNF0gPSAyICogZmFyICogbmVhciAqIG5mO1xuICB9IGVsc2Uge1xuICAgIG91dFsxMF0gPSAtMTtcbiAgICBvdXRbMTRdID0gLTIgKiBuZWFyO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBmaWVsZCBvZiB2aWV3LlxyXG4gKiBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGdlbmVyYXRpbmcgcHJvamVjdGlvbiBtYXRyaWNlcyB0byBiZSB1c2VkXHJcbiAqIHdpdGggdGhlIHN0aWxsIGV4cGVyaWVtZW50YWwgV2ViVlIgQVBJLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3YgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IHVwRGVncmVlcywgZG93bkRlZ3JlZXMsIGxlZnREZWdyZWVzLCByaWdodERlZ3JlZXNcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXcob3V0LCBmb3YsIG5lYXIsIGZhcikge1xuICB2YXIgdXBUYW4gPSBNYXRoLnRhbihmb3YudXBEZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGRvd25UYW4gPSBNYXRoLnRhbihmb3YuZG93bkRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgbGVmdFRhbiA9IE1hdGgudGFuKGZvdi5sZWZ0RGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciByaWdodFRhbiA9IE1hdGgudGFuKGZvdi5yaWdodERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgeFNjYWxlID0gMi4wIC8gKGxlZnRUYW4gKyByaWdodFRhbik7XG4gIHZhciB5U2NhbGUgPSAyLjAgLyAodXBUYW4gKyBkb3duVGFuKTtcbiAgb3V0WzBdID0geFNjYWxlO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICBvdXRbNF0gPSAwLjA7XG4gIG91dFs1XSA9IHlTY2FsZTtcbiAgb3V0WzZdID0gMC4wO1xuICBvdXRbN10gPSAwLjA7XG4gIG91dFs4XSA9IC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpO1xuICBvdXRbOV0gPSAodXBUYW4gLSBkb3duVGFuKSAqIHlTY2FsZSAqIDAuNTtcbiAgb3V0WzEwXSA9IGZhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzExXSA9IC0xLjA7XG4gIG91dFsxMl0gPSAwLjA7XG4gIG91dFsxM10gPSAwLjA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMTVdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gb3J0aG8ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICB2YXIgbHIgPSAxIC8gKGxlZnQgLSByaWdodCk7XG4gIHZhciBidCA9IDEgLyAoYm90dG9tIC0gdG9wKTtcbiAgdmFyIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzBdID0gLTIgKiBscjtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gLTIgKiBidDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDIgKiBuZjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAobGVmdCArIHJpZ2h0KSAqIGxyO1xuICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcbiAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpcy5cclxuICogSWYgeW91IHdhbnQgYSBtYXRyaXggdGhhdCBhY3R1YWxseSBtYWtlcyBhbiBvYmplY3QgbG9vayBhdCBhbm90aGVyIG9iamVjdCwgeW91IHNob3VsZCB1c2UgdGFyZ2V0VG8gaW5zdGVhZC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb2tBdChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuO1xuICB2YXIgZXlleCA9IGV5ZVswXTtcbiAgdmFyIGV5ZXkgPSBleWVbMV07XG4gIHZhciBleWV6ID0gZXllWzJdO1xuICB2YXIgdXB4ID0gdXBbMF07XG4gIHZhciB1cHkgPSB1cFsxXTtcbiAgdmFyIHVweiA9IHVwWzJdO1xuICB2YXIgY2VudGVyeCA9IGNlbnRlclswXTtcbiAgdmFyIGNlbnRlcnkgPSBjZW50ZXJbMV07XG4gIHZhciBjZW50ZXJ6ID0gY2VudGVyWzJdO1xuXG4gIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IGdsTWF0cml4LkVQU0lMT04gJiYgTWF0aC5hYnMoZXlleiAtIGNlbnRlcnopIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBpZGVudGl0eShvdXQpO1xuICB9XG5cbiAgejAgPSBleWV4IC0gY2VudGVyeDtcbiAgejEgPSBleWV5IC0gY2VudGVyeTtcbiAgejIgPSBleWV6IC0gY2VudGVyejtcbiAgbGVuID0gMSAvIE1hdGguaHlwb3QoejAsIHoxLCB6Mik7XG4gIHowICo9IGxlbjtcbiAgejEgKj0gbGVuO1xuICB6MiAqPSBsZW47XG4gIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xuICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeDAsIHgxLCB4Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB4MCA9IDA7XG4gICAgeDEgPSAwO1xuICAgIHgyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHgwICo9IGxlbjtcbiAgICB4MSAqPSBsZW47XG4gICAgeDIgKj0gbGVuO1xuICB9XG5cbiAgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcbiAgbGVuID0gTWF0aC5oeXBvdCh5MCwgeTEsIHkyKTtcblxuICBpZiAoIWxlbikge1xuICAgIHkwID0gMDtcbiAgICB5MSA9IDA7XG4gICAgeTIgPSAwO1xuICB9IGVsc2Uge1xuICAgIGxlbiA9IDEgLyBsZW47XG4gICAgeTAgKj0gbGVuO1xuICAgIHkxICo9IGxlbjtcbiAgICB5MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geTA7XG4gIG91dFsyXSA9IHowO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4MTtcbiAgb3V0WzVdID0geTE7XG4gIG91dFs2XSA9IHoxO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4MjtcbiAgb3V0WzldID0geTI7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XG4gIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG1hdHJpeCB0aGF0IG1ha2VzIHNvbWV0aGluZyBsb29rIGF0IHNvbWV0aGluZyBlbHNlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VG8ob3V0LCBleWUsIHRhcmdldCwgdXApIHtcbiAgdmFyIGV5ZXggPSBleWVbMF0sXG4gICAgICBleWV5ID0gZXllWzFdLFxuICAgICAgZXlleiA9IGV5ZVsyXSxcbiAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgdXB5ID0gdXBbMV0sXG4gICAgICB1cHogPSB1cFsyXTtcbiAgdmFyIHowID0gZXlleCAtIHRhcmdldFswXSxcbiAgICAgIHoxID0gZXlleSAtIHRhcmdldFsxXSxcbiAgICAgIHoyID0gZXlleiAtIHRhcmdldFsyXTtcbiAgdmFyIGxlbiA9IHowICogejAgKyB6MSAqIHoxICsgejIgKiB6MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcbiAgfVxuXG4gIHZhciB4MCA9IHVweSAqIHoyIC0gdXB6ICogejEsXG4gICAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejIsXG4gICAgICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIG91dFswXSA9IHgwO1xuICBvdXRbMV0gPSB4MTtcbiAgb3V0WzJdID0geDI7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHoxICogeDIgLSB6MiAqIHgxO1xuICBvdXRbNV0gPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgb3V0WzZdID0gejAgKiB4MSAtIHoxICogeDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHowO1xuICBvdXRbOV0gPSB6MTtcbiAgb3V0WzEwXSA9IHoyO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IGV5ZXg7XG4gIG91dFsxM10gPSBleWV5O1xuICBvdXRbMTRdID0gZXllejtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG47XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ21hdDQoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJywgJyArIGFbM10gKyAnLCAnICsgYVs0XSArICcsICcgKyBhWzVdICsgJywgJyArIGFbNl0gKyAnLCAnICsgYVs3XSArICcsICcgKyBhWzhdICsgJywgJyArIGFbOV0gKyAnLCAnICsgYVsxMF0gKyAnLCAnICsgYVsxMV0gKyAnLCAnICsgYVsxMl0gKyAnLCAnICsgYVsxM10gKyAnLCAnICsgYVsxNF0gKyAnLCAnICsgYVsxNV0gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvYihhKSB7XG4gIHJldHVybiBNYXRoLmh5cG90KGFbMF0sIGFbMV0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10sIGFbOF0sIGFbOV0sIGFbMTBdLCBhWzExXSwgYVsxMl0sIGFbMTNdLCBhWzE0XSwgYVsxNV0pO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdO1xuICBvdXRbOV0gPSBhWzldICsgYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdICsgYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSArIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdICsgYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSArIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICBvdXRbNF0gPSBhWzRdIC0gYls0XTtcbiAgb3V0WzVdID0gYVs1XSAtIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gLSBiWzZdO1xuICBvdXRbN10gPSBhWzddIC0gYls3XTtcbiAgb3V0WzhdID0gYVs4XSAtIGJbOF07XG4gIG91dFs5XSA9IGFbOV0gLSBiWzldO1xuICBvdXRbMTBdID0gYVsxMF0gLSBiWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdIC0gYlsxMV07XG4gIG91dFsxMl0gPSBhWzEyXSAtIGJbMTJdO1xuICBvdXRbMTNdID0gYVsxM10gLSBiWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdIC0gYlsxNF07XG4gIG91dFsxNV0gPSBhWzE1XSAtIGJbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgb3V0WzZdID0gYVs2XSAqIGI7XG4gIG91dFs3XSA9IGFbN10gKiBiO1xuICBvdXRbOF0gPSBhWzhdICogYjtcbiAgb3V0WzldID0gYVs5XSAqIGI7XG4gIG91dFsxMF0gPSBhWzEwXSAqIGI7XG4gIG91dFsxMV0gPSBhWzExXSAqIGI7XG4gIG91dFsxMl0gPSBhWzEyXSAqIGI7XG4gIG91dFsxM10gPSBhWzEzXSAqIGI7XG4gIG91dFsxNF0gPSBhWzE0XSAqIGI7XG4gIG91dFsxNV0gPSBhWzE1XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0NCdzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdICogc2NhbGU7XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdICogc2NhbGU7XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdICogc2NhbGU7XG4gIG91dFs3XSA9IGFbN10gKyBiWzddICogc2NhbGU7XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdICogc2NhbGU7XG4gIG91dFs5XSA9IGFbOV0gKyBiWzldICogc2NhbGU7XG4gIG91dFsxMF0gPSBhWzEwXSArIGJbMTBdICogc2NhbGU7XG4gIG91dFsxMV0gPSBhWzExXSArIGJbMTFdICogc2NhbGU7XG4gIG91dFsxMl0gPSBhWzEyXSArIGJbMTJdICogc2NhbGU7XG4gIG91dFsxM10gPSBhWzEzXSArIGJbMTNdICogc2NhbGU7XG4gIG91dFsxNF0gPSBhWzE0XSArIGJbMTRdICogc2NhbGU7XG4gIG91dFsxNV0gPSBhWzE1XSArIGJbMTVdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddICYmIGFbOF0gPT09IGJbOF0gJiYgYVs5XSA9PT0gYls5XSAmJiBhWzEwXSA9PT0gYlsxMF0gJiYgYVsxMV0gPT09IGJbMTFdICYmIGFbMTJdID09PSBiWzEyXSAmJiBhWzEzXSA9PT0gYlsxM10gJiYgYVsxNF0gPT09IGJbMTRdICYmIGFbMTVdID09PSBiWzE1XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddO1xuICB2YXIgYTggPSBhWzhdLFxuICAgICAgYTkgPSBhWzldLFxuICAgICAgYTEwID0gYVsxMF0sXG4gICAgICBhMTEgPSBhWzExXTtcbiAgdmFyIGExMiA9IGFbMTJdLFxuICAgICAgYTEzID0gYVsxM10sXG4gICAgICBhMTQgPSBhWzE0XSxcbiAgICAgIGExNSA9IGFbMTVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICB2YXIgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddO1xuICB2YXIgYjggPSBiWzhdLFxuICAgICAgYjkgPSBiWzldLFxuICAgICAgYjEwID0gYlsxMF0sXG4gICAgICBiMTEgPSBiWzExXTtcbiAgdmFyIGIxMiA9IGJbMTJdLFxuICAgICAgYjEzID0gYlsxM10sXG4gICAgICBiMTQgPSBiWzE0XSxcbiAgICAgIGIxNSA9IGJbMTVdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKSAmJiBNYXRoLmFicyhhOCAtIGI4KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOCksIE1hdGguYWJzKGI4KSkgJiYgTWF0aC5hYnMoYTkgLSBiOSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTkpLCBNYXRoLmFicyhiOSkpICYmIE1hdGguYWJzKGExMCAtIGIxMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEwKSwgTWF0aC5hYnMoYjEwKSkgJiYgTWF0aC5hYnMoYTExIC0gYjExKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTEpLCBNYXRoLmFicyhiMTEpKSAmJiBNYXRoLmFicyhhMTIgLSBiMTIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMiksIE1hdGguYWJzKGIxMikpICYmIE1hdGguYWJzKGExMyAtIGIxMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEzKSwgTWF0aC5hYnMoYjEzKSkgJiYgTWF0aC5hYnMoYTE0IC0gYjE0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTQpLCBNYXRoLmFicyhiMTQpKSAmJiBNYXRoLmFicyhhMTUgLSBiMTUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExNSksIE1hdGguYWJzKGIxNSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjM1xyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHopIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSwgeikge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5jZWlsKGFbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmZsb29yKGFbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLnJvdW5kKGFbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzMgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMzJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHopO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgb3V0WzJdID0gYVsyXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xufVxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdO1xuICBvdXRbMF0gPSBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF4ICogYnkgLSBheSAqIGJ4O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF07XG4gIHZhciBheSA9IGFbMV07XG4gIHZhciBheiA9IGFbMl07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBoZXJtaXRlIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGVybWl0ZShvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGZhY3RvclRpbWVzMiAqICgyICogdCAtIDMpICsgMTtcbiAgdmFyIGZhY3RvcjIgPSBmYWN0b3JUaW1lczIgKiAodCAtIDIpICsgdDtcbiAgdmFyIGZhY3RvcjMgPSBmYWN0b3JUaW1lczIgKiAodCAtIDEpO1xuICB2YXIgZmFjdG9yNCA9IGZhY3RvclRpbWVzMiAqICgzIC0gMiAqIHQpO1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgYmV6aWVyIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICB2YXIgaW52ZXJzZUZhY3RvciA9IDEgLSB0O1xuICB2YXIgaW52ZXJzZUZhY3RvclRpbWVzVHdvID0gaW52ZXJzZUZhY3RvciAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3JUaW1lczIgPSB0ICogdDtcbiAgdmFyIGZhY3RvcjEgPSBpbnZlcnNlRmFjdG9yVGltZXNUd28gKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yMiA9IDMgKiB0ICogaW52ZXJzZUZhY3RvclRpbWVzVHdvO1xuICB2YXIgZmFjdG9yMyA9IDMgKiBmYWN0b3JUaW1lczIgKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yNCA9IGZhY3RvclRpbWVzMiAqIHQ7XG4gIG91dFswXSA9IGFbMF0gKiBmYWN0b3IxICsgYlswXSAqIGZhY3RvcjIgKyBjWzBdICogZmFjdG9yMyArIGRbMF0gKiBmYWN0b3I0O1xuICBvdXRbMV0gPSBhWzFdICogZmFjdG9yMSArIGJbMV0gKiBmYWN0b3IyICsgY1sxXSAqIGZhY3RvcjMgKyBkWzFdICogZmFjdG9yNDtcbiAgb3V0WzJdID0gYVsyXSAqIGZhY3RvcjEgKyBiWzJdICogZmFjdG9yMiArIGNbMl0gKiBmYWN0b3IzICsgZFsyXSAqIGZhY3RvcjQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICB2YXIgciA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgdmFyIHogPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAtIDEuMDtcbiAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAgLSB6ICogeikgKiBzY2FsZTtcbiAgb3V0WzBdID0gTWF0aC5jb3MocikgKiB6U2NhbGU7XG4gIG91dFsxXSA9IE1hdGguc2luKHIpICogelNjYWxlO1xuICBvdXRbMl0gPSB6ICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgbWF0NC5cclxuICogNHRoIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIHZhciB3ID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdO1xuICB3ID0gdyB8fCAxLjA7XG4gIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xuICBvdXRbMV0gPSAobVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10pIC8gdztcbiAgb3V0WzJdID0gKG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSkgLyB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcbiAgb3V0WzFdID0geCAqIG1bMV0gKyB5ICogbVs0XSArIHogKiBtWzddO1xuICBvdXRbMl0gPSB4ICogbVsyXSArIHkgKiBtWzVdICsgeiAqIG1bOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKiBDYW4gYWxzbyBiZSB1c2VkIGZvciBkdWFsIHF1YXRlcm5pb25zLiAoTXVsdGlwbHkgaXQgd2l0aCB0aGUgcmVhbCBwYXJ0KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVF1YXQob3V0LCBhLCBxKSB7XG4gIC8vIGJlbmNobWFya3M6IGh0dHBzOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9ucy1maXhlZFxuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdO1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdOyAvLyB2YXIgcXZlYyA9IFtxeCwgcXksIHF6XTtcbiAgLy8gdmFyIHV2ID0gdmVjMy5jcm9zcyhbXSwgcXZlYywgYSk7XG5cbiAgdmFyIHV2eCA9IHF5ICogeiAtIHF6ICogeSxcbiAgICAgIHV2eSA9IHF6ICogeCAtIHF4ICogeixcbiAgICAgIHV2eiA9IHF4ICogeSAtIHF5ICogeDsgLy8gdmFyIHV1diA9IHZlYzMuY3Jvc3MoW10sIHF2ZWMsIHV2KTtcblxuICB2YXIgdXV2eCA9IHF5ICogdXZ6IC0gcXogKiB1dnksXG4gICAgICB1dXZ5ID0gcXogKiB1dnggLSBxeCAqIHV2eixcbiAgICAgIHV1dnogPSBxeCAqIHV2eSAtIHF5ICogdXZ4OyAvLyB2ZWMzLnNjYWxlKHV2LCB1diwgMiAqIHcpO1xuXG4gIHZhciB3MiA9IHF3ICogMjtcbiAgdXZ4ICo9IHcyO1xuICB1dnkgKj0gdzI7XG4gIHV2eiAqPSB3MjsgLy8gdmVjMy5zY2FsZSh1dXYsIHV1diwgMik7XG5cbiAgdXV2eCAqPSAyO1xuICB1dXZ5ICo9IDI7XG4gIHV1dnogKj0gMjsgLy8gcmV0dXJuIHZlYzMuYWRkKG91dCwgYSwgdmVjMy5hZGQob3V0LCB1diwgdXV2KSk7XG5cbiAgb3V0WzBdID0geCArIHV2eCArIHV1dng7XG4gIG91dFsxXSA9IHkgKyB1dnkgKyB1dXZ5O1xuICBvdXRbMl0gPSB6ICsgdXZ6ICsgdXV2ejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdO1xuICByWzFdID0gcFsxXSAqIE1hdGguY29zKGMpIC0gcFsyXSAqIE1hdGguc2luKGMpO1xuICByWzJdID0gcFsxXSAqIE1hdGguc2luKGMpICsgcFsyXSAqIE1hdGguY29zKGMpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB5LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzJdICogTWF0aC5zaW4oYykgKyBwWzBdICogTWF0aC5jb3MoYyk7XG4gIHJbMV0gPSBwWzFdO1xuICByWzJdID0gcFsyXSAqIE1hdGguY29zKGMpIC0gcFswXSAqIE1hdGguc2luKGMpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB6LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIGIsIGMpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdICogTWF0aC5jb3MoYykgLSBwWzFdICogTWF0aC5zaW4oYyk7XG4gIHJbMV0gPSBwWzBdICogTWF0aC5zaW4oYykgKyBwWzFdICogTWF0aC5jb3MoYyk7XG4gIHJbMl0gPSBwWzJdOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDNEIHZlY3RvcnNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmdsZShhLCBiKSB7XG4gIHZhciB0ZW1wQSA9IGZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XG4gIHZhciB0ZW1wQiA9IGZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XG4gIG5vcm1hbGl6ZSh0ZW1wQSwgdGVtcEEpO1xuICBub3JtYWxpemUodGVtcEIsIHRlbXBCKTtcbiAgdmFyIGNvc2luZSA9IGRvdCh0ZW1wQSwgdGVtcEIpO1xuXG4gIGlmIChjb3NpbmUgPiAxLjApIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChjb3NpbmUgPCAtMS4wKSB7XG4gICAgcmV0dXJuIE1hdGguUEk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xuICB9XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gJ3ZlYzMoJyArIGFbMF0gKyAnLCAnICsgYVsxXSArICcsICcgKyBhWzJdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzNzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAzO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDQgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjNFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzRcclxuICpcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHosIHcpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSwgeiwgdykge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIG91dFszXSA9IGFbM10gKiBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC8gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguY2VpbChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5jZWlsKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmZsb29yKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmZsb29yKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5tYXgoYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIG91dFszXSA9IE1hdGgucm91bmQoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHosIHcpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gLWFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IHggKiBsZW47XG4gIG91dFsxXSA9IHkgKiBsZW47XG4gIG91dFsyXSA9IHogKiBsZW47XG4gIG91dFszXSA9IHcgKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXSArIGFbM10gKiBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGNyb3NzLXByb2R1Y3Qgb2YgdGhyZWUgdmVjdG9ycyBpbiBhIDQtZGltZW5zaW9uYWwgc3BhY2VcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSByZXN1bHQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBVIHRoZSBmaXJzdCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBWIHRoZSBzZWNvbmQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gVyB0aGUgdGhpcmQgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIHUsIHYsIHcpIHtcbiAgdmFyIEEgPSB2WzBdICogd1sxXSAtIHZbMV0gKiB3WzBdLFxuICAgICAgQiA9IHZbMF0gKiB3WzJdIC0gdlsyXSAqIHdbMF0sXG4gICAgICBDID0gdlswXSAqIHdbM10gLSB2WzNdICogd1swXSxcbiAgICAgIEQgPSB2WzFdICogd1syXSAtIHZbMl0gKiB3WzFdLFxuICAgICAgRSA9IHZbMV0gKiB3WzNdIC0gdlszXSAqIHdbMV0sXG4gICAgICBGID0gdlsyXSAqIHdbM10gLSB2WzNdICogd1syXTtcbiAgdmFyIEcgPSB1WzBdO1xuICB2YXIgSCA9IHVbMV07XG4gIHZhciBJID0gdVsyXTtcbiAgdmFyIEogPSB1WzNdO1xuICBvdXRbMF0gPSBIICogRiAtIEkgKiBFICsgSiAqIEQ7XG4gIG91dFsxXSA9IC0oRyAqIEYpICsgSSAqIEMgLSBKICogQjtcbiAgb3V0WzJdID0gRyAqIEUgLSBIICogQyArIEogKiBBO1xuICBvdXRbM10gPSAtKEcgKiBEKSArIEggKiBCIC0gSSAqIEE7XG4gIHJldHVybiBvdXQ7XG59XG47XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgdmFyIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wOyAvLyBNYXJzYWdsaWEsIEdlb3JnZS4gQ2hvb3NpbmcgYSBQb2ludCBmcm9tIHRoZSBTdXJmYWNlIG9mIGFcbiAgLy8gU3BoZXJlLiBBbm4uIE1hdGguIFN0YXRpc3QuIDQzICgxOTcyKSwgbm8uIDIsIDY0NS0tNjQ2LlxuICAvLyBodHRwOi8vcHJvamVjdGV1Y2xpZC5vcmcvZXVjbGlkLmFvbXMvMTE3NzY5MjY0NDtcblxuICB2YXIgdjEsIHYyLCB2MywgdjQ7XG4gIHZhciBzMSwgczI7XG5cbiAgZG8ge1xuICAgIHYxID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2MiA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczEgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgfSB3aGlsZSAoczEgPj0gMSk7XG5cbiAgZG8ge1xuICAgIHYzID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2NCA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczIgPSB2MyAqIHYzICsgdjQgKiB2NDtcbiAgfSB3aGlsZSAoczIgPj0gMSk7XG5cbiAgdmFyIGQgPSBNYXRoLnNxcnQoKDEgLSBzMSkgLyBzMik7XG4gIG91dFswXSA9IHNjYWxlICogdjE7XG4gIG91dFsxXSA9IHNjYWxlICogdjI7XG4gIG91dFsyXSA9IHNjYWxlICogdjMgKiBkO1xuICBvdXRbM10gPSBzY2FsZSAqIHY0ICogZDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBtYXQ0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdICogdztcbiAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcbiAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTsgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcblxuICB2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gIHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcbiAgdmFyIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuICB2YXIgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6OyAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cbiAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcbiAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcbiAgb3V0WzJdID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICd2ZWM0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSA0O1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICB2ZWNbM10gPSBhW2kgKyAzXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgICBhW2kgKyAzXSA9IHZlY1szXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIG1hdDMgZnJvbSBcIi4vbWF0My5qc1wiO1xuaW1wb3J0ICogYXMgdmVjMyBmcm9tIFwiLi92ZWMzLmpzXCI7XG5pbXBvcnQgKiBhcyB2ZWM0IGZyb20gXCIuL3ZlYzQuanNcIjtcbi8qKlxyXG4gKiBRdWF0ZXJuaW9uXHJcbiAqIEBtb2R1bGUgcXVhdFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBxdWF0IHRvIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0cyBhIHF1YXQgZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIHJvdGF0aW9uIGF4aXMsXHJcbiAqIHRoZW4gcmV0dXJucyBpdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyBhcm91bmQgd2hpY2ggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBeGlzQW5nbGUob3V0LCBheGlzLCByYWQpIHtcbiAgcmFkID0gcmFkICogMC41O1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIG91dFswXSA9IHMgKiBheGlzWzBdO1xuICBvdXRbMV0gPSBzICogYXhpc1sxXTtcbiAgb3V0WzJdID0gcyAqIGF4aXNbMl07XG4gIG91dFszXSA9IE1hdGguY29zKHJhZCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcm90YXRpb24gYXhpcyBhbmQgYW5nbGUgZm9yIGEgZ2l2ZW5cclxuICogIHF1YXRlcm5pb24uIElmIGEgcXVhdGVybmlvbiBpcyBjcmVhdGVkIHdpdGhcclxuICogIHNldEF4aXNBbmdsZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWVcclxuICogIHZhbHVlcyBhcyBwcm92aWRpZWQgaW4gdGhlIG9yaWdpbmFsIHBhcmFtZXRlciBsaXN0XHJcbiAqICBPUiBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB2YWx1ZXMuXHJcbiAqIEV4YW1wbGU6IFRoZSBxdWF0ZXJuaW9uIGZvcm1lZCBieSBheGlzIFswLCAwLCAxXSBhbmRcclxuICogIGFuZ2xlIC05MCBpcyB0aGUgc2FtZSBhcyB0aGUgcXVhdGVybmlvbiBmb3JtZWQgYnlcclxuICogIFswLCAwLCAxXSBhbmQgMjcwLiBUaGlzIG1ldGhvZCBmYXZvcnMgdGhlIGxhdHRlci5cclxuICogQHBhcmFtICB7dmVjM30gb3V0X2F4aXMgIFZlY3RvciByZWNlaXZpbmcgdGhlIGF4aXMgb2Ygcm90YXRpb25cclxuICogQHBhcmFtICB7cXVhdH0gcSAgICAgUXVhdGVybmlvbiB0byBiZSBkZWNvbXBvc2VkXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgIEFuZ2xlLCBpbiByYWRpYW5zLCBvZiB0aGUgcm90YXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlzQW5nbGUob3V0X2F4aXMsIHEpIHtcbiAgdmFyIHJhZCA9IE1hdGguYWNvcyhxWzNdKSAqIDIuMDtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQgLyAyLjApO1xuXG4gIGlmIChzID4gZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIG91dF9heGlzWzBdID0gcVswXSAvIHM7XG4gICAgb3V0X2F4aXNbMV0gPSBxWzFdIC8gcztcbiAgICBvdXRfYXhpc1syXSA9IHFbMl0gLyBzO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHMgaXMgemVybywgcmV0dXJuIGFueSBheGlzIChubyByb3RhdGlvbiAtIGF4aXMgZG9lcyBub3QgbWF0dGVyKVxuICAgIG91dF9heGlzWzBdID0gMTtcbiAgICBvdXRfYXhpc1sxXSA9IDA7XG4gICAgb3V0X2F4aXNbMl0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJhZDtcbn1cbi8qKlxyXG4gKiBHZXRzIHRoZSBhbmd1bGFyIGRpc3RhbmNlIGJldHdlZW4gdHdvIHVuaXQgcXVhdGVybmlvbnNcclxuICpcclxuICogQHBhcmFtICB7cXVhdH0gYSAgICAgT3JpZ2luIHVuaXQgcXVhdGVybmlvbiBcclxuICogQHBhcmFtICB7cXVhdH0gYiAgICAgRGVzdGluYXRpb24gdW5pdCBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgIEFuZ2xlLCBpbiByYWRpYW5zLCBiZXR3ZWVuIHRoZSB0d28gcXVhdGVybmlvbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmdsZShhLCBiKSB7XG4gIHZhciBkb3Rwcm9kdWN0ID0gZG90KGEsIGIpO1xuICByZXR1cm4gTWF0aC5hY29zKDIgKiBkb3Rwcm9kdWN0ICogZG90cHJvZHVjdCAtIDEpO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgYncgPSBiWzNdO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieDtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF6ICogYng7XG4gIG91dFsyXSA9IGF6ICogYncgLSBheSAqIGJ4O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ5ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXggKiBieTtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF5ICogYnk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieiA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgKyBheSAqIGJ6O1xuICBvdXRbMV0gPSBheSAqIGJ3IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYno7XG4gIG91dFszXSA9IGF3ICogYncgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVXKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZiBhIHVuaXQgcXVhdGVybmlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSB0aGUgZXhwb25lbnRpYWwgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cChvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICB2YXIgciA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICB2YXIgZXQgPSBNYXRoLmV4cCh3KTtcbiAgdmFyIHMgPSByID4gMCA/IGV0ICogTWF0aC5zaW4ocikgLyByIDogMDtcbiAgb3V0WzBdID0geCAqIHM7XG4gIG91dFsxXSA9IHkgKiBzO1xuICBvdXRbMl0gPSB6ICogcztcbiAgb3V0WzNdID0gZXQgKiBNYXRoLmNvcyhyKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG4ob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl0sXG4gICAgICB3ID0gYVszXTtcbiAgdmFyIHIgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcbiAgdmFyIHQgPSByID4gMCA/IE1hdGguYXRhbjIociwgdykgLyByIDogMDtcbiAgb3V0WzBdID0geCAqIHQ7XG4gIG91dFsxXSA9IHkgKiB0O1xuICBvdXRbMl0gPSB6ICogdDtcbiAgb3V0WzNdID0gMC41ICogTWF0aC5sb2coeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgc2NhbGFyIHBvd2VyIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHF1YXRlcm5pb24gYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBvdyhvdXQsIGEsIGIpIHtcbiAgbG4ob3V0LCBhKTtcbiAgc2NhbGUob3V0LCBvdXQsIGIpO1xuICBleHAob3V0LCBvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZXJwKG91dCwgYSwgYiwgdCkge1xuICAvLyBiZW5jaG1hcmtzOlxuICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgYncgPSBiWzNdO1xuICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7IC8vIGNhbGMgY29zaW5lXG5cbiAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3OyAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcblxuICBpZiAoY29zb20gPCAwLjApIHtcbiAgICBjb3NvbSA9IC1jb3NvbTtcbiAgICBieCA9IC1ieDtcbiAgICBieSA9IC1ieTtcbiAgICBieiA9IC1iejtcbiAgICBidyA9IC1idztcbiAgfSAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXG5cblxuICBpZiAoMS4wIC0gY29zb20gPiBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXG4gICAgb21lZ2EgPSBNYXRoLmFjb3MoY29zb20pO1xuICAgIHNpbm9tID0gTWF0aC5zaW4ob21lZ2EpO1xuICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xuICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcbiAgfSBlbHNlIHtcbiAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXG4gICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgIHNjYWxlMCA9IDEuMCAtIHQ7XG4gICAgc2NhbGUxID0gdDtcbiAgfSAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXG5cblxuICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xuICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xuICBvdXRbMl0gPSBzY2FsZTAgKiBheiArIHNjYWxlMSAqIGJ6O1xuICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB1bml0IHF1YXRlcm5pb25cclxuICogXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCkge1xuICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBodHRwOi8vcGxhbm5pbmcuY3MudWl1Yy5lZHUvbm9kZTE5OC5odG1sXG4gIC8vIFRPRE86IENhbGxpbmcgcmFuZG9tIDMgdGltZXMgaXMgcHJvYmFibHkgbm90IHRoZSBmYXN0ZXN0IHNvbHV0aW9uXG4gIHZhciB1MSA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgdTIgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHUzID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciBzcXJ0MU1pbnVzVTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgdmFyIHNxcnRVMSA9IE1hdGguc3FydCh1MSk7XG4gIG91dFswXSA9IHNxcnQxTWludXNVMSAqIE1hdGguc2luKDIuMCAqIE1hdGguUEkgKiB1Mik7XG4gIG91dFsxXSA9IHNxcnQxTWludXNVMSAqIE1hdGguY29zKDIuMCAqIE1hdGguUEkgKiB1Mik7XG4gIG91dFsyXSA9IHNxcnRVMSAqIE1hdGguc2luKDIuMCAqIE1hdGguUEkgKiB1Myk7XG4gIG91dFszXSA9IHNxcnRVMSAqIE1hdGguY29zKDIuMCAqIE1hdGguUEkgKiB1Myk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBkb3QgPSBhMCAqIGEwICsgYTEgKiBhMSArIGEyICogYTIgKyBhMyAqIGEzO1xuICB2YXIgaW52RG90ID0gZG90ID8gMS4wIC8gZG90IDogMDsgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcblxuICBvdXRbMF0gPSAtYTAgKiBpbnZEb3Q7XG4gIG91dFsxXSA9IC1hMSAqIGludkRvdDtcbiAgb3V0WzJdID0gLWEyICogaW52RG90O1xuICBvdXRbM10gPSBhMyAqIGludkRvdDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qdWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQzKG91dCwgbSkge1xuICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xuICAvLyBhcnRpY2xlIFwiUXVhdGVybmlvbiBDYWxjdWx1cyBhbmQgRmFzdCBBbmltYXRpb25cIi5cbiAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcbiAgdmFyIGZSb290O1xuXG4gIGlmIChmVHJhY2UgPiAwLjApIHtcbiAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXG4gICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgLy8gMndcblxuICAgIG91dFszXSA9IDAuNSAqIGZSb290O1xuICAgIGZSb290ID0gMC41IC8gZlJvb3Q7IC8vIDEvKDR3KVxuXG4gICAgb3V0WzBdID0gKG1bNV0gLSBtWzddKSAqIGZSb290O1xuICAgIG91dFsxXSA9IChtWzZdIC0gbVsyXSkgKiBmUm9vdDtcbiAgICBvdXRbMl0gPSAobVsxXSAtIG1bM10pICogZlJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gfHd8IDw9IDEvMlxuICAgIHZhciBpID0gMDtcbiAgICBpZiAobVs0XSA+IG1bMF0pIGkgPSAxO1xuICAgIGlmIChtWzhdID4gbVtpICogMyArIGldKSBpID0gMjtcbiAgICB2YXIgaiA9IChpICsgMSkgJSAzO1xuICAgIHZhciBrID0gKGkgKyAyKSAlIDM7XG4gICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpICogMyArIGldIC0gbVtqICogMyArIGpdIC0gbVtrICogMyArIGtdICsgMS4wKTtcbiAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcbiAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xuICAgIG91dFszXSA9IChtW2ogKiAzICsga10gLSBtW2sgKiAzICsgal0pICogZlJvb3Q7XG4gICAgb3V0W2pdID0gKG1baiAqIDMgKyBpXSArIG1baSAqIDMgKyBqXSkgKiBmUm9vdDtcbiAgICBvdXRba10gPSAobVtrICogMyArIGldICsgbVtpICogMyArIGtdKSAqIGZSb290O1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBldWxlciBhbmdsZSB4LCB5LCB6LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt4fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFggYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge3l9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWSBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7en0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBaIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXVsZXIob3V0LCB4LCB5LCB6KSB7XG4gIHZhciBoYWxmVG9SYWQgPSAwLjUgKiBNYXRoLlBJIC8gMTgwLjA7XG4gIHggKj0gaGFsZlRvUmFkO1xuICB5ICo9IGhhbGZUb1JhZDtcbiAgeiAqPSBoYWxmVG9SYWQ7XG4gIHZhciBzeCA9IE1hdGguc2luKHgpO1xuICB2YXIgY3ggPSBNYXRoLmNvcyh4KTtcbiAgdmFyIHN5ID0gTWF0aC5zaW4oeSk7XG4gIHZhciBjeSA9IE1hdGguY29zKHkpO1xuICB2YXIgc3ogPSBNYXRoLnNpbih6KTtcbiAgdmFyIGN6ID0gTWF0aC5jb3Moeik7XG4gIG91dFswXSA9IHN4ICogY3kgKiBjeiAtIGN4ICogc3kgKiBzejtcbiAgb3V0WzFdID0gY3ggKiBzeSAqIGN6ICsgc3ggKiBjeSAqIHN6O1xuICBvdXRbMl0gPSBjeCAqIGN5ICogc3ogLSBzeCAqIHN5ICogY3o7XG4gIG91dFszXSA9IGN4ICogY3kgKiBjeiArIHN4ICogc3kgKiBzejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcXVhdGVuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdxdWF0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lID0gdmVjNC5jbG9uZTtcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgY29weSA9IHZlYzQuY29weTtcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldCA9IHZlYzQuc2V0O1xuLyoqXHJcbiAqIEFkZHMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgYWRkID0gdmVjNC5hZGQ7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2NhbGUgPSB2ZWM0LnNjYWxlO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gdmVjNC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVycCA9IHZlYzQubGVycDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW5ndGggPSB2ZWM0Lmxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiBUaGUgc2Vjb25kIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IHZhciBleGFjdEVxdWFscyA9IHZlYzQuZXhhY3RFcXVhbHM7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtxdWF0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCB2YXIgZXF1YWxzID0gdmVjNC5lcXVhbHM7XG4vKipcclxuICogU2V0cyBhIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIG9uZVxyXG4gKiB2ZWN0b3IgdG8gYW5vdGhlci5cclxuICpcclxuICogQm90aCB2ZWN0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgaW5pdGlhbCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IHZhciByb3RhdGlvblRvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG1wdmVjMyA9IHZlYzMuY3JlYXRlKCk7XG4gIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwgMCwgMCk7XG4gIHZhciB5VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMSwgMCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGRvdCA9IHZlYzMuZG90KGEsIGIpO1xuXG4gICAgaWYgKGRvdCA8IC0wLjk5OTk5OSkge1xuICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB4VW5pdFZlYzMsIGEpO1xuICAgICAgaWYgKHZlYzMubGVuKHRtcHZlYzMpIDwgMC4wMDAwMDEpIHZlYzMuY3Jvc3ModG1wdmVjMywgeVVuaXRWZWMzLCBhKTtcbiAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xuICAgICAgc2V0QXhpc0FuZ2xlKG91dCwgdG1wdmVjMywgTWF0aC5QSSk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcbiAgICAgIG91dFswXSA9IDA7XG4gICAgICBvdXRbMV0gPSAwO1xuICAgICAgb3V0WzJdID0gMDtcbiAgICAgIG91dFszXSA9IDE7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xuICAgICAgb3V0WzBdID0gdG1wdmVjM1swXTtcbiAgICAgIG91dFsxXSA9IHRtcHZlYzNbMV07XG4gICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xuICAgICAgb3V0WzNdID0gMSArIGRvdDtcbiAgICAgIHJldHVybiBub3JtYWxpemUob3V0LCBvdXQpO1xuICAgIH1cbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxbGVycCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlbXAxID0gY3JlYXRlKCk7XG4gIHZhciB0ZW1wMiA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICAgIHNsZXJwKHRlbXAxLCBhLCBkLCB0KTtcbiAgICBzbGVycCh0ZW1wMiwgYiwgYywgdCk7XG4gICAgc2xlcnAob3V0LCB0ZW1wMSwgdGVtcDIsIDIgKiB0ICogKDEgLSB0KSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBTZXRzIHRoZSBzcGVjaWZpZWQgcXVhdGVybmlvbiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlblxyXG4gKiBheGVzLiBFYWNoIGF4aXMgaXMgYSB2ZWMzIGFuZCBpcyBleHBlY3RlZCB0byBiZSB1bml0IGxlbmd0aCBhbmRcclxuICogcGVycGVuZGljdWxhciB0byBhbGwgb3RoZXIgc3BlY2lmaWVkIGF4ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gdmlldyAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIHZpZXdpbmcgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gcmlnaHQgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwicmlnaHRcIiBkaXJlY3Rpb25cclxuICogQHBhcmFtIHt2ZWMzfSB1cCAgICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJ1cFwiIGRpcmVjdGlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldEF4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtYXRyID0gbWF0My5jcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xuICAgIG1hdHJbMF0gPSByaWdodFswXTtcbiAgICBtYXRyWzNdID0gcmlnaHRbMV07XG4gICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xuICAgIG1hdHJbMV0gPSB1cFswXTtcbiAgICBtYXRyWzRdID0gdXBbMV07XG4gICAgbWF0cls3XSA9IHVwWzJdO1xuICAgIG1hdHJbMl0gPSAtdmlld1swXTtcbiAgICBtYXRyWzVdID0gLXZpZXdbMV07XG4gICAgbWF0cls4XSA9IC12aWV3WzJdO1xuICAgIHJldHVybiBub3JtYWxpemUob3V0LCBmcm9tTWF0MyhvdXQsIG1hdHIpKTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIHF1YXQgZnJvbSBcIi4vcXVhdC5qc1wiO1xuaW1wb3J0ICogYXMgbWF0NCBmcm9tIFwiLi9tYXQ0LmpzXCI7XG4vKipcclxuICogRHVhbCBRdWF0ZXJuaW9uPGJyPlxyXG4gKiBGb3JtYXQ6IFtyZWFsLCBkdWFsXTxicj5cclxuICogUXVhdGVybmlvbiBmb3JtYXQ6IFhZWlc8YnI+XHJcbiAqIE1ha2Ugc3VyZSB0byBoYXZlIG5vcm1hbGl6ZWQgZHVhbCBxdWF0ZXJuaW9ucywgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbnMgbWF5IG5vdCB3b3JrIGFzIGludGVuZGVkLjxicj5cclxuICogQG1vZHVsZSBxdWF0MlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gYSBuZXcgZHVhbCBxdWF0ZXJuaW9uIFtyZWFsIC0+IHJvdGF0aW9uLCBkdWFsIC0+IHRyYW5zbGF0aW9uXVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgZHFbMF0gPSAwO1xuICAgIGRxWzFdID0gMDtcbiAgICBkcVsyXSA9IDA7XG4gICAgZHFbNF0gPSAwO1xuICAgIGRxWzVdID0gMDtcbiAgICBkcVs2XSA9IDA7XG4gICAgZHFbN10gPSAwO1xuICB9XG5cbiAgZHFbM10gPSAxO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSBhWzBdO1xuICBkcVsxXSA9IGFbMV07XG4gIGRxWzJdID0gYVsyXTtcbiAgZHFbM10gPSBhWzNdO1xuICBkcVs0XSA9IGFbNF07XG4gIGRxWzVdID0gYVs1XTtcbiAgZHFbNl0gPSBhWzZdO1xuICBkcVs3XSA9IGFbN107XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MiBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6MiwgdzIpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0geDE7XG4gIGRxWzFdID0geTE7XG4gIGRxWzJdID0gejE7XG4gIGRxWzNdID0gdzE7XG4gIGRxWzRdID0geDI7XG4gIGRxWzVdID0geTI7XG4gIGRxWzZdID0gejI7XG4gIGRxWzddID0gdzI7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBmcm9tIHRoZSBnaXZlbiB2YWx1ZXMgKHF1YXQgYW5kIHRyYW5zbGF0aW9uKVxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkyIFkgY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHJldHVybnMge3F1YXQyfSBuZXcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uVmFsdWVzKHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IHgxO1xuICBkcVsxXSA9IHkxO1xuICBkcVsyXSA9IHoxO1xuICBkcVszXSA9IHcxO1xuICB2YXIgYXggPSB4MiAqIDAuNSxcbiAgICAgIGF5ID0geTIgKiAwLjUsXG4gICAgICBheiA9IHoyICogMC41O1xuICBkcVs0XSA9IGF4ICogdzEgKyBheSAqIHoxIC0gYXogKiB5MTtcbiAgZHFbNV0gPSBheSAqIHcxICsgYXogKiB4MSAtIGF4ICogejE7XG4gIGRxWzZdID0gYXogKiB3MSArIGF4ICogeTEgLSBheSAqIHgxO1xuICBkcVs3XSA9IC1heCAqIHgxIC0gYXkgKiB5MSAtIGF6ICogejE7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uIGFuZCBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBub3JtYWxpemVkIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB0IHRyYW5sYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgcSwgdCkge1xuICB2YXIgYXggPSB0WzBdICogMC41LFxuICAgICAgYXkgPSB0WzFdICogMC41LFxuICAgICAgYXogPSB0WzJdICogMC41LFxuICAgICAgYnggPSBxWzBdLFxuICAgICAgYnkgPSBxWzFdLFxuICAgICAgYnogPSBxWzJdLFxuICAgICAgYncgPSBxWzNdO1xuICBvdXRbMF0gPSBieDtcbiAgb3V0WzFdID0gYnk7XG4gIG91dFsyXSA9IGJ6O1xuICBvdXRbM10gPSBidztcbiAgb3V0WzRdID0gYXggKiBidyArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbNV0gPSBheSAqIGJ3ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFs2XSA9IGF6ICogYncgKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgb3V0WzddID0gLWF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSB0cmFuc2xhdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB0IHRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IHRbMF0gKiAwLjU7XG4gIG91dFs1XSA9IHRbMV0gKiAwLjU7XG4gIG91dFs2XSA9IHRbMl0gKiAwLjU7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIGR1YWwgcXVhdCBmcm9tIGEgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBxIHRoZSBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHEpIHtcbiAgb3V0WzBdID0gcVswXTtcbiAgb3V0WzFdID0gcVsxXTtcbiAgb3V0WzJdID0gcVsyXTtcbiAgb3V0WzNdID0gcVszXTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBmcm9tIGEgbWF0cml4ICg0eDQpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQ0KG91dCwgYSkge1xuICAvL1RPRE8gT3B0aW1pemUgdGhpc1xuICB2YXIgb3V0ZXIgPSBxdWF0LmNyZWF0ZSgpO1xuICBtYXQ0LmdldFJvdGF0aW9uKG91dGVyLCBhKTtcbiAgdmFyIHQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgbWF0NC5nZXRUcmFuc2xhdGlvbih0LCBhKTtcbiAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBvdXRlciwgdCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIGR1YWwgcXVhdCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBzb3VyY2UgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgZHVhbCBxdWF0IHRvIHRoZSBpZGVudGl0eSBkdWFsIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAwO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIGR1YWwgcXVhdCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MiBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6MiwgdzIpIHtcbiAgb3V0WzBdID0geDE7XG4gIG91dFsxXSA9IHkxO1xuICBvdXRbMl0gPSB6MTtcbiAgb3V0WzNdID0gdzE7XG4gIG91dFs0XSA9IHgyO1xuICBvdXRbNV0gPSB5MjtcbiAgb3V0WzZdID0gejI7XG4gIG91dFs3XSA9IHcyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHJlYWwgcGFydCBvZiBhIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBvdXQgcmVhbCBwYXJ0XHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtxdWF0fSByZWFsIHBhcnRcclxuICovXG5cbmV4cG9ydCB2YXIgZ2V0UmVhbCA9IHF1YXQuY29weTtcbi8qKlxyXG4gKiBHZXRzIHRoZSBkdWFsIHBhcnQgb2YgYSBkdWFsIHF1YXRcclxuICogQHBhcmFtICB7cXVhdH0gb3V0IGR1YWwgcGFydFxyXG4gKiBAcGFyYW0gIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybiB7cXVhdH0gZHVhbCBwYXJ0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHVhbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVs0XTtcbiAgb3V0WzFdID0gYVs1XTtcbiAgb3V0WzJdID0gYVs2XTtcbiAgb3V0WzNdID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIHJlYWwgY29tcG9uZW50IG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIHJlYWwgcGFydFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2V0UmVhbCA9IHF1YXQuY29weTtcbi8qKlxyXG4gKiBTZXQgdGhlIGR1YWwgY29tcG9uZW50IG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIGR1YWwgcGFydFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREdWFsKG91dCwgcSkge1xuICBvdXRbNF0gPSBxWzBdO1xuICBvdXRbNV0gPSBxWzFdO1xuICBvdXRbNl0gPSBxWzJdO1xuICBvdXRbN10gPSBxWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHRyYW5zbGF0aW9uIG9mIGEgbm9ybWFsaXplZCBkdWFsIHF1YXRcclxuICogQHBhcmFtICB7dmVjM30gb3V0IHRyYW5zbGF0aW9uXHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvbiB0byBiZSBkZWNvbXBvc2VkXHJcbiAqIEByZXR1cm4ge3ZlYzN9IHRyYW5zbGF0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb24ob3V0LCBhKSB7XG4gIHZhciBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM107XG4gIG91dFswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDI7XG4gIG91dFsxXSA9IChheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6KSAqIDI7XG4gIG91dFsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlcyBhIGR1YWwgcXVhdCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYXgxID0gYVswXSxcbiAgICAgIGF5MSA9IGFbMV0sXG4gICAgICBhejEgPSBhWzJdLFxuICAgICAgYXcxID0gYVszXSxcbiAgICAgIGJ4MSA9IHZbMF0gKiAwLjUsXG4gICAgICBieTEgPSB2WzFdICogMC41LFxuICAgICAgYnoxID0gdlsyXSAqIDAuNSxcbiAgICAgIGF4MiA9IGFbNF0sXG4gICAgICBheTIgPSBhWzVdLFxuICAgICAgYXoyID0gYVs2XSxcbiAgICAgIGF3MiA9IGFbN107XG4gIG91dFswXSA9IGF4MTtcbiAgb3V0WzFdID0gYXkxO1xuICBvdXRbMl0gPSBhejE7XG4gIG91dFszXSA9IGF3MTtcbiAgb3V0WzRdID0gYXcxICogYngxICsgYXkxICogYnoxIC0gYXoxICogYnkxICsgYXgyO1xuICBvdXRbNV0gPSBhdzEgKiBieTEgKyBhejEgKiBieDEgLSBheDEgKiBiejEgKyBheTI7XG4gIG91dFs2XSA9IGF3MSAqIGJ6MSArIGF4MSAqIGJ5MSAtIGF5MSAqIGJ4MSArIGF6MjtcbiAgb3V0WzddID0gLWF4MSAqIGJ4MSAtIGF5MSAqIGJ5MSAtIGF6MSAqIGJ6MSArIGF3MjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVYKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVkob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWihvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGJ5IGEgZ2l2ZW4gcXVhdGVybmlvbiAoYSAqIHEpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHJvdGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZUJ5UXVhdEFwcGVuZChvdXQsIGEsIHEpIHtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXSxcbiAgICAgIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKiBxdyArIGF3ICogcXggKyBheSAqIHF6IC0gYXogKiBxeTtcbiAgb3V0WzFdID0gYXkgKiBxdyArIGF3ICogcXkgKyBheiAqIHF4IC0gYXggKiBxejtcbiAgb3V0WzJdID0gYXogKiBxdyArIGF3ICogcXogKyBheCAqIHF5IC0gYXkgKiBxeDtcbiAgb3V0WzNdID0gYXcgKiBxdyAtIGF4ICogcXggLSBheSAqIHF5IC0gYXogKiBxejtcbiAgYXggPSBhWzRdO1xuICBheSA9IGFbNV07XG4gIGF6ID0gYVs2XTtcbiAgYXcgPSBhWzddO1xuICBvdXRbNF0gPSBheCAqIHF3ICsgYXcgKiBxeCArIGF5ICogcXogLSBheiAqIHF5O1xuICBvdXRbNV0gPSBheSAqIHF3ICsgYXcgKiBxeSArIGF6ICogcXggLSBheCAqIHF6O1xuICBvdXRbNl0gPSBheiAqIHF3ICsgYXcgKiBxeiArIGF4ICogcXkgLSBheSAqIHF4O1xuICBvdXRbN10gPSBhdyAqIHF3IC0gYXggKiBxeCAtIGF5ICogcXkgLSBheiAqIHF6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYnkgYSBnaXZlbiBxdWF0ZXJuaW9uIChxICogYSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHJvdGF0ZSBieVxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQnlRdWF0UHJlcGVuZChvdXQsIHEsIGEpIHtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXSxcbiAgICAgIGJ4ID0gYVswXSxcbiAgICAgIGJ5ID0gYVsxXSxcbiAgICAgIGJ6ID0gYVsyXSxcbiAgICAgIGJ3ID0gYVszXTtcbiAgb3V0WzBdID0gcXggKiBidyArIHF3ICogYnggKyBxeSAqIGJ6IC0gcXogKiBieTtcbiAgb3V0WzFdID0gcXkgKiBidyArIHF3ICogYnkgKyBxeiAqIGJ4IC0gcXggKiBiejtcbiAgb3V0WzJdID0gcXogKiBidyArIHF3ICogYnogKyBxeCAqIGJ5IC0gcXkgKiBieDtcbiAgb3V0WzNdID0gcXcgKiBidyAtIHF4ICogYnggLSBxeSAqIGJ5IC0gcXogKiBiejtcbiAgYnggPSBhWzRdO1xuICBieSA9IGFbNV07XG4gIGJ6ID0gYVs2XTtcbiAgYncgPSBhWzddO1xuICBvdXRbNF0gPSBxeCAqIGJ3ICsgcXcgKiBieCArIHF5ICogYnogLSBxeiAqIGJ5O1xuICBvdXRbNV0gPSBxeSAqIGJ3ICsgcXcgKiBieSArIHF6ICogYnggLSBxeCAqIGJ6O1xuICBvdXRbNl0gPSBxeiAqIGJ3ICsgcXcgKiBieiArIHF4ICogYnkgLSBxeSAqIGJ4O1xuICBvdXRbN10gPSBxdyAqIGJ3IC0gcXggKiBieCAtIHF5ICogYnkgLSBxeiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIGEgZ2l2ZW4gYXhpcy4gRG9lcyB0aGUgbm9ybWFsaXNhdGlvbiBhdXRvbWF0aWNhbGx5XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgaG93IGZhciB0aGUgcm90YXRpb24gc2hvdWxkIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQXJvdW5kQXhpcyhvdXQsIGEsIGF4aXMsIHJhZCkge1xuICAvL1NwZWNpYWwgY2FzZSBmb3IgcmFkID0gMFxuICBpZiAoTWF0aC5hYnMocmFkKSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gY29weShvdXQsIGEpO1xuICB9XG5cbiAgdmFyIGF4aXNMZW5ndGggPSBNYXRoLmh5cG90KGF4aXNbMF0sIGF4aXNbMV0sIGF4aXNbMl0pO1xuICByYWQgPSByYWQgKiAwLjU7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGJ4ID0gcyAqIGF4aXNbMF0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYnkgPSBzICogYXhpc1sxXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBieiA9IHMgKiBheGlzWzJdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGF4MSA9IGFbMF0sXG4gICAgICBheTEgPSBhWzFdLFxuICAgICAgYXoxID0gYVsyXSxcbiAgICAgIGF3MSA9IGFbM107XG4gIG91dFswXSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbMV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzJdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFszXSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICB2YXIgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbNV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbNl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBheDAgPSBhWzBdLFxuICAgICAgYXkwID0gYVsxXSxcbiAgICAgIGF6MCA9IGFbMl0sXG4gICAgICBhdzAgPSBhWzNdLFxuICAgICAgYngxID0gYls0XSxcbiAgICAgIGJ5MSA9IGJbNV0sXG4gICAgICBiejEgPSBiWzZdLFxuICAgICAgYncxID0gYls3XSxcbiAgICAgIGF4MSA9IGFbNF0sXG4gICAgICBheTEgPSBhWzVdLFxuICAgICAgYXoxID0gYVs2XSxcbiAgICAgIGF3MSA9IGFbN10sXG4gICAgICBieDAgPSBiWzBdLFxuICAgICAgYnkwID0gYlsxXSxcbiAgICAgIGJ6MCA9IGJbMl0sXG4gICAgICBidzAgPSBiWzNdO1xuICBvdXRbMF0gPSBheDAgKiBidzAgKyBhdzAgKiBieDAgKyBheTAgKiBiejAgLSBhejAgKiBieTA7XG4gIG91dFsxXSA9IGF5MCAqIGJ3MCArIGF3MCAqIGJ5MCArIGF6MCAqIGJ4MCAtIGF4MCAqIGJ6MDtcbiAgb3V0WzJdID0gYXowICogYncwICsgYXcwICogYnowICsgYXgwICogYnkwIC0gYXkwICogYngwO1xuICBvdXRbM10gPSBhdzAgKiBidzAgLSBheDAgKiBieDAgLSBheTAgKiBieTAgLSBhejAgKiBiejA7XG4gIG91dFs0XSA9IGF4MCAqIGJ3MSArIGF3MCAqIGJ4MSArIGF5MCAqIGJ6MSAtIGF6MCAqIGJ5MSArIGF4MSAqIGJ3MCArIGF3MSAqIGJ4MCArIGF5MSAqIGJ6MCAtIGF6MSAqIGJ5MDtcbiAgb3V0WzVdID0gYXkwICogYncxICsgYXcwICogYnkxICsgYXowICogYngxIC0gYXgwICogYnoxICsgYXkxICogYncwICsgYXcxICogYnkwICsgYXoxICogYngwIC0gYXgxICogYnowO1xuICBvdXRbNl0gPSBhejAgKiBidzEgKyBhdzAgKiBiejEgKyBheDAgKiBieTEgLSBheTAgKiBieDEgKyBhejEgKiBidzAgKyBhdzEgKiBiejAgKyBheDEgKiBieTAgLSBheTEgKiBieDA7XG4gIG91dFs3XSA9IGF3MCAqIGJ3MSAtIGF4MCAqIGJ4MSAtIGF5MCAqIGJ5MSAtIGF6MCAqIGJ6MSArIGF3MSAqIGJ3MCAtIGF4MSAqIGJ4MCAtIGF5MSAqIGJ5MCAtIGF6MSAqIGJ6MDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgZHVhbCBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgZHVhbCBxdWF0IGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIGR1YWwgcXVhdCdzIChUaGUgZG90IHByb2R1Y3Qgb2YgdGhlIHJlYWwgcGFydHMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gcXVhdC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBkdWFsIHF1YXRzJ3NcclxuICogTk9URTogVGhlIHJlc3VsdGluZyBkdWFsIHF1YXRlcm5pb25zIHdvbid0IGFsd2F5cyBiZSBub3JtYWxpemVkIChUaGUgZXJyb3IgaXMgbW9zdCBub3RpY2VhYmxlIHdoZW4gdCA9IDAuNSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBtdCA9IDEgLSB0O1xuICBpZiAoZG90KGEsIGIpIDwgMCkgdCA9IC10O1xuICBvdXRbMF0gPSBhWzBdICogbXQgKyBiWzBdICogdDtcbiAgb3V0WzFdID0gYVsxXSAqIG10ICsgYlsxXSAqIHQ7XG4gIG91dFsyXSA9IGFbMl0gKiBtdCArIGJbMl0gKiB0O1xuICBvdXRbM10gPSBhWzNdICogbXQgKyBiWzNdICogdDtcbiAgb3V0WzRdID0gYVs0XSAqIG10ICsgYls0XSAqIHQ7XG4gIG91dFs1XSA9IGFbNV0gKiBtdCArIGJbNV0gKiB0O1xuICBvdXRbNl0gPSBhWzZdICogbXQgKyBiWzZdICogdDtcbiAgb3V0WzddID0gYVs3XSAqIG10ICsgYls3XSAqIHQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIGR1YWwgcXVhdC4gSWYgdGhleSBhcmUgbm9ybWFsaXplZCwgY29uanVnYXRlIGlzIGNoZWFwZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgc3FsZW4gPSBzcXVhcmVkTGVuZ3RoKGEpO1xuICBvdXRbMF0gPSAtYVswXSAvIHNxbGVuO1xuICBvdXRbMV0gPSAtYVsxXSAvIHNxbGVuO1xuICBvdXRbMl0gPSAtYVsyXSAvIHNxbGVuO1xuICBvdXRbM10gPSBhWzNdIC8gc3FsZW47XG4gIG91dFs0XSA9IC1hWzRdIC8gc3FsZW47XG4gIG91dFs1XSA9IC1hWzVdIC8gc3FsZW47XG4gIG91dFs2XSA9IC1hWzZdIC8gc3FsZW47XG4gIG91dFs3XSA9IGFbN10gLyBzcWxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBkdWFsIHF1YXRcclxuICogSWYgdGhlIGR1YWwgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIHF1YXQyLmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHF1YXQgdG8gY2FsY3VsYXRlIGNvbmp1Z2F0ZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmp1Z2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gLWFbNF07XG4gIG91dFs1XSA9IC1hWzVdO1xuICBvdXRbNl0gPSAtYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuZ3RoID0gcXVhdC5sZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxdWFyZWRMZW5ndGggPSBxdWF0LnNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciBtYWduaXR1ZGUgPSBzcXVhcmVkTGVuZ3RoKGEpO1xuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgbWFnbml0dWRlID0gTWF0aC5zcXJ0KG1hZ25pdHVkZSk7XG4gICAgdmFyIGEwID0gYVswXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTEgPSBhWzFdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMiA9IGFbMl0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGEzID0gYVszXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYjAgPSBhWzRdO1xuICAgIHZhciBiMSA9IGFbNV07XG4gICAgdmFyIGIyID0gYVs2XTtcbiAgICB2YXIgYjMgPSBhWzddO1xuICAgIHZhciBhX2RvdF9iID0gYTAgKiBiMCArIGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMztcbiAgICBvdXRbMF0gPSBhMDtcbiAgICBvdXRbMV0gPSBhMTtcbiAgICBvdXRbMl0gPSBhMjtcbiAgICBvdXRbM10gPSBhMztcbiAgICBvdXRbNF0gPSAoYjAgLSBhMCAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs1XSA9IChiMSAtIGExICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzZdID0gKGIyIC0gYTIgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbN10gPSAoYjMgLSBhMyAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZHVhbCBxdWF0ZW5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVhbCBxdWF0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICdxdWF0MignICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcsICcgKyBhWzRdICsgJywgJyArIGFbNV0gKyAnLCAnICsgYVs2XSArICcsICcgKyBhWzddICsgJyknO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGR1YWwgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBkdWFsIHF1YXRlcm5pb25zIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkdWFsIHF1YXRlcm5pb25zIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3QgZHVhbCBxdWF0LlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgZHVhbCBxdWF0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgZHVhbCBxdWF0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKTtcbn0iLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSkge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICByZXR1cm4geCAqIHggKyB5ICogeTtcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHk7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IGFbMF0gKiBsZW47XG4gIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xyXG4gKiBOb3RlIHRoYXQgdGhlIGNyb3NzIHByb2R1Y3QgbXVzdCBieSBkZWZpbml0aW9uIHByb2R1Y2UgYSAzRCB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgeiA9IGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF07XG4gIG91dFswXSA9IG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcbiAgdmFyIHIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAqIE1hdGguUEk7XG4gIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XG4gIG91dFsxXSA9IE1hdGguc2luKHIpICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQyfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MihvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHk7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyZChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs0XSAqIHkgKyBtWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDRcclxuICogM3JkIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMCdcclxuICogNHRoIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAyRCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMyXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgdmVjMiBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgYiwgYykge1xuICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG4gIHZhciBwMCA9IGFbMF0gLSBiWzBdLFxuICAgICAgcDEgPSBhWzFdIC0gYlsxXSxcbiAgICAgIHNpbkMgPSBNYXRoLnNpbihjKSxcbiAgICAgIGNvc0MgPSBNYXRoLmNvcyhjKTsgLy9wZXJmb3JtIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHAwICogY29zQyAtIHAxICogc2luQyArIGJbMF07XG4gIG91dFsxXSA9IHAwICogc2luQyArIHAxICogY29zQyArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0IHRoZSBhbmdsZSBiZXR3ZWVuIHR3byAyRCB2ZWN0b3JzXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYW5nbGUoYSwgYikge1xuICB2YXIgeDEgPSBhWzBdLFxuICAgICAgeTEgPSBhWzFdLFxuICAgICAgeDIgPSBiWzBdLFxuICAgICAgeTIgPSBiWzFdO1xuICB2YXIgbGVuMSA9IHgxICogeDEgKyB5MSAqIHkxO1xuXG4gIGlmIChsZW4xID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuMSA9IDEgLyBNYXRoLnNxcnQobGVuMSk7XG4gIH1cblxuICB2YXIgbGVuMiA9IHgyICogeDIgKyB5MiAqIHkyO1xuXG4gIGlmIChsZW4yID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuMiA9IDEgLyBNYXRoLnNxcnQobGVuMik7XG4gIH1cblxuICB2YXIgY29zaW5lID0gKHgxICogeDIgKyB5MSAqIHkyKSAqIGxlbjEgKiBsZW4yO1xuXG4gIGlmIChjb3NpbmUgPiAxLjApIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChjb3NpbmUgPCAtMS4wKSB7XG4gICAgcmV0dXJuIE1hdGguUEk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xuICB9XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuICd2ZWMyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnKSc7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBleGFjdGx5IGhhdmUgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDI7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBDaXJjbGVCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvY2lyY2xlX2J1Y2tldCc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludH0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHtnZXRNYXhpbXVtUGFpbnRWYWx1ZSwgdHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9jaXJjbGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBMYXlvdXQsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB7dmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtCdWNrZXQsIEJ1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9jaXJjbGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgQ2lyY2xlU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lyY2xlQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKGJ1Y2tldDogQnVja2V0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2lyY2xlQnVja2V0OiBDaXJjbGVCdWNrZXQ8Q2lyY2xlU3R5bGVMYXllcj4gPSAoYnVja2V0OiBhbnkpO1xuICAgICAgICByZXR1cm4gZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2NpcmNsZS1yYWRpdXMnLCB0aGlzLCBjaXJjbGVCdWNrZXQpICtcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdjaXJjbGUtc3Ryb2tlLXdpZHRoJywgdGhpcywgY2lyY2xlQnVja2V0KSArXG4gICAgICAgICAgICB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXJhZGl1cycpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IHN0cm9rZSA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgY29uc3Qgc2l6ZSAgPSByYWRpdXMgKyBzdHJva2U7XG5cbiAgICAgICAgLy8gRm9yIHBpdGNoLWFsaWdubWVudDogbWFwLCBjb21wYXJlIGZlYXR1cmUgZ2VvbWV0cnkgdG8gcXVlcnkgZ2VvbWV0cnkgaW4gdGhlIHBsYW5lIG9mIHRoZSB0aWxlXG4gICAgICAgIC8vIC8vIE90aGVyd2lzZSwgY29tcGFyZSBnZW9tZXRyeSBpbiB0aGUgcGxhbmUgb2YgdGhlIHZpZXdwb3J0XG4gICAgICAgIC8vIC8vIEEgY2lyY2xlIHdpdGggZml4ZWQgc2NhbGluZyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQgZ2V0cyBsYXJnZXIgaW4gdGlsZSBzcGFjZSBhcyBpdCBtb3ZlcyBpbnRvIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyAvLyBBIGNpcmNsZSB3aXRoIGZpeGVkIHNjYWxpbmcgcmVsYXRpdmUgdG8gdGhlIG1hcCBnZXRzIHNtYWxsZXIgaW4gdmlld3BvcnQgc3BhY2UgYXMgaXQgbW92ZXMgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgY29uc3QgYWxpZ25XaXRoTWFwID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9seWdvbiA9IGFsaWduV2l0aE1hcCA/IHRyYW5zbGF0ZWRQb2x5Z29uIDogcHJvamVjdFF1ZXJ5R2VvbWV0cnkodHJhbnNsYXRlZFBvbHlnb24sIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTaXplID0gYWxpZ25XaXRoTWFwID8gc2l6ZSAqIHBpeGVsc1RvVGlsZVVuaXRzIDogc2l6ZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcmluZykge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRQb2ludCA9IGFsaWduV2l0aE1hcCA/IHBvaW50IDogcHJvamVjdFBvaW50KHBvaW50LCBwaXhlbFBvc01hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWRqdXN0ZWRTaXplID0gdHJhbnNmb3JtZWRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2plY3RlZENlbnRlciA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3BvaW50LngsIHBvaW50LnksIDAsIDFdLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtc2NhbGUnKSA9PT0gJ3ZpZXdwb3J0JyAmJiB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJykge1xuICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNpemUgKj0gcHJvamVjdGVkQ2VudGVyWzNdIC8gdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnICYmIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplICo9IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcHJvamVjdGVkQ2VudGVyWzNdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQodHJhbnNmb3JtZWRQb2x5Z29uLCB0cmFuc2Zvcm1lZFBvaW50LCBhZGp1c3RlZFNpemUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb2plY3RQb2ludChwOiBQb2ludCwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkge1xuICAgIGNvbnN0IHBvaW50ID0gdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCBbcC54LCBwLnksIDAsIDFdLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChwb2ludFswXSAvIHBvaW50WzNdLCBwb2ludFsxXSAvIHBvaW50WzNdKTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSB7XG4gICAgcmV0dXJuIHF1ZXJ5R2VvbWV0cnkubWFwKChwKSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9qZWN0UG9pbnQocCwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENpcmNsZUJ1Y2tldCBmcm9tICcuL2NpcmNsZV9idWNrZXQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcblxuY2xhc3MgSGVhdG1hcEJ1Y2tldCBleHRlbmRzIENpcmNsZUJ1Y2tldDxIZWF0bWFwU3R5bGVMYXllcj4ge1xuICAgIC8vIE5lZWRlZCBmb3IgZmxvdyB0byBhY2NlcHQgb21pdDogWydsYXllcnMnXSBiZWxvdywgZHVlIHRvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQyNjJcbiAgICBsYXllcnM6IEFycmF5PEhlYXRtYXBTdHlsZUxheWVyPjtcbn1cblxucmVnaXN0ZXIoJ0hlYXRtYXBCdWNrZXQnLCBIZWF0bWFwQnVja2V0LCB7b21pdDogWydsYXllcnMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBIZWF0bWFwQnVja2V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgdHlwZSBTaXplID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXJcbn07XG5cbnR5cGUgUG9pbnQgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlclxufTtcblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2UoaW1hZ2U6ICosIHt3aWR0aCwgaGVpZ2h0fTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlciwgZGF0YT86IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSkge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiBjaGFubmVscyk7XG4gICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoICE9PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdtaXNtYXRjaGVkIGltYWdlIHNpemUnKTtcbiAgICB9XG4gICAgaW1hZ2Uud2lkdGggPSB3aWR0aDtcbiAgICBpbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaW1hZ2UuZGF0YSA9IGRhdGE7XG4gICAgcmV0dXJuIGltYWdlO1xufVxuXG5mdW5jdGlvbiByZXNpemVJbWFnZShpbWFnZTogKiwge3dpZHRoLCBoZWlnaHR9OiBTaXplLCBjaGFubmVsczogbnVtYmVyKSB7XG4gICAgaWYgKHdpZHRoID09PSBpbWFnZS53aWR0aCAmJiBoZWlnaHQgPT09IGltYWdlLmhlaWdodCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SW1hZ2UgPSBjcmVhdGVJbWFnZSh7fSwge3dpZHRoLCBoZWlnaHR9LCBjaGFubmVscyk7XG5cbiAgICBjb3B5SW1hZ2UoaW1hZ2UsIG5ld0ltYWdlLCB7eDogMCwgeTogMH0sIHt4OiAwLCB5OiAwfSwge1xuICAgICAgICB3aWR0aDogTWF0aC5taW4oaW1hZ2Uud2lkdGgsIHdpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihpbWFnZS5oZWlnaHQsIGhlaWdodClcbiAgICB9LCBjaGFubmVscyk7XG5cbiAgICBpbWFnZS53aWR0aCA9IHdpZHRoO1xuICAgIGltYWdlLmhlaWdodCA9IGhlaWdodDtcbiAgICBpbWFnZS5kYXRhID0gbmV3SW1hZ2UuZGF0YTtcbn1cblxuZnVuY3Rpb24gY29weUltYWdlKHNyY0ltZzogKiwgZHN0SW1nOiAqLCBzcmNQdDogUG9pbnQsIGRzdFB0OiBQb2ludCwgc2l6ZTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlcikge1xuICAgIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBkc3RJbWc7XG4gICAgfVxuXG4gICAgaWYgKHNpemUud2lkdGggPiBzcmNJbWcud2lkdGggfHxcbiAgICAgICAgc2l6ZS5oZWlnaHQgPiBzcmNJbWcuaGVpZ2h0IHx8XG4gICAgICAgIHNyY1B0LnggPiBzcmNJbWcud2lkdGggLSBzaXplLndpZHRoIHx8XG4gICAgICAgIHNyY1B0LnkgPiBzcmNJbWcuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHknKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS53aWR0aCA+IGRzdEltZy53aWR0aCB8fFxuICAgICAgICBzaXplLmhlaWdodCA+IGRzdEltZy5oZWlnaHQgfHxcbiAgICAgICAgZHN0UHQueCA+IGRzdEltZy53aWR0aCAtIHNpemUud2lkdGggfHxcbiAgICAgICAgZHN0UHQueSA+IGRzdEltZy5oZWlnaHQgLSBzaXplLmhlaWdodCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjRGF0YSA9IHNyY0ltZy5kYXRhO1xuICAgIGNvbnN0IGRzdERhdGEgPSBkc3RJbWcuZGF0YTtcblxuICAgIGFzc2VydChzcmNEYXRhICE9PSBkc3REYXRhKTtcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQ7IHkrKykge1xuICAgICAgICBjb25zdCBzcmNPZmZzZXQgPSAoKHNyY1B0LnkgKyB5KSAqIHNyY0ltZy53aWR0aCArIHNyY1B0LngpICogY2hhbm5lbHM7XG4gICAgICAgIGNvbnN0IGRzdE9mZnNldCA9ICgoZHN0UHQueSArIHkpICogZHN0SW1nLndpZHRoICsgZHN0UHQueCkgKiBjaGFubmVscztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplLndpZHRoICogY2hhbm5lbHM7IGkrKykge1xuICAgICAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQgKyBpXSA9IHNyY0RhdGFbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRzdEltZztcbn1cblxuZXhwb3J0IGNsYXNzIEFscGhhSW1hZ2Uge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgMSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgMSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IEFscGhhSW1hZ2UsIGRzdEltZzogQWxwaGFJbWFnZSwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUpIHtcbiAgICAgICAgY29weUltYWdlKHNyY0ltZywgZHN0SW1nLCBzcmNQdCwgZHN0UHQsIHNpemUsIDEpO1xuICAgIH1cbn1cblxuLy8gTm90IHByZW11bHRpcGxpZWQsIGJlY2F1c2UgSW1hZ2VEYXRhIGlzIG5vdCBwcmVtdWx0aXBsaWVkLlxuLy8gVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIG11c3QgYmUgdXNlZCB3aGVuIHVwbG9hZGluZyB0byBhIHRleHR1cmUuXG5leHBvcnQgY2xhc3MgUkdCQUltYWdlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgLy8gZGF0YSBtdXN0IGJlIGEgVWludDhBcnJheSBpbnN0ZWFkIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IGJlY2F1c2UgdGV4SW1hZ2UyRCBkb2VzIG5vdFxuICAgIC8vIHN1cHBvcnQgVWludDhDbGFtcGVkQXJyYXkgaW4gYWxsIGJyb3dzZXJzXG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgNCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgNCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZShkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksIGNvcHk/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IFJHQkFJbWFnZSB8IEltYWdlRGF0YSwgZHN0SW1nOiBSR0JBSW1hZ2UsIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplKSB7XG4gICAgICAgIGNvcHlJbWFnZShzcmNJbWcsIGRzdEltZywgc3JjUHQsIGRzdFB0LCBzaXplLCA0KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbHBoYUltYWdlJywgQWxwaGFJbWFnZSk7XG5yZWdpc3RlcignUkdCQUltYWdlJywgUkdCQUltYWdlKTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJoZWF0bWFwLXJhZGl1c1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGVhdG1hcC1pbnRlbnNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtY29sb3JcIjogQ29sb3JSYW1wUHJvcGVydHksXG4gICAgXCJoZWF0bWFwLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImhlYXRtYXAtcmFkaXVzXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtcmFkaXVzXCJdKSxcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtd2VpZ2h0XCJdKSxcbiAgICBcImhlYXRtYXAtaW50ZW5zaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1pbnRlbnNpdHlcIl0pLFxuICAgIFwiaGVhdG1hcC1jb2xvclwiOiBuZXcgQ29sb3JSYW1wUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtY29sb3JcIl0pLFxuICAgIFwiaGVhdG1hcC1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2luZGV4JztcblxuLyoqXG4gKiBHaXZlbiBhbiBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIGEgY29sb3IgcmFtcCwgcmV0dXJuXG4gKiBhIDI1NngxIHB4IFJHQkEgaW1hZ2UgcmVwcmVzZW50aW5nIHRoYXQgcmFtcCBleHByZXNzaW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgY29sb3JSYW1wRXZhbHVhdGlvblBhcmFtZXRlcjogc3RyaW5nKTogUkdCQUltYWdlIHtcbiAgICBjb25zdCBjb2xvclJhbXBEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogNCk7XG4gICAgY29uc3QgZXZhbHVhdGlvbkdsb2JhbHMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKywgaiArPSA0KSB7XG4gICAgICAgIGV2YWx1YXRpb25HbG9iYWxzW2NvbG9yUmFtcEV2YWx1YXRpb25QYXJhbWV0ZXJdID0gaSAvIDI1NTtcbiAgICAgICAgY29uc3QgcHhDb2xvciA9IGV4cHJlc3Npb24uZXZhbHVhdGUoKGV2YWx1YXRpb25HbG9iYWxzOiBhbnkpKTtcbiAgICAgICAgLy8gdGhlIGNvbG9ycyBhcmUgYmVpbmcgdW5wcmVtdWx0aXBsaWVkIGJlY2F1c2UgQ29sb3IgdXNlc1xuICAgICAgICAvLyBwcmVtdWx0aXBsaWVkIHZhbHVlcywgYW5kIHRoZSBUZXh0dXJlIGNsYXNzIGV4cGVjdHMgdW5wcmVtdWx0aXBsaWVkIG9uZXNcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMF0gPSBNYXRoLmZsb29yKHB4Q29sb3IuciAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDFdID0gTWF0aC5mbG9vcihweENvbG9yLmcgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAyXSA9IE1hdGguZmxvb3IocHhDb2xvci5iICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgM10gPSBNYXRoLmZsb29yKHB4Q29sb3IuYSAqIDI1NSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiAyNTYsIGhlaWdodDogMX0sIGNvbG9yUmFtcERhdGEpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgSGVhdG1hcEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9oZWF0bWFwX2J1Y2tldCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2hlYXRtYXBfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgcmVuZGVyQ29sb3JSYW1wIGZyb20gJy4uLy4uL3V0aWwvY29sb3JfcmFtcCc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUgRnJhbWVidWZmZXIgZnJvbSAnLi4vLi4vZ2wvZnJhbWVidWZmZXInO1xuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBIZWF0bWFwU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaGVhdG1hcEZibzogP0ZyYW1lYnVmZmVyO1xuICAgIGNvbG9yUmFtcDogUkdCQUltYWdlO1xuICAgIGNvbG9yUmFtcFRleHR1cmU6ID9UZXh0dXJlO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY3JlYXRlQnVja2V0KG9wdGlvbnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IEhlYXRtYXBCdWNrZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIGNvbG9yIHJhbXAgdGV4dHVyZSBpcyBnZW5lcmF0ZWQgZm9yIGRlZmF1bHQgaGVhdG1hcCBjb2xvciB0b29cbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2hlYXRtYXAtY29sb3InKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb2xvclJhbXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVDb2xvclJhbXAoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbJ2hlYXRtYXAtY29sb3InXS52YWx1ZS5leHByZXNzaW9uO1xuICAgICAgICB0aGlzLmNvbG9yUmFtcCA9IHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uLCAnaGVhdG1hcERlbnNpdHknKTtcbiAgICAgICAgdGhpcy5jb2xvclJhbXBUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhlYXRtYXBGYm8pIHtcbiAgICAgICAgICAgIHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmhlYXRtYXBGYm8gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIl0pLFxuICAgIFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9oaWxsc2hhZGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgSGlsbHNoYWRlU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhaW50LmdldCgnaGlsbHNoYWRlLWV4YWdnZXJhdGlvbicpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGlsbHNoYWRlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZWFyY3V0O1xuXG5mdW5jdGlvbiBlYXJjdXQoZGF0YSwgaG9sZUluZGljZXMsIGRpbSkge1xuXG4gICAgZGltID0gZGltIHx8IDI7XG5cbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGgsXG4gICAgICAgIG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1swXSAqIGRpbSA6IGRhdGEubGVuZ3RoLFxuICAgICAgICBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KGRhdGEsIDAsIG91dGVyTGVuLCBkaW0sIHRydWUpLFxuICAgICAgICB0cmlhbmdsZXMgPSBbXTtcblxuICAgIGlmICghb3V0ZXJOb2RlIHx8IG91dGVyTm9kZS5uZXh0ID09PSBvdXRlck5vZGUucHJldikgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBpbnZTaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgaW52U2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgaW52U2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgICAgIGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBpLCBsYXN0O1xuXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICBpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xuICAgICAgICByZW1vdmVOb2RlKGxhc3QpO1xuICAgICAgICBsYXN0ID0gbGFzdC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0O1xufVxuXG4vLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuZnVuY3Rpb24gZmlsdGVyUG9pbnRzKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XG4gICAgaWYgKCFlbmQpIGVuZCA9IHN0YXJ0O1xuXG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgYWdhaW47XG4gICAgZG8ge1xuICAgICAgICBhZ2FpbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghcC5zdGVpbmVyICYmIChlcXVhbHMocCwgcC5uZXh0KSB8fCBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XG4gICAgICAgICAgICBwID0gZW5kID0gcC5wcmV2O1xuICAgICAgICAgICAgaWYgKHAgPT09IHAubmV4dCkgYnJlYWs7XG4gICAgICAgICAgICBhZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChhZ2FpbiB8fCBwICE9PSBlbmQpO1xuXG4gICAgcmV0dXJuIGVuZDtcbn1cblxuLy8gbWFpbiBlYXIgc2xpY2luZyBsb29wIHdoaWNoIHRyaWFuZ3VsYXRlcyBhIHBvbHlnb24gKGdpdmVuIGFzIGEgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcykge1xuICAgIGlmICghZWFyKSByZXR1cm47XG5cbiAgICAvLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG4gICAgaWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHZhciBzdG9wID0gZWFyLFxuICAgICAgICBwcmV2LCBuZXh0O1xuXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xuICAgICAgICBwcmV2ID0gZWFyLnByZXY7XG4gICAgICAgIG5leHQgPSBlYXIubmV4dDtcblxuICAgICAgICBpZiAoaW52U2l6ZSA/IGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkgOiBpc0VhcihlYXIpKSB7XG4gICAgICAgICAgICAvLyBjdXQgb2ZmIHRoZSB0cmlhbmdsZVxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGVhci5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKG5leHQuaSAvIGRpbSk7XG5cbiAgICAgICAgICAgIHJlbW92ZU5vZGUoZWFyKTtcblxuICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIGludlNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cbiAgICB2YXIgcCA9IGVhci5wcmV2WixcbiAgICAgICAgbiA9IGVhci5uZXh0WjtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aICYmIG4gJiYgbi56IDw9IG1heFopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuXG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChuICYmIG4ueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlclBvaW50cyhwKTtcbn1cblxuLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1bGF0ZSB0aGVtIGluZGVwZW5kZW50bHlcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG4gICAgdmFyIGEgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBiID0gYS5uZXh0Lm5leHQ7XG4gICAgICAgIHdoaWxlIChiICE9PSBhLnByZXYpIHtcbiAgICAgICAgICAgIGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkgdGhlIGRpYWdvbmFsXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBzcGxpdFBvbHlnb24oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgY29saW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuICAgICAgICAgICAgICAgIGEgPSBmaWx0ZXJQb2ludHMoYSwgYS5uZXh0KTtcbiAgICAgICAgICAgICAgICBjID0gZmlsdGVyUG9pbnRzKGMsIGMubmV4dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBydW4gZWFyY3V0IG9uIGVhY2ggaGFsZlxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChhLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiID0gYi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhLm5leHQ7XG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xufVxuXG4vLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pIHtcbiAgICB2YXIgcXVldWUgPSBbXSxcbiAgICAgICAgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcbiAgICAgICAgZW5kID0gaSA8IGxlbiAtIDEgPyBob2xlSW5kaWNlc1tpICsgMV0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgbGlzdCA9IGxpbmtlZExpc3QoZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSk7XG4gICAgICAgIGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XG4gICAgICAgIHF1ZXVlLnB1c2goZ2V0TGVmdG1vc3QobGlzdCkpO1xuICAgIH1cblxuICAgIHF1ZXVlLnNvcnQoY29tcGFyZVgpO1xuXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICBmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxpbWluYXRlSG9sZShxdWV1ZVtpXSwgb3V0ZXJOb2RlKTtcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRlck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcbiAgICByZXR1cm4gYS54IC0gYi54O1xufVxuXG4vLyBmaW5kIGEgYnJpZGdlIGJldHdlZW4gdmVydGljZXMgdGhhdCBjb25uZWN0cyBob2xlIHdpdGggYW4gb3V0ZXIgcmluZyBhbmQgYW5kIGxpbmsgaXRcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGUoaG9sZSwgb3V0ZXJOb2RlKSB7XG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcbiAgICBpZiAob3V0ZXJOb2RlKSB7XG4gICAgICAgIHZhciBiID0gc3BsaXRQb2x5Z29uKG91dGVyTm9kZSwgaG9sZSk7XG5cbiAgICAgICAgLy8gZmlsdGVyIGNvbGxpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgIGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55ICYmIHAubmV4dC55ICE9PSBwLnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIGlmICh4ID09PSBoeCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAueSkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC5uZXh0LnkpIHJldHVybiBwLm5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChoeCA9PT0gcXgpIHJldHVybiBtOyAvLyBob2xlIHRvdWNoZXMgb3V0ZXIgc2VnbWVudDsgcGljayBsZWZ0bW9zdCBlbmRwb2ludFxuXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBwb2ludHMgZm91bmQsIHdlIGhhdmUgYSB2YWxpZCBjb25uZWN0aW9uO1xuICAgIC8vIG90aGVyd2lzZSBjaG9vc2UgdGhlIHBvaW50IG9mIHRoZSBtaW5pbXVtIGFuZ2xlIHdpdGggdGhlIHJheSBhcyBjb25uZWN0aW9uIHBvaW50XG5cbiAgICB2YXIgc3RvcCA9IG0sXG4gICAgICAgIG14ID0gbS54LFxuICAgICAgICBteSA9IG0ueSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtO1xuXG4gICAgZG8ge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBteCAmJiBoeCAhPT0gcC54ICYmXG4gICAgICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGh5IDwgbXkgPyBoeCA6IHF4LCBoeSwgbXgsIG15LCBoeSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGx5SW5zaWRlKHAsIGhvbGUpICYmXG4gICAgICAgICAgICAgICAgKHRhbiA8IHRhbk1pbiB8fCAodGFuID09PSB0YW5NaW4gJiYgKHAueCA+IG0ueCB8fCAocC54ID09PSBtLnggJiYgc2VjdG9yQ29udGFpbnNTZWN0b3IobSwgcCkpKSkpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdG9wKTtcblxuICAgIHJldHVybiBtO1xufVxuXG4vLyB3aGV0aGVyIHNlY3RvciBpbiB2ZXJ0ZXggbSBjb250YWlucyBzZWN0b3IgaW4gdmVydGV4IHAgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXNcbmZ1bmN0aW9uIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApIHtcbiAgICByZXR1cm4gYXJlYShtLnByZXYsIG0sIHAucHJldikgPCAwICYmIGFyZWEocC5uZXh0LCBtLCBtLm5leHQpIDwgMDtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxU2l6ZSA9IGluU2l6ZTtcblxuICAgICAgICAgICAgd2hpbGUgKHBTaXplID4gMCB8fCAocVNpemUgPiAwICYmIHEpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocFNpemUgIT09IDAgJiYgKHFTaXplID09PSAwIHx8ICFxIHx8IHAueiA8PSBxLnopKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3hcbmZ1bmN0aW9uIHpPcmRlcih4LCB5LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgLy8gY29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciByYW5nZVxuICAgIHggPSAzMjc2NyAqICh4IC0gbWluWCkgKiBpbnZTaXplO1xuICAgIHkgPSAzMjc2NyAqICh5IC0gbWluWSkgKiBpbnZTaXplO1xuXG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB4ID0gKHggfCAoeCA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHggPSAoeCB8ICh4IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHkgPSAoeSB8ICh5IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB5ID0gKHkgfCAoeSA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHkgPSAoeSB8ICh5IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICByZXR1cm4geCB8ICh5IDw8IDEpO1xufVxuXG4vLyBmaW5kIHRoZSBsZWZ0bW9zdCBub2RlIG9mIGEgcG9seWdvbiByaW5nXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdChzdGFydCkge1xuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGxlZnRtb3N0ID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC54IDwgbGVmdG1vc3QueCB8fCAocC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkpKSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiYgLy8gZG9uZXMndCBpbnRlcnNlY3Qgb3RoZXIgZWRnZXNcbiAgICAgICAgICAgKGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYikgJiYgLy8gbG9jYWxseSB2aXNpYmxlXG4gICAgICAgICAgICAoYXJlYShhLnByZXYsIGEsIGIucHJldikgfHwgYXJlYShhLCBiLnByZXYsIGIpKSB8fCAvLyBkb2VzIG5vdCBjcmVhdGUgb3Bwb3NpdGUtZmFjaW5nIHNlY3RvcnNcbiAgICAgICAgICAgIGVxdWFscyhhLCBiKSAmJiBhcmVhKGEucHJldiwgYSwgYS5uZXh0KSA+IDAgJiYgYXJlYShiLnByZXYsIGIsIGIubmV4dCkgPiAwKTsgLy8gc3BlY2lhbCB6ZXJvLWxlbmd0aCBjYXNlXG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgdmFyIG8xID0gc2lnbihhcmVhKHAxLCBxMSwgcDIpKTtcbiAgICB2YXIgbzIgPSBzaWduKGFyZWEocDEsIHExLCBxMikpO1xuICAgIHZhciBvMyA9IHNpZ24oYXJlYShwMiwgcTIsIHAxKSk7XG4gICAgdmFyIG80ID0gc2lnbihhcmVhKHAyLCBxMiwgcTEpKTtcblxuICAgIGlmIChvMSAhPT0gbzIgJiYgbzMgIT09IG80KSByZXR1cm4gdHJ1ZTsgLy8gZ2VuZXJhbCBjYXNlXG5cbiAgICBpZiAobzEgPT09IDAgJiYgb25TZWdtZW50KHAxLCBwMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBwMiBhcmUgY29sbGluZWFyIGFuZCBwMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzIgPT09IDAgJiYgb25TZWdtZW50KHAxLCBxMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBxMiBhcmUgY29sbGluZWFyIGFuZCBxMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzMgPT09IDAgJiYgb25TZWdtZW50KHAyLCBwMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29sbGluZWFyIGFuZCBwMSBsaWVzIG9uIHAycTJcbiAgICBpZiAobzQgPT09IDAgJiYgb25TZWdtZW50KHAyLCBxMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBxMSBhcmUgY29sbGluZWFyIGFuZCBxMSBsaWVzIG9uIHAycTJcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gZm9yIGNvbGxpbmVhciBwb2ludHMgcCwgcSwgciwgY2hlY2sgaWYgcG9pbnQgcSBsaWVzIG9uIHNlZ21lbnQgcHJcbmZ1bmN0aW9uIG9uU2VnbWVudChwLCBxLCByKSB7XG4gICAgcmV0dXJuIHEueCA8PSBNYXRoLm1heChwLngsIHIueCkgJiYgcS54ID49IE1hdGgubWluKHAueCwgci54KSAmJiBxLnkgPD0gTWF0aC5tYXgocC55LCByLnkpICYmIHEueSA+PSBNYXRoLm1pbihwLnksIHIueSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtKSB7XG4gICAgcmV0dXJuIG51bSA+IDAgPyAxIDogbnVtIDwgMCA/IC0xIDogMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxuICAgICAgICAgICAgICAgIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGV4IGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZ1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcblxuICAgIC8vIHotb3JkZXIgY3VydmUgdmFsdWVcbiAgICB0aGlzLnogPSBudWxsO1xuXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxuICAgIHRoaXMucHJldlogPSBudWxsO1xuICAgIHRoaXMubmV4dFogPSBudWxsO1xuXG4gICAgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHN0ZWluZXIgcG9pbnRcbiAgICB0aGlzLnN0ZWluZXIgPSBmYWxzZTtcbn1cblxuLy8gcmV0dXJuIGEgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBvbHlnb24gYXJlYSBhbmQgaXRzIHRyaWFuZ3VsYXRpb24gYXJlYTtcbi8vIHVzZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHRyaWFuZ3VsYXRpb25cbmVhcmN1dC5kZXZpYXRpb24gPSBmdW5jdGlvbiAoZGF0YSwgaG9sZUluZGljZXMsIGRpbSwgdHJpYW5nbGVzKSB7XG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoO1xuICAgIHZhciBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcblxuICAgIHZhciBwb2x5Z29uQXJlYSA9IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSkpO1xuICAgIGlmIChoYXNIb2xlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICAgICAgdmFyIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBwb2x5Z29uQXJlYSAtPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHRyaWFuZ2xlc0FyZWEgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGEgPSB0cmlhbmdsZXNbaV0gKiBkaW07XG4gICAgICAgIHZhciBiID0gdHJpYW5nbGVzW2kgKyAxXSAqIGRpbTtcbiAgICAgICAgdmFyIGMgPSB0cmlhbmdsZXNbaSArIDJdICogZGltO1xuICAgICAgICB0cmlhbmdsZXNBcmVhICs9IE1hdGguYWJzKFxuICAgICAgICAgICAgKGRhdGFbYV0gLSBkYXRhW2NdKSAqIChkYXRhW2IgKyAxXSAtIGRhdGFbYSArIDFdKSAtXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbYl0pICogKGRhdGFbYyArIDFdIC0gZGF0YVthICsgMV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9seWdvbkFyZWEgPT09IDAgJiYgdHJpYW5nbGVzQXJlYSA9PT0gMCA/IDAgOlxuICAgICAgICBNYXRoLmFicygodHJpYW5nbGVzQXJlYSAtIHBvbHlnb25BcmVhKSAvIHBvbHlnb25BcmVhKTtcbn07XG5cbmZ1bmN0aW9uIHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG5cbi8vIHR1cm4gYSBwb2x5Z29uIGluIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgZm9ybSAoZS5nLiBhcyBpbiBHZW9KU09OKSBpbnRvIGEgZm9ybSBFYXJjdXQgYWNjZXB0c1xuZWFyY3V0LmZsYXR0ZW4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBkaW0gPSBkYXRhWzBdWzBdLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0ge3ZlcnRpY2VzOiBbXSwgaG9sZXM6IFtdLCBkaW1lbnNpb25zOiBkaW19LFxuICAgICAgICBob2xlSW5kZXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGF0YVtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykgcmVzdWx0LnZlcnRpY2VzLnB1c2goZGF0YVtpXVtqXVtkXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBob2xlSW5kZXggKz0gZGF0YVtpIC0gMV0ubGVuZ3RoO1xuICAgICAgICAgICAgcmVzdWx0LmhvbGVzLnB1c2goaG9sZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyLCBrLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuICAgIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQgfHwgMCwgcmlnaHQgfHwgKGFyci5sZW5ndGggLSAxKSwgY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyZSk7XG59XG5cbmZ1bmN0aW9uIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQsIHJpZ2h0LCBjb21wYXJlKSB7XG5cbiAgICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgICAgICAgIHZhciBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIHZhciBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgdmFyIHogPSBNYXRoLmxvZyhuKTtcbiAgICAgICAgICAgIHZhciBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgICAgICAgIHZhciBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIHZhciBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHZhciBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgcXVpY2tzZWxlY3RTdGVwKGFyciwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHQgPSBhcnJba107XG4gICAgICAgIHZhciBpID0gbGVmdDtcbiAgICAgICAgdmFyIGogPSByaWdodDtcblxuICAgICAgICBzd2FwKGFyciwgbGVmdCwgayk7XG4gICAgICAgIGlmIChjb21wYXJlKGFycltyaWdodF0sIHQpID4gMCkgc3dhcChhcnIsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXAoYXJyLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltpXSwgdCkgPCAwKSBpKys7XG4gICAgICAgICAgICB3aGlsZSAoY29tcGFyZShhcnJbal0sIHQpID4gMCkgai0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnIsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXAoYXJyLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIHZhciB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBxdWlja3NlbGVjdCBmcm9tICdxdWlja3NlbGVjdCc7XG5cbmltcG9ydCB7Y2FsY3VsYXRlU2lnbmVkQXJlYX0gZnJvbSAnLi91dGlsJztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xhc3NpZnlSaW5ncyhyaW5nczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgbWF4UmluZ3M6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICAgIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgICBjb25zdCBwb2x5Z29ucyA9IFtdO1xuICAgIGxldCBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjYWxjdWxhdGVTaWduZWRBcmVhKHJpbmdzW2ldKTtcbiAgICAgICAgaWYgKGFyZWEgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIChyaW5nc1tpXTogYW55KS5hcmVhID0gTWF0aC5hYnMoYXJlYSk7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSBjY3cgPSBhcmVhIDwgMDtcblxuICAgICAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHBvbHlnb246IGFueSkucHVzaChyaW5nc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG5cbiAgICAvLyBFYXJjdXQgcGVyZm9ybWFuY2UgZGVncmFkZXMgd2l0aCB0aGUgIyBvZiByaW5ncyBpbiBhIHBvbHlnb24uIEZvciB0aGlzXG4gICAgLy8gcmVhc29uLCB3ZSBsaW1pdCBzdHJpcCBvdXQgYWxsIGJ1dCB0aGUgYG1heFJpbmdzYCBsYXJnZXN0IHJpbmdzLlxuICAgIGlmIChtYXhSaW5ncyA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2x5Z29ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25zW2pdLmxlbmd0aCA8PSBtYXhSaW5ncykgY29udGludWU7XG4gICAgICAgICAgICBxdWlja3NlbGVjdChwb2x5Z29uc1tqXSwgbWF4UmluZ3MsIDEsIHBvbHlnb25zW2pdLmxlbmd0aCAtIDEsIGNvbXBhcmVBcmVhcyk7XG4gICAgICAgICAgICBwb2x5Z29uc1tqXSA9IHBvbHlnb25zW2pdLnNsaWNlKDAsIG1heFJpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gY29tcGFyZUFyZWFzKGEsIGIpIHtcbiAgICByZXR1cm4gYi5hcmVhIC0gYS5hcmVhO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuXG50eXBlIFBhdHRlcm5TdHlsZUxheWVycyA9XG4gICAgQXJyYXk8TGluZVN0eWxlTGF5ZXI+IHxcbiAgICBBcnJheTxGaWxsU3R5bGVMYXllcj4gfFxuICAgIEFycmF5PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdHRlcm4odHlwZTogc3RyaW5nLCBsYXllcnM6IFBhdHRlcm5TdHlsZUxheWVycywgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXM7XG4gICAgbGV0IGhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldChgJHt0eXBlfS1wYXR0ZXJuYCk7XG4gICAgICAgIGlmICghcGF0dGVyblByb3BlcnR5LmlzQ29uc3RhbnQoKSkge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybikge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4udG9dID0gIHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4uZnJvbV0gPSAgdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNQYXR0ZXJuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0dGVybkRlcGVuZGVuY2llcyh0eXBlOiBzdHJpbmcsIGxheWVyczogUGF0dGVyblN0eWxlTGF5ZXJzLCBwYXR0ZXJuRmVhdHVyZTogQnVja2V0RmVhdHVyZSwgem9vbTogbnVtYmVyLCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcztcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoYCR7dHlwZX0tcGF0dGVybmApO1xuXG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlID0gcGF0dGVyblByb3BlcnR5LnZhbHVlO1xuICAgICAgICBpZiAocGF0dGVyblByb3BlcnR5VmFsdWUua2luZCAhPT0gXCJjb25zdGFudFwiKSB7XG4gICAgICAgICAgICBsZXQgbWluID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb206IHpvb20gLSAxfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBsZXQgbWlkID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb219LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIGxldCBtYXggPSBwYXR0ZXJuUHJvcGVydHlWYWx1ZS5ldmFsdWF0ZSh7em9vbTogem9vbSArIDF9LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIG1pbiA9IG1pbiAmJiBtaW4ubmFtZSA/IG1pbi5uYW1lIDogbWluO1xuICAgICAgICAgICAgbWlkID0gbWlkICYmIG1pZC5uYW1lID8gbWlkLm5hbWUgOiBtaWQ7XG4gICAgICAgICAgICBtYXggPSBtYXggJiYgbWF4Lm5hbWUgPyBtYXgubmFtZSA6IG1heDtcbiAgICAgICAgICAgIC8vIGFkZCB0byBwYXR0ZXJuRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBwYXR0ZXJuc1ttaW5dID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW21pZF0gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbbWF4XSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHNhdmUgZm9yIGxheW91dFxuICAgICAgICAgICAgcGF0dGVybkZlYXR1cmUucGF0dGVybnNbbGF5ZXIuaWRdID0ge21pbiwgbWlkLCBtYXh9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuRmVhdHVyZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbExheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5LCBUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5jb25zdCBFQVJDVVRfTUFYX1JJTkdTID0gNTAwO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmNsYXNzIEZpbGxCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxGaWxsU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogRmlsbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXkyOiBMaW5lSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBzZWdtZW50czI6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5MiA9IG5ldyBMaW5lSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwnLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZpbGxTb3J0S2V5ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgnZmlsbC1zb3J0LWtleScpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25GZWF0dXJlID0ge3R5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGxvYWRHZW9tZXRyeShmZWF0dXJlKSA6IFtdfTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFuZWVkR2VvbWV0cnkpICBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcblxuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGZpbGxTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBmaWxsU29ydEtleS5ldmFsdWF0ZShldmFsdWF0aW9uRmVhdHVyZSwge30sIGNhbm9uaWNhbCwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuRmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2ZpbGwnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBjYW5vbmljYWwsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgY2Fub25pY2FsLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZ2VvbWV0cnksIEVBUkNVVF9NQVhfUklOR1MpKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmVydGljZXMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNlcyArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVTZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlcywgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZVNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhvbGVJbmRpY2VzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyaW5nICE9PSBwb2x5Z29uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvbGVJbmRpY2VzLnB1c2goZmxhdHRlbmVkLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVTZWdtZW50ID0gdGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQocmluZy5sZW5ndGgsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGxpbmVTZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socmluZ1swXS54LCByaW5nWzBdLnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sobGluZUluZGV4ICsgcmluZy5sZW5ndGggLSAxLCBsaW5lSW5kZXgpO1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbMF0ueCk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1swXS55KTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHJpbmdbaV0ueCwgcmluZ1tpXS55KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayhsaW5lSW5kZXggKyBpIC0gMSwgbGluZUluZGV4ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGluZVNlZ21lbnQudmVydGV4TGVuZ3RoICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxpbmVTZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGVhcmN1dChmbGF0dGVuZWQsIGhvbGVJbmRpY2VzKTtcbiAgICAgICAgICAgIGFzc2VydChpbmRpY2VzLmxlbmd0aCAlIDMgPT09IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ldLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2kgKyAyXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlU2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gbnVtVmVydGljZXM7XG4gICAgICAgICAgICB0cmlhbmdsZVNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IGluZGljZXMubGVuZ3RoIC8gMztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMsIGNhbm9uaWNhbCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmlsbEJ1Y2tldCcsIEZpbGxCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9maWxsXCJdW1wiZmlsbC1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtYW50aWFsaWFzXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsXCJdW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFxuICAgIFwiZmlsbC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3BhY2l0eVwiXSksXG4gICAgXCJmaWxsLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtY29sb3JcIl0pLFxuICAgIFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlXCJdKSxcbiAgICBcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtcGF0dGVyblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb259IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7dHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgRmlsbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgY29uc3Qgb3V0bGluZUNvbG9yID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXTtcbiAgICAgICAgaWYgKG91dGxpbmVDb2xvci52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIG91dGxpbmVDb2xvci52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbJ2ZpbGwtb3V0bGluZS1jb2xvciddID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLWNvbG9yJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxsU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2Ffbm9ybWFsX2VkJywgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdAbWFwYm94L3BvaW50LWdlb21ldHJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUZlYXR1cmU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVGZWF0dXJlKHBiZiwgZW5kLCBleHRlbnQsIGtleXMsIHZhbHVlcykge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMudHlwZSA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2dlb21ldHJ5ID0gLTE7XG4gICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZEZlYXR1cmUsIHRoaXMsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGZWF0dXJlKHRhZywgZmVhdHVyZSwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PSAxKSBmZWF0dXJlLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMikgcmVhZFRhZyhwYmYsIGZlYXR1cmUpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSAzKSBmZWF0dXJlLnR5cGUgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSA0KSBmZWF0dXJlLl9nZW9tZXRyeSA9IHBiZi5wb3M7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWcocGJmLCBmZWF0dXJlKSB7XG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIGtleSA9IGZlYXR1cmUuX2tleXNbcGJmLnJlYWRWYXJpbnQoKV0sXG4gICAgICAgICAgICB2YWx1ZSA9IGZlYXR1cmUuX3ZhbHVlc1twYmYucmVhZFZhcmludCgpXTtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5cblZlY3RvclRpbGVGZWF0dXJlLnR5cGVzID0gWydVbmtub3duJywgJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnUG9seWdvbiddO1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBiZiA9IHRoaXMuX3BiZjtcbiAgICBwYmYucG9zID0gdGhpcy5fZ2VvbWV0cnk7XG5cbiAgICB2YXIgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MsXG4gICAgICAgIGNtZCA9IDEsXG4gICAgICAgIGxlbmd0aCA9IDAsXG4gICAgICAgIHggPSAwLFxuICAgICAgICB5ID0gMCxcbiAgICAgICAgbGluZXMgPSBbXSxcbiAgICAgICAgbGluZTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNtZCA9PT0gMSkgeyAvLyBtb3ZlVG9cbiAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpbmUucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwbmlrLXZlY3Rvci10aWxlL2lzc3Vlcy85MFxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnB1c2gobGluZVswXS5jbG9uZSgpKTsgLy8gY2xvc2VQb2x5Z29uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICByZXR1cm4gbGluZXM7XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIHgxID0gSW5maW5pdHksXG4gICAgICAgIHgyID0gLUluZmluaXR5LFxuICAgICAgICB5MSA9IEluZmluaXR5LFxuICAgICAgICB5MiA9IC1JbmZpbml0eTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIGlmICh4IDwgeDEpIHgxID0geDtcbiAgICAgICAgICAgIGlmICh4ID4geDIpIHgyID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgeTEpIHkxID0geTtcbiAgICAgICAgICAgIGlmICh5ID4geTIpIHkyID0geTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCAhPT0gNykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbW1hbmQgJyArIGNtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXTtcbn07XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04gPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmV4dGVudCAqIE1hdGgucG93KDIsIHopLFxuICAgICAgICB4MCA9IHRoaXMuZXh0ZW50ICogeCxcbiAgICAgICAgeTAgPSB0aGlzLmV4dGVudCAqIHksXG4gICAgICAgIGNvb3JkcyA9IHRoaXMubG9hZEdlb21ldHJ5KCksXG4gICAgICAgIHR5cGUgPSBWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1t0aGlzLnR5cGVdLFxuICAgICAgICBpLCBqO1xuXG4gICAgZnVuY3Rpb24gcHJvamVjdChsaW5lKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHAgPSBsaW5lW2pdLCB5MiA9IDE4MCAtIChwLnkgKyB5MCkgKiAzNjAgLyBzaXplO1xuICAgICAgICAgICAgbGluZVtqXSA9IFtcbiAgICAgICAgICAgICAgICAocC54ICsgeDApICogMzYwIC8gc2l6ZSAtIDE4MCxcbiAgICAgICAgICAgICAgICAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTBcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBjb29yZHNbaV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgY29vcmRzID0gcG9pbnRzO1xuICAgICAgICBwcm9qZWN0KGNvb3Jkcyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM6XG4gICAgICAgIGNvb3JkcyA9IGNsYXNzaWZ5UmluZ3MoY29vcmRzKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHByb2plY3QoY29vcmRzW2ldW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9ICdNdWx0aScgKyB0eXBlO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcblxuICAgIGlmICgnaWQnIGluIHRoaXMpIHtcbiAgICAgICAgcmVzdWx0LmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3MpIHtcbiAgICB2YXIgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA8PSAxKSByZXR1cm4gW3JpbmdzXTtcblxuICAgIHZhciBwb2x5Z29ucyA9IFtdLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBhcmVhID0gc2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoY2N3ID09PSB1bmRlZmluZWQpIGNjdyA9IGFyZWEgPCAwO1xuXG4gICAgICAgIGlmIChjY3cgPT09IGFyZWEgPCAwKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2x5Z29uLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKHJpbmcpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnLi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVMYXllcjtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZUxheWVyKHBiZiwgZW5kKSB7XG4gICAgLy8gUHVibGljXG4gICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gNDA5NjtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZExheWVyLCB0aGlzLCBlbmQpO1xuXG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLl9mZWF0dXJlcy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHJlYWRMYXllcih0YWcsIGxheWVyLCBwYmYpIHtcbiAgICBpZiAodGFnID09PSAxNSkgbGF5ZXIudmVyc2lvbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAxKSBsYXllci5uYW1lID0gcGJmLnJlYWRTdHJpbmcoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGxheWVyLmV4dGVudCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAyKSBsYXllci5fZmVhdHVyZXMucHVzaChwYmYucG9zKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGxheWVyLl9rZXlzLnB1c2gocGJmLnJlYWRTdHJpbmcoKSk7XG4gICAgZWxzZSBpZiAodGFnID09PSA0KSBsYXllci5fdmFsdWVzLnB1c2gocmVhZFZhbHVlTWVzc2FnZShwYmYpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlTWVzc2FnZShwYmYpIHtcbiAgICB2YXIgdmFsdWUgPSBudWxsLFxuICAgICAgICBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciB0YWcgPSBwYmYucmVhZFZhcmludCgpID4+IDM7XG5cbiAgICAgICAgdmFsdWUgPSB0YWcgPT09IDEgPyBwYmYucmVhZFN0cmluZygpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gMiA/IHBiZi5yZWFkRmxvYXQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDMgPyBwYmYucmVhZERvdWJsZSgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNCA/IHBiZi5yZWFkVmFyaW50NjQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDUgPyBwYmYucmVhZFZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNiA/IHBiZi5yZWFkU1ZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNyA/IHBiZi5yZWFkQm9vbGVhbigpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIHJldHVybiBmZWF0dXJlIGBpYCBmcm9tIHRoaXMgbGF5ZXIgYXMgYSBgVmVjdG9yVGlsZUZlYXR1cmVgXG5WZWN0b3JUaWxlTGF5ZXIucHJvdG90eXBlLmZlYXR1cmUgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcycpO1xuXG4gICAgdGhpcy5fcGJmLnBvcyA9IHRoaXMuX2ZlYXR1cmVzW2ldO1xuXG4gICAgdmFyIGVuZCA9IHRoaXMuX3BiZi5yZWFkVmFyaW50KCkgKyB0aGlzLl9wYmYucG9zO1xuICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUZlYXR1cmUodGhpcy5fcGJmLCBlbmQsIHRoaXMuZXh0ZW50LCB0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVMYXllciA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWxheWVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZTtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZShwYmYsIGVuZCkge1xuICAgIHRoaXMubGF5ZXJzID0gcGJmLnJlYWRGaWVsZHMocmVhZFRpbGUsIHt9LCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkVGlsZSh0YWcsIGxheWVycywgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICB2YXIgbGF5ZXIgPSBuZXcgVmVjdG9yVGlsZUxheWVyKHBiZiwgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MpO1xuICAgICAgICBpZiAobGF5ZXIubGVuZ3RoKSBsYXllcnNbbGF5ZXIubmFtZV0gPSBsYXllcjtcbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMnKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbEV4dHJ1c2lvbkxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmNvbnN0IEVBUkNVVF9NQVhfUklOR1MgPSA1MDA7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5cbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuY29uc3QgRkFDVE9SID0gTWF0aC5wb3coMiwgMTMpO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgodmVydGV4QXJyYXksIHgsIHksIG54LCBueSwgbnosIHQsIGUpIHtcbiAgICB2ZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3NcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgLy8gYV9ub3JtYWxfZWQ6IDMtY29tcG9uZW50IG5vcm1hbCBhbmQgMS1jb21wb25lbnQgZWRnZWRpc3RhbmNlXG4gICAgICAgIE1hdGguZmxvb3IobnggKiBGQUNUT1IpICogMiArIHQsXG4gICAgICAgIG55ICogRkFDVE9SICogMixcbiAgICAgICAgbnogKiBGQUNUT1IgKiAyLFxuICAgICAgICAvLyBlZGdlZGlzdGFuY2UgKHVzZWQgZm9yIHdyYXBwaW5nIHBhdHRlcm5zIGFyb3VuZCBleHRydXNpb24gc2lkZXMpXG4gICAgICAgIE1hdGgucm91bmQoZSlcbiAgICApO1xufVxuXG5jbGFzcyBGaWxsRXh0cnVzaW9uQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcbiAgICBmZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxFeHRydXNpb25TdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuXG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLmZlYXR1cmVzID0gW107XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwtZXh0cnVzaW9uJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25GZWF0dXJlID0ge3R5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGxvYWRHZW9tZXRyeShmZWF0dXJlKSA6IFtdfTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbmVlZEdlb21ldHJ5ID8gZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgOiBsb2FkR2VvbWV0cnkoZmVhdHVyZSksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge31cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmVhdHVyZS5pZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goYWRkUGF0dGVybkRlcGVuZGVuY2llcygnZmlsbC1leHRydXNpb24nLCB0aGlzLmxheWVycywgcGF0dGVybkZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUocGF0dGVybkZlYXR1cmUsIHBhdHRlcm5GZWF0dXJlLmdlb21ldHJ5LCBpbmRleCwgY2Fub25pY2FsLCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBwYXR0ZXJuRmVhdHVyZS5nZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeX0gPSBmZWF0dXJlO1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGdlb21ldHJ5LCBmZWF0dXJlLmluZGV4LCBjYW5vbmljYWwsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGdlb21ldHJ5LCBFQVJDVVRfTUFYX1JJTkdTKSkge1xuICAgICAgICAgICAgbGV0IG51bVZlcnRpY2VzID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgbnVtVmVydGljZXMgKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzRW50aXJlbHlPdXRzaWRlKHJpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBlZGdlRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByaW5nLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAxID0gcmluZ1twXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHJpbmdbcCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQm91bmRhcnlFZGdlKHAxLCBwMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyA0ID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnAgPSBwMS5zdWIocDIpLl9wZXJwKCkuX3VuaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gcDIuZGlzdChwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2VEaXN0YW5jZSArIGRpc3QgPiAzMjc2OCkgZWRnZURpc3RhbmNlID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMS54LCBwMS55LCBwZXJwLngsIHBlcnAueSwgMCwgMCwgZWRnZURpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDEueCwgcDEueSwgcGVycC54LCBwZXJwLnksIDAsIDEsIGVkZ2VEaXN0YW5jZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlRGlzdGFuY2UgKz0gZGlzdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMi54LCBwMi55LCBwZXJwLngsIHBlcnAueSwgMCwgMCwgZWRnZURpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDIueCwgcDIueSwgcGVycC54LCBwZXJwLnksIDAsIDEsIGVkZ2VEaXN0YW5jZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3R0b21SaWdodCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKMw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCIDAgIDEgw6LClMKCIENvdW50ZXItY2xvY2t3aXNlIHdpbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCICAgICAgw6LClMKCIFRyaWFuZ2xlIDE6IDAgPT4gMiA9PiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCIDIgIDMgw6LClMKCIFRyaWFuZ2xlIDI6IDEgPT4gMiA9PiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKUw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKYXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGJvdHRvbVJpZ2h0LCBib3R0b21SaWdodCArIDIsIGJvdHRvbVJpZ2h0ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGJvdHRvbVJpZ2h0ICsgMSwgYm90dG9tUmlnaHQgKyAyLCBib3R0b21SaWdodCArIDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyBudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlcywgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9Pbmx5IHRyaWFuZ3VsYXRlIGFuZCBkcmF3IHRoZSBhcmVhIG9mIHRoZSBmZWF0dXJlIGlmIGl0IGlzIGEgcG9seWdvblxuICAgICAgICAgICAgLy9PdGhlciBmZWF0dXJlIHR5cGVzIChlLmcuIExpbmVTdHJpbmcpIGRvIG5vdCBoYXZlIGFyZWEsIHNvIHRyaWFuZ3VsYXRpb24gaXMgcG9pbnRsZXNzIC8gdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAodmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdICE9PSAnUG9seWdvbicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaG9sZUluZGljZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlSW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJpbmcgIT09IHBvbHlnb25bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaG9sZUluZGljZXMucHVzaChmbGF0dGVuZWQubGVuZ3RoIC8gMik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByaW5nW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwLngsIHAueSwgMCwgMCwgMSwgMSwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocC54KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocC55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBlYXJjdXQoZmxhdHRlbmVkLCBob2xlSW5kaWNlcyk7XG4gICAgICAgICAgICBhc3NlcnQoaW5kaWNlcy5sZW5ndGggJSAzID09PSAwKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bnRlci1jbG9ja3dpc2Ugd2luZGluZyBvcmRlci5cbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2pdLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ogKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IGluZGljZXMubGVuZ3RoIC8gMztcbiAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IG51bVZlcnRpY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxFeHRydXNpb25CdWNrZXQnLCBGaWxsRXh0cnVzaW9uQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAnZmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsRXh0cnVzaW9uQnVja2V0O1xuXG5mdW5jdGlvbiBpc0JvdW5kYXJ5RWRnZShwMSwgcDIpIHtcbiAgICByZXR1cm4gKHAxLnggPT09IHAyLnggJiYgKHAxLnggPCAwIHx8IHAxLnggPiBFWFRFTlQpKSB8fFxuICAgICAgICAocDEueSA9PT0gcDIueSAmJiAocDEueSA8IDAgfHwgcDEueSA+IEVYVEVOVCkpO1xufVxuXG5mdW5jdGlvbiBpc0VudGlyZWx5T3V0c2lkZShyaW5nKSB7XG4gICAgcmV0dXJuIHJpbmcuZXZlcnkocCA9PiBwLnggPCAwKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC54ID4gRVhURU5UKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC55IDwgMCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueSA+IEVYVEVOVCk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWJhc2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbn0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHt0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbEV4dHJ1c2lvbkJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBpczNEKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHwgbnVtYmVyIHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1oZWlnaHQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLWJhc2UnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgsIHRyYW5zZm9ybSwgMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGVkID0gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeSwgYmFzZSwgaGVpZ2h0LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBwcm9qZWN0ZWRbMF07XG4gICAgICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IHByb2plY3RlZFsxXTtcbiAgICAgICAgcmV0dXJuIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcCwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb3QoYSwgYikge1xuICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIHByb2plY3RlZEZhY2U6IEFycmF5PFBvaW50Pikge1xuXG4gICAgaWYgKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIEZvciBwb2ludCBxdWVyaWVzIGNhbGN1bGF0ZSB0aGUgeiBhdCB3aGljaCB0aGUgcG9pbnQgaW50ZXJzZWN0cyB0aGUgZmFjZVxuICAgICAgICAvLyB1c2luZyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcy5cblxuICAgICAgICAvLyBGaW5kIHRoZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBvZiB0aGUgcHJvamVjdGVkIHBvaW50IHdpdGhpbiB0aGUgZmlyc3RcbiAgICAgICAgLy8gdHJpYW5nbGUgb2YgdGhlIGZhY2UsIHVzaW5nIG9ubHkgdGhlIHh5IHBsYW5lLiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGVcbiAgICAgICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmlyc3QgdHJpYW5nbGUgYmVjYXVzZSBhbGwgdGhlIHRyaWFuZ2xlcyBpbiB0aGUgZmFjZVxuICAgICAgICAvLyBhcmUgaW4gdGhlIHNhbWUgcGxhbmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgcG9pbnRzIGFyZSBjb2luY2lkZW50IGFuZCB1c2Ugb3RoZXIgcG9pbnRzIGlmIHRoZXkgYXJlLlxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgIGxldCBiLCBjO1xuICAgICAgICB3aGlsZSAoIWIgfHwgYS5lcXVhbHMoYikpIHtcbiAgICAgICAgICAgIGIgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgICAgICBpZiAoIWIpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoIWMgfHwgYS5lcXVhbHMoYykgfHwgYi5lcXVhbHMoYykpIHtcbiAgICAgICAgICAgIGMgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgICAgICBpZiAoIWMpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5WzBdO1xuXG4gICAgICAgIGNvbnN0IGFiID0gYi5zdWIoYSk7XG4gICAgICAgIGNvbnN0IGFjID0gYy5zdWIoYSk7XG4gICAgICAgIGNvbnN0IGFwID0gcC5zdWIoYSk7XG5cbiAgICAgICAgY29uc3QgZG90QUJBQiA9IGRvdChhYiwgYWIpO1xuICAgICAgICBjb25zdCBkb3RBQkFDID0gZG90KGFiLCBhYyk7XG4gICAgICAgIGNvbnN0IGRvdEFDQUMgPSBkb3QoYWMsIGFjKTtcbiAgICAgICAgY29uc3QgZG90QVBBQiA9IGRvdChhcCwgYWIpO1xuICAgICAgICBjb25zdCBkb3RBUEFDID0gZG90KGFwLCBhYyk7XG4gICAgICAgIGNvbnN0IGRlbm9tID0gZG90QUJBQiAqIGRvdEFDQUMgLSBkb3RBQkFDICogZG90QUJBQztcbiAgICAgICAgY29uc3QgdiA9IChkb3RBQ0FDICogZG90QVBBQiAtIGRvdEFCQUMgKiBkb3RBUEFDKSAvIGRlbm9tO1xuICAgICAgICBjb25zdCB3ID0gKGRvdEFCQUIgKiBkb3RBUEFDIC0gZG90QUJBQyAqIGRvdEFQQUIpIC8gZGVub207XG4gICAgICAgIGNvbnN0IHUgPSAxIC0gdiAtIHc7XG5cbiAgICAgICAgLy8gVXNlIHRoZSBiYXJ5Y2VudHJpYyB3ZWlnaHRpbmcgYWxvbmcgd2l0aCB0aGUgb3JpZ2luYWwgdHJpYW5nbGUgeiBjb29yZGluYXRlcyB0byBnZXQgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbi5cbiAgICAgICAgcmV0dXJuIGEueiAqIHUgKyBiLnogKiB2ICsgYy56ICogdztcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBjb3VudHMgYXMgY2xvc2VzdCBpcyBsZXNzIGNsZWFyIHdoZW4gdGhlIHF1ZXJ5IGlzIGEgYm94LiBUaGlzXG4gICAgICAgIC8vIHJldHVybnMgdGhlIGRpc3RhbmNlIHRvIHRoZSBuZWFyZXN0IHBvaW50IG9uIHRoZSBmYWNlLCB3aGV0aGVyIGl0IGlzXG4gICAgICAgIC8vIHdpdGhpbiB0aGUgcXVlcnkgb3Igbm90LiBJdCBjb3VsZCBiZSBtb3JlIGNvcnJlY3QgdG8gcmV0dXJuIHRoZVxuICAgICAgICAvLyBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gdGhlIHF1ZXJ5IGJveCBidXQgdGhpcyB3b3VsZCBiZVxuICAgICAgICAvLyBtb3JlIGNvbXBsaWNhdGVkIGFuZCBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHdpdGggbGl0dGxlIGJlbmVmaXQuXG4gICAgICAgIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByb2plY3RlZEZhY2UpIHtcbiAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgcC56KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvc2VzdERpc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24ocHJvamVjdGVkQmFzZTogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRUb3A6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+KSB7XG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIHByb2plY3RlZFRvcCkpIHtcbiAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgcHJvamVjdGVkVG9wWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCByID0gMDsgciA8IHByb2plY3RlZFRvcC5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nVG9wID0gcHJvamVjdGVkVG9wW3JdO1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IHByb2plY3RlZEJhc2Vbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZ1RvcC5sZW5ndGggLSAxOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcEEgPSByaW5nVG9wW3BdO1xuICAgICAgICAgICAgY29uc3QgdG9wQiA9IHJpbmdUb3BbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgYmFzZUEgPSByaW5nQmFzZVtwXTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VCID0gcmluZ0Jhc2VbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgZmFjZSA9IFt0b3BBLCB0b3BCLCBiYXNlQiwgYmFzZUEsIHRvcEFdO1xuICAgICAgICAgICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBmYWNlKSkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgZmFjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb3Nlc3REaXN0YW5jZSA9PT0gSW5maW5pdHkgPyBmYWxzZSA6IGNsb3Nlc3REaXN0YW5jZTtcbn1cblxuLypcbiAqIFByb2plY3QgdGhlIGdlb21ldHJ5IHVzaW5nIG1hdHJpeCBgbWAuIFRoaXMgaXMgZXNzZW50aWFsbHkgZG9pbmdcbiAqIGB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwLngsIHAueSwgeiwgMV0sIG0pYCBidXQgdGhlIG11bHRpcGxpY2F0aW9uXG4gKiBpcyBpbmxpbmVkIHNvIHRoYXQgcGFydHMgb2YgdGhlIHByb2plY3Rpb24gdGhhdCBhcmUgdGhlIHNhbWUgYWNyb3NzXG4gKiBkaWZmZXJlbnQgcG9pbnRzIGNhbiBvbmx5IGJlIGRvbmUgb25jZS4gVGhpcyBwcm9kdWNlZCBhIG1lYXN1cmFibGVcbiAqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LlxuICovXG5mdW5jdGlvbiBwcm9qZWN0RXh0cnVzaW9uKGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCB6QmFzZTogbnVtYmVyLCB6VG9wOiBudW1iZXIsIG06IEZsb2F0MzJBcnJheSkge1xuICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBbXTtcbiAgICBjb25zdCBwcm9qZWN0ZWRUb3AgPSBbXTtcblxuICAgIGNvbnN0IGJhc2VYWiA9IG1bOF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlWVogPSBtWzldICogekJhc2U7XG4gICAgY29uc3QgYmFzZVpaID0gbVsxMF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlV1ogPSBtWzExXSAqIHpCYXNlO1xuICAgIGNvbnN0IHRvcFhaID0gbVs4XSAqIHpUb3A7XG4gICAgY29uc3QgdG9wWVogPSBtWzldICogelRvcDtcbiAgICBjb25zdCB0b3BaWiA9IG1bMTBdICogelRvcDtcbiAgICBjb25zdCB0b3BXWiA9IG1bMTFdICogelRvcDtcblxuICAgIGZvciAoY29uc3QgciBvZiBnZW9tZXRyeSkge1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IFtdO1xuICAgICAgICBjb25zdCByaW5nVG9wID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiByKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gcC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IHAueTtcblxuICAgICAgICAgICAgY29uc3Qgc1ggPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgICAgICAgICBjb25zdCBzWSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgICAgICAgICAgIGNvbnN0IHNaID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTRdO1xuICAgICAgICAgICAgY29uc3Qgc1cgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxNV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VYID0gc1ggKyBiYXNlWFo7XG4gICAgICAgICAgICBjb25zdCBiYXNlWSA9IHNZICsgYmFzZVlaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVogPSBzWiArIGJhc2VaWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VXID0gc1cgKyBiYXNlV1o7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvcFggPSBzWCArIHRvcFhaO1xuICAgICAgICAgICAgY29uc3QgdG9wWSA9IHNZICsgdG9wWVo7XG4gICAgICAgICAgICBjb25zdCB0b3BaID0gc1ogKyB0b3BaWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFcgPSBzVyArIHRvcFdaO1xuXG4gICAgICAgICAgICBjb25zdCBiID0gbmV3IFBvaW50KGJhc2VYIC8gYmFzZVcsIGJhc2VZIC8gYmFzZVcpO1xuICAgICAgICAgICAgYi56ID0gYmFzZVogLyBiYXNlVztcbiAgICAgICAgICAgIHJpbmdCYXNlLnB1c2goYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgUG9pbnQodG9wWCAvIHRvcFcsIHRvcFkgLyB0b3BXKTtcbiAgICAgICAgICAgIHQueiA9IHRvcFogLyB0b3BXO1xuICAgICAgICAgICAgcmluZ1RvcC5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICAgIHByb2plY3RlZEJhc2UucHVzaChyaW5nQmFzZSk7XG4gICAgICAgIHByb2plY3RlZFRvcC5wdXNoKHJpbmdUb3ApO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcF07XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sIHo6IG51bWJlcikge1xuICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcXVlcnlHZW9tZXRyeSkge1xuICAgICAgICBjb25zdCB2ID0gW3AueCwgcC55LCB6LCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHYsIHYsIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgcHJvamVjdGVkUXVlcnlHZW9tZXRyeS5wdXNoKG5ldyBQb2ludCh2WzBdIC8gdlszXSwgdlsxXSAvIHZbM10pKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGxFeHRydXNpb25TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxpbmVMYXlvdXRBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zX25vcm1hbCcsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9kYXRhJywgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQ4J31cbl0sIDQpO1xuXG5leHBvcnQgZGVmYXVsdCBsaW5lTGF5b3V0QXR0cmlidXRlcztcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxpbmVMYXlvdXRBdHRyaWJ1dGVzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtMaW5lTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vbGluZV9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTZWdtZW50fSBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbi8vIE5PVEUgT04gRVhUUlVERSBTQ0FMRTpcbi8vIHNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIHNvIHRoYXQgdGhlIG5vcm1hbCBsZW5ndGggaXMgdGhpcyB2YWx1ZS5cbi8vIGNvbnRhaW5zIHRoZSBcInRleHR1cmVcIiBub3JtYWxzICgtMS4uMSkuIHRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgZXh0cnVkZVxuLy8gbm9ybWFscyBmb3IgbGluZSBqb2lucywgYmVjYXVzZSB0aGUgeC12YWx1ZSByZW1haW5zIDAgZm9yIHRoZSB0ZXh0dXJlXG4vLyBub3JtYWwgYXJyYXksIHdoaWxlIHRoZSBleHRydWRlIG5vcm1hbCBhY3R1YWxseSBtb3ZlcyB0aGUgdmVydGV4IHRvIGNyZWF0ZVxuLy8gdGhlIGFjdXRlL2JldmVsbGVkIGxpbmUgam9pbi5cbmNvbnN0IEVYVFJVREVfU0NBTEUgPSA2MztcblxuLypcbiAqIFNoYXJwIGNvcm5lcnMgY2F1c2UgZGFzaGVkIGxpbmVzIHRvIHRpbHQgYmVjYXVzZSB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIGxpbmVcbiAqIGlzIHRoZSBzYW1lIGF0IGJvdGggdGhlIGlubmVyIGFuZCBvdXRlciBjb3JuZXJzLiBUbyBpbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mXG4gKiBkYXNoZWQgbGluZXMgd2UgYWRkIGV4dHJhIHBvaW50cyBuZWFyIHNoYXJwIGNvcm5lcnMgc28gdGhhdCBhIHNtYWxsZXIgcGFydFxuICogb2YgdGhlIGxpbmUgaXMgdGlsdGVkLlxuICpcbiAqIENPU19IQUxGX1NIQVJQX0NPUk5FUiBjb250cm9scyBob3cgc2hhcnAgYSBjb3JuZXIgaGFzIHRvIGJlIGZvciB1cyB0byBhZGQgYW5cbiAqIGV4dHJhIHZlcnRleC4gVGhlIGRlZmF1bHQgaXMgNzUgZGVncmVlcy5cbiAqXG4gKiBUaGUgbmV3bHkgY3JlYXRlZCB2ZXJ0aWNlcyBhcmUgcGxhY2VkIFNIQVJQX0NPUk5FUl9PRkZTRVQgcGl4ZWxzIGZyb20gdGhlIGNvcm5lci5cbiAqL1xuY29uc3QgQ09TX0hBTEZfU0hBUlBfQ09STkVSID0gTWF0aC5jb3MoNzUgLyAyICogKE1hdGguUEkgLyAxODApKTtcbmNvbnN0IFNIQVJQX0NPUk5FUl9PRkZTRVQgPSAxNTtcblxuLy8gQW5nbGUgcGVyIHRyaWFuZ2xlIGZvciBhcHByb3hpbWF0aW5nIHJvdW5kIGxpbmUgam9pbnMuXG5jb25zdCBERUdfUEVSX1RSSUFOR0xFID0gMjA7XG5cbi8vIFRoZSBudW1iZXIgb2YgYml0cyB0aGF0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGxpbmUgZGlzdGFuY2UgaW4gdGhlIGJ1ZmZlci5cbmNvbnN0IExJTkVfRElTVEFOQ0VfQlVGRkVSX0JJVFMgPSAxNTtcblxuLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggYml0cyBmb3IgdGhlIGxpbmUgZGlzdGFuY2UgYXMgd2UnZCBsaWtlIHRvIGhhdmUsIHNvXG4vLyB1c2UgdGhpcyB2YWx1ZSB0byBzY2FsZSB0aGUgbGluZSBkaXN0YW5jZSAoaW4gdGlsZSB1bml0cykgZG93biB0byBhIHNtYWxsZXJcbi8vIHZhbHVlLiBUaGlzIGxldHMgdXMgc3RvcmUgbG9uZ2VyIGRpc3RhbmNlcyB3aGlsZSBzYWNyaWZpY2luZyBwcmVjaXNpb24uXG5jb25zdCBMSU5FX0RJU1RBTkNFX1NDQUxFID0gMSAvIDI7XG5cbi8vIFRoZSBtYXhpbXVtIGxpbmUgZGlzdGFuY2UsIGluIHRpbGUgdW5pdHMsIHRoYXQgZml0cyBpbiB0aGUgYnVmZmVyLlxuY29uc3QgTUFYX0xJTkVfRElTVEFOQ0UgPSBNYXRoLnBvdygyLCBMSU5FX0RJU1RBTkNFX0JVRkZFUl9CSVRTIC0gMSkgLyBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExpbmVCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGRpc3RhbmNlOiBudW1iZXI7XG4gICAgdG90YWxEaXN0YW5jZTogbnVtYmVyO1xuICAgIHNjYWxlZERpc3RhbmNlOiBudW1iZXI7XG4gICAgY2xpcFN0YXJ0OiBudW1iZXI7XG4gICAgY2xpcEVuZDogbnVtYmVyO1xuXG4gICAgZTE6IG51bWJlcjtcbiAgICBlMjogbnVtYmVyO1xuXG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PExpbmVTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8YW55PjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogTGluZUxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMaW5lU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPExpbmVTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGluZUxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBoYXNQYXR0ZXJuKCdsaW5lJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaW5lU29ydEtleSA9IHRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoJ2xpbmUtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSB0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBsaW5lU29ydEtleSA/XG4gICAgICAgICAgICAgICAgbGluZVNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuQnVja2V0RmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2xpbmUnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkJ1Y2tldEZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBjYW5vbmljYWwsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgY2Fub25pY2FsLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgY29uc3Qgam9pbiA9IGxheW91dC5nZXQoJ2xpbmUtam9pbicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgY2FwID0gbGF5b3V0LmdldCgnbGluZS1jYXAnKTtcbiAgICAgICAgY29uc3QgbWl0ZXJMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtbWl0ZXItbGltaXQnKTtcbiAgICAgICAgY29uc3Qgcm91bmRMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtcm91bmQtbGltaXQnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTGluZShsaW5lLCBmZWF0dXJlLCBqb2luLCBjYXAsIG1pdGVyTGltaXQsIHJvdW5kTGltaXQsIGluZGV4LCBjYW5vbmljYWwsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZExpbmUodmVydGljZXM6IEFycmF5PFBvaW50PiwgZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgam9pbjogc3RyaW5nLCBjYXA6IHN0cmluZywgbWl0ZXJMaW1pdDogbnVtYmVyLCByb3VuZExpbWl0OiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gMDtcbiAgICAgICAgdGhpcy5zY2FsZWREaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMudG90YWxEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgaWYgKCEhZmVhdHVyZS5wcm9wZXJ0aWVzICYmXG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ21hcGJveF9jbGlwX3N0YXJ0JykgJiZcbiAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnbWFwYm94X2NsaXBfZW5kJykpIHtcblxuICAgICAgICAgICAgdGhpcy5jbGlwU3RhcnQgPSArZmVhdHVyZS5wcm9wZXJ0aWVzWydtYXBib3hfY2xpcF9zdGFydCddO1xuICAgICAgICAgICAgdGhpcy5jbGlwRW5kID0gK2ZlYXR1cmUucHJvcGVydGllc1snbWFwYm94X2NsaXBfZW5kJ107XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgZGlzdGFuY2UsIGluIHRpbGUgdW5pdHMsIG9mIHRoaXMgdGlsZWQgbGluZSBmZWF0dXJlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxEaXN0YW5jZSArPSB2ZXJ0aWNlc1tpXS5kaXN0KHZlcnRpY2VzW2kgKyAxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1BvbHlnb24gPSB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzW2ZlYXR1cmUudHlwZV0gPT09ICdQb2x5Z29uJztcblxuICAgICAgICAvLyBJZiB0aGUgbGluZSBoYXMgZHVwbGljYXRlIHZlcnRpY2VzIGF0IHRoZSBlbmRzLCBhZGp1c3Qgc3RhcnQvbGVuZ3RoIHRvIHJlbW92ZSB0aGVtLlxuICAgICAgICBsZXQgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobGVuID49IDIgJiYgdmVydGljZXNbbGVuIC0gMV0uZXF1YWxzKHZlcnRpY2VzW2xlbiAtIDJdKSkge1xuICAgICAgICAgICAgbGVuLS07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpcnN0ID0gMDtcbiAgICAgICAgd2hpbGUgKGZpcnN0IDwgbGVuIC0gMSAmJiB2ZXJ0aWNlc1tmaXJzdF0uZXF1YWxzKHZlcnRpY2VzW2ZpcnN0ICsgMV0pKSB7XG4gICAgICAgICAgICBmaXJzdCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWdub3JlIGludmFsaWQgZ2VvbWV0cnkuXG4gICAgICAgIGlmIChsZW4gPCAoaXNQb2x5Z29uID8gMyA6IDIpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGpvaW4gPT09ICdiZXZlbCcpIG1pdGVyTGltaXQgPSAxLjA1O1xuXG4gICAgICAgIGNvbnN0IHNoYXJwQ29ybmVyT2Zmc2V0ID0gdGhpcy5vdmVyc2NhbGluZyA8PSAxNiA/XG4gICAgICAgICAgICBTSEFSUF9DT1JORVJfT0ZGU0VUICogRVhURU5UIC8gKDUxMiAqIHRoaXMub3ZlcnNjYWxpbmcpIDpcbiAgICAgICAgICAgIDA7XG5cbiAgICAgICAgLy8gd2UgY291bGQgYmUgbW9yZSBwcmVjaXNlLCBidXQgaXQgd291bGQgb25seSBzYXZlIGEgbmVnbGlnaWJsZSBhbW91bnQgb2Ygc3BhY2VcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobGVuICogMTAsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRWZXJ0ZXg7XG4gICAgICAgIGxldCBwcmV2VmVydGV4ID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IG5leHRWZXJ0ZXggPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgcHJldk5vcm1hbCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBuZXh0Tm9ybWFsID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcblxuICAgICAgICAvLyB0aGUgbGFzdCB0d28gdmVydGljZXMgYWRkZWRcbiAgICAgICAgdGhpcy5lMSA9IHRoaXMuZTIgPSAtMTtcblxuICAgICAgICBpZiAoaXNQb2x5Z29uKSB7XG4gICAgICAgICAgICBjdXJyZW50VmVydGV4ID0gdmVydGljZXNbbGVuIC0gMl07XG4gICAgICAgICAgICBuZXh0Tm9ybWFsID0gdmVydGljZXNbZmlyc3RdLnN1YihjdXJyZW50VmVydGV4KS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gZmlyc3Q7IGkgPCBsZW47IGkrKykge1xuXG4gICAgICAgICAgICBuZXh0VmVydGV4ID0gaSA9PT0gbGVuIC0gMSA/XG4gICAgICAgICAgICAgICAgKGlzUG9seWdvbiA/IHZlcnRpY2VzW2ZpcnN0ICsgMV0gOiAodW5kZWZpbmVkOiBhbnkpKSA6IC8vIGlmIGl0J3MgYSBwb2x5Z29uLCB0cmVhdCB0aGUgbGFzdCB2ZXJ0ZXggbGlrZSB0aGUgZmlyc3RcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpICsgMV07IC8vIGp1c3QgdGhlIG5leHQgdmVydGV4XG5cbiAgICAgICAgICAgIC8vIGlmIHR3byBjb25zZWN1dGl2ZSB2ZXJ0aWNlcyBleGlzdCwgc2tpcCB0aGUgY3VycmVudCBvbmVcbiAgICAgICAgICAgIGlmIChuZXh0VmVydGV4ICYmIHZlcnRpY2VzW2ldLmVxdWFscyhuZXh0VmVydGV4KSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Tm9ybWFsKSBwcmV2Tm9ybWFsID0gbmV4dE5vcm1hbDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmVydGV4KSBwcmV2VmVydGV4ID0gY3VycmVudFZlcnRleDtcblxuICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IHZlcnRpY2VzW2ldO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5vcm1hbCB0b3dhcmRzIHRoZSBuZXh0IHZlcnRleCBpbiB0aGlzIGxpbmUuIEluIGNhc2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIG5leHQgdmVydGV4LCBwcmV0ZW5kIHRoYXQgdGhlIGxpbmUgaXMgY29udGludWluZyBzdHJhaWdodCxcbiAgICAgICAgICAgIC8vIG1lYW5pbmcgdGhhdCB3ZSBhcmUganVzdCB1c2luZyB0aGUgcHJldmlvdXMgbm9ybWFsLlxuICAgICAgICAgICAgbmV4dE5vcm1hbCA9IG5leHRWZXJ0ZXggPyBuZXh0VmVydGV4LnN1YihjdXJyZW50VmVydGV4KS5fdW5pdCgpLl9wZXJwKCkgOiBwcmV2Tm9ybWFsO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgcHJldmlvdXMgbm9ybWFsLCB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYVxuICAgICAgICAgICAgLy8gbm9uLWNsb3NlZCBsaW5lLCBzbyB3ZSdyZSBkb2luZyBhIHN0cmFpZ2h0IFwiam9pblwiLlxuICAgICAgICAgICAgcHJldk5vcm1hbCA9IHByZXZOb3JtYWwgfHwgbmV4dE5vcm1hbDtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBub3JtYWwgb2YgdGhlIGpvaW4gZXh0cnVzaW9uLiBJdCBpcyB0aGUgYW5nbGUgYmlzZWN0b3JcbiAgICAgICAgICAgIC8vIG9mIHRoZSBzZWdtZW50cyBiZXR3ZWVuIHRoZSBwcmV2aW91cyBsaW5lIGFuZCB0aGUgbmV4dCBsaW5lLlxuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgMTgww4LCsCBhbmdsZXMsIHRoZSBwcmV2IGFuZCBuZXh0IG5vcm1hbHMgY2FuY2VsIGVhY2ggb3RoZXIgb3V0OlxuICAgICAgICAgICAgLy8gcHJldk5vcm1hbCArIG5leHROb3JtYWwgPSAoMCwgMCksIGl0cyBtYWduaXR1ZGUgaXMgMCwgc28gdGhlIHVuaXQgdmVjdG9yIHdvdWxkIGJlXG4gICAgICAgICAgICAvLyB1bmRlZmluZWQuIEluIHRoYXQgY2FzZSwgd2UncmUga2VlcGluZyB0aGUgam9pbk5vcm1hbCBhdCAoMCwgMCksIHNvIHRoYXQgdGhlIGNvc0hhbGZBbmdsZVxuICAgICAgICAgICAgLy8gYmVsb3cgd2lsbCBhbHNvIGJlY29tZSAwIGFuZCBtaXRlckxlbmd0aCB3aWxsIGJlY29tZSBJbmZpbml0eS5cbiAgICAgICAgICAgIGxldCBqb2luTm9ybWFsID0gcHJldk5vcm1hbC5hZGQobmV4dE5vcm1hbCk7XG4gICAgICAgICAgICBpZiAoam9pbk5vcm1hbC54ICE9PSAwIHx8IGpvaW5Ob3JtYWwueSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX3VuaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qICBqb2luTm9ybWFsICAgICBwcmV2Tm9ybWFsXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICDDosKGwpYgICAgICDDosKGwpFcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIC5fX19fX19fXy4gcHJldlZlcnRleFxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICogbmV4dE5vcm1hbCAgw6LChsKQICB8ICBjdXJyZW50VmVydGV4XG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgKiAgICAgbmV4dFZlcnRleCAhXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBjb3NpbmVzIG9mIHRoZSBhbmdsZSAoYW5kIGl0cyBoYWxmKSB1c2luZyBkb3QgcHJvZHVjdFxuICAgICAgICAgICAgY29uc3QgY29zQW5nbGUgPSBwcmV2Tm9ybWFsLnggKiBuZXh0Tm9ybWFsLnggKyBwcmV2Tm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnk7XG4gICAgICAgICAgICBjb25zdCBjb3NIYWxmQW5nbGUgPSBqb2luTm9ybWFsLnggKiBuZXh0Tm9ybWFsLnggKyBqb2luTm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnk7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBtaXRlciAodGhlIHJhdGlvIG9mIHRoZSBtaXRlciB0byB0aGUgd2lkdGgpXG4gICAgICAgICAgICAvLyBhcyB0aGUgaW52ZXJzZSBvZiBjb3NpbmUgb2YgdGhlIGFuZ2xlIGJldHdlZW4gbmV4dCBhbmQgam9pbiBub3JtYWxzXG4gICAgICAgICAgICBjb25zdCBtaXRlckxlbmd0aCA9IGNvc0hhbGZBbmdsZSAhPT0gMCA/IDEgLyBjb3NIYWxmQW5nbGUgOiBJbmZpbml0eTtcblxuICAgICAgICAgICAgLy8gYXBwcm94aW1hdGUgYW5nbGUgZnJvbSBjb3NpbmVcbiAgICAgICAgICAgIGNvbnN0IGFwcHJveEFuZ2xlID0gMiAqIE1hdGguc3FydCgyIC0gMiAqIGNvc0hhbGZBbmdsZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzU2hhcnBDb3JuZXIgPSBjb3NIYWxmQW5nbGUgPCBDT1NfSEFMRl9TSEFSUF9DT1JORVIgJiYgcHJldlZlcnRleCAmJiBuZXh0VmVydGV4O1xuICAgICAgICAgICAgY29uc3QgbGluZVR1cm5zTGVmdCA9IHByZXZOb3JtYWwueCAqIG5leHROb3JtYWwueSAtIHByZXZOb3JtYWwueSAqIG5leHROb3JtYWwueCA+IDA7XG5cbiAgICAgICAgICAgIGlmIChpc1NoYXJwQ29ybmVyICYmIGkgPiBmaXJzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZTZWdtZW50TGVuZ3RoID0gY3VycmVudFZlcnRleC5kaXN0KHByZXZWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2U2VnbWVudExlbmd0aCA+IDIgKiBzaGFycENvcm5lck9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQcmV2VmVydGV4ID0gY3VycmVudFZlcnRleC5zdWIoY3VycmVudFZlcnRleC5zdWIocHJldlZlcnRleCkuX211bHQoc2hhcnBDb3JuZXJPZmZzZXQgLyBwcmV2U2VnbWVudExlbmd0aCkuX3JvdW5kKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3RhbmNlKHByZXZWZXJ0ZXgsIG5ld1ByZXZWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgobmV3UHJldlZlcnRleCwgcHJldk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZWZXJ0ZXggPSBuZXdQcmV2VmVydGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhlIGpvaW4gaWYgYSBtaWRkbGUgdmVydGV4LCBvdGhlcndpc2UgdGhlIGNhcC5cbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZVZlcnRleCA9IHByZXZWZXJ0ZXggJiYgbmV4dFZlcnRleDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Sm9pbiA9IG1pZGRsZVZlcnRleCA/IGpvaW4gOiBpc1BvbHlnb24gPyAnYnV0dCcgOiBjYXA7XG5cbiAgICAgICAgICAgIGlmIChtaWRkbGVWZXJ0ZXggJiYgY3VycmVudEpvaW4gPT09ICdyb3VuZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPCByb3VuZExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ21pdGVyJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pdGVyTGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnZmFrZXJvdW5kJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ21pdGVyJyAmJiBtaXRlckxlbmd0aCA+IG1pdGVyTGltaXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdiZXZlbCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2JldmVsJykge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGV4dHJ1ZGUgbGVuZ3RoIGlzIDEyOCAvIDYzID0gMiB0aW1lcyB0aGUgd2lkdGggb2YgdGhlIGxpbmVcbiAgICAgICAgICAgICAgICAvLyBzbyBpZiBtaXRlckxlbmd0aCA+PSAyIHdlIG5lZWQgdG8gZHJhdyBhIGRpZmZlcmVudCB0eXBlIG9mIGJldmVsIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoID4gMikgY3VycmVudEpvaW4gPSAnZmxpcGJldmVsJztcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtaXRlckxlbmd0aCBpcyByZWFsbHkgc21hbGwgYW5kIHRoZSBsaW5lIGJldmVsIHdvdWxkbid0IGJlIHZpc2libGUsXG4gICAgICAgICAgICAgICAgLy8ganVzdCBkcmF3IGEgbWl0ZXIgam9pbiB0byBzYXZlIGEgdHJpYW5nbGUuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoIDwgbWl0ZXJMaW1pdCkgY3VycmVudEpvaW4gPSAnbWl0ZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaG93IGZhciBhbG9uZyB0aGUgbGluZSB0aGUgY3VycmVudFZlcnRleCBpc1xuICAgICAgICAgICAgaWYgKHByZXZWZXJ0ZXgpIHRoaXMudXBkYXRlRGlzdGFuY2UocHJldlZlcnRleCwgY3VycmVudFZlcnRleCk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ21pdGVyJykge1xuXG4gICAgICAgICAgICAgICAgam9pbk5vcm1hbC5fbXVsdChtaXRlckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnZmxpcGJldmVsJykge1xuICAgICAgICAgICAgICAgIC8vIG1pdGVyIGlzIHRvbyBiaWcsIGZsaXAgdGhlIGRpcmVjdGlvbiB0byBtYWtlIGEgYmV2ZWxlZCBqb2luXG5cbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPiAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxtb3N0IHBhcmFsbGVsIGxpbmVzXG4gICAgICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwgPSBuZXh0Tm9ybWFsLm11bHQoLTEpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmV2ZWxMZW5ndGggPSBtaXRlckxlbmd0aCAqIHByZXZOb3JtYWwuYWRkKG5leHROb3JtYWwpLm1hZygpIC8gcHJldk5vcm1hbC5zdWIobmV4dE5vcm1hbCkubWFnKCk7XG4gICAgICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX3BlcnAoKS5fbXVsdChiZXZlbExlbmd0aCAqIChsaW5lVHVybnNMZWZ0ID8gLTEgOiAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbC5tdWx0KC0xKSwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdiZXZlbCcgfHwgY3VycmVudEpvaW4gPT09ICdmYWtlcm91bmQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gLU1hdGguc3FydChtaXRlckxlbmd0aCAqIG1pdGVyTGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0QSA9IGxpbmVUdXJuc0xlZnQgPyBvZmZzZXQgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEIgPSBsaW5lVHVybnNMZWZ0ID8gMCA6IG9mZnNldDtcblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIHByZXZpb3VzIHNlZ21lbnQgd2l0aCBhIGJldmVsXG4gICAgICAgICAgICAgICAgaWYgKHByZXZWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIHByZXZOb3JtYWwsIG9mZnNldEEsIG9mZnNldEIsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2Zha2Vyb3VuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGpvaW4gYW5nbGUgaXMgc2hhcnAgZW5vdWdoIHRoYXQgYSByb3VuZCBqb2luIHdvdWxkIGJlIHZpc2libGUuXG4gICAgICAgICAgICAgICAgICAgIC8vIEJldmVsIGpvaW5zIGZpbGwgdGhlIGdhcCBiZXR3ZWVuIHNlZ21lbnRzIHdpdGggYSBzaW5nbGUgcGllIHNsaWNlIHRyaWFuZ2xlLlxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByb3VuZCBqb2luIGJ5IGFkZGluZyBtdWx0aXBsZSBwaWUgc2xpY2VzLiBUaGUgam9pbiBpc24ndCBhY3R1YWxseSByb3VuZCwgYnV0XG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IGxvb2tzIGxpa2UgaXQgaXMgYXQgdGhlIHNpemVzIHdlIHJlbmRlciBsaW5lcyBhdC5cblxuICAgICAgICAgICAgICAgICAgICAvLyBwaWNrIHRoZSBudW1iZXIgb2YgdHJpYW5nbGVzIGZvciBhcHByb3hpbWF0aW5nIHJvdW5kIGpvaW4gYnkgYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gbm9ybWFsc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gTWF0aC5yb3VuZCgoYXBwcm94QW5nbGUgKiAxODAgLyBNYXRoLlBJKSAvIERFR19QRVJfVFJJQU5HTEUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAxOyBtIDwgbjsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IG0gLyBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgIT09IDAuNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcHJveGltYXRlIHNwaGVyaWNhbCBpbnRlcnBvbGF0aW9uIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbW91cm5lci9hcHByb3hpbWF0aW5nLWdlb21ldHJpYy1zbGVycFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQyID0gdCAtIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBID0gMS4wOTA0ICsgY29zQW5nbGUgKiAoLTMuMjQ1MiArIGNvc0FuZ2xlICogKDMuNTU2NDUgLSBjb3NBbmdsZSAqIDEuNDM1MTkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCID0gMC44NDgwMTMgKyBjb3NBbmdsZSAqICgtMS4wNjAyMSArIGNvc0FuZ2xlICogMC4yMTU2MzgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0ICsgdCAqIHQyICogKHQgLSAxKSAqIChBICogdDIgKiB0MiArIEIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0cnVkZSA9IG5leHROb3JtYWwuc3ViKHByZXZOb3JtYWwpLl9tdWx0KHQpLl9hZGQocHJldk5vcm1hbCkuX3VuaXQoKS5fbXVsdChsaW5lVHVybnNMZWZ0ID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChjdXJyZW50VmVydGV4LCBleHRydWRlLngsIGV4dHJ1ZGUueSwgZmFsc2UsIGxpbmVUdXJuc0xlZnQsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV4dCBzZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAtb2Zmc2V0QSwgLW9mZnNldEIsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2J1dHQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIDAsIDAsIHNlZ21lbnQpOyAvLyBidXR0IGNhcFxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnc3F1YXJlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHByZXZWZXJ0ZXggPyAxIDogLTE7IC8vIGNsb3Npbmcgb3Igc3RhcnRpbmcgc3F1YXJlIGNhcFxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCBvZmZzZXQsIG9mZnNldCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdyb3VuZCcpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHByZXZpb3VzIHNlZ21lbnQgd2l0aCBidXR0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcm91bmQgY2FwIG9yIGxpbmVqb2luIGF0IGVuZCBvZiBzZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCAxLCAxLCBzZWdtZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJvdW5kIGNhcCBiZWZvcmUgZmlyc3Qgc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgLTEsIC0xLCBzZWdtZW50LCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBuZXh0IHNlZ21lbnQgd2l0aCBhIGJ1dHRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzU2hhcnBDb3JuZXIgJiYgaSA8IGxlbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0U2VnbWVudExlbmd0aCA9IGN1cnJlbnRWZXJ0ZXguZGlzdChuZXh0VmVydGV4KTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dFNlZ21lbnRMZW5ndGggPiAyICogc2hhcnBDb3JuZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q3VycmVudFZlcnRleCA9IGN1cnJlbnRWZXJ0ZXguYWRkKG5leHRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXgpLl9tdWx0KHNoYXJwQ29ybmVyT2Zmc2V0IC8gbmV4dFNlZ21lbnRMZW5ndGgpLl9yb3VuZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXN0YW5jZShjdXJyZW50VmVydGV4LCBuZXdDdXJyZW50VmVydGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KG5ld0N1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmVydGV4ID0gbmV3Q3VycmVudFZlcnRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMsIGNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHR3byB2ZXJ0aWNlcyB0byB0aGUgYnVmZmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwIHRoZSBsaW5lIHZlcnRleCB0byBhZGQgYnVmZmVyIHZlcnRpY2VzIGZvclxuICAgICAqIEBwYXJhbSBub3JtYWwgdmVydGV4IG5vcm1hbFxuICAgICAqIEBwYXJhbSBlbmRMZWZ0IGV4dHJ1ZGUgdG8gc2hpZnQgdGhlIGxlZnQgdmVydGV4IGFsb25nIHRoZSBsaW5lXG4gICAgICogQHBhcmFtIGVuZFJpZ2h0IGV4dHJ1ZGUgdG8gc2hpZnQgdGhlIGxlZnQgdmVydGV4IGFsb25nIHRoZSBsaW5lXG4gICAgICogQHBhcmFtIHNlZ21lbnQgdGhlIHNlZ21lbnQgb2JqZWN0IHRvIGFkZCB0aGUgdmVydGV4IHRvXG4gICAgICogQHBhcmFtIHJvdW5kIHdoZXRoZXIgdGhpcyBpcyBhIHJvdW5kIGNhcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgYWRkQ3VycmVudFZlcnRleChwOiBQb2ludCwgbm9ybWFsOiBQb2ludCwgZW5kTGVmdDogbnVtYmVyLCBlbmRSaWdodDogbnVtYmVyLCBzZWdtZW50OiBTZWdtZW50LCByb3VuZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIC8vIGxlZnQgYW5kIHJpZ2h0IGV4dHJ1ZGUgdmVjdG9ycywgcGVycGVuZGljdWxhcmx5IHNoaWZ0ZWQgYnkgZW5kTGVmdC9lbmRSaWdodFxuICAgICAgICBjb25zdCBsZWZ0WCA9IG5vcm1hbC54ICsgbm9ybWFsLnkgKiBlbmRMZWZ0O1xuICAgICAgICBjb25zdCBsZWZ0WSA9IG5vcm1hbC55IC0gbm9ybWFsLnggKiBlbmRMZWZ0O1xuICAgICAgICBjb25zdCByaWdodFggPSAtbm9ybWFsLnggKyBub3JtYWwueSAqIGVuZFJpZ2h0O1xuICAgICAgICBjb25zdCByaWdodFkgPSAtbm9ybWFsLnkgLSBub3JtYWwueCAqIGVuZFJpZ2h0O1xuXG4gICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChwLCBsZWZ0WCwgbGVmdFksIHJvdW5kLCBmYWxzZSwgZW5kTGVmdCwgc2VnbWVudCk7XG4gICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChwLCByaWdodFgsIHJpZ2h0WSwgcm91bmQsIHRydWUsIC1lbmRSaWdodCwgc2VnbWVudCk7XG5cbiAgICAgICAgLy8gVGhlcmUgaXMgYSBtYXhpbXVtIFwiZGlzdGFuY2UgYWxvbmcgdGhlIGxpbmVcIiB0aGF0IHdlIGNhbiBzdG9yZSBpbiB0aGUgYnVmZmVycy5cbiAgICAgICAgLy8gV2hlbiB3ZSBnZXQgY2xvc2UgdG8gdGhlIGRpc3RhbmNlLCByZXNldCBpdCB0byB6ZXJvIGFuZCBhZGQgdGhlIHZlcnRleCBhZ2FpbiB3aXRoXG4gICAgICAgIC8vIGEgZGlzdGFuY2Ugb2YgemVyby4gVGhlIG1heCBkaXN0YW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyB3ZSBhbGxvY2F0ZVxuICAgICAgICAvLyB0byBgbGluZXNvZmFyYC5cbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2UgPiBNQVhfTElORV9ESVNUQU5DRSAvIDIgJiYgdGhpcy50b3RhbERpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gMDtcbiAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChwLCBub3JtYWwsIGVuZExlZnQsIGVuZFJpZ2h0LCBzZWdtZW50LCByb3VuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRIYWxmVmVydGV4KHt4LCB5fTogUG9pbnQsIGV4dHJ1ZGVYOiBudW1iZXIsIGV4dHJ1ZGVZOiBudW1iZXIsIHJvdW5kOiBib29sZWFuLCB1cDogYm9vbGVhbiwgZGlyOiBudW1iZXIsIHNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICAgICAgLy8gc2NhbGUgZG93biBzbyB0aGF0IHdlIGNhbiBzdG9yZSBsb25nZXIgZGlzdGFuY2VzIHdoaWxlIHNhY3JpZmljaW5nIHByZWNpc2lvbi5cbiAgICAgICAgY29uc3QgbGluZXNvZmFyID0gdGhpcy5zY2FsZWREaXN0YW5jZSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgIC8vIGFfcG9zX25vcm1hbFxuICAgICAgICAgICAgLy8gRW5jb2RlIHJvdW5kL3VwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzXG4gICAgICAgICAgICAoeCA8PCAxKSArIChyb3VuZCA/IDEgOiAwKSxcbiAgICAgICAgICAgICh5IDw8IDEpICsgKHVwID8gMSA6IDApLFxuICAgICAgICAgICAgLy8gYV9kYXRhXG4gICAgICAgICAgICAvLyBhZGQgMTI4IHRvIHN0b3JlIGEgYnl0ZSBpbiBhbiB1bnNpZ25lZCBieXRlXG4gICAgICAgICAgICBNYXRoLnJvdW5kKEVYVFJVREVfU0NBTEUgKiBleHRydWRlWCkgKyAxMjgsXG4gICAgICAgICAgICBNYXRoLnJvdW5kKEVYVFJVREVfU0NBTEUgKiBleHRydWRlWSkgKyAxMjgsXG4gICAgICAgICAgICAvLyBFbmNvZGUgdGhlIC0xLzAvMSBkaXJlY3Rpb24gdmFsdWUgaW50byB0aGUgZmlyc3QgdHdvIGJpdHMgb2YgLnogb2YgYV9kYXRhLlxuICAgICAgICAgICAgLy8gQ29tYmluZSBpdCB3aXRoIHRoZSBsb3dlciA2IGJpdHMgb2YgYGxpbmVzb2ZhcmAgKHNoaWZ0ZWQgYnkgMiBiaXRlcyB0byBtYWtlXG4gICAgICAgICAgICAvLyByb29tIGZvciB0aGUgZGlyZWN0aW9uIHZhbHVlKS4gVGhlIHVwcGVyIDggYml0cyBvZiBgbGluZXNvZmFyYCBhcmUgcGxhY2VkIGluXG4gICAgICAgICAgICAvLyB0aGUgYHdgIGNvbXBvbmVudC5cbiAgICAgICAgICAgICgoZGlyID09PSAwID8gMCA6IChkaXIgPCAwID8gLTEgOiAxKSkgKyAxKSB8ICgobGluZXNvZmFyICYgMHgzRikgPDwgMiksXG4gICAgICAgICAgICBsaW5lc29mYXIgPj4gNik7XG5cbiAgICAgICAgY29uc3QgZSA9IHNlZ21lbnQudmVydGV4TGVuZ3RoKys7XG4gICAgICAgIGlmICh0aGlzLmUxID49IDAgJiYgdGhpcy5lMiA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodGhpcy5lMSwgdGhpcy5lMiwgZSk7XG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCkge1xuICAgICAgICAgICAgdGhpcy5lMiA9IGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmUxID0gZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNjYWxlZERpc3RhbmNlKCkge1xuICAgICAgICAvLyBLbm93aW5nIHRoZSByYXRpbyBvZiB0aGUgZnVsbCBsaW5lc3RyaW5nIGNvdmVyZWQgYnkgdGhpcyB0aWxlZCBmZWF0dXJlLCBhcyB3ZWxsXG4gICAgICAgIC8vIGFzIHRoZSB0b3RhbCBkaXN0YW5jZSAoaW4gdGlsZSB1bml0cykgb2YgdGhpcyB0aWxlZCBmZWF0dXJlLCBhbmQgdGhlIGRpc3RhbmNlXG4gICAgICAgIC8vIChpbiB0aWxlIHVuaXRzKSBvZiB0aGUgY3VycmVudCB2ZXJ0ZXgsIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGF0aXZlIGRpc3RhbmNlXG4gICAgICAgIC8vIG9mIHRoaXMgdmVydGV4IGFsb25nIHRoZSBmdWxsIGxpbmVzdHJpbmcgZmVhdHVyZSBhbmQgc2NhbGUgaXQgdG8gWzAsIDJeMTUpXG4gICAgICAgIHRoaXMuc2NhbGVkRGlzdGFuY2UgPSB0aGlzLnRvdGFsRGlzdGFuY2UgPiAwID9cbiAgICAgICAgICAgICh0aGlzLmNsaXBTdGFydCArICh0aGlzLmNsaXBFbmQgLSB0aGlzLmNsaXBTdGFydCkgKiB0aGlzLmRpc3RhbmNlIC8gdGhpcy50b3RhbERpc3RhbmNlKSAgKiAoTUFYX0xJTkVfRElTVEFOQ0UgLSAxKSA6XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlO1xuICAgIH1cblxuICAgIHVwZGF0ZURpc3RhbmNlKHByZXY6IFBvaW50LCBuZXh0OiBQb2ludCkge1xuICAgICAgICB0aGlzLmRpc3RhbmNlICs9IHByZXYuZGlzdChuZXh0KTtcbiAgICAgICAgdGhpcy51cGRhdGVTY2FsZWREaXN0YW5jZSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0xpbmVCdWNrZXQnLCBMaW5lQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAncGF0dGVybkZlYXR1cmVzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgTGluZUJ1Y2tldDtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImxpbmUtY2FwXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwiYnV0dFwiIHwgXCJyb3VuZFwiIHwgXCJzcXVhcmVcIj4sXG4gICAgXCJsaW5lLWpvaW5cIjogRGF0YURyaXZlblByb3BlcnR5PFwiYmV2ZWxcIiB8IFwicm91bmRcIiB8IFwibWl0ZXJcIj4sXG4gICAgXCJsaW5lLW1pdGVyLWxpbWl0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLXJvdW5kLWxpbWl0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLXNvcnQta2V5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJsaW5lLWNhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLWNhcFwiXSksXG4gICAgXCJsaW5lLWpvaW5cIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtam9pblwiXSksXG4gICAgXCJsaW5lLW1pdGVyLWxpbWl0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtbWl0ZXItbGltaXRcIl0pLFxuICAgIFwibGluZS1yb3VuZC1saW1pdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLXJvdW5kLWxpbWl0XCJdKSxcbiAgICBcImxpbmUtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwibGluZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwibGluZS10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJsaW5lLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1nYXAtd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtZGFzaGFycmF5XCI6IENyb3NzRmFkZWRQcm9wZXJ0eTxBcnJheTxudW1iZXI+PixcbiAgICBcImxpbmUtcGF0dGVyblwiOiBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwibGluZS1ncmFkaWVudFwiOiBDb2xvclJhbXBQcm9wZXJ0eSxcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImxpbmUtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLW9wYWNpdHlcIl0pLFxuICAgIFwibGluZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWNvbG9yXCJdKSxcbiAgICBcImxpbmUtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS10cmFuc2xhdGVcIl0pLFxuICAgIFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImxpbmUtd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS13aWR0aFwiXSksXG4gICAgXCJsaW5lLWdhcC13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWdhcC13aWR0aFwiXSksXG4gICAgXCJsaW5lLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLW9mZnNldFwiXSksXG4gICAgXCJsaW5lLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1ibHVyXCJdKSxcbiAgICBcImxpbmUtZGFzaGFycmF5XCI6IG5ldyBDcm9zc0ZhZGVkUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZGFzaGFycmF5XCJdKSxcbiAgICBcImxpbmUtcGF0dGVyblwiOiBuZXcgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1wYXR0ZXJuXCJdKSxcbiAgICBcImxpbmUtZ3JhZGllbnRcIjogbmV3IENvbG9yUmFtcFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWdyYWRpZW50XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50LCBsYXlvdXQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4sIGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IExpbmVCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uLy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lfSBmcm9tICcuLi8uLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge2dldE1heGltdW1QYWludFZhbHVlLCB0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHJlbmRlckNvbG9yUmFtcCBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3JhbXAnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZCwgRGF0YURyaXZlblByb3BlcnR5fSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtCdWNrZXQsIEJ1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9saW5lX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi8uLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgTGluZUZsb29yd2lkdGhQcm9wZXJ0eSBleHRlbmRzIERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+IHtcbiAgICB1c2VJbnRlZ2VyWm9vbTogdHJ1ZTtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWUsIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHtcbiAgICAgICAgICAgIG5vdzogcGFyYW1ldGVycy5ub3csXG4gICAgICAgICAgICBmYWRlRHVyYXRpb246IHBhcmFtZXRlcnMuZmFkZUR1cmF0aW9uLFxuICAgICAgICAgICAgem9vbUhpc3Rvcnk6IHBhcmFtZXRlcnMuem9vbUhpc3RvcnksXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBwYXJhbWV0ZXJzLnRyYW5zaXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdXBlci5wb3NzaWJseUV2YWx1YXRlKHZhbHVlLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZSh2YWx1ZSwgZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGdsb2JhbHMgPSBleHRlbmQoe30sIGdsb2JhbHMsIHt6b29tOiBNYXRoLmZsb29yKGdsb2JhbHMuem9vbSl9KTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmV2YWx1YXRlKHZhbHVlLCBnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgIH1cbn1cblxuY29uc3QgbGluZUZsb29yd2lkdGhQcm9wZXJ0eSA9IG5ldyBMaW5lRmxvb3J3aWR0aFByb3BlcnR5KHByb3BlcnRpZXMucGFpbnQucHJvcGVydGllc1snbGluZS13aWR0aCddLnNwZWNpZmljYXRpb24pO1xubGluZUZsb29yd2lkdGhQcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbSA9IHRydWU7XG5cbmNsYXNzIExpbmVTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgZ3JhZGllbnQ6ID9SR0JBSW1hZ2U7XG4gICAgZ3JhZGllbnRUZXh0dXJlOiA/VGV4dHVyZTtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdsaW5lLWdyYWRpZW50Jykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhZGllbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVHcmFkaWVudCgpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1snbGluZS1ncmFkaWVudCddLnZhbHVlLmV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuZ3JhZGllbnQgPSByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbiwgJ2xpbmVQcm9ncmVzcycpO1xuICAgICAgICB0aGlzLmdyYWRpZW50VGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBzdXBlci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgICh0aGlzLnBhaW50Ll92YWx1ZXM6IGFueSlbJ2xpbmUtZmxvb3J3aWR0aCddID1cbiAgICAgICAgICAgIGxpbmVGbG9vcndpZHRoUHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1snbGluZS13aWR0aCddLnZhbHVlLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IExpbmVCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoYnVja2V0OiBCdWNrZXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsaW5lQnVja2V0OiBMaW5lQnVja2V0ID0gKGJ1Y2tldDogYW55KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBnZXRMaW5lV2lkdGgoXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS13aWR0aCcsIHRoaXMsIGxpbmVCdWNrZXQpLFxuICAgICAgICAgICAgZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtZ2FwLXdpZHRoJywgdGhpcywgbGluZUJ1Y2tldCkpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS1vZmZzZXQnLCB0aGlzLCBsaW5lQnVja2V0KTtcbiAgICAgICAgcmV0dXJuIHdpZHRoIC8gMiArIE1hdGguYWJzKG9mZnNldCkgKyB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIGNvbnN0IGhhbGZXaWR0aCA9IHBpeGVsc1RvVGlsZVVuaXRzIC8gMiAqIGdldExpbmVXaWR0aChcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLWdhcC13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSkpO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gdGhpcy5wYWludC5nZXQoJ2xpbmUtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgaWYgKGxpbmVPZmZzZXQpIHtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gb2Zmc2V0TGluZShnZW9tZXRyeSwgbGluZU9mZnNldCAqIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSwgaGFsZldpZHRoKTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVTdHlsZUxheWVyO1xuXG5mdW5jdGlvbiBnZXRMaW5lV2lkdGgobGluZVdpZHRoLCBsaW5lR2FwV2lkdGgpIHtcbiAgICBpZiAobGluZUdhcFdpZHRoID4gMCkge1xuICAgICAgICByZXR1cm4gbGluZUdhcFdpZHRoICsgMiAqIGxpbmVXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGluZVdpZHRoO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0TGluZShyaW5ncywgb2Zmc2V0KSB7XG4gICAgY29uc3QgbmV3UmluZ3MgPSBbXTtcbiAgICBjb25zdCB6ZXJvID0gbmV3IFBvaW50KDAsIDApO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmluZ3MubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IHJpbmdzW2tdO1xuICAgICAgICBjb25zdCBuZXdSaW5nID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJpbmdbaSAtIDFdO1xuICAgICAgICAgICAgY29uc3QgYiA9IHJpbmdbaV07XG4gICAgICAgICAgICBjb25zdCBjID0gcmluZ1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBhVG9CID0gaSA9PT0gMCA/IHplcm8gOiBiLnN1YihhKS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgICAgICBjb25zdCBiVG9DID0gaSA9PT0gcmluZy5sZW5ndGggLSAxID8gemVybyA6IGMuc3ViKGIpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJ1ZGUgPSBhVG9CLl9hZGQoYlRvQykuX3VuaXQoKTtcblxuICAgICAgICAgICAgY29uc3QgY29zSGFsZkFuZ2xlID0gZXh0cnVkZS54ICogYlRvQy54ICsgZXh0cnVkZS55ICogYlRvQy55O1xuICAgICAgICAgICAgZXh0cnVkZS5fbXVsdCgxIC8gY29zSGFsZkFuZ2xlKTtcblxuICAgICAgICAgICAgbmV3UmluZy5wdXNoKGV4dHJ1ZGUuX211bHQob2Zmc2V0KS5fYWRkKGIpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSaW5ncy5wdXNoKG5ld1JpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UmluZ3M7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgY29uc3Qgc3ltYm9sTGF5b3V0QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3Bvc19vZmZzZXQnLCAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2RhdGEnLCAgICAgICAgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQxNid9LFxuICAgIHtuYW1lOiAnYV9waXhlbG9mZnNldCcsICAgICAgICBjb21wb25lbnRzOiA0LCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljTGF5b3V0QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3Byb2plY3RlZF9wb3MnLCBjb21wb25lbnRzOiAzLCB0eXBlOiAnRmxvYXQzMid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IHBsYWNlbWVudE9wYWNpdHlBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQzMid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvblZlcnRleEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wbGFjZWQnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnVWludDgnfSxcbiAgICB7bmFtZTogJ2Ffc2hpZnQnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnRmxvYXQzMid9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkJveCA9IGNyZWF0ZUxheW91dChbXG4gICAgLy8gdGhlIGJveCBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIGFuY2hvciBwb2ludFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRYJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JQb2ludFknfSxcblxuICAgIC8vIGRpc3RhbmNlcyB0byB0aGUgZWRnZXMgZnJvbSB0aGUgYW5jaG9yXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4MSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3gyJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd5Mid9LFxuXG4gICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCB2ZWN0b3J0aWxlXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnZmVhdHVyZUluZGV4J30sXG4gICAgLy8gdGhlIHNvdXJjZSBsYXllciB0aGUgZmVhdHVyZSBhcHBlYXJzIGluXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnc291cmNlTGF5ZXJJbmRleCd9LFxuICAgIC8vIHRoZSBidWNrZXQgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2J1Y2tldEluZGV4J30sXG5cbiAgICAvLyBjb2xsaXNpb24gY2lyY2xlcyBmb3IgbGluZXMgc3RvcmUgdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGFuY2hvciBpbiB0aWxlIHVuaXRzXG4gICAgLy8gc28gdGhhdCB0aGV5IGNhbiBiZSBpZ25vcmVkIGlmIHRoZSBwcm9qZWN0ZWQgbGFiZWwgZG9lc24ndCBleHRlbmQgaW50b1xuICAgIC8vIHRoZSBib3ggYXJlYVxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAncmFkaXVzJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdzaWduZWREaXN0YW5jZUZyb21BbmNob3InfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3hMYXlvdXQgPSBjcmVhdGVMYXlvdXQoWyAvLyB1c2VkIHRvIHJlbmRlciBjb2xsaXNpb24gYm94ZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2FuY2hvcl9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfZXh0cnVkZScsICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkNpcmNsZUxheW91dCA9IGNyZWF0ZUxheW91dChbIC8vIHVzZWQgdG8gcmVuZGVyIGNvbGxpc2lvbiBjaXJjbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9hbmNob3JfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2V4dHJ1ZGUnLCAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2dseXBoU3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bUdseXBocyd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ3ZlcnRleFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdsaW5lU3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2xpbmVMZW5ndGgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdzZWdtZW50J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbG93ZXJTaXplJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndXBwZXJTaXplJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ2xpbmVPZmZzZXRYJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ2xpbmVPZmZzZXRZJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICd3cml0aW5nTW9kZSd9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAncGxhY2VkT3JpZW50YXRpb24nfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ2hpZGRlbid9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2Nyb3NzVGlsZUlEJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhc3NvY2lhdGVkSWNvbkluZGV4J31cbl0pO1xuXG5leHBvcnQgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAncmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2NlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3BsYWNlZEljb25TeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdrZXknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd0ZXh0Qm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3RleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ljb25Cb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnaWNvbkJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxJY29uQm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsSWNvbkJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnZmVhdHVyZUluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1WZXJ0aWNhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1JY29uVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2Nyb3NzVGlsZUlEJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ3RleHRCb3hTY2FsZSd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIGNvbXBvbmVudHM6IDIsIG5hbWU6ICd0ZXh0T2Zmc2V0J31cbl0pO1xuXG5leHBvcnQgY29uc3QgZ2x5cGhPZmZzZXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdvZmZzZXRYJ31cbl0pO1xuXG5leHBvcnQgY29uc3QgbGluZVZlcnRleCA9IGNyZWF0ZUxheW91dChbXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd5J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcid9XG5dKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuXG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRleHQodGV4dDogc3RyaW5nLCBsYXllcjogU3ltYm9sU3R5bGVMYXllciwgZmVhdHVyZTogRmVhdHVyZSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdHJhbnNmb3JtJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgIGlmICh0cmFuc2Zvcm0gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0cmFuc2Zvcm0gPT09ICdsb3dlcmNhc2UnKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nKSB7XG4gICAgICAgIHRleHQgPSBydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZyh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGV4dDogRm9ybWF0dGVkLCBsYXllcjogU3ltYm9sU3R5bGVMYXllciwgZmVhdHVyZTogRmVhdHVyZSk6IEZvcm1hdHRlZCB7XG4gICAgdGV4dC5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICBzZWN0aW9uLnRleHQgPSB0cmFuc2Zvcm1UZXh0KHNlY3Rpb24udGV4dCwgbGF5ZXIsIGZlYXR1cmUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZXh0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1N5bWJvbEZlYXR1cmV9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZmVhdHVyZXM6IEFycmF5PFN5bWJvbEZlYXR1cmU+KTogQXJyYXk8U3ltYm9sRmVhdHVyZT4ge1xuICAgIGNvbnN0IGxlZnRJbmRleDoge1tfOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgY29uc3QgcmlnaHRJbmRleDoge1tfOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgY29uc3QgbWVyZ2VkRmVhdHVyZXMgPSBbXTtcbiAgICBsZXQgbWVyZ2VkSW5kZXggPSAwO1xuXG4gICAgZnVuY3Rpb24gYWRkKGspIHtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXMucHVzaChmZWF0dXJlc1trXSk7XG4gICAgICAgIG1lcmdlZEluZGV4Kys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VGcm9tUmlnaHQobGVmdEtleTogc3RyaW5nLCByaWdodEtleTogc3RyaW5nLCBnZW9tKSB7XG4gICAgICAgIGNvbnN0IGkgPSByaWdodEluZGV4W2xlZnRLZXldO1xuICAgICAgICBkZWxldGUgcmlnaHRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgcmlnaHRJbmRleFtyaWdodEtleV0gPSBpO1xuXG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLnBvcCgpO1xuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSA9IG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLmNvbmNhdChnZW9tWzBdKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VGcm9tTGVmdChsZWZ0S2V5OiBzdHJpbmcsIHJpZ2h0S2V5OiBzdHJpbmcsIGdlb20pIHtcbiAgICAgICAgY29uc3QgaSA9IGxlZnRJbmRleFtyaWdodEtleV07XG4gICAgICAgIGRlbGV0ZSBsZWZ0SW5kZXhbcmlnaHRLZXldO1xuICAgICAgICBsZWZ0SW5kZXhbbGVmdEtleV0gPSBpO1xuXG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLnNoaWZ0KCk7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdID0gZ2VvbVswXS5jb25jYXQobWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0pO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRLZXkodGV4dCwgZ2VvbSwgb25SaWdodCkge1xuICAgICAgICBjb25zdCBwb2ludCA9IG9uUmlnaHQgPyBnZW9tWzBdW2dlb21bMF0ubGVuZ3RoIC0gMV0gOiBnZW9tWzBdWzBdO1xuICAgICAgICByZXR1cm4gYCR7dGV4dH06JHtwb2ludC54fToke3BvaW50Lnl9YDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGZlYXR1cmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1trXTtcbiAgICAgICAgY29uc3QgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBmZWF0dXJlLnRleHQgPyBmZWF0dXJlLnRleHQudG9TdHJpbmcoKSA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICBhZGQoayk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlZnRLZXkgPSBnZXRLZXkodGV4dCwgZ2VvbSksXG4gICAgICAgICAgICByaWdodEtleSA9IGdldEtleSh0ZXh0LCBnZW9tLCB0cnVlKTtcblxuICAgICAgICBpZiAoKGxlZnRLZXkgaW4gcmlnaHRJbmRleCkgJiYgKHJpZ2h0S2V5IGluIGxlZnRJbmRleCkgJiYgKHJpZ2h0SW5kZXhbbGVmdEtleV0gIT09IGxlZnRJbmRleFtyaWdodEtleV0pKSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBsaW5lcyB3aXRoIHRoZSBzYW1lIHRleHQgYWRqYWNlbnQgdG8gYm90aCBlbmRzIG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlIGFsbCB0aHJlZVxuICAgICAgICAgICAgY29uc3QgaiA9IG1lcmdlRnJvbUxlZnQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuICAgICAgICAgICAgY29uc3QgaSA9IG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXksIHJpZ2h0S2V5LCBtZXJnZWRGZWF0dXJlc1tqXS5nZW9tZXRyeSk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSBsZWZ0SW5kZXhbbGVmdEtleV07XG4gICAgICAgICAgICBkZWxldGUgcmlnaHRJbmRleFtyaWdodEtleV07XG5cbiAgICAgICAgICAgIHJpZ2h0SW5kZXhbZ2V0S2V5KHRleHQsIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5LCB0cnVlKV0gPSBpO1xuICAgICAgICAgICAgbWVyZ2VkRmVhdHVyZXNbal0uZ2VvbWV0cnkgPSAobnVsbDogYW55KTtcblxuICAgICAgICB9IGVsc2UgaWYgKGxlZnRLZXkgaW4gcmlnaHRJbmRleCkge1xuICAgICAgICAgICAgLy8gZm91bmQgbWVyZ2VhYmxlIGxpbmUgYWRqYWNlbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlXG4gICAgICAgICAgICBtZXJnZUZyb21SaWdodChsZWZ0S2V5LCByaWdodEtleSwgZ2VvbSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyaWdodEtleSBpbiBsZWZ0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIG1lcmdlYWJsZSBsaW5lIGFkamFjZW50IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSwgbWVyZ2VcbiAgICAgICAgICAgIG1lcmdlRnJvbUxlZnQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBhZGphY2VudCBsaW5lcywgYWRkIGFzIGEgbmV3IGl0ZW1cbiAgICAgICAgICAgIGFkZChrKTtcbiAgICAgICAgICAgIGxlZnRJbmRleFtsZWZ0S2V5XSA9IG1lcmdlZEluZGV4IC0gMTtcbiAgICAgICAgICAgIHJpZ2h0SW5kZXhbcmlnaHRLZXldID0gbWVyZ2VkSW5kZXggLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZEZlYXR1cmVzLmZpbHRlcigoZikgPT4gZi5nZW9tZXRyeSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIGNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbixcbn0gZnJvbSAnLi9zY3JpcHRfZGV0ZWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcCA9IHtcbiAgICAnISc6ICfDr8K4wpUnLFxuICAgICcjJzogJ8OvwrzCgycsXG4gICAgJyQnOiAnw6/CvMKEJyxcbiAgICAnJSc6ICfDr8K8woUnLFxuICAgICcmJzogJ8OvwrzChicsXG4gICAgJygnOiAnw6/CuMK1JyxcbiAgICAnKSc6ICfDr8K4wrYnLFxuICAgICcqJzogJ8OvwrzCiicsXG4gICAgJysnOiAnw6/CvMKLJyxcbiAgICAnLCc6ICfDr8K4wpAnLFxuICAgICctJzogJ8OvwrjCsicsXG4gICAgJy4nOiAnw6PCg8K7JyxcbiAgICAnLyc6ICfDr8K8wo8nLFxuICAgICc6JzogJ8OvwrjCkycsXG4gICAgJzsnOiAnw6/CuMKUJyxcbiAgICAnPCc6ICfDr8K4wr8nLFxuICAgICc9JzogJ8OvwrzCnScsXG4gICAgJz4nOiAnw6/CucKAJyxcbiAgICAnPyc6ICfDr8K4wpYnLFxuICAgICdAJzogJ8OvwrzCoCcsXG4gICAgJ1snOiAnw6/CucKHJyxcbiAgICAnXFxcXCc6ICfDr8K8wrwnLFxuICAgICddJzogJ8OvwrnCiCcsXG4gICAgJ14nOiAnw6/CvMK+JyxcbiAgICAnXyc6ICfDr8K4wrMnLFxuICAgICdgJzogJ8Ovwr3CgCcsXG4gICAgJ3snOiAnw6/CuMK3JyxcbiAgICAnfCc6ICfDosKAwpUnLFxuICAgICd9JzogJ8OvwrjCuCcsXG4gICAgJ34nOiAnw6/CvcKeJyxcbiAgICAnw4LCoic6ICfDr8K/wqAnLFxuICAgICfDgsKjJzogJ8Ovwr/CoScsXG4gICAgJ8OCwqUnOiAnw6/Cv8KlJyxcbiAgICAnw4LCpic6ICfDr8K/wqQnLFxuICAgICfDgsKsJzogJ8Ovwr/CoicsXG4gICAgJ8OCwq8nOiAnw6/Cv8KjJyxcbiAgICAnw6LCgMKTJzogJ8OvwrjCsicsXG4gICAgJ8OiwoDClCc6ICfDr8K4wrEnLFxuICAgICfDosKAwpgnOiAnw6/CucKDJyxcbiAgICAnw6LCgMKZJzogJ8OvwrnChCcsXG4gICAgJ8OiwoDCnCc6ICfDr8K5woEnLFxuICAgICfDosKAwp0nOiAnw6/CucKCJyxcbiAgICAnw6LCgMKmJzogJ8OvwrjCmScsXG4gICAgJ8OiwoDCpyc6ICfDo8KDwrsnLFxuICAgICfDosKCwqknOiAnw6/Cv8KmJyxcbiAgICAnw6PCgMKBJzogJ8OvwrjCkScsXG4gICAgJ8OjwoDCgic6ICfDr8K4wpInLFxuICAgICfDo8KAwognOiAnw6/CuMK/JyxcbiAgICAnw6PCgMKJJzogJ8OvwrnCgCcsXG4gICAgJ8OjwoDCiic6ICfDr8K4wr0nLFxuICAgICfDo8KAwosnOiAnw6/CuMK+JyxcbiAgICAnw6PCgMKMJzogJ8OvwrnCgScsXG4gICAgJ8OjwoDCjSc6ICfDr8K5woInLFxuICAgICfDo8KAwo4nOiAnw6/CucKDJyxcbiAgICAnw6PCgMKPJzogJ8OvwrnChCcsXG4gICAgJ8OjwoDCkCc6ICfDr8K4wrsnLFxuICAgICfDo8KAwpEnOiAnw6/CuMK8JyxcbiAgICAnw6PCgMKUJzogJ8OvwrjCuScsXG4gICAgJ8OjwoDClSc6ICfDr8K4wronLFxuICAgICfDo8KAwpYnOiAnw6/CuMKXJyxcbiAgICAnw6PCgMKXJzogJ8OvwrjCmCcsXG4gICAgJ8OvwrzCgSc6ICfDr8K4wpUnLFxuICAgICfDr8K8wognOiAnw6/CuMK1JyxcbiAgICAnw6/CvMKJJzogJ8OvwrjCticsXG4gICAgJ8OvwrzCjCc6ICfDr8K4wpAnLFxuICAgICfDr8K8wo0nOiAnw6/CuMKyJyxcbiAgICAnw6/CvMKOJzogJ8OjwoPCuycsXG4gICAgJ8OvwrzCmic6ICfDr8K4wpMnLFxuICAgICfDr8K8wpsnOiAnw6/CuMKUJyxcbiAgICAnw6/CvMKcJzogJ8OvwrjCvycsXG4gICAgJ8OvwrzCnic6ICfDr8K5woAnLFxuICAgICfDr8K8wp8nOiAnw6/CuMKWJyxcbiAgICAnw6/CvMK7JzogJ8OvwrnChycsXG4gICAgJ8OvwrzCvSc6ICfDr8K5wognLFxuICAgICfDr8K8wr8nOiAnw6/CuMKzJyxcbiAgICAnw6/CvcKbJzogJ8OvwrjCtycsXG4gICAgJ8Ovwr3CnCc6ICfDosKAwpUnLFxuICAgICfDr8K9wp0nOiAnw6/CuMK4JyxcbiAgICAnw6/CvcKfJzogJ8OvwrjCtScsXG4gICAgJ8Ovwr3CoCc6ICfDr8K4wrYnLFxuICAgICfDr8K9wqEnOiAnw6/CuMKSJyxcbiAgICAnw6/CvcKiJzogJ8OvwrnCgScsXG4gICAgJ8Ovwr3Coyc6ICfDr8K5woInXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKGlucHV0OiBzdHJpbmcpIHtcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSArIDEpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IHByZXZDaGFyQ29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSAtIDEpIHx8IG51bGw7XG5cbiAgICAgICAgY29uc3QgY2FuUmVwbGFjZVB1bmN0dWF0aW9uID0gKFxuICAgICAgICAgICAgKCFuZXh0Q2hhckNvZGUgfHwgIWNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihuZXh0Q2hhckNvZGUpIHx8IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpICsgMV1dKSAmJlxuICAgICAgICAgICAgKCFwcmV2Q2hhckNvZGUgfHwgIWNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihwcmV2Q2hhckNvZGUpIHx8IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpIC0gMV1dKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjYW5SZXBsYWNlUHVuY3R1YXRpb24gJiYgdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW2lucHV0W2ldXSkge1xuICAgICAgICAgICAgb3V0cHV0ICs9IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gaW5wdXRbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG4iLCIvLyBAZmxvd1xuLy8gT05FX0VNIGNvbnN0YW50IHVzZWQgdG8gZ28gYmV0d2VlbiBcImVtXCIgdW5pdHMgdXNlZCBpbiBzdHlsZSBzcGVjIGFuZCBcInBvaW50c1wiIHVzZWQgaW50ZXJuYWxseSBmb3IgbGF5b3V0XG5cbmV4cG9ydCBkZWZhdWx0IDI0O1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBiZjtcblxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0Jyk7XG5cbmZ1bmN0aW9uIFBiZihidWYpIHtcbiAgICB0aGlzLmJ1ZiA9IEFycmF5QnVmZmVyLmlzVmlldyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmKSA/IGJ1ZiA6IG5ldyBVaW50OEFycmF5KGJ1ZiB8fCAwKTtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy50eXBlID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmLmxlbmd0aDtcbn1cblxuUGJmLlZhcmludCAgPSAwOyAvLyB2YXJpbnQ6IGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG5QYmYuRml4ZWQ2NCA9IDE7IC8vIDY0LWJpdDogZG91YmxlLCBmaXhlZDY0LCBzZml4ZWQ2NFxuUGJmLkJ5dGVzICAgPSAyOyAvLyBsZW5ndGgtZGVsaW1pdGVkOiBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuUGJmLkZpeGVkMzIgPSA1OyAvLyAzMi1iaXQ6IGZsb2F0LCBmaXhlZDMyLCBzZml4ZWQzMlxuXG52YXIgU0hJRlRfTEVGVF8zMiA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KSxcbiAgICBTSElGVF9SSUdIVF8zMiA9IDEgLyBTSElGVF9MRUZUXzMyO1xuXG4vLyBUaHJlc2hvbGQgY2hvc2VuIGJhc2VkIG9uIGJvdGggYmVuY2htYXJraW5nIGFuZCBrbm93bGVkZ2UgYWJvdXQgYnJvd3NlciBzdHJpbmdcbi8vIGRhdGEgc3RydWN0dXJlcyAod2hpY2ggY3VycmVudGx5IHN3aXRjaCBzdHJ1Y3R1cmUgdHlwZXMgYXQgMTIgYnl0ZXMgb3IgbW9yZSlcbnZhciBURVhUX0RFQ09ERVJfTUlOX0xFTkdUSCA9IDEyO1xudmFyIHV0ZjhUZXh0RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogbmV3IFRleHREZWNvZGVyKCd1dGY4Jyk7XG5cblBiZi5wcm90b3R5cGUgPSB7XG5cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5idWYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gUkVBRElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcmVhZEZpZWxkczogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQsIGVuZCkge1xuICAgICAgICBlbmQgPSBlbmQgfHwgdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5yZWFkVmFyaW50KCksXG4gICAgICAgICAgICAgICAgdGFnID0gdmFsID4+IDMsXG4gICAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsICYgMHg3O1xuICAgICAgICAgICAgcmVhZEZpZWxkKHRhZywgcmVzdWx0LCB0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBzdGFydFBvcykgdGhpcy5za2lwKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcmVhZE1lc3NhZ2U6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGaWVsZHMocmVhZEZpZWxkLCByZXN1bHQsIHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MpO1xuICAgIH0sXG5cbiAgICByZWFkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gNjQtYml0IGludCBoYW5kbGluZyBpcyBiYXNlZCBvbiBnaXRodWIuY29tL2Rwdy9ub2RlLWJ1ZmZlci1tb3JlLWludHMgKE1JVC1saWNlbnNlZClcblxuICAgIHJlYWRGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKSArIHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZEludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSBpZWVlNzU0LnJlYWQodGhpcy5idWYsIHRoaXMucG9zLCB0cnVlLCA1MiwgOCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ6IGZ1bmN0aW9uKGlzU2lnbmVkKSB7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLmJ1ZixcbiAgICAgICAgICAgIHZhbCwgYjtcblxuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgID0gIGIgJiAweDdmOyAgICAgICAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCA3OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAxNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAyMTsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zXTsgICB2YWwgfD0gKGIgJiAweDBmKSA8PCAyODtcblxuICAgICAgICByZXR1cm4gcmVhZFZhcmludFJlbWFpbmRlcih2YWwsIGlzU2lnbmVkLCB0aGlzKTtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDY0OiBmdW5jdGlvbigpIHsgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2Mi4wLjFcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFZhcmludCh0cnVlKTtcbiAgICB9LFxuXG4gICAgcmVhZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbnVtID0gdGhpcy5yZWFkVmFyaW50KCk7XG4gICAgICAgIHJldHVybiBudW0gJSAyID09PSAxID8gKG51bSArIDEpIC8gLTIgOiBudW0gLyAyOyAvLyB6aWd6YWcgZW5jb2RpbmdcbiAgICB9LFxuXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSk7XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcblxuICAgICAgICBpZiAoZW5kIC0gcG9zID49IFRFWFRfREVDT0RFUl9NSU5fTEVOR1RIICYmIHV0ZjhUZXh0RGVjb2Rlcikge1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHN0cmluZ3MgYXJlIGZhc3Qgd2l0aCB0aGUgYnVpbHQtaW4gYnJvd3NlciBUZXh0RGVjb2RlciBBUElcbiAgICAgICAgICAgIHJldHVybiByZWFkVXRmOFRleHREZWNvZGVyKHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQgc3RyaW5ncyBhcmUgZmFzdCB3aXRoIG91ciBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgICAgICAgcmV0dXJuIHJlYWRVdGY4KHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgfSxcblxuICAgIHJlYWRCeXRlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH0sXG5cbiAgICAvLyB2ZXJib3NlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBkb2Vzbid0IGFmZmVjdCBnemlwcGVkIHNpemVcblxuICAgIHJlYWRQYWNrZWRWYXJpbnQ6IGZ1bmN0aW9uKGFyciwgaXNTaWduZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU1ZhcmludDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRCb29sZWFuOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZsb2F0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRG91YmxlOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgIGlmICh0eXBlID09PSBQYmYuVmFyaW50KSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gPiAweDdmKSB7fVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuQnl0ZXMpIHRoaXMucG9zID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkMzIpIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDY0KSB0aGlzLnBvcyArPSA4O1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfSxcblxuICAgIC8vID09PSBXUklUSU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICB3cml0ZVRhZzogZnVuY3Rpb24odGFnLCB0eXBlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoKHRhZyA8PCAzKSB8IHR5cGUpO1xuICAgIH0sXG5cbiAgICByZWFsbG9jOiBmdW5jdGlvbihtaW4pIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDE2O1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGggPCB0aGlzLnBvcyArIG1pbikgbGVuZ3RoICo9IDI7XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgYnVmLnNldCh0aGlzLmJ1Zik7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KDAsIHRoaXMubGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhbCA9ICt2YWwgfHwgMDtcblxuICAgICAgICBpZiAodmFsID4gMHhmZmZmZmZmIHx8IHZhbCA8IDApIHtcbiAgICAgICAgICAgIHdyaXRlQmlnVmFyaW50KHZhbCwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG5cbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICAgICAgICAgdmFsICYgMHg3ZiAgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+Pj0gNykgJiAweDdmKSB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICh2YWwgPj4+IDcpICYgMHg3ZjtcbiAgICB9LFxuXG4gICAgd3JpdGVTVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwgPCAwID8gLXZhbCAqIDIgLSAxIDogdmFsICogMik7XG4gICAgfSxcblxuICAgIHdyaXRlQm9vbGVhbjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih2YWwpKTtcbiAgICB9LFxuXG4gICAgd3JpdGVTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKHN0ci5sZW5ndGggKiA0KTtcblxuICAgICAgICB0aGlzLnBvcysrOyAvLyByZXNlcnZlIDEgYnl0ZSBmb3Igc2hvcnQgc3RyaW5nIGxlbmd0aFxuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICAvLyB3cml0ZSB0aGUgc3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB0aGlzLnBvcyA9IHdyaXRlVXRmOCh0aGlzLmJ1Ziwgc3RyLCB0aGlzLnBvcyk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgIGlmIChsZW4gPj0gMHg4MCkgbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCB0aGlzKTtcblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlRmxvYXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVEb3VibGU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVCeXRlczogZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IGJ1ZmZlcltpXTtcbiAgICB9LFxuXG4gICAgd3JpdGVSYXdNZXNzYWdlOiBmdW5jdGlvbihmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBtZXNzYWdlIGxlbmd0aFxuXG4gICAgICAgIC8vIHdyaXRlIHRoZSBtZXNzYWdlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgZm4ob2JqLCB0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVNZXNzYWdlOiBmdW5jdGlvbih0YWcsIGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVSYXdNZXNzYWdlKGZuLCBvYmopO1xuICAgIH0sXG5cbiAgICB3cml0ZVBhY2tlZFZhcmludDogICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFZhcmludCwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkU1ZhcmludDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU1ZhcmludCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRCb29sZWFuOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRCb29sZWFuLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEZsb2F0OiAgICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZsb2F0LCBhcnIpOyAgICB9LFxuICAgIHdyaXRlUGFja2VkRG91YmxlOiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRG91YmxlLCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDMyOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDMyLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDMyLCBhcnIpOyB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQ2NDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQ2NCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQ2NCwgYXJyKTsgfSxcblxuICAgIHdyaXRlQnl0ZXNGaWVsZDogZnVuY3Rpb24odGFnLCBidWZmZXIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlcyhidWZmZXIpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlU1ZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTdHJpbmdGaWVsZDogZnVuY3Rpb24odGFnLCBzdHIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVTdHJpbmcoc3RyKTtcbiAgICB9LFxuICAgIHdyaXRlRmxvYXRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZsb2F0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZURvdWJsZUZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRG91YmxlKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUJvb2xlYW5GaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludEZpZWxkKHRhZywgQm9vbGVhbih2YWwpKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiByZWFkVmFyaW50UmVtYWluZGVyKGwsIHMsIHApIHtcbiAgICB2YXIgYnVmID0gcC5idWYsXG4gICAgICAgIGgsIGI7XG5cbiAgICBiID0gYnVmW3AucG9zKytdOyBoICA9IChiICYgMHg3MCkgPj4gNDsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAzOyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDEwOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTc7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAyNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4MDEpIDw8IDMxOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMnKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2tlZEVuZChwYmYpIHtcbiAgICByZXR1cm4gcGJmLnR5cGUgPT09IFBiZi5CeXRlcyA/XG4gICAgICAgIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zIDogcGJmLnBvcyArIDE7XG59XG5cbmZ1bmN0aW9uIHRvTnVtKGxvdywgaGlnaCwgaXNTaWduZWQpIHtcbiAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2ggKiAweDEwMDAwMDAwMCArIChsb3cgPj4+IDApO1xuICAgIH1cblxuICAgIHJldHVybiAoKGhpZ2ggPj4+IDApICogMHgxMDAwMDAwMDApICsgKGxvdyA+Pj4gMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50KHZhbCwgcGJmKSB7XG4gICAgdmFyIGxvdywgaGlnaDtcblxuICAgIGlmICh2YWwgPj0gMCkge1xuICAgICAgICBsb3cgID0gKHZhbCAlIDB4MTAwMDAwMDAwKSB8IDA7XG4gICAgICAgIGhpZ2ggPSAodmFsIC8gMHgxMDAwMDAwMDApIHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgID0gfigtdmFsICUgMHgxMDAwMDAwMDApO1xuICAgICAgICBoaWdoID0gfigtdmFsIC8gMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIGlmIChsb3cgXiAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgICBsb3cgPSAobG93ICsgMSkgfCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG93ID0gMDtcbiAgICAgICAgICAgIGhpZ2ggPSAoaGlnaCArIDEpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWwgPj0gMHgxMDAwMDAwMDAwMDAwMDAwMCB8fCB2YWwgPCAtMHgxMDAwMDAwMDAwMDAwMDAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIHZhcmludCBkb2VzblxcJ3QgZml0IGludG8gMTAgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBwYmYucmVhbGxvYygxMCk7XG5cbiAgICB3cml0ZUJpZ1ZhcmludExvdyhsb3csIGhpZ2gsIHBiZik7XG4gICAgd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKSB7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zXSAgID0gbG93ICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZikge1xuICAgIHZhciBsc2IgPSAoaGlnaCAmIDB4MDcpIDw8IDQ7XG5cbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gfD0gbHNiICAgICAgICAgfCAoKGhpZ2ggPj4+PSAzKSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCBwYmYpIHtcbiAgICB2YXIgZXh0cmFMZW4gPVxuICAgICAgICBsZW4gPD0gMHgzZmZmID8gMSA6XG4gICAgICAgIGxlbiA8PSAweDFmZmZmZiA/IDIgOlxuICAgICAgICBsZW4gPD0gMHhmZmZmZmZmID8gMyA6IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIChNYXRoLkxOMiAqIDcpKTtcblxuICAgIC8vIGlmIDEgYnl0ZSBpc24ndCBlbm91Z2ggZm9yIGVuY29kaW5nIG1lc3NhZ2UgbGVuZ3RoLCBzaGlmdCB0aGUgZGF0YSB0byB0aGUgcmlnaHRcbiAgICBwYmYucmVhbGxvYyhleHRyYUxlbik7XG4gICAgZm9yICh2YXIgaSA9IHBiZi5wb3MgLSAxOyBpID49IHN0YXJ0UG9zOyBpLS0pIHBiZi5idWZbaSArIGV4dHJhTGVuXSA9IHBiZi5idWZbaV07XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGFja2VkVmFyaW50KGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVZhcmludChhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU1ZhcmludChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNWYXJpbnQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRmxvYXQoYXJyLCBwYmYpICAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZsb2F0KGFycltpXSk7ICAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRG91YmxlKGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZURvdWJsZShhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkQm9vbGVhbihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUJvb2xlYW4oYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQzMihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkMzIoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkMzIoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDMyKGFycltpXSk7IH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQ2NChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkNjQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkNjQoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDY0KGFycltpXSk7IH1cblxuLy8gQnVmZmVyIGNvZGUgYmVsb3cgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlciwgTUlULWxpY2Vuc2VkXG5cbmZ1bmN0aW9uIHJlYWRVSW50MzIoYnVmLCBwb3MpIHtcbiAgICByZXR1cm4gKChidWZbcG9zXSkgfFxuICAgICAgICAoYnVmW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgKGJ1Zltwb3MgKyAzXSAqIDB4MTAwMDAwMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzIoYnVmLCB2YWwsIHBvcykge1xuICAgIGJ1Zltwb3NdID0gdmFsO1xuICAgIGJ1Zltwb3MgKyAxXSA9ICh2YWwgPj4+IDgpO1xuICAgIGJ1Zltwb3MgKyAyXSA9ICh2YWwgPj4+IDE2KTtcbiAgICBidWZbcG9zICsgM10gPSAodmFsID4+PiAyNCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFV0ZjgoYnVmLCBwb3MsIGVuZCkge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICB2YXIgaSA9IHBvcztcblxuICAgIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgICAgIHZhciBiMCA9IGJ1ZltpXTtcbiAgICAgICAgdmFyIGMgPSBudWxsOyAvLyBjb2RlcG9pbnRcbiAgICAgICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPVxuICAgICAgICAgICAgYjAgPiAweEVGID8gNCA6XG4gICAgICAgICAgICBiMCA+IDB4REYgPyAzIDpcbiAgICAgICAgICAgIGIwID4gMHhCRiA/IDIgOiAxO1xuXG4gICAgICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA+IGVuZCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIGIxLCBiMiwgYjM7XG5cbiAgICAgICAgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChiMCA8IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gYjA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMikge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4MUYpIDw8IDB4NiB8IChiMSAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDMpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4QyB8IChiMSAmIDB4M0YpIDw8IDB4NiB8IChiMiAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0ZGIHx8IChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDQpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGIzID0gYnVmW2kgKyAzXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjMgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4MTIgfCAoYjEgJiAweDNGKSA8PCAweEMgfCAoYjIgJiAweDNGKSA8PCAweDYgfCAoYjMgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweEZGRkYgfHwgYyA+PSAweDExMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYyA9IDB4RkZGRDtcbiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4RkZGRikge1xuICAgICAgICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG4gICAgICAgICAgICBjID0gMHhEQzAwIHwgYyAmIDB4M0ZGO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiByZWFkVXRmOFRleHREZWNvZGVyKGJ1ZiwgcG9zLCBlbmQpIHtcbiAgICByZXR1cm4gdXRmOFRleHREZWNvZGVyLmRlY29kZShidWYuc3ViYXJyYXkocG9zLCBlbmQpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVVdGY4KGJ1Ziwgc3RyLCBwb3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYywgbGVhZDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIGNvZGUgcG9pbnRcblxuICAgICAgICBpZiAoYyA+IDB4RDdGRiAmJiBjIDwgMHhFMDAwKSB7XG4gICAgICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHhEQzAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjID0gbGVhZCAtIDB4RDgwMCA8PCAxMCB8IGMgLSAweERDMDAgfCAweDEwMDAwO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjID4gMHhEQkZGIHx8IChpICsgMSA9PT0gc3RyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGVhZCkge1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgbGVhZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4NiB8IDB4QzA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgfCAweEUwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4MTIgfCAweEYwO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHg2ICYgMHgzRiB8IDB4ODA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZbcG9zKytdID0gYyAmIDB4M0YgfCAweDgwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmNvbnN0IGJvcmRlciA9IDM7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFja3ModGFnOiBudW1iZXIsIGdseXBoczogQXJyYXk8U3R5bGVHbHlwaD4sIHBiZjogUHJvdG9idWYpIHtcbiAgICBpZiAodGFnID09PSAxKSB7XG4gICAgICAgIHBiZi5yZWFkTWVzc2FnZShyZWFkRm9udHN0YWNrLCBnbHlwaHMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFjayh0YWc6IG51bWJlciwgZ2x5cGhzOiBBcnJheTxTdHlsZUdseXBoPiwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgY29uc3Qge2lkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgYWR2YW5jZX0gPSBwYmYucmVhZE1lc3NhZ2UocmVhZEdseXBoLCB7fSk7XG4gICAgICAgIGdseXBocy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYml0bWFwOiBuZXcgQWxwaGFJbWFnZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoICsgMiAqIGJvcmRlcixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCArIDIgKiBib3JkZXJcbiAgICAgICAgICAgIH0sIGJpdG1hcCksXG4gICAgICAgICAgICBtZXRyaWNzOiB7d2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCBhZHZhbmNlfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRHbHlwaCh0YWc6IG51bWJlciwgZ2x5cGg6IE9iamVjdCwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDEpIGdseXBoLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDIpIGdseXBoLmJpdG1hcCA9IHBiZi5yZWFkQnl0ZXMoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGdseXBoLndpZHRoID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDQpIGdseXBoLmhlaWdodCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBnbHlwaC5sZWZ0ID0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA2KSBnbHlwaC50b3AgPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDcpIGdseXBoLmFkdmFuY2UgPSBwYmYucmVhZFZhcmludCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZGF0YTogQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5KTogQXJyYXk8U3R5bGVHbHlwaD4ge1xuICAgIHJldHVybiBuZXcgUHJvdG9idWYoZGF0YSkucmVhZEZpZWxkcyhyZWFkRm9udHN0YWNrcywgW10pO1xufVxuXG5leHBvcnQgY29uc3QgR0xZUEhfUEJGX0JPUkRFUiA9IGJvcmRlcjtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcG90cGFjayhib3hlcykge1xuXG4gICAgLy8gY2FsY3VsYXRlIHRvdGFsIGJveCBhcmVhIGFuZCBtYXhpbXVtIGJveCB3aWR0aFxuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgYXJlYSArPSBib3gudyAqIGJveC5oO1xuICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBib3gudyk7XG4gICAgfVxuXG4gICAgLy8gc29ydCB0aGUgYm94ZXMgZm9yIGluc2VydGlvbiBieSBoZWlnaHQsIGRlc2NlbmRpbmdcbiAgICBib3hlcy5zb3J0KChhLCBiKSA9PiBiLmggLSBhLmgpO1xuXG4gICAgLy8gYWltIGZvciBhIHNxdWFyaXNoIHJlc3VsdGluZyBjb250YWluZXIsXG4gICAgLy8gc2xpZ2h0bHkgYWRqdXN0ZWQgZm9yIHN1Yi0xMDAlIHNwYWNlIHV0aWxpemF0aW9uXG4gICAgY29uc3Qgc3RhcnRXaWR0aCA9IE1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoYXJlYSAvIDAuOTUpKSwgbWF4V2lkdGgpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCBhIHNpbmdsZSBlbXB0eSBzcGFjZSwgdW5ib3VuZGVkIGF0IHRoZSBib3R0b21cbiAgICBjb25zdCBzcGFjZXMgPSBbe3g6IDAsIHk6IDAsIHc6IHN0YXJ0V2lkdGgsIGg6IEluZmluaXR5fV07XG5cbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgLy8gbG9vayB0aHJvdWdoIHNwYWNlcyBiYWNrd2FyZHMgc28gdGhhdCB3ZSBjaGVjayBzbWFsbGVyIHNwYWNlcyBmaXJzdFxuICAgICAgICBmb3IgKGxldCBpID0gc3BhY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjZSA9IHNwYWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gbG9vayBmb3IgZW1wdHkgc3BhY2VzIHRoYXQgY2FuIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGJveFxuICAgICAgICAgICAgaWYgKGJveC53ID4gc3BhY2UudyB8fCBib3guaCA+IHNwYWNlLmgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBmb3VuZCB0aGUgc3BhY2U7IGFkZCB0aGUgYm94IHRvIGl0cyB0b3AtbGVmdCBjb3JuZXJcbiAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS18XG4gICAgICAgICAgICAvLyB8ICBib3ggIHwgICAgICAgfFxuICAgICAgICAgICAgLy8gfF9fX19fX198ICAgICAgIHxcbiAgICAgICAgICAgIC8vIHwgICAgICAgICBzcGFjZSB8XG4gICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgYm94LnggPSBzcGFjZS54O1xuICAgICAgICAgICAgYm94LnkgPSBzcGFjZS55O1xuXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJveC55ICsgYm94LmgpO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm94LnggKyBib3gudyk7XG5cbiAgICAgICAgICAgIGlmIChib3gudyA9PT0gc3BhY2UudyAmJiBib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBleGFjdGx5OyByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gc3BhY2VzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmIChpIDwgc3BhY2VzLmxlbmd0aCkgc3BhY2VzW2ldID0gbGFzdDtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBoZWlnaHQ7IHVwZGF0ZSBpdCBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICBib3ggIHwgdXBkYXRlZCBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX198X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnggKz0gYm94Lnc7XG4gICAgICAgICAgICAgICAgc3BhY2UudyAtPSBib3gudztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3gudyA9PT0gc3BhY2Uudykge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCB3aWR0aDsgdXBkYXRlIGl0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICAgICAgYm94ICAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgLy8gfCB1cGRhdGVkIHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnkgKz0gYm94Lmg7XG4gICAgICAgICAgICAgICAgc3BhY2UuaCAtPSBib3guaDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGJveCBzcGxpdHMgdGhlIHNwYWNlIGludG8gdHdvIHNwYWNlc1xuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgIGJveCAgfCBuZXcgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19ffF9fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIC8vIHwgdXBkYXRlZCBzcGFjZSAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogc3BhY2UueCArIGJveC53LFxuICAgICAgICAgICAgICAgICAgICB5OiBzcGFjZS55LFxuICAgICAgICAgICAgICAgICAgICB3OiBzcGFjZS53IC0gYm94LncsXG4gICAgICAgICAgICAgICAgICAgIGg6IGJveC5oXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3BhY2UueSArPSBib3guaDtcbiAgICAgICAgICAgICAgICBzcGFjZS5oIC09IGJveC5oO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3OiB3aWR0aCwgLy8gY29udGFpbmVyIHdpZHRoXG4gICAgICAgIGg6IGhlaWdodCwgLy8gY29udGFpbmVyIGhlaWdodFxuICAgICAgICBmaWxsOiAoYXJlYSAvICh3aWR0aCAqIGhlaWdodCkpIHx8IDAgLy8gc3BhY2UgdXRpbGl6YXRpb25cbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgSW1hZ2VNYW5hZ2VyIGZyb20gJy4vaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5cbmNvbnN0IElNQUdFX1BBRERJTkc6IG51bWJlciA9IDE7XG5leHBvcnQge0lNQUdFX1BBRERJTkd9O1xuXG50eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VQb3NpdGlvbiB7XG4gICAgcGFkZGVkUmVjdDogUmVjdDtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuICAgIHN0cmV0Y2hZOiA/QXJyYXk8W251bWJlciwgbnVtYmVyXT47XG4gICAgc3RyZXRjaFg6ID9BcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgICBjb250ZW50OiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgICBjb25zdHJ1Y3RvcihwYWRkZWRSZWN0OiBSZWN0LCB7cGl4ZWxSYXRpbywgdmVyc2lvbiwgc3RyZXRjaFgsIHN0cmV0Y2hZLCBjb250ZW50fTogU3R5bGVJbWFnZSkge1xuICAgICAgICB0aGlzLnBhZGRlZFJlY3QgPSBwYWRkZWRSZWN0O1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnN0cmV0Y2hYID0gc3RyZXRjaFg7XG4gICAgICAgIHRoaXMuc3RyZXRjaFkgPSBzdHJldGNoWTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgdGwoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueSArIElNQUdFX1BBRERJTkdcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgYnIoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIHRoaXMucGFkZGVkUmVjdC53IC0gSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC55ICsgdGhpcy5wYWRkZWRSZWN0LmggLSBJTUFHRV9QQURESU5HXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IHRsYnIoKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRsLmNvbmNhdCh0aGlzLmJyKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheVNpemUoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LncgLSBJTUFHRV9QQURESU5HICogMikgLyB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LmggLSBJTUFHRV9QQURESU5HICogMikgLyB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlQXRsYXMge1xuICAgIGltYWdlOiBSR0JBSW1hZ2U7XG4gICAgaWNvblBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufTtcbiAgICBwYXR0ZXJuUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259O1xuICAgIGhhdmVSZW5kZXJDYWxsYmFja3M6IEFycmF5PHN0cmluZz47XG4gICAgdXBsb2FkZWQ6ID9ib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWNvbnM6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sIHBhdHRlcm5zOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9KSB7XG4gICAgICAgIGNvbnN0IGljb25Qb3NpdGlvbnMgPSB7fSwgcGF0dGVyblBvc2l0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MgPSBbXTtcblxuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgdGhpcy5hZGRJbWFnZXMoaWNvbnMsIGljb25Qb3NpdGlvbnMsIGJpbnMpO1xuICAgICAgICB0aGlzLmFkZEltYWdlcyhwYXR0ZXJucywgcGF0dGVyblBvc2l0aW9ucywgYmlucyk7XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgUkdCQUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaWNvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGljb25zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IGljb25Qb3NpdGlvbnNbaWRdLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAwfSwge3g6IGJpbi54ICsgSU1BR0VfUEFERElORywgeTogYmluLnkgKyBJTUFHRV9QQURESU5HfSwgc3JjLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBwYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gcGF0dGVybnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0gcGF0dGVyblBvc2l0aW9uc1tpZF0ucGFkZGVkUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiaW4ueCArIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeSA9IGJpbi55ICsgSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICB3ID0gc3JjLmRhdGEud2lkdGgsXG4gICAgICAgICAgICAgICAgaCA9IHNyYy5kYXRhLmhlaWdodDtcblxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4LCB5fSwgc3JjLmRhdGEpO1xuICAgICAgICAgICAgLy8gQWRkIDEgcGl4ZWwgd3JhcHBlZCBwYWRkaW5nIG9uIGVhY2ggc2lkZSBvZiB0aGUgaW1hZ2UuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiBoIC0gMX0sIHt4LCB5OiB5IC0gMX0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIFRcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6ICAgICAwfSwge3gsIHk6IHkgKyBofSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gQlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogdyAtIDEsIHk6IDB9LCB7eDogeCAtIDEsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBMXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCAgICAgeTogMH0sIHt4OiB4ICsgdywgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIFJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5pY29uUG9zaXRpb25zID0gaWNvblBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5wYXR0ZXJuUG9zaXRpb25zID0gcGF0dGVyblBvc2l0aW9ucztcbiAgICB9XG5cbiAgICBhZGRJbWFnZXMoaW1hZ2VzOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LCBwb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGJpbnM6IEFycmF5PFJlY3Q+KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaW1hZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpbWFnZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0ge1xuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3OiBzcmMuZGF0YS53aWR0aCArIDIgKiBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgICAgIGg6IHNyYy5kYXRhLmhlaWdodCArIDIgKiBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbnMucHVzaChiaW4pO1xuICAgICAgICAgICAgcG9zaXRpb25zW2lkXSA9IG5ldyBJbWFnZVBvc2l0aW9uKGJpbiwgc3JjKTtcblxuICAgICAgICAgICAgaWYgKHNyYy5oYXNSZW5kZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhdGNoVXBkYXRlZEltYWdlcyhpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlciwgdGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBpbWFnZU1hbmFnZXIuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGltYWdlTWFuYWdlci51cGRhdGVkSW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMuaWNvblBvc2l0aW9uc1tuYW1lXSwgaW1hZ2VNYW5hZ2VyLmdldEltYWdlKG5hbWUpLCB0ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5wYXR0ZXJuUG9zaXRpb25zW25hbWVdLCBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2UobmFtZSksIHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF0Y2hVcGRhdGVkSW1hZ2UocG9zaXRpb246ID9JbWFnZVBvc2l0aW9uLCBpbWFnZTogP1N0eWxlSW1hZ2UsIHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgaWYgKCFwb3NpdGlvbiB8fCAhaW1hZ2UpIHJldHVybjtcblxuICAgICAgICBpZiAocG9zaXRpb24udmVyc2lvbiA9PT0gaW1hZ2UudmVyc2lvbikgcmV0dXJuO1xuXG4gICAgICAgIHBvc2l0aW9uLnZlcnNpb24gPSBpbWFnZS52ZXJzaW9uO1xuICAgICAgICBjb25zdCBbeCwgeV0gPSBwb3NpdGlvbi50bDtcbiAgICAgICAgdGV4dHVyZS51cGRhdGUoaW1hZ2UuZGF0YSwgdW5kZWZpbmVkLCB7eCwgeX0pO1xuICAgIH1cblxufVxuXG5yZWdpc3RlcignSW1hZ2VQb3NpdGlvbicsIEltYWdlUG9zaXRpb24pO1xucmVnaXN0ZXIoJ0ltYWdlQXRsYXMnLCBJbWFnZUF0bGFzKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gICAgY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uLFxuICAgIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nLFxuICAgIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0XG59IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQgdmVydGljYWxpemVQdW5jdHVhdGlvbiBmcm9tICcuLi91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaCwgR2x5cGhNZXRyaWNzfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQge0dMWVBIX1BCRl9CT1JERVJ9IGZyb20gJy4uL3N0eWxlL3BhcnNlX2dseXBoX3BiZic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB7SU1BR0VfUEFERElOR30gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtSZWN0LCBHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IEZvcm1hdHRlZCwge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5jb25zdCBXcml0aW5nTW9kZSA9IHtcbiAgICBob3Jpem9udGFsOiAxLFxuICAgIHZlcnRpY2FsOiAyLFxuICAgIGhvcml6b250YWxPbmx5OiAzXG59O1xuXG5jb25zdCBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUID0gLTE3O1xuZXhwb3J0IHtzaGFwZVRleHQsIHNoYXBlSWNvbiwgZml0SWNvblRvVGV4dCwgZ2V0QW5jaG9yQWxpZ25tZW50LCBXcml0aW5nTW9kZSwgU0hBUElOR19ERUZBVUxUX09GRlNFVH07XG5cbi8vIFRoZSBwb3NpdGlvbiBvZiBhIGdseXBoIHJlbGF0aXZlIHRvIHRoZSB0ZXh0J3MgYW5jaG9yIHBvaW50LlxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZEdseXBoID0ge1xuICAgIGdseXBoOiBudW1iZXIsXG4gICAgaW1hZ2VOYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgdmVydGljYWw6IGJvb2xlYW4sXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICBmb250U3RhY2s6IHN0cmluZyxcbiAgICBzZWN0aW9uSW5kZXg6IG51bWJlcixcbiAgICBtZXRyaWNzOiBHbHlwaE1ldHJpY3MsXG4gICAgcmVjdDogUmVjdCB8IG51bGxcbn07XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRMaW5lID0ge1xuICAgIHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgbGluZU9mZnNldDogbnVtYmVyXG59O1xuXG4vLyBBIGNvbGxlY3Rpb24gb2YgcG9zaXRpb25lZCBnbHlwaHMgYW5kIHNvbWUgbWV0YWRhdGFcbmV4cG9ydCB0eXBlIFNoYXBpbmcgPSB7XG4gICAgcG9zaXRpb25lZExpbmVzOiBBcnJheTxQb3NpdGlvbmVkTGluZT4sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBpY29uc0luVGV4dDogYm9vbGVhbixcbiAgICB2ZXJ0aWNhbGl6YWJsZTogYm9vbGVhblxufTtcblxuZnVuY3Rpb24gaXNFbXB0eShwb3NpdGlvbmVkTGluZXM6IEFycmF5PFBvc2l0aW9uZWRMaW5lPikge1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBwb3NpdGlvbmVkTGluZXMpIHtcbiAgICAgICAgaWYgKGxpbmUucG9zaXRpb25lZEdseXBocy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3ltYm9sQW5jaG9yID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0JztcbmV4cG9ydCB0eXBlIFRleHRKdXN0aWZ5ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG4vLyBNYXggbnVtYmVyIG9mIGltYWdlcyBpbiBsYWJlbCBpcyA2NDAxIFUrRTAwMMOiwoDCk1UrRjhGRiB0aGF0IGNvdmVyc1xuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKS5cbmNvbnN0IFBVQWJlZ2luID0gMHhFMDAwO1xuY29uc3QgUFVBZW5kID0gMHhGOEZGO1xuXG5jbGFzcyBTZWN0aW9uT3B0aW9ucyB7XG4gICAgLy8gVGV4dCBvcHRpb25zXG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICBmb250U3RhY2s6IHN0cmluZztcbiAgICAvLyBJbWFnZSBvcHRpb25zXG4gICAgaW1hZ2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSAxLjA7XG4gICAgICAgIHRoaXMuZm9udFN0YWNrID0gXCJcIjtcbiAgICAgICAgdGhpcy5pbWFnZU5hbWUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JUZXh0KHNjYWxlOiBudW1iZXIgfCBudWxsLCBmb250U3RhY2s6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0T3B0aW9ucyA9IG5ldyBTZWN0aW9uT3B0aW9ucygpO1xuICAgICAgICB0ZXh0T3B0aW9ucy5zY2FsZSA9IHNjYWxlIHx8IDE7XG4gICAgICAgIHRleHRPcHRpb25zLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgcmV0dXJuIHRleHRPcHRpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JJbWFnZShpbWFnZU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpbWFnZU9wdGlvbnMgPSBuZXcgU2VjdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgaW1hZ2VPcHRpb25zLmltYWdlTmFtZSA9IGltYWdlTmFtZTtcbiAgICAgICAgcmV0dXJuIGltYWdlT3B0aW9ucztcbiAgICB9XG5cbn1cblxuY2xhc3MgVGFnZ2VkU3RyaW5nIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgc2VjdGlvbkluZGV4OiBBcnJheTxudW1iZXI+IC8vIG1hcHMgZWFjaCBjaGFyYWN0ZXIgaW4gJ3RleHQnIHRvIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluICdzZWN0aW9ucydcbiAgICBzZWN0aW9uczogQXJyYXk8U2VjdGlvbk9wdGlvbnM+XG4gICAgaW1hZ2VTZWN0aW9uSUQ6IG51bWJlciB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmltYWdlU2VjdGlvbklEID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUZlYXR1cmUodGV4dDogRm9ybWF0dGVkLCBkZWZhdWx0Rm9udFN0YWNrOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0ZXh0LnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFRleHRTZWN0aW9uKHNlY3Rpb24sIGRlZmF1bHRGb250U3RhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkSW1hZ2VTZWN0aW9uKHNlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb24oaW5kZXg6IG51bWJlcik6IFNlY3Rpb25PcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnNbdGhpcy5zZWN0aW9uSW5kZXhbaW5kZXhdXTtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25JbmRleFtpbmRleF07XG4gICAgfVxuXG4gICAgZ2V0Q2hhckNvZGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgdmVydGljYWxpemVQdW5jdHVhdGlvbigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdmVydGljYWxpemVQdW5jdHVhdGlvbih0aGlzLnRleHQpO1xuICAgIH1cblxuICAgIHRyaW0oKSB7XG4gICAgICAgIGxldCBiZWdpbm5pbmdXaGl0ZXNwYWNlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7XG4gICAgICAgICAgICBpIDwgdGhpcy50ZXh0Lmxlbmd0aCAmJiB3aGl0ZXNwYWNlW3RoaXMudGV4dC5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgIGkrKykge1xuICAgICAgICAgICAgYmVnaW5uaW5nV2hpdGVzcGFjZSsrO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0cmFpbGluZ1doaXRlc3BhY2UgPSB0aGlzLnRleHQubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy50ZXh0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBpID49IDAgJiYgaSA+PSBiZWdpbm5pbmdXaGl0ZXNwYWNlICYmIHdoaXRlc3BhY2VbdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICAgICAgaS0tKSB7XG4gICAgICAgICAgICB0cmFpbGluZ1doaXRlc3BhY2UtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1doaXRlc3BhY2UsIHRyYWlsaW5nV2hpdGVzcGFjZSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gdGhpcy5zZWN0aW9uSW5kZXguc2xpY2UoYmVnaW5uaW5nV2hpdGVzcGFjZSwgdHJhaWxpbmdXaGl0ZXNwYWNlKTtcbiAgICB9XG5cbiAgICBzdWJzdHJpbmcoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUYWdnZWRTdHJpbmcge1xuICAgICAgICBjb25zdCBzdWJzdHJpbmcgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgIHN1YnN0cmluZy50ZXh0ID0gdGhpcy50ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICAgICAgc3Vic3RyaW5nLnNlY3Rpb25JbmRleCA9IHRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICBzdWJzdHJpbmcuc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zO1xuICAgICAgICByZXR1cm4gc3Vic3RyaW5nO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgfVxuXG4gICAgZ2V0TWF4U2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25JbmRleC5yZWR1Y2UoKG1heCwgaW5kZXgpID0+IE1hdGgubWF4KG1heCwgdGhpcy5zZWN0aW9uc1tpbmRleF0uc2NhbGUpLCAwKTtcbiAgICB9XG5cbiAgICBhZGRUZXh0U2VjdGlvbihzZWN0aW9uOiBGb3JtYXR0ZWRTZWN0aW9uLCBkZWZhdWx0Rm9udFN0YWNrOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50ZXh0ICs9IHNlY3Rpb24udGV4dDtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKFNlY3Rpb25PcHRpb25zLmZvclRleHQoc2VjdGlvbi5zY2FsZSwgc2VjdGlvbi5mb250U3RhY2sgfHwgZGVmYXVsdEZvbnRTdGFjaykpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9uLnRleHQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkluZGV4LnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSW1hZ2VTZWN0aW9uKHNlY3Rpb246IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gc2VjdGlvbi5pbWFnZSA/IHNlY3Rpb24uaW1hZ2UubmFtZSA6ICcnO1xuICAgICAgICBpZiAoaW1hZ2VOYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYENhbid0IGFkZCBGb3JtYXR0ZWRTZWN0aW9uIHdpdGggYW4gZW1wdHkgaW1hZ2UuYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUgPSB0aGlzLmdldE5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSgpO1xuICAgICAgICBpZiAoIW5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYFJlYWNoZWQgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzICR7UFVBZW5kIC0gUFVBYmVnaW4gKyAyfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKFNlY3Rpb25PcHRpb25zLmZvckltYWdlKGltYWdlTmFtZSkpO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VTZWN0aW9uSUQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VTZWN0aW9uSUQgPSBQVUFiZWdpbjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlU2VjdGlvbklEO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VTZWN0aW9uSUQgPj0gUFVBZW5kKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuICsrdGhpcy5pbWFnZVNlY3Rpb25JRDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyZWFrTGluZXMoaW5wdXQ6IFRhZ2dlZFN0cmluZywgbGluZUJyZWFrUG9pbnRzOiBBcnJheTxudW1iZXI+KTogQXJyYXk8VGFnZ2VkU3RyaW5nPiB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBjb25zdCB0ZXh0ID0gaW5wdXQudGV4dDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAoY29uc3QgbGluZUJyZWFrIG9mIGxpbmVCcmVha1BvaW50cykge1xuICAgICAgICBsaW5lcy5wdXNoKGlucHV0LnN1YnN0cmluZyhzdGFydCwgbGluZUJyZWFrKSk7XG4gICAgICAgIHN0YXJ0ID0gbGluZUJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCB0ZXh0Lmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIHNoYXBlVGV4dCh0ZXh0OiBGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yOiBTeW1ib2xBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZVRoaXNab29tOiBudW1iZXIpOiBTaGFwaW5nIHwgZmFsc2Uge1xuICAgIGNvbnN0IGxvZ2ljYWxJbnB1dCA9IFRhZ2dlZFN0cmluZy5mcm9tRmVhdHVyZSh0ZXh0LCBkZWZhdWx0Rm9udFN0YWNrKTtcblxuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpIHtcbiAgICAgICAgbG9naWNhbElucHV0LnZlcnRpY2FsaXplUHVuY3R1YXRpb24oKTtcbiAgICB9XG5cbiAgICBsZXQgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz47XG5cbiAgICBjb25zdCB7cHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9ID0gcnRsVGV4dFBsdWdpbjtcbiAgICBpZiAocHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICYmIGxvZ2ljYWxJbnB1dC5zZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQmlkaSBkb2Vzbid0IGhhdmUgdG8gYmUgc3R5bGUtYXdhcmVcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgdW50YWdnZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHVudGFnZ2VkTGluZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ2dlZExpbmUgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnRleHQgPSBsaW5lO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9ucyA9IGxvZ2ljYWxJbnB1dC5zZWN0aW9ucztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbkluZGV4LnB1c2goMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHRhZ2dlZExpbmUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQpIHtcbiAgICAgICAgLy8gTmVlZCB2ZXJzaW9uIG9mIG1hcGJveC1nbC1ydGwtdGV4dCB3aXRoIHN0eWxlIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBSVEwgdGV4dFxuICAgICAgICAvLyB3aXRoIGZvcm1hdHRpbmdcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkTGluZXMgPVxuICAgICAgICAgICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0KGxvZ2ljYWxJbnB1dC50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHByb2Nlc3NlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdnZWRMaW5lID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS50ZXh0ID0gbGluZVswXTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbkluZGV4ID0gbGluZVsxXTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbnMgPSBsb2dpY2FsSW5wdXQuc2VjdGlvbnM7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHRhZ2dlZExpbmUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGluZXMgPSBicmVha0xpbmVzKGxvZ2ljYWxJbnB1dCwgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbmVkTGluZXMgPSBbXTtcbiAgICBjb25zdCBzaGFwaW5nID0ge1xuICAgICAgICBwb3NpdGlvbmVkTGluZXMsXG4gICAgICAgIHRleHQ6IGxvZ2ljYWxJbnB1dC50b1N0cmluZygpLFxuICAgICAgICB0b3A6IHRyYW5zbGF0ZVsxXSxcbiAgICAgICAgYm90dG9tOiB0cmFuc2xhdGVbMV0sXG4gICAgICAgIGxlZnQ6IHRyYW5zbGF0ZVswXSxcbiAgICAgICAgcmlnaHQ6IHRyYW5zbGF0ZVswXSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGljb25zSW5UZXh0OiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxpemFibGU6IGZhbHNlXG4gICAgfTtcblxuICAgIHNoYXBlTGluZXMoc2hhcGluZywgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgbGluZXMsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCB3cml0aW5nTW9kZSwgc3BhY2luZywgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgaWYgKGlzRW1wdHkocG9zaXRpb25lZExpbmVzKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHNoYXBpbmc7XG59XG5cbi8vIHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zODBcbi8qIGVzbGludCBuby11c2VsZXNzLWNvbXB1dGVkLWtleTogMCAqL1xuXG5jb25zdCB3aGl0ZXNwYWNlOiB7W186IG51bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDA5XTogdHJ1ZSwgLy8gdGFiXG4gICAgWzB4MGFdOiB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MGJdOiB0cnVlLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBbMHgwY106IHRydWUsIC8vIGZvcm0gZmVlZFxuICAgIFsweDBkXTogdHJ1ZSwgLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgWzB4MjBdOiB0cnVlLCAvLyBzcGFjZVxufTtcblxuY29uc3QgYnJlYWthYmxlOiB7W186IG51bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDBhXTogICB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MjBdOiAgIHRydWUsIC8vIHNwYWNlXG4gICAgWzB4MjZdOiAgIHRydWUsIC8vIGFtcGVyc2FuZFxuICAgIFsweDI4XTogICB0cnVlLCAvLyBsZWZ0IHBhcmVudGhlc2lzXG4gICAgWzB4MjldOiAgIHRydWUsIC8vIHJpZ2h0IHBhcmVudGhlc2lzXG4gICAgWzB4MmJdOiAgIHRydWUsIC8vIHBsdXMgc2lnblxuICAgIFsweDJkXTogICB0cnVlLCAvLyBoeXBoZW4tbWludXNcbiAgICBbMHgyZl06ICAgdHJ1ZSwgLy8gc29saWR1c1xuICAgIFsweGFkXTogICB0cnVlLCAvLyBzb2Z0IGh5cGhlblxuICAgIFsweGI3XTogICB0cnVlLCAvLyBtaWRkbGUgZG90XG4gICAgWzB4MjAwYl06IHRydWUsIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICBbMHgyMDEwXTogdHJ1ZSwgLy8gaHlwaGVuXG4gICAgWzB4MjAxM106IHRydWUsIC8vIGVuIGRhc2hcbiAgICBbMHgyMDI3XTogdHJ1ZSAgLy8gaW50ZXJwdW5jdFxuICAgIC8vIE1hbnkgb3RoZXIgY2hhcmFjdGVycyBtYXkgYmUgcmVhc29uYWJsZSBicmVha3BvaW50c1xuICAgIC8vIENvbnNpZGVyIFwibmV1dHJhbCBvcmllbnRhdGlvblwiIGNoYXJhY3RlcnMgYXQgc2NyaXB0RGV0ZWN0aW9uLmNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzY1OFxufTtcblxuZnVuY3Rpb24gZ2V0R2x5cGhBZHZhbmNlKGNvZGVQb2ludDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IFNlY3Rpb25PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFzZWN0aW9uLmltYWdlTmFtZSkge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgIGNvbnN0IGdseXBoID0gcG9zaXRpb25zICYmIHBvc2l0aW9uc1tjb2RlUG9pbnRdO1xuICAgICAgICBpZiAoIWdseXBoKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zaXRpb24gPSBpbWFnZVBvc2l0aW9uc1tzZWN0aW9uLmltYWdlTmFtZV07XG4gICAgICAgIGlmICghaW1hZ2VQb3NpdGlvbikgcmV0dXJuIDA7XG4gICAgICAgIHJldHVybiBpbWFnZVBvc2l0aW9uLmRpc3BsYXlTaXplWzBdICogc2VjdGlvbi5zY2FsZSAqIE9ORV9FTSAvIGxheW91dFRleHRTaXplICsgc3BhY2luZztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUF2ZXJhZ2VMaW5lV2lkdGgobG9naWNhbElucHV0OiBUYWdnZWRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcikge1xuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGxvZ2ljYWxJbnB1dC5nZXRTZWN0aW9uKGluZGV4KTtcbiAgICAgICAgdG90YWxXaWR0aCArPSBnZXRHbHlwaEFkdmFuY2UobG9naWNhbElucHV0LmdldENoYXJDb2RlKGluZGV4KSwgc2VjdGlvbiwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzcGFjaW5nLCBsYXlvdXRUZXh0U2l6ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsV2lkdGggLyBtYXhXaWR0aCkpO1xuICAgIHJldHVybiB0b3RhbFdpZHRoIC8gbGluZUNvdW50O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWRuZXNzKGxpbmVXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEJyZWFrOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmFnZ2VkbmVzcyA9IE1hdGgucG93KGxpbmVXaWR0aCAtIHRhcmdldFdpZHRoLCAyKTtcbiAgICBpZiAoaXNMYXN0QnJlYWspIHtcbiAgICAgICAgLy8gRmF2b3IgZmluYWxzIGxpbmVzIHNob3J0ZXIgdGhhbiBhdmVyYWdlIG92ZXIgbG9uZ2VyIHRoYW4gYXZlcmFnZVxuICAgICAgICBpZiAobGluZVdpZHRoIDwgdGFyZ2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzICogMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYWdnZWRuZXNzICsgTWF0aC5hYnMocGVuYWx0eSkgKiBwZW5hbHR5O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQZW5hbHR5KGNvZGVQb2ludDogbnVtYmVyLCBuZXh0Q29kZVBvaW50OiBudW1iZXIsIHBlbmFsaXphYmxlSWRlb2dyYXBoaWNCcmVhazogYm9vbGVhbikge1xuICAgIGxldCBwZW5hbHR5ID0gMDtcbiAgICAvLyBGb3JjZSBicmVhayBvbiBuZXdsaW5lXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gMHgwYSkge1xuICAgICAgICBwZW5hbHR5IC09IDEwMDAwO1xuICAgIH1cbiAgICAvLyBQZW5hbGl6ZSBicmVha3MgYmV0d2VlbiBjaGFyYWN0ZXJzIHRoYXQgYWxsb3cgaWRlb2dyYXBoaWMgYnJlYWtpbmcgYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIGxlc3MgcHJlZmVyYWJsZSB0aGFuIGJyZWFrcyBhdCBzcGFjZXMgKG9yIHplcm8gd2lkdGggc3BhY2VzKS5cbiAgICBpZiAocGVuYWxpemFibGVJZGVvZ3JhcGhpY0JyZWFrKSB7XG4gICAgICAgIHBlbmFsdHkgKz0gMTUwO1xuICAgIH1cblxuICAgIC8vIFBlbmFsaXplIG9wZW4gcGFyZW50aGVzaXMgYXQgZW5kIG9mIGxpbmVcbiAgICBpZiAoY29kZVBvaW50ID09PSAweDI4IHx8IGNvZGVQb2ludCA9PT0gMHhmZjA4KSB7XG4gICAgICAgIHBlbmFsdHkgKz0gNTA7XG4gICAgfVxuXG4gICAgLy8gUGVuYWxpemUgY2xvc2UgcGFyZW50aGVzaXMgYXQgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICBpZiAobmV4dENvZGVQb2ludCA9PT0gMHgyOSB8fCBuZXh0Q29kZVBvaW50ID09PSAweGZmMDkpIHtcbiAgICAgICAgcGVuYWx0eSArPSA1MDtcbiAgICB9XG4gICAgcmV0dXJuIHBlbmFsdHk7XG59XG5cbnR5cGUgQnJlYWsgPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICB4OiBudW1iZXIsXG4gICAgcHJpb3JCcmVhazogP0JyZWFrLFxuICAgIGJhZG5lc3M6IG51bWJlclxufTtcblxuZnVuY3Rpb24gZXZhbHVhdGVCcmVhayhicmVha0luZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrWDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxCcmVha3M6IEFycmF5PEJyZWFrPixcbiAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RCcmVhazogYm9vbGVhbik6IEJyZWFrIHtcbiAgICAvLyBXZSBjb3VsZCBza2lwIGV2YWx1YXRpbmcgYnJlYWtzIHdoZXJlIHRoZSBsaW5lIGxlbmd0aCAoYnJlYWtYIC0gcHJpb3JCcmVhay54KSA+IG1heFdpZHRoXG4gICAgLy8gIC4uLmJ1dCBpbiBmYWN0IHdlIGFsbG93IGxpbmVzIGxvbmdlciB0aGFuIG1heFdpZHRoIChpZiB0aGVyZSdzIG5vIGJyZWFrIHBvaW50cylcbiAgICAvLyAgLi4uYW5kIHdoZW4gdGFyZ2V0V2lkdGggYW5kIG1heFdpZHRoIGFyZSBjbG9zZSwgc3RyaWN0bHkgZW5mb3JjaW5nIG1heFdpZHRoIGNhbiBnaXZlXG4gICAgLy8gICAgIG1vcmUgbG9wc2lkZWQgcmVzdWx0cy5cblxuICAgIGxldCBiZXN0UHJpb3JCcmVhazogP0JyZWFrID0gbnVsbDtcbiAgICBsZXQgYmVzdEJyZWFrQmFkbmVzcyA9IGNhbGN1bGF0ZUJhZG5lc3MoYnJlYWtYLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspO1xuXG4gICAgZm9yIChjb25zdCBwb3RlbnRpYWxCcmVhayBvZiBwb3RlbnRpYWxCcmVha3MpIHtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gYnJlYWtYIC0gcG90ZW50aWFsQnJlYWsueDtcbiAgICAgICAgY29uc3QgYnJlYWtCYWRuZXNzID1cbiAgICAgICAgICAgIGNhbGN1bGF0ZUJhZG5lc3MobGluZVdpZHRoLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspICsgcG90ZW50aWFsQnJlYWsuYmFkbmVzcztcbiAgICAgICAgaWYgKGJyZWFrQmFkbmVzcyA8PSBiZXN0QnJlYWtCYWRuZXNzKSB7XG4gICAgICAgICAgICBiZXN0UHJpb3JCcmVhayA9IHBvdGVudGlhbEJyZWFrO1xuICAgICAgICAgICAgYmVzdEJyZWFrQmFkbmVzcyA9IGJyZWFrQmFkbmVzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4OiBicmVha0luZGV4LFxuICAgICAgICB4OiBicmVha1gsXG4gICAgICAgIHByaW9yQnJlYWs6IGJlc3RQcmlvckJyZWFrLFxuICAgICAgICBiYWRuZXNzOiBiZXN0QnJlYWtCYWRuZXNzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGVhc3RCYWRCcmVha3MobGFzdExpbmVCcmVhazogP0JyZWFrKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKCFsYXN0TGluZUJyZWFrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGxlYXN0QmFkQnJlYWtzKGxhc3RMaW5lQnJlYWsucHJpb3JCcmVhaykuY29uY2F0KGxhc3RMaW5lQnJlYWsuaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dDogVGFnZ2VkU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFBsYWNlbWVudDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKHN5bWJvbFBsYWNlbWVudCAhPT0gJ3BvaW50JylcbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgaWYgKCFsb2dpY2FsSW5wdXQpXG4gICAgICAgIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHBvdGVudGlhbExpbmVCcmVha3MgPSBbXTtcbiAgICBjb25zdCB0YXJnZXRXaWR0aCA9IGRldGVybWluZUF2ZXJhZ2VMaW5lV2lkdGgobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBsYXlvdXRUZXh0U2l6ZSk7XG5cbiAgICBjb25zdCBoYXNTZXJ2ZXJTdWdnZXN0ZWRCcmVha3BvaW50cyA9IGxvZ2ljYWxJbnB1dC50ZXh0LmluZGV4T2YoXCJcXHUyMDBiXCIpID49IDA7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbG9naWNhbElucHV0LmdldFNlY3Rpb24oaSk7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpKTtcbiAgICAgICAgaWYgKCF3aGl0ZXNwYWNlW2NvZGVQb2ludF0pIGN1cnJlbnRYICs9IGdldEdseXBoQWR2YW5jZShjb2RlUG9pbnQsIHNlY3Rpb24sIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3BhY2luZywgbGF5b3V0VGV4dFNpemUpO1xuXG4gICAgICAgIC8vIElkZW9ncmFwaGljIGNoYXJhY3RlcnMsIHNwYWNlcywgYW5kIHdvcmQtYnJlYWtpbmcgcHVuY3R1YXRpb24gdGhhdCBvZnRlbiBhcHBlYXIgd2l0aG91dFxuICAgICAgICAvLyBzdXJyb3VuZGluZyBzcGFjZXMuXG4gICAgICAgIGlmICgoaSA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCBpZGVvZ3JhcGhpY0JyZWFrID0gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY29kZVBvaW50KTtcbiAgICAgICAgICAgIGlmIChicmVha2FibGVbY29kZVBvaW50XSB8fCBpZGVvZ3JhcGhpY0JyZWFrIHx8IHNlY3Rpb24uaW1hZ2VOYW1lKSB7XG5cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQnJlYWsoXG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGVuYWx0eShjb2RlUG9pbnQsIGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpICsgMSksIGlkZW9ncmFwaGljQnJlYWsgJiYgaGFzU2VydmVyU3VnZ2VzdGVkQnJlYWtwb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsZWFzdEJhZEJyZWFrcyhcbiAgICAgICAgZXZhbHVhdGVCcmVhayhcbiAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSxcbiAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRydWUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcjogU3ltYm9sQW5jaG9yKSB7XG4gICAgbGV0IGhvcml6b250YWxBbGlnbiA9IDAuNSwgdmVydGljYWxBbGlnbiA9IDAuNTtcblxuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICB2ZXJ0aWNhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdmVydGljYWxBbGlnbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufTtcbn1cblxuZnVuY3Rpb24gc2hhcGVMaW5lcyhzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFuY2hvcjogU3ltYm9sQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0SnVzdGlmeTogVGV4dEp1c3RpZnksXG4gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiAxIHwgMixcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZVRoaXNab29tOiBudW1iZXIpIHtcblxuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IFNIQVBJTkdfREVGQVVMVF9PRkZTRVQ7XG5cbiAgICBsZXQgbWF4TGluZUxlbmd0aCA9IDA7XG4gICAgbGV0IG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgY29uc3QganVzdGlmeSA9XG4gICAgICAgIHRleHRKdXN0aWZ5ID09PSAncmlnaHQnID8gMSA6XG4gICAgICAgIHRleHRKdXN0aWZ5ID09PSAnbGVmdCcgPyAwIDogMC41O1xuXG4gICAgbGV0IGxpbmVJbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGxpbmUudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IGxpbmVNYXhTY2FsZSA9IGxpbmUuZ2V0TWF4U2NhbGUoKTtcbiAgICAgICAgY29uc3QgbWF4TGluZU9mZnNldCA9IChsaW5lTWF4U2NhbGUgLSAxKSAqIE9ORV9FTTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25lZExpbmUgPSB7cG9zaXRpb25lZEdseXBoczogW10sIGxpbmVPZmZzZXQ6IDB9O1xuICAgICAgICBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lc1tsaW5lSW5kZXhdID0gcG9zaXRpb25lZExpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaHMgPSBwb3NpdGlvbmVkTGluZS5wb3NpdGlvbmVkR2x5cGhzO1xuICAgICAgICBsZXQgbGluZU9mZnNldCA9IDAuMDtcblxuICAgICAgICBpZiAoIWxpbmUubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHkgKz0gbGluZUhlaWdodDsgLy8gU3RpbGwgbmVlZCBhIGxpbmUgZmVlZCBhZnRlciBlbXB0eSBsaW5lXG4gICAgICAgICAgICArK2xpbmVJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsaW5lLmdldFNlY3Rpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBsaW5lLmdldFNlY3Rpb25JbmRleChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxpbmUuZ2V0Q2hhckNvZGUoaSk7XG4gICAgICAgICAgICBsZXQgYmFzZWxpbmVPZmZzZXQgPSAwLjA7XG4gICAgICAgICAgICBsZXQgbWV0cmljcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVjdCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgaW1hZ2VOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbEFkdmFuY2UgPSBPTkVfRU07XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbCA9ICEod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHxcbiAgICAgICAgICAgICAgICAvLyBEb24ndCB2ZXJ0aWNhbGl6ZSBnbHlwaHMgdGhhdCBoYXZlIG5vIHVwcmlnaHQgb3JpZW50YXRpb24gaWYgdmVydGljYWwgcGxhY2VtZW50IGlzIGRpc2FibGVkLlxuICAgICAgICAgICAgICAgICghYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiAhY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNvZGVQb2ludCkpIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgdmVydGljYWwgcGxhY2VtZW50IGlzIGVuYWJsZWQsIGRvbid0IHZlcnRpY2FsaXplIGdseXBocyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gYXJlIGZyb20gY29tcGxleCB0ZXh0IGxheW91dCBzY3JpcHQsIG9yIHdoaXRlc3BhY2VzLlxuICAgICAgICAgICAgICAgIChhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICh3aGl0ZXNwYWNlW2NvZGVQb2ludF0gfHwgY2hhckluQ29tcGxleFNoYXBpbmdTY3JpcHQoY29kZVBvaW50KSkpKTtcblxuICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdseXBoUG9zaXRpb25zW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaFBvc2l0aW9uID0gcG9zaXRpb25zICYmIHBvc2l0aW9uc1tjb2RlUG9pbnRdO1xuICAgICAgICAgICAgICAgIGlmIChnbHlwaFBvc2l0aW9uICYmIGdseXBoUG9zaXRpb24ucmVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZWN0ID0gZ2x5cGhQb3NpdGlvbi5yZWN0O1xuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzID0gZ2x5cGhQb3NpdGlvbi5tZXRyaWNzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IGdseXBoTWFwW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaHMgJiYgZ2x5cGhzW2NvZGVQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzID0gZ2x5cGgubWV0cmljcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBiYXNlbGluZSwgYnV0IHNpbmNlIHdlJ3JlIGxheWluZyBvdXRcbiAgICAgICAgICAgICAgICAvLyBhdCAyNCBwb2ludHMsIHdlIGNhbiBjYWxjdWxhdGUgaG93IG11Y2ggaXQgd2lsbCBtb3ZlIHdoZW5cbiAgICAgICAgICAgICAgICAvLyB3ZSBzY2FsZSB1cCBvciBkb3duLlxuICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0ID0gKGxpbmVNYXhTY2FsZSAtIHNlY3Rpb24uc2NhbGUpICogT05FX0VNO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVBvc2l0aW9uID0gaW1hZ2VQb3NpdGlvbnNbc2VjdGlvbi5pbWFnZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghaW1hZ2VQb3NpdGlvbikgY29udGludWU7XG4gICAgICAgICAgICAgICAgaW1hZ2VOYW1lID0gc2VjdGlvbi5pbWFnZU5hbWU7XG4gICAgICAgICAgICAgICAgc2hhcGluZy5pY29uc0luVGV4dCA9IHNoYXBpbmcuaWNvbnNJblRleHQgfHwgdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWN0ID0gaW1hZ2VQb3NpdGlvbi5wYWRkZWRSZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSBpbWFnZVBvc2l0aW9uLmRpc3BsYXlTaXplO1xuICAgICAgICAgICAgICAgIC8vIElmIG5lZWRlZCwgYWxsb3cgdG8gc2V0IHNjYWxlIGZhY3RvciBmb3IgYW4gaW1hZ2UgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBhbGlhcyBcImltYWdlLXNjYWxlXCIgdGhhdCBjb3VsZCBiZSBhbGlhcyBmb3IgXCJmb250LXNjYWxlXCJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIEZvcm1hdHRlZFNlY3Rpb24gaXMgYW4gaW1hZ2Ugc2VjdGlvbi5cbiAgICAgICAgICAgICAgICBzZWN0aW9uLnNjYWxlID0gc2VjdGlvbi5zY2FsZSAqIE9ORV9FTSAvIGxheW91dFRleHRTaXplVGhpc1pvb207XG5cbiAgICAgICAgICAgICAgICBtZXRyaWNzID0ge3dpZHRoOiBzaXplWzBdLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVbMV0sXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogLUdMWVBIX1BCRl9CT1JERVIsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2U6IHZlcnRpY2FsID8gc2l6ZVsxXSA6IHNpemVbMF19O1xuXG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBFTSBhbmQgYW4gaW1hZ2Ugc2l6ZS5cbiAgICAgICAgICAgICAgICAvLyBBbGlnbnMgYm90dG9tIG9mIGFuIGltYWdlIHRvIGEgYmFzZWxpbmUgbGV2ZWwuXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VPZmZzZXQgPSBPTkVfRU0gLSBzaXplWzFdICogc2VjdGlvbi5zY2FsZTtcbiAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldCA9IG1heExpbmVPZmZzZXQgKyBpbWFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFkdmFuY2UgPSBtZXRyaWNzLmFkdmFuY2U7XG5cbiAgICAgICAgICAgICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gaGVpZ2h0IG9mIGFuIGltYWdlIGFuZCBvbmUgRU0gYXQgbWF4IGxpbmUgc2NhbGUuXG4gICAgICAgICAgICAgICAgLy8gUHVzaGVzIGN1cnJlbnQgbGluZSBkb3duIGlmIGFuIGltYWdlIHNpemUgaXMgb3ZlciAxIEVNIGF0IG1heCBsaW5lIHNjYWxlLlxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHZlcnRpY2FsID8gc2l6ZVswXSAqIHNlY3Rpb24uc2NhbGUgLSBPTkVfRU0gKiBsaW5lTWF4U2NhbGUgOlxuICAgICAgICAgICAgICAgICAgICBzaXplWzFdICogc2VjdGlvbi5zY2FsZSAtIE9ORV9FTSAqIGxpbmVNYXhTY2FsZTtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPiBsaW5lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZEdseXBocy5wdXNoKHtnbHlwaDogY29kZVBvaW50LCBpbWFnZU5hbWUsIHgsIHk6IHkgKyBiYXNlbGluZU9mZnNldCwgdmVydGljYWwsIHNjYWxlOiBzZWN0aW9uLnNjYWxlLCBmb250U3RhY2s6IHNlY3Rpb24uZm9udFN0YWNrLCBzZWN0aW9uSW5kZXgsIG1ldHJpY3MsIHJlY3R9KTtcbiAgICAgICAgICAgICAgICB4ICs9IG1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaGFwaW5nLnZlcnRpY2FsaXphYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGhzLnB1c2goe2dseXBoOiBjb2RlUG9pbnQsIGltYWdlTmFtZSwgeCwgeTogeSArIGJhc2VsaW5lT2Zmc2V0LCB2ZXJ0aWNhbCwgc2NhbGU6IHNlY3Rpb24uc2NhbGUsIGZvbnRTdGFjazogc2VjdGlvbi5mb250U3RhY2ssIHNlY3Rpb25JbmRleCwgbWV0cmljcywgcmVjdH0pO1xuICAgICAgICAgICAgICAgIHggKz0gdmVydGljYWxBZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGp1c3RpZnkgaWYgd2UgcGxhY2VkIGF0IGxlYXN0IG9uZSBnbHlwaFxuICAgICAgICBpZiAocG9zaXRpb25lZEdseXBocy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSB4IC0gc3BhY2luZztcbiAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBNYXRoLm1heChsaW5lTGVuZ3RoLCBtYXhMaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgIGp1c3RpZnlMaW5lKHBvc2l0aW9uZWRHbHlwaHMsIDAsIHBvc2l0aW9uZWRHbHlwaHMubGVuZ3RoIC0gMSwganVzdGlmeSwgbGluZU9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gMDtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZU1heFNjYWxlICsgbGluZU9mZnNldDtcbiAgICAgICAgcG9zaXRpb25lZExpbmUubGluZU9mZnNldCA9IE1hdGgubWF4KGxpbmVPZmZzZXQsIG1heExpbmVPZmZzZXQpO1xuICAgICAgICB5ICs9IGN1cnJlbnRMaW5lSGVpZ2h0O1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoY3VycmVudExpbmVIZWlnaHQsIG1heExpbmVIZWlnaHQpO1xuICAgICAgICArK2xpbmVJbmRleDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveCBhbmQganVzdGlmeSAvIGFsaWduIHRleHQgYmxvY2suXG4gICAgY29uc3QgaGVpZ2h0ID0geSAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQ7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQodGV4dEFuY2hvcik7XG4gICAgYWxpZ24oc2hhcGluZy5wb3NpdGlvbmVkTGluZXMsIGp1c3RpZnksIGhvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbiwgbWF4TGluZUxlbmd0aCwgbWF4TGluZUhlaWdodCwgbGluZUhlaWdodCwgaGVpZ2h0LCBsaW5lcy5sZW5ndGgpO1xuXG4gICAgc2hhcGluZy50b3AgKz0gLXZlcnRpY2FsQWxpZ24gKiBoZWlnaHQ7XG4gICAgc2hhcGluZy5ib3R0b20gPSBzaGFwaW5nLnRvcCArIGhlaWdodDtcbiAgICBzaGFwaW5nLmxlZnQgKz0gLWhvcml6b250YWxBbGlnbiAqIG1heExpbmVMZW5ndGg7XG4gICAgc2hhcGluZy5yaWdodCA9IHNoYXBpbmcubGVmdCArIG1heExpbmVMZW5ndGg7XG59XG5cbi8vIGp1c3RpZnkgcmlnaHQgPSAxLCBsZWZ0ID0gMCwgY2VudGVyID0gMC41XG5mdW5jdGlvbiBqdXN0aWZ5TGluZShwb3NpdGlvbmVkR2x5cGhzOiBBcnJheTxQb3NpdGlvbmVkR2x5cGg+LFxuICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAganVzdGlmeTogMSB8IDAgfCAwLjUsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBudW1iZXIpIHtcbiAgICBpZiAoIWp1c3RpZnkgJiYgIWxpbmVPZmZzZXQpXG4gICAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGxhc3RQb3NpdGlvbmVkR2x5cGggPSBwb3NpdGlvbmVkR2x5cGhzW2VuZF07XG4gICAgY29uc3QgbGFzdEFkdmFuY2UgPSBsYXN0UG9zaXRpb25lZEdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIGxhc3RQb3NpdGlvbmVkR2x5cGguc2NhbGU7XG4gICAgY29uc3QgbGluZUluZGVudCA9IChwb3NpdGlvbmVkR2x5cGhzW2VuZF0ueCArIGxhc3RBZHZhbmNlKSAqIGp1c3RpZnk7XG5cbiAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPD0gZW5kOyBqKyspIHtcbiAgICAgICAgcG9zaXRpb25lZEdseXBoc1tqXS54IC09IGxpbmVJbmRlbnQ7XG4gICAgICAgIHBvc2l0aW9uZWRHbHlwaHNbal0ueSArPSBsaW5lT2Zmc2V0O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWxpZ24ocG9zaXRpb25lZExpbmVzOiBBcnJheTxQb3NpdGlvbmVkTGluZT4sXG4gICAgICAgICAgICAgICBqdXN0aWZ5OiBudW1iZXIsXG4gICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGJsb2NrSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICBsaW5lQ291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IHNoaWZ0WCA9IChqdXN0aWZ5IC0gaG9yaXpvbnRhbEFsaWduKSAqIG1heExpbmVMZW5ndGg7XG4gICAgbGV0IHNoaWZ0WSA9IDA7XG5cbiAgICBpZiAobWF4TGluZUhlaWdodCAhPT0gbGluZUhlaWdodCkge1xuICAgICAgICBzaGlmdFkgPSAtYmxvY2tIZWlnaHQgKiB2ZXJ0aWNhbEFsaWduIC0gU0hBUElOR19ERUZBVUxUX09GRlNFVDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaGlmdFkgPSAoLXZlcnRpY2FsQWxpZ24gKiBsaW5lQ291bnQgKyAwLjUpICogbGluZUhlaWdodDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcG9zaXRpb25lZExpbmVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9zaXRpb25lZEdseXBoIG9mIGxpbmUucG9zaXRpb25lZEdseXBocykge1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoLnggKz0gc2hpZnRYO1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoLnkgKz0gc2hpZnRZO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmVkSWNvbiA9IHtcbiAgICBpbWFnZTogSW1hZ2VQb3NpdGlvbixcbiAgICB0b3A6IG51bWJlcixcbiAgICBib3R0b206IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgcmlnaHQ6IG51bWJlcixcbiAgICBjb2xsaXNpb25QYWRkaW5nPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbmZ1bmN0aW9uIHNoYXBlSWNvbihpbWFnZTogSW1hZ2VQb3NpdGlvbiwgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSwgaWNvbkFuY2hvcjogU3ltYm9sQW5jaG9yKTogUG9zaXRpb25lZEljb24ge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGljb25BbmNob3IpO1xuICAgIGNvbnN0IGR4ID0gaWNvbk9mZnNldFswXTtcbiAgICBjb25zdCBkeSA9IGljb25PZmZzZXRbMV07XG4gICAgY29uc3QgeDEgPSBkeCAtIGltYWdlLmRpc3BsYXlTaXplWzBdICogaG9yaXpvbnRhbEFsaWduO1xuICAgIGNvbnN0IHgyID0geDEgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICBjb25zdCB5MSA9IGR5IC0gaW1hZ2UuZGlzcGxheVNpemVbMV0gKiB2ZXJ0aWNhbEFsaWduO1xuICAgIGNvbnN0IHkyID0geTEgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICByZXR1cm4ge2ltYWdlLCB0b3A6IHkxLCBib3R0b206IHkyLCBsZWZ0OiB4MSwgcmlnaHQ6IHgyfTtcbn1cblxuZnVuY3Rpb24gZml0SWNvblRvVGV4dChzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiwgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciBdLFxuICAgICAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbIG51bWJlciwgbnVtYmVyIF0sIGZvbnRTY2FsZTogbnVtYmVyKTogUG9zaXRpb25lZEljb24ge1xuICAgIGFzc2VydCh0ZXh0Rml0ICE9PSAnbm9uZScpO1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhZGRpbmcpICYmIHBhZGRpbmcubGVuZ3RoID09PSA0KTtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShpY29uT2Zmc2V0KSAmJiBpY29uT2Zmc2V0Lmxlbmd0aCA9PT0gMik7XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG5cbiAgICBsZXQgY29sbGlzaW9uUGFkZGluZztcbiAgICBpZiAoaW1hZ2UuY29udGVudCkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gaW1hZ2UuY29udGVudDtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgY29sbGlzaW9uUGFkZGluZyA9IFtcbiAgICAgICAgICAgIGNvbnRlbnRbMF0gLyBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgY29udGVudFsxXSAvIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICBpbWFnZS5kaXNwbGF5U2l6ZVswXSAtIGNvbnRlbnRbMl0gLyBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgaW1hZ2UuZGlzcGxheVNpemVbMV0gLSBjb250ZW50WzNdIC8gcGl4ZWxSYXRpb1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8vIFdlIGRvbid0IHJlc3BlY3QgdGhlIGljb24tYW5jaG9yLCBiZWNhdXNlIGljb24tdGV4dC1maXQgaXMgc2V0LiBJbnN0ZWFkLFxuICAgIC8vIHRoZSBpY29uIHdpbGwgYmUgY2VudGVyZWQgb24gdGhlIHRleHQsIHRoZW4gc3RyZXRjaGVkIGluIHRoZSBnaXZlblxuICAgIC8vIGRpbWVuc2lvbnMuXG5cbiAgICBjb25zdCB0ZXh0TGVmdCA9IHNoYXBlZFRleHQubGVmdCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCB0ZXh0UmlnaHQgPSBzaGFwZWRUZXh0LnJpZ2h0ICogZm9udFNjYWxlO1xuXG4gICAgbGV0IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDtcbiAgICBpZiAodGV4dEZpdCA9PT0gJ3dpZHRoJyB8fCB0ZXh0Rml0ID09PSAnYm90aCcpIHtcbiAgICAgICAgLy8gU3RyZXRjaGVkIGhvcml6b250YWxseSB0byB0aGUgdGV4dCB3aWR0aFxuICAgICAgICBsZWZ0ID0gaWNvbk9mZnNldFswXSArIHRleHRMZWZ0IC0gcGFkZGluZ1szXTtcbiAgICAgICAgcmlnaHQgPSBpY29uT2Zmc2V0WzBdICsgdGV4dFJpZ2h0ICsgcGFkZGluZ1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDZW50ZXJlZCBvbiB0aGUgdGV4dFxuICAgICAgICBsZWZ0ID0gaWNvbk9mZnNldFswXSArICh0ZXh0TGVmdCArIHRleHRSaWdodCAtIGltYWdlLmRpc3BsYXlTaXplWzBdKSAvIDI7XG4gICAgICAgIHJpZ2h0ID0gbGVmdCArIGltYWdlLmRpc3BsYXlTaXplWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRUb3AgPSBzaGFwZWRUZXh0LnRvcCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCB0ZXh0Qm90dG9tID0gc2hhcGVkVGV4dC5ib3R0b20gKiBmb250U2NhbGU7XG4gICAgaWYgKHRleHRGaXQgPT09ICdoZWlnaHQnIHx8IHRleHRGaXQgPT09ICdib3RoJykge1xuICAgICAgICAvLyBTdHJldGNoZWQgdmVydGljYWxseSB0byB0aGUgdGV4dCBoZWlnaHRcbiAgICAgICAgdG9wID0gaWNvbk9mZnNldFsxXSArIHRleHRUb3AgLSBwYWRkaW5nWzBdO1xuICAgICAgICBib3R0b20gPSBpY29uT2Zmc2V0WzFdICsgdGV4dEJvdHRvbSArIHBhZGRpbmdbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2VudGVyZWQgb24gdGhlIHRleHRcbiAgICAgICAgdG9wID0gaWNvbk9mZnNldFsxXSArICh0ZXh0VG9wICsgdGV4dEJvdHRvbSAtIGltYWdlLmRpc3BsYXlTaXplWzFdKSAvIDI7XG4gICAgICAgIGJvdHRvbSA9IHRvcCArIGltYWdlLmRpc3BsYXlTaXplWzFdO1xuICAgIH1cblxuICAgIHJldHVybiB7aW1hZ2UsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgY29sbGlzaW9uUGFkZGluZ307XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmNsYXNzIEFuY2hvciBleHRlbmRzIFBvaW50IHtcbiAgICBhbmdsZTogYW55O1xuICAgIHNlZ21lbnQ6IG51bWJlciB8IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlciwgYW5nbGU6IG51bWJlciwgc2VnbWVudD86IG51bWJlcikge1xuICAgICAgICBzdXBlcih4LCB5KTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlO1xuICAgICAgICBpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlZ21lbnQgPSBzZWdtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5jaG9yKHRoaXMueCwgdGhpcy55LCB0aGlzLmFuZ2xlLCB0aGlzLnNlZ21lbnQpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0FuY2hvcicsIEFuY2hvcik7XG5cbmV4cG9ydCBkZWZhdWx0IEFuY2hvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtQcm9wZXJ0eVZhbHVlLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25UeXBlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuXG5jb25zdCBTSVpFX1BBQ0tfRkFDVE9SID0gMTI4O1xuXG5leHBvcnQge2dldFNpemVEYXRhLCBldmFsdWF0ZVNpemVGb3JGZWF0dXJlLCBldmFsdWF0ZVNpemVGb3Jab29tLCBTSVpFX1BBQ0tfRkFDVE9SfTtcblxuZXhwb3J0IHR5cGUgU2l6ZURhdGEgPSB7XG4gICAga2luZDogJ2NvbnN0YW50JyxcbiAgICBsYXlvdXRTaXplOiBudW1iZXJcbn0gfCB7XG4gICAga2luZDogJ3NvdXJjZSdcbn0gfCB7XG4gICAga2luZDogJ2NhbWVyYScsXG4gICAgbWluWm9vbTogbnVtYmVyLFxuICAgIG1heFpvb206IG51bWJlcixcbiAgICBtaW5TaXplOiBudW1iZXIsXG4gICAgbWF4U2l6ZTogbnVtYmVyLFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn0gfCB7XG4gICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgbWluWm9vbTogbnVtYmVyLFxuICAgIG1heFpvb206IG51bWJlcixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59O1xuXG4vLyBGb3Ige3RleHQsaWNvbn0tc2l6ZSwgZ2V0IHRoZSBidWNrZXQtbGV2ZWwgZGF0YSB0aGF0IHdpbGwgYmUgbmVlZGVkIGJ5XG4vLyB0aGUgcGFpbnRlciB0byBzZXQgc3ltYm9sLXNpemUtcmVsYXRlZCB1bmlmb3Jtc1xuZnVuY3Rpb24gZ2V0U2l6ZURhdGEodGlsZVpvb206IG51bWJlciwgdmFsdWU6IFByb3BlcnR5VmFsdWU8bnVtYmVyLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPj4pOiBTaXplRGF0YSB7XG4gICAgY29uc3Qge2V4cHJlc3Npb259ID0gdmFsdWU7XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aWxlWm9vbSArIDEpKTtcbiAgICAgICAgcmV0dXJuIHtraW5kOiAnY29uc3RhbnQnLCBsYXlvdXRTaXplfTtcblxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICByZXR1cm4ge2tpbmQ6ICdzb3VyY2UnfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHt6b29tU3RvcHMsIGludGVycG9sYXRpb25UeXBlfSA9IGV4cHJlc3Npb247XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIGNvdmVyaW5nIHpvb20gc3RvcHMgZm9yIHpvb20tZGVwZW5kZW50IHZhbHVlc1xuICAgICAgICBsZXQgbG93ZXIgPSAwO1xuICAgICAgICB3aGlsZSAobG93ZXIgPCB6b29tU3RvcHMubGVuZ3RoICYmIHpvb21TdG9wc1tsb3dlcl0gPD0gdGlsZVpvb20pIGxvd2VyKys7XG4gICAgICAgIGxvd2VyID0gTWF0aC5tYXgoMCwgbG93ZXIgLSAxKTtcbiAgICAgICAgbGV0IHVwcGVyID0gbG93ZXI7XG4gICAgICAgIHdoaWxlICh1cHBlciA8IHpvb21TdG9wcy5sZW5ndGggJiYgem9vbVN0b3BzW3VwcGVyXSA8IHRpbGVab29tICsgMSkgdXBwZXIrKztcbiAgICAgICAgdXBwZXIgPSBNYXRoLm1pbih6b29tU3RvcHMubGVuZ3RoIC0gMSwgdXBwZXIpO1xuXG4gICAgICAgIGNvbnN0IG1pblpvb20gPSB6b29tU3RvcHNbbG93ZXJdO1xuICAgICAgICBjb25zdCBtYXhab29tID0gem9vbVN0b3BzW3VwcGVyXTtcblxuICAgICAgICAvLyBXZSdkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgQ2FtZXJhRXhwcmVzc2lvbiBvciBDb21wb3NpdGVFeHByZXNzaW9uIGluIHRoZXNlXG4gICAgICAgIC8vIHJldHVybiB0eXBlcyByYXRoZXIgdGhhbiBFeHByZXNzaW9uU3BlY2lmaWNhdGlvbiwgYnV0IHRoZSBmb3JtZXIgYXJlIG5vdFxuICAgICAgICAvLyB0cmFuc2ZlcnJhYmxlIGFjcm9zcyBXZWIgV29ya2VyIGJvdW5kYXJpZXMuXG4gICAgICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4ge2tpbmQ6ICdjb21wb3NpdGUnLCBtaW5ab29tLCBtYXhab29tLCBpbnRlcnBvbGF0aW9uVHlwZX07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb3IgY2FtZXJhIGZ1bmN0aW9ucywgYWxzbyBzYXZlIG9mZiB0aGUgZnVuY3Rpb24gdmFsdWVzXG4gICAgICAgIC8vIGV2YWx1YXRlZCBhdCB0aGUgY292ZXJpbmcgem9vbSBsZXZlbHNcbiAgICAgICAgY29uc3QgbWluU2l6ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pKTtcblxuICAgICAgICByZXR1cm4ge2tpbmQ6ICdjYW1lcmEnLCBtaW5ab29tLCBtYXhab29tLCBtaW5TaXplLCBtYXhTaXplLCBpbnRlcnBvbGF0aW9uVHlwZX07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBldmFsdWF0ZVNpemVGb3JGZWF0dXJlKHNpemVEYXRhOiBTaXplRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VTaXplLCB1U2l6ZVR9OiB7IHVTaXplOiBudW1iZXIsIHVTaXplVDogbnVtYmVyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsb3dlclNpemUsIHVwcGVyU2l6ZX06IHsgbG93ZXJTaXplOiBudW1iZXIsIHVwcGVyU2l6ZTogbnVtYmVyfSkge1xuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICByZXR1cm4gbG93ZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUjtcbiAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShsb3dlclNpemUgLyBTSVpFX1BBQ0tfRkFDVE9SLCB1cHBlclNpemUgLyBTSVpFX1BBQ0tfRkFDVE9SLCB1U2l6ZVQpO1xuICAgIH1cbiAgICByZXR1cm4gdVNpemU7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGE6IFNpemVEYXRhLCB6b29tOiBudW1iZXIpIHtcbiAgICBsZXQgdVNpemVUID0gMDtcbiAgICBsZXQgdVNpemUgPSAwO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgdVNpemUgPSBzaXplRGF0YS5sYXlvdXRTaXplO1xuXG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kICE9PSAnc291cmNlJykge1xuICAgICAgICBjb25zdCB7aW50ZXJwb2xhdGlvblR5cGUsIG1pblpvb20sIG1heFpvb219ID0gc2l6ZURhdGE7XG5cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY291bGQgZ2V0IHRoZSBleGFjdCB2YWx1ZSBvZiB0aGUgY2FtZXJhIGZ1bmN0aW9uXG4gICAgICAgIC8vIGF0IHogPSB0ci56b29tLCB3ZSBpbnRlbnRpb25hbGx5IGRvIG5vdDogaW5zdGVhZCwgd2UgaW50ZXJwb2xhdGVcbiAgICAgICAgLy8gYmV0d2VlbiB0aGUgY2FtZXJhIGZ1bmN0aW9uIHZhbHVlcyBhdCBhIHBhaXIgb2Ygem9vbSBzdG9wcyBjb3ZlcmluZ1xuICAgICAgICAvLyBbdGlsZVpvb20sIHRpbGVab29tICsgMV0gaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoaXNcbiAgICAgICAgLy8gcmVzdHJpY3Rpb24gb24gY29tcG9zaXRlIGZ1bmN0aW9uc1xuICAgICAgICBjb25zdCB0ID0gIWludGVycG9sYXRpb25UeXBlID8gMCA6IGNsYW1wKFxuICAgICAgICAgICAgSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3RvcihpbnRlcnBvbGF0aW9uVHlwZSwgem9vbSwgbWluWm9vbSwgbWF4Wm9vbSksIDAsIDEpO1xuXG4gICAgICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgdVNpemUgPSBpbnRlcnBvbGF0ZShzaXplRGF0YS5taW5TaXplLCBzaXplRGF0YS5tYXhTaXplLCB0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVTaXplVCA9IHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge3VTaXplVCwgdVNpemV9O1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgY2hlY2tNYXhBbmdsZTtcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG4vKipcbiAqIExhYmVscyBwbGFjZWQgYXJvdW5kIHJlYWxseSBzaGFycCBhbmdsZXMgYXJlbid0IHJlYWRhYmxlLiBDaGVjayBpZiBhbnlcbiAqIHBhcnQgb2YgdGhlIHBvdGVudGlhbCBsYWJlbCBoYXMgYSBjb21iaW5lZCBhbmdsZSB0aGF0IGlzIHRvbyBiaWcuXG4gKlxuICogQHBhcmFtIGxpbmVcbiAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IG9uIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gKiBAcGFyYW0gbGFiZWxMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgaW4gZ2VvbWV0cnkgdW5pdHMuXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBUaGUgY2hlY2sgZmFpbHMgaWYgdGhlIGNvbWJpbmVkIGFuZ2xlcyB3aXRoaW4gYSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgaXMgYHdpbmRvd1NpemVgIGxvbmcgaXMgdG9vIGJpZy5cbiAqIEBwYXJhbSBtYXhBbmdsZSBUaGUgbWF4aW11bSBjb21iaW5lZCBhbmdsZSB0aGF0IGFueSB3aW5kb3cgYWxvbmcgdGhlIGxhYmVsIGlzIGFsbG93ZWQgdG8gaGF2ZS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGJlIHBsYWNlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tNYXhBbmdsZShsaW5lOiBBcnJheTxQb2ludD4sIGFuY2hvcjogQW5jaG9yLCBsYWJlbExlbmd0aDogbnVtYmVyLCB3aW5kb3dTaXplOiBudW1iZXIsIG1heEFuZ2xlOiBudW1iZXIpIHtcblxuICAgIC8vIGhvcml6b250YWwgbGFiZWxzIGFsd2F5cyBwYXNzXG4gICAgaWYgKGFuY2hvci5zZWdtZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgbGV0IHAgPSBhbmNob3I7XG4gICAgbGV0IGluZGV4ID0gYW5jaG9yLnNlZ21lbnQgKyAxO1xuICAgIGxldCBhbmNob3JEaXN0YW5jZSA9IDA7XG5cbiAgICAvLyBtb3ZlIGJhY2t3YXJkcyBhbG9uZyB0aGUgbGluZSB0byB0aGUgZmlyc3Qgc2VnbWVudCB0aGUgbGFiZWwgYXBwZWFycyBvblxuICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSA+IC1sYWJlbExlbmd0aCAvIDIpIHtcbiAgICAgICAgaW5kZXgtLTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGFuY2hvckRpc3RhbmNlIC09IGxpbmVbaW5kZXhdLmRpc3QocCk7XG4gICAgICAgIHAgPSBsaW5lW2luZGV4XTtcbiAgICB9XG5cbiAgICBhbmNob3JEaXN0YW5jZSArPSBsaW5lW2luZGV4XS5kaXN0KGxpbmVbaW5kZXggKyAxXSk7XG4gICAgaW5kZXgrKztcblxuICAgIC8vIHN0b3JlIHJlY2VudCBjb3JuZXJzIGFuZCB0aGVpciB0b3RhbCBhbmdsZSBkaWZmZXJlbmNlXG4gICAgY29uc3QgcmVjZW50Q29ybmVycyA9IFtdO1xuICAgIGxldCByZWNlbnRBbmdsZURlbHRhID0gMDtcblxuICAgIC8vIG1vdmUgZm9yd2FyZHMgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgYW5kIGNoZWNrIGFuZ2xlcyBhbG9uZyB0aGUgd2F5XG4gICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIDwgbGFiZWxMZW5ndGggLyAyKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsaW5lW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGxpbmVbaW5kZXggKyAxXTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmICghbmV4dCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGxldCBhbmdsZURlbHRhID0gcHJldi5hbmdsZVRvKGN1cnJlbnQpIC0gY3VycmVudC5hbmdsZVRvKG5leHQpO1xuICAgICAgICAvLyByZXN0cmljdCBhbmdsZSB0byAtcGkuLnBpIHJhbmdlXG4gICAgICAgIGFuZ2xlRGVsdGEgPSBNYXRoLmFicygoKGFuZ2xlRGVsdGEgKyAzICogTWF0aC5QSSkgJSAoTWF0aC5QSSAqIDIpKSAtIE1hdGguUEkpO1xuXG4gICAgICAgIHJlY2VudENvcm5lcnMucHVzaCh7XG4gICAgICAgICAgICBkaXN0YW5jZTogYW5jaG9yRGlzdGFuY2UsXG4gICAgICAgICAgICBhbmdsZURlbHRhXG4gICAgICAgIH0pO1xuICAgICAgICByZWNlbnRBbmdsZURlbHRhICs9IGFuZ2xlRGVsdGE7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNvcm5lcnMgdGhhdCBhcmUgZmFyIGVub3VnaCBhd2F5IGZyb20gdGhlIGxpc3Qgb2YgcmVjZW50IGFuY2hvcnNcbiAgICAgICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIC0gcmVjZW50Q29ybmVyc1swXS5kaXN0YW5jZSA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHJlY2VudEFuZ2xlRGVsdGEgLT0gcmVjZW50Q29ybmVycy5zaGlmdCgpLmFuZ2xlRGVsdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgc3VtIG9mIGFuZ2xlcyB3aXRoaW4gdGhlIHdpbmRvdyBhcmVhIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gY2hlY2sgZmFpbHMuXG4gICAgICAgIGlmIChyZWNlbnRBbmdsZURlbHRhID4gbWF4QW5nbGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBhbmNob3JEaXN0YW5jZSArPSBjdXJyZW50LmRpc3QobmV4dCk7XG4gICAgfVxuXG4gICAgLy8gbm8gcGFydCBvZiB0aGUgbGluZSBoYWQgYW4gYW5nbGUgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQuIGNoZWNrIHBhc3Nlcy5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IGNoZWNrTWF4QW5nbGUgZnJvbSAnLi9jaGVja19tYXhfYW5nbGUnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbn0gZnJvbSAnLi9zaGFwaW5nJztcblxuZXhwb3J0IHtnZXRBbmNob3JzLCBnZXRDZW50ZXJBbmNob3J9O1xuXG5mdW5jdGlvbiBnZXRMaW5lTGVuZ3RoKGxpbmU6IEFycmF5PFBvaW50Pik6IG51bWJlciB7XG4gICAgbGV0IGxpbmVMZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZS5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgbGluZUxlbmd0aCArPSBsaW5lW2tdLmRpc3QobGluZVtrICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gbGluZUxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaGFwZWRUZXh0ID9cbiAgICAgICAgMyAvIDUgKiBnbHlwaFNpemUgKiBib3hTY2FsZSA6XG4gICAgICAgIDA7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQ6ID9TaGFwaW5nLCBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24pOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgc2hhcGVkVGV4dCA/IHNoYXBlZFRleHQucmlnaHQgLSBzaGFwZWRUZXh0LmxlZnQgOiAwLFxuICAgICAgICBzaGFwZWRJY29uID8gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdCA6IDApO1xufVxuXG5mdW5jdGlvbiBnZXRDZW50ZXJBbmNob3IobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogP1Bvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpIHtcbiAgICBjb25zdCBhbmdsZVdpbmRvd1NpemUgPSBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dCwgZ2x5cGhTaXplLCBib3hTY2FsZSk7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0LCBzaGFwZWRJY29uKSAqIGJveFNjYWxlO1xuXG4gICAgbGV0IHByZXZEaXN0YW5jZSA9IDA7XG4gICAgY29uc3QgY2VudGVyRGlzdGFuY2UgPSBnZXRMaW5lTGVuZ3RoKGxpbmUpIC8gMjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgICBjb25zdCBhID0gbGluZVtpXSxcbiAgICAgICAgICAgIGIgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICBjb25zdCBzZWdtZW50RGlzdGFuY2UgPSBhLmRpc3QoYik7XG5cbiAgICAgICAgaWYgKHByZXZEaXN0YW5jZSArIHNlZ21lbnREaXN0YW5jZSA+IGNlbnRlckRpc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBUaGUgY2VudGVyIGlzIG9uIHRoaXMgc2VnbWVudFxuICAgICAgICAgICAgY29uc3QgdCA9IChjZW50ZXJEaXN0YW5jZSAtIHByZXZEaXN0YW5jZSkgLyBzZWdtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgeCA9IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgICAgICB5ID0gaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGIuYW5nbGVUbyhhKSwgaSk7XG4gICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG4gICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldkRpc3RhbmNlICs9IHNlZ21lbnREaXN0YW5jZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEFuY2hvcnMobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB0aWxlRXh0ZW50OiBudW1iZXIpIHtcblxuICAgIC8vIFJlc2FtcGxlIGEgbGluZSB0byBnZXQgYW5jaG9yIHBvaW50cyBmb3IgbGFiZWxzIGFuZCBjaGVjayB0aGF0IGVhY2hcbiAgICAvLyBwb3RlbnRpYWwgbGFiZWwgcGFzc2VzIHRleHQtbWF4LWFuZ2xlIGNoZWNrIGFuZCBoYXMgZW5vdWdoIGZyb29tIHRvIGZpdFxuICAgIC8vIG9uIHRoZSBsaW5lLlxuXG4gICAgY29uc3QgYW5nbGVXaW5kb3dTaXplID0gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQsIGdseXBoU2l6ZSwgYm94U2NhbGUpO1xuICAgIGNvbnN0IHNoYXBlZExhYmVsTGVuZ3RoID0gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dCwgc2hhcGVkSWNvbik7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBzaGFwZWRMYWJlbExlbmd0aCAqIGJveFNjYWxlO1xuXG4gICAgLy8gSXMgdGhlIGxpbmUgY29udGludWVkIGZyb20gb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyeT9cbiAgICBjb25zdCBpc0xpbmVDb250aW51ZWQgPSBsaW5lWzBdLnggPT09IDAgfHwgbGluZVswXS54ID09PSB0aWxlRXh0ZW50IHx8IGxpbmVbMF0ueSA9PT0gMCB8fCBsaW5lWzBdLnkgPT09IHRpbGVFeHRlbnQ7XG5cbiAgICAvLyBJcyB0aGUgbGFiZWwgbG9uZywgcmVsYXRpdmUgdG8gdGhlIHNwYWNpbmc/XG4gICAgLy8gSWYgc28sIGFkanVzdCB0aGUgc3BhY2luZyBzbyB0aGVyZSBpcyBhbHdheXMgYSBtaW5pbXVtIHNwYWNlIG9mIGBzcGFjaW5nIC8gNGAgYmV0d2VlbiBsYWJlbCBlZGdlcy5cbiAgICBpZiAoc3BhY2luZyAtIGxhYmVsTGVuZ3RoIDwgc3BhY2luZyAvIDQpIHtcbiAgICAgICAgc3BhY2luZyA9IGxhYmVsTGVuZ3RoICsgc3BhY2luZyAvIDQ7XG4gICAgfVxuXG4gICAgLy8gT2Zmc2V0IHRoZSBmaXJzdCBhbmNob3IgYnk6XG4gICAgLy8gRWl0aGVyIGhhbGYgdGhlIGxhYmVsIGxlbmd0aCBwbHVzIGEgZml4ZWQgZXh0cmEgb2Zmc2V0IGlmIHRoZSBsaW5lIGlzIG5vdCBjb250aW51ZWRcbiAgICAvLyBPciBoYWxmIHRoZSBzcGFjaW5nIGlmIHRoZSBsaW5lIGlzIGNvbnRpbnVlZC5cblxuICAgIC8vIEZvciBub24tY29udGludWVkIGxpbmVzLCBhZGQgYSBiaXQgb2YgZml4ZWQgZXh0cmEgb2Zmc2V0IHRvIGF2b2lkIGNvbGxpc2lvbnMgYXQgVCBpbnRlcnNlY3Rpb25zLlxuICAgIGNvbnN0IGZpeGVkRXh0cmFPZmZzZXQgPSBnbHlwaFNpemUgKiAyO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gIWlzTGluZUNvbnRpbnVlZCA/XG4gICAgICAgICgoc2hhcGVkTGFiZWxMZW5ndGggLyAyICsgZml4ZWRFeHRyYU9mZnNldCkgKiBib3hTY2FsZSAqIG92ZXJzY2FsaW5nKSAlIHNwYWNpbmcgOlxuICAgICAgICAoc3BhY2luZyAvIDIgKiBvdmVyc2NhbGluZykgJSBzcGFjaW5nO1xuXG4gICAgcmV0dXJuIHJlc2FtcGxlKGxpbmUsIG9mZnNldCwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgZmFsc2UsIHRpbGVFeHRlbnQpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZShsaW5lLCBvZmZzZXQsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIHBsYWNlQXRNaWRkbGUsIHRpbGVFeHRlbnQpIHtcblxuICAgIGNvbnN0IGhhbGZMYWJlbExlbmd0aCA9IGxhYmVsTGVuZ3RoIC8gMjtcbiAgICBjb25zdCBsaW5lTGVuZ3RoID0gZ2V0TGluZUxlbmd0aChsaW5lKTtcblxuICAgIGxldCBkaXN0YW5jZSA9IDAsXG4gICAgICAgIG1hcmtlZERpc3RhbmNlID0gb2Zmc2V0IC0gc3BhY2luZztcblxuICAgIGxldCBhbmNob3JzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYSA9IGxpbmVbaV0sXG4gICAgICAgICAgICBiID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudERpc3QgPSBhLmRpc3QoYiksXG4gICAgICAgICAgICBhbmdsZSA9IGIuYW5nbGVUbyhhKTtcblxuICAgICAgICB3aGlsZSAobWFya2VkRGlzdGFuY2UgKyBzcGFjaW5nIDwgZGlzdGFuY2UgKyBzZWdtZW50RGlzdCkge1xuICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgKz0gc3BhY2luZztcblxuICAgICAgICAgICAgY29uc3QgdCA9IChtYXJrZWREaXN0YW5jZSAtIGRpc3RhbmNlKSAvIHNlZ21lbnREaXN0LFxuICAgICAgICAgICAgICAgIHggPSBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICAgICAgeSA9IGludGVycG9sYXRlKGEueSwgYi55LCB0KTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSB0aWxlIGJvdW5kYXJpZXMgYW5kIHRoYXRcbiAgICAgICAgICAgIC8vIHRoZSBsYWJlbCB3b3VsZCBmaXQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgLy8gaWYgcGxhY2VkIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgICAgICBpZiAoeCA+PSAwICYmIHggPCB0aWxlRXh0ZW50ICYmIHkgPj0gMCAmJiB5IDwgdGlsZUV4dGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXJrZWREaXN0YW5jZSAtIGhhbGZMYWJlbExlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlICsgaGFsZkxhYmVsTGVuZ3RoIDw9IGxpbmVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGFuZ2xlLCBpKTtcbiAgICAgICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaChhbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3RhbmNlICs9IHNlZ21lbnREaXN0O1xuICAgIH1cblxuICAgIGlmICghcGxhY2VBdE1pZGRsZSAmJiAhYW5jaG9ycy5sZW5ndGggJiYgIWlzTGluZUNvbnRpbnVlZCkge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXR0ZW1wdCBhdCBmaW5kaW5nIGFuY2hvcnMgYXQgd2hpY2ggbGFiZWxzIGNhbiBiZSBwbGFjZWQgZmFpbGVkLlxuICAgICAgICAvLyBUcnkgYWdhaW4sIGJ1dCB0aGlzIHRpbWUganVzdCB0cnkgcGxhY2luZyBvbmUgYW5jaG9yIGF0IHRoZSBtaWRkbGUgb2YgdGhlIGxpbmUuXG4gICAgICAgIC8vIFRoaXMgaGFzIHRoZSBtb3N0IGVmZmVjdCBmb3Igc2hvcnQgbGluZXMgaW4gb3ZlcnNjYWxlZCB0aWxlcywgc2luY2UgdGhlXG4gICAgICAgIC8vIGluaXRpYWwgb2Zmc2V0IHVzZWQgaW4gb3ZlcnNjYWxlZCB0aWxlcyBpcyBjYWxjdWxhdGVkIHRvIGFsaWduIGxhYmVscyB3aXRoIHBvc2l0aW9ucyBpblxuICAgICAgICAvLyBwYXJlbnQgdGlsZXMgaW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBsYWJlbCBhcyBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIGFzIHBvc3NpYmxlLlxuICAgICAgICBhbmNob3JzID0gcmVzYW1wbGUobGluZSwgZGlzdGFuY2UgLyAyLCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCB0cnVlLCB0aWxlRXh0ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jaG9ycztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xpcExpbmU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFydCBvZiBhIG11bHRpbGluZSB0aGF0IGludGVyc2VjdHMgd2l0aCB0aGUgcHJvdmlkZWQgcmVjdGFuZ3VsYXIgYm94LlxuICpcbiAqIEBwYXJhbSBsaW5lc1xuICogQHBhcmFtIHgxIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkxIHRoZSB0b3AgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geDIgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkyIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm94XG4gKiBAcmV0dXJucyBsaW5lc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xpcExpbmUobGluZXM6IEFycmF5PEFycmF5PFBvaW50Pj4sIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpOiBBcnJheTxBcnJheTxQb2ludD4+IHtcbiAgICBjb25zdCBjbGlwcGVkTGluZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2xdO1xuICAgICAgICBsZXQgY2xpcHBlZExpbmU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgbGV0IHAwID0gbGluZVtpXTtcbiAgICAgICAgICAgIGxldCBwMSA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgICAgICBpZiAocDAueCA8IHgxICYmIHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC54IDwgeDEpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludCh4MSwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgxIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgxLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDEgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPCB5MSAmJiBwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueSA8IHkxKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkxIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTEpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTEgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwMC54ID49IHgyICYmIHAxLnggPj0geDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPj0geTIgJiYgcDEueSA+PSB5Mikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNsaXBwZWRMaW5lIHx8ICFwMC5lcXVhbHMoY2xpcHBlZExpbmVbY2xpcHBlZExpbmUubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgY2xpcHBlZExpbmUgPSBbcDBdO1xuICAgICAgICAgICAgICAgIGNsaXBwZWRMaW5lcy5wdXNoKGNsaXBwZWRMaW5lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xpcHBlZExpbmUucHVzaChwMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcHBlZExpbmVzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge0dMWVBIX1BCRl9CT1JERVJ9IGZyb20gJy4uL3N0eWxlL3BhcnNlX2dseXBoX3BiZic7XG5cbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5pbXBvcnQgdHlwZSB7UG9zaXRpb25lZEljb24sIFNoYXBpbmd9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge1NIQVBJTkdfREVGQVVMVF9PRkZTRVR9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge0lNQUdFX1BBRERJTkd9IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4vb25lX2VtJztcblxuLyoqXG4gKiBBIHRleHR1cmVkIHF1YWQgZm9yIHJlbmRlcmluZyBhIHNpbmdsZSBpY29uIG9yIGdseXBoLlxuICpcbiAqIFRoZSB6b29tIHJhbmdlIHRoZSBnbHlwaCBjYW4gYmUgc2hvd24gaXMgZGVmaW5lZCBieSBtaW5TY2FsZSBhbmQgbWF4U2NhbGUuXG4gKlxuICogQHBhcmFtIHRsIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gdHIgVGhlIG9mZnNldCBvZiB0aGUgdG9wIHJpZ2h0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gYmwgVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSBiciBUaGUgb2Zmc2V0IG9mIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSB0ZXggVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgU3ltYm9sUXVhZCA9IHtcbiAgICB0bDogUG9pbnQsXG4gICAgdHI6IFBvaW50LFxuICAgIGJsOiBQb2ludCxcbiAgICBicjogUG9pbnQsXG4gICAgdGV4OiB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICB3OiBudW1iZXIsXG4gICAgICAgIGg6IG51bWJlclxuICAgIH0sXG4gICAgcGl4ZWxPZmZzZXRUTDogUG9pbnQsXG4gICAgcGl4ZWxPZmZzZXRCUjogUG9pbnQsXG4gICAgd3JpdGluZ01vZGU6IGFueSB8IHZvaWQsXG4gICAgZ2x5cGhPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc2VjdGlvbkluZGV4OiBudW1iZXIsXG4gICAgaXNTREY6IGJvb2xlYW4sXG4gICAgbWluRm9udFNjYWxlWDogbnVtYmVyLFxuICAgIG1pbkZvbnRTY2FsZVk6IG51bWJlclxufTtcblxuLy8gSWYgeW91IGhhdmUgYSAxMHB4IGljb24gdGhhdCBpc24ndCBwZXJmZWN0bHkgYWxpZ25lZCB0byB0aGUgcGl4ZWwgZ3JpZCBpdCB3aWxsIGNvdmVyIDExIGFjdHVhbFxuLy8gcGl4ZWxzLiBUaGUgcXVhZCBuZWVkcyB0byBiZSBwYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhpcywgb3RoZXJ3aXNlIHRoZXknbGwgbG9vayBzbGlnaHRseSBjbGlwcGVkXG4vLyBvbiBvbmUgZWRnZSBpbiBzb21lIGNhc2VzLlxuY29uc3QgYm9yZGVyID0gSU1BR0VfUEFERElORztcblxuLyoqXG4gKiBDcmVhdGUgdGhlIHF1YWRzIHVzZWQgZm9yIHJlbmRlcmluZyBhbiBpY29uLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEljb25RdWFkcyhcbiAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgICBpY29uUm90YXRlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgaXNTREZJY29uOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0OiBib29sZWFuKTogQXJyYXk8U3ltYm9sUXVhZD4ge1xuICAgIGNvbnN0IHF1YWRzID0gW107XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG4gICAgY29uc3QgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW87XG4gICAgY29uc3QgaW1hZ2VXaWR0aCA9IGltYWdlLnBhZGRlZFJlY3QudyAtIDIgKiBib3JkZXI7XG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBpbWFnZS5wYWRkZWRSZWN0LmggLSAyICogYm9yZGVyO1xuXG4gICAgY29uc3QgaWNvbldpZHRoID0gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdDtcbiAgICBjb25zdCBpY29uSGVpZ2h0ID0gc2hhcGVkSWNvbi5ib3R0b20gLSBzaGFwZWRJY29uLnRvcDtcblxuICAgIGNvbnN0IHN0cmV0Y2hYID0gaW1hZ2Uuc3RyZXRjaFggfHwgW1swLCBpbWFnZVdpZHRoXV07XG4gICAgY29uc3Qgc3RyZXRjaFkgPSBpbWFnZS5zdHJldGNoWSB8fCBbWzAsIGltYWdlSGVpZ2h0XV07XG5cbiAgICBjb25zdCByZWR1Y2VSYW5nZXMgPSAoc3VtLCByYW5nZSkgPT4gc3VtICsgcmFuZ2VbMV0gLSByYW5nZVswXTtcbiAgICBjb25zdCBzdHJldGNoV2lkdGggPSBzdHJldGNoWC5yZWR1Y2UocmVkdWNlUmFuZ2VzLCAwKTtcbiAgICBjb25zdCBzdHJldGNoSGVpZ2h0ID0gc3RyZXRjaFkucmVkdWNlKHJlZHVjZVJhbmdlcywgMCk7XG4gICAgY29uc3QgZml4ZWRXaWR0aCA9IGltYWdlV2lkdGggLSBzdHJldGNoV2lkdGg7XG4gICAgY29uc3QgZml4ZWRIZWlnaHQgPSBpbWFnZUhlaWdodCAtIHN0cmV0Y2hIZWlnaHQ7XG5cbiAgICBsZXQgc3RyZXRjaE9mZnNldFggPSAwO1xuICAgIGxldCBzdHJldGNoQ29udGVudFdpZHRoID0gc3RyZXRjaFdpZHRoO1xuICAgIGxldCBzdHJldGNoT2Zmc2V0WSA9IDA7XG4gICAgbGV0IHN0cmV0Y2hDb250ZW50SGVpZ2h0ID0gc3RyZXRjaEhlaWdodDtcbiAgICBsZXQgZml4ZWRPZmZzZXRYID0gMDtcbiAgICBsZXQgZml4ZWRDb250ZW50V2lkdGggPSBmaXhlZFdpZHRoO1xuICAgIGxldCBmaXhlZE9mZnNldFkgPSAwO1xuICAgIGxldCBmaXhlZENvbnRlbnRIZWlnaHQgPSBmaXhlZEhlaWdodDtcblxuICAgIGlmIChpbWFnZS5jb250ZW50ICYmIGhhc0ljb25UZXh0Rml0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBpbWFnZS5jb250ZW50O1xuICAgICAgICBzdHJldGNoT2Zmc2V0WCA9IHN1bVdpdGhpblJhbmdlKHN0cmV0Y2hYLCAwLCBjb250ZW50WzBdKTtcbiAgICAgICAgc3RyZXRjaE9mZnNldFkgPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWSwgMCwgY29udGVudFsxXSk7XG4gICAgICAgIHN0cmV0Y2hDb250ZW50V2lkdGggPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWCwgY29udGVudFswXSwgY29udGVudFsyXSk7XG4gICAgICAgIHN0cmV0Y2hDb250ZW50SGVpZ2h0ID0gc3VtV2l0aGluUmFuZ2Uoc3RyZXRjaFksIGNvbnRlbnRbMV0sIGNvbnRlbnRbM10pO1xuICAgICAgICBmaXhlZE9mZnNldFggPSBjb250ZW50WzBdIC0gc3RyZXRjaE9mZnNldFg7XG4gICAgICAgIGZpeGVkT2Zmc2V0WSA9IGNvbnRlbnRbMV0gLSBzdHJldGNoT2Zmc2V0WTtcbiAgICAgICAgZml4ZWRDb250ZW50V2lkdGggPSBjb250ZW50WzJdIC0gY29udGVudFswXSAtIHN0cmV0Y2hDb250ZW50V2lkdGg7XG4gICAgICAgIGZpeGVkQ29udGVudEhlaWdodCA9IGNvbnRlbnRbM10gLSBjb250ZW50WzFdIC0gc3RyZXRjaENvbnRlbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUJveCA9IChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pID0+IHtcblxuICAgICAgICBjb25zdCBsZWZ0RW0gPSBnZXRFbU9mZnNldChsZWZ0LnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WCwgc3RyZXRjaENvbnRlbnRXaWR0aCwgaWNvbldpZHRoLCBzaGFwZWRJY29uLmxlZnQpO1xuICAgICAgICBjb25zdCBsZWZ0UHggPSBnZXRQeE9mZnNldChsZWZ0LmZpeGVkIC0gZml4ZWRPZmZzZXRYLCBmaXhlZENvbnRlbnRXaWR0aCwgbGVmdC5zdHJldGNoLCBzdHJldGNoV2lkdGgpO1xuXG4gICAgICAgIGNvbnN0IHRvcEVtID0gZ2V0RW1PZmZzZXQodG9wLnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WSwgc3RyZXRjaENvbnRlbnRIZWlnaHQsIGljb25IZWlnaHQsIHNoYXBlZEljb24udG9wKTtcbiAgICAgICAgY29uc3QgdG9wUHggPSBnZXRQeE9mZnNldCh0b3AuZml4ZWQgLSBmaXhlZE9mZnNldFksIGZpeGVkQ29udGVudEhlaWdodCwgdG9wLnN0cmV0Y2gsIHN0cmV0Y2hIZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHJpZ2h0RW0gPSBnZXRFbU9mZnNldChyaWdodC5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFgsIHN0cmV0Y2hDb250ZW50V2lkdGgsIGljb25XaWR0aCwgc2hhcGVkSWNvbi5sZWZ0KTtcbiAgICAgICAgY29uc3QgcmlnaHRQeCA9IGdldFB4T2Zmc2V0KHJpZ2h0LmZpeGVkIC0gZml4ZWRPZmZzZXRYLCBmaXhlZENvbnRlbnRXaWR0aCwgcmlnaHQuc3RyZXRjaCwgc3RyZXRjaFdpZHRoKTtcblxuICAgICAgICBjb25zdCBib3R0b21FbSA9IGdldEVtT2Zmc2V0KGJvdHRvbS5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFksIHN0cmV0Y2hDb250ZW50SGVpZ2h0LCBpY29uSGVpZ2h0LCBzaGFwZWRJY29uLnRvcCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVB4ID0gZ2V0UHhPZmZzZXQoYm90dG9tLmZpeGVkIC0gZml4ZWRPZmZzZXRZLCBmaXhlZENvbnRlbnRIZWlnaHQsIGJvdHRvbS5zdHJldGNoLCBzdHJldGNoSGVpZ2h0KTtcblxuICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludChsZWZ0RW0sIHRvcEVtKTtcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgUG9pbnQocmlnaHRFbSwgdG9wRW0pO1xuICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludChyaWdodEVtLCBib3R0b21FbSk7XG4gICAgICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KGxlZnRFbSwgYm90dG9tRW0pO1xuICAgICAgICBjb25zdCBwaXhlbE9mZnNldFRMID0gbmV3IFBvaW50KGxlZnRQeCAvIHBpeGVsUmF0aW8sIHRvcFB4IC8gcGl4ZWxSYXRpbyk7XG4gICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0QlIgPSBuZXcgUG9pbnQocmlnaHRQeCAvIHBpeGVsUmF0aW8sIGJvdHRvbVB4IC8gcGl4ZWxSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgYW5nbGUgPSBpY29uUm90YXRlICogTWF0aC5QSSAvIDE4MDtcblxuICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgICAgICBjb3MgPSBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgICAgICAgICAgbWF0cml4ID0gW2NvcywgLXNpbiwgc2luLCBjb3NdO1xuXG4gICAgICAgICAgICB0bC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgdHIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIGJsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICBici5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeDEgPSBsZWZ0LnN0cmV0Y2ggKyBsZWZ0LmZpeGVkO1xuICAgICAgICBjb25zdCB4MiA9IHJpZ2h0LnN0cmV0Y2ggKyByaWdodC5maXhlZDtcbiAgICAgICAgY29uc3QgeTEgPSB0b3Auc3RyZXRjaCArIHRvcC5maXhlZDtcbiAgICAgICAgY29uc3QgeTIgPSBib3R0b20uc3RyZXRjaCArIGJvdHRvbS5maXhlZDtcblxuICAgICAgICBjb25zdCBzdWJSZWN0ID0ge1xuICAgICAgICAgICAgeDogaW1hZ2UucGFkZGVkUmVjdC54ICsgYm9yZGVyICsgeDEsXG4gICAgICAgICAgICB5OiBpbWFnZS5wYWRkZWRSZWN0LnkgKyBib3JkZXIgKyB5MSxcbiAgICAgICAgICAgIHc6IHgyIC0geDEsXG4gICAgICAgICAgICBoOiB5MiAtIHkxXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWCA9IGZpeGVkQ29udGVudFdpZHRoIC8gcGl4ZWxSYXRpbyAvIGljb25XaWR0aDtcbiAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWSA9IGZpeGVkQ29udGVudEhlaWdodCAvIHBpeGVsUmF0aW8gLyBpY29uSGVpZ2h0O1xuXG4gICAgICAgIC8vIEljb24gcXVhZCBpcyBwYWRkZWQsIHNvIHRleHR1cmUgY29vcmRpbmF0ZXMgYWxzbyBuZWVkIHRvIGJlIHBhZGRlZC5cbiAgICAgICAgcmV0dXJuIHt0bCwgdHIsIGJsLCBiciwgdGV4OiBzdWJSZWN0LCB3cml0aW5nTW9kZTogdW5kZWZpbmVkLCBnbHlwaE9mZnNldDogWzAsIDBdLCBzZWN0aW9uSW5kZXg6IDAsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVksIGlzU0RGOiBpc1NERkljb259O1xuICAgIH07XG5cbiAgICBpZiAoIWhhc0ljb25UZXh0Rml0IHx8ICghaW1hZ2Uuc3RyZXRjaFggJiYgIWltYWdlLnN0cmV0Y2hZKSkge1xuICAgICAgICBxdWFkcy5wdXNoKG1ha2VCb3goXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IC0xfSxcbiAgICAgICAgICAgIHtmaXhlZDogMCwgc3RyZXRjaDogLTF9LFxuICAgICAgICAgICAge2ZpeGVkOiAwLCBzdHJldGNoOiBpbWFnZVdpZHRoICsgMX0sXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IGltYWdlSGVpZ2h0ICsgMX0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB4Q3V0cyA9IHN0cmV0Y2hab25lc1RvQ3V0cyhzdHJldGNoWCwgZml4ZWRXaWR0aCwgc3RyZXRjaFdpZHRoKTtcbiAgICAgICAgY29uc3QgeUN1dHMgPSBzdHJldGNoWm9uZXNUb0N1dHMoc3RyZXRjaFksIGZpeGVkSGVpZ2h0LCBzdHJldGNoSGVpZ2h0KTtcblxuICAgICAgICBmb3IgKGxldCB4aSA9IDA7IHhpIDwgeEN1dHMubGVuZ3RoIC0gMTsgeGkrKykge1xuICAgICAgICAgICAgY29uc3QgeDEgPSB4Q3V0c1t4aV07XG4gICAgICAgICAgICBjb25zdCB4MiA9IHhDdXRzW3hpICsgMV07XG4gICAgICAgICAgICBmb3IgKGxldCB5aSA9IDA7IHlpIDwgeUN1dHMubGVuZ3RoIC0gMTsgeWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkxID0geUN1dHNbeWldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkyID0geUN1dHNbeWkgKyAxXTtcbiAgICAgICAgICAgICAgICBxdWFkcy5wdXNoKG1ha2VCb3goeDEsIHkxLCB4MiwgeTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFkcztcbn1cblxuZnVuY3Rpb24gc3VtV2l0aGluUmFuZ2UocmFuZ2VzLCBtaW4sIG1heCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgcmFuZ2Ugb2YgcmFuZ2VzKSB7XG4gICAgICAgIHN1bSArPSBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgcmFuZ2VbMV0pKSAtIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCByYW5nZVswXSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG5mdW5jdGlvbiBzdHJldGNoWm9uZXNUb0N1dHMoc3RyZXRjaFpvbmVzLCBmaXhlZFNpemUsIHN0cmV0Y2hTaXplKSB7XG4gICAgY29uc3QgY3V0cyA9IFt7Zml4ZWQ6IC1ib3JkZXIsIHN0cmV0Y2g6IDB9XTtcblxuICAgIGZvciAoY29uc3QgW2MxLCBjMl0gb2Ygc3RyZXRjaFpvbmVzKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBjdXRzW2N1dHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGN1dHMucHVzaCh7XG4gICAgICAgICAgICBmaXhlZDogYzEgLSBsYXN0LnN0cmV0Y2gsXG4gICAgICAgICAgICBzdHJldGNoOiBsYXN0LnN0cmV0Y2hcbiAgICAgICAgfSk7XG4gICAgICAgIGN1dHMucHVzaCh7XG4gICAgICAgICAgICBmaXhlZDogYzEgLSBsYXN0LnN0cmV0Y2gsXG4gICAgICAgICAgICBzdHJldGNoOiBsYXN0LnN0cmV0Y2ggKyAoYzIgLSBjMSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGN1dHMucHVzaCh7XG4gICAgICAgIGZpeGVkOiBmaXhlZFNpemUgKyBib3JkZXIsXG4gICAgICAgIHN0cmV0Y2g6IHN0cmV0Y2hTaXplXG4gICAgfSk7XG4gICAgcmV0dXJuIGN1dHM7XG59XG5cbmZ1bmN0aW9uIGdldEVtT2Zmc2V0KHN0cmV0Y2hPZmZzZXQsIHN0cmV0Y2hTaXplLCBpY29uU2l6ZSwgaWNvbk9mZnNldCkge1xuICAgIHJldHVybiBzdHJldGNoT2Zmc2V0IC8gc3RyZXRjaFNpemUgKiBpY29uU2l6ZSArIGljb25PZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFB4T2Zmc2V0KGZpeGVkT2Zmc2V0LCBmaXhlZFNpemUsIHN0cmV0Y2hPZmZzZXQsIHN0cmV0Y2hTaXplKSB7XG4gICAgcmV0dXJuIGZpeGVkT2Zmc2V0IC0gZml4ZWRTaXplICogc3RyZXRjaE9mZnNldCAvIHN0cmV0Y2hTaXplO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcXVhZHMgdXNlZCBmb3IgcmVuZGVyaW5nIGEgdGV4dCBsYWJlbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbHlwaFF1YWRzKGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICBzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbik6IEFycmF5PFN5bWJvbFF1YWQ+IHtcblxuICAgIGNvbnN0IHRleHRSb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgcXVhZHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBvc2l0aW9uZWRHbHlwaCBvZiBsaW5lLnBvc2l0aW9uZWRHbHlwaHMpIHtcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25lZEdseXBoLnJlY3QpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdGV4dHVyZVJlY3QgPSBwb3NpdGlvbmVkR2x5cGgucmVjdCB8fCB7fTtcblxuICAgICAgICAgICAgLy8gVGhlIHJlY3RzIGhhdmUgYW4gYWRkaXRpb25hbCBidWZmZXIgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlaXIgc2l6ZS5cbiAgICAgICAgICAgIGNvbnN0IGdseXBoUGFkZGluZyA9IDEuMDtcbiAgICAgICAgICAgIGxldCByZWN0QnVmZmVyID0gR0xZUEhfUEJGX0JPUkRFUiArIGdseXBoUGFkZGluZztcbiAgICAgICAgICAgIGxldCBpc1NERiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgcGl4ZWxSYXRpbyA9IDEuMDtcbiAgICAgICAgICAgIGxldCBsaW5lT2Zmc2V0ID0gMC4wO1xuXG4gICAgICAgICAgICBjb25zdCByb3RhdGVWZXJ0aWNhbEdseXBoID0gKGFsb25nTGluZSB8fCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSAmJiBwb3NpdGlvbmVkR2x5cGgudmVydGljYWw7XG4gICAgICAgICAgICBjb25zdCBoYWxmQWR2YW5jZSA9IHBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLyAyO1xuXG4gICAgICAgICAgICAvLyBBbGlnbiBpbWFnZXMgYW5kIHNjYWxlZCBnbHlwaHMgaW4gdGhlIG1pZGRsZSBvZiBhIHZlcnRpY2FsIGxpbmUuXG4gICAgICAgICAgICBpZiAoYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwaW5nLnZlcnRpY2FsaXphYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVkR2x5cGhPZmZzZXQgPSAocG9zaXRpb25lZEdseXBoLnNjYWxlIC0gMSkgKiBPTkVfRU07XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VPZmZzZXQgPSAoT05FX0VNIC0gcG9zaXRpb25lZEdseXBoLm1ldHJpY3Mud2lkdGggKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUpIC8gMjtcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0ID0gbGluZS5saW5lT2Zmc2V0IC8gMiAtIChwb3NpdGlvbmVkR2x5cGguaW1hZ2VOYW1lID8gLWltYWdlT2Zmc2V0IDogc2NhbGVkR2x5cGhPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocG9zaXRpb25lZEdseXBoLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gaW1hZ2VNYXBbcG9zaXRpb25lZEdseXBoLmltYWdlTmFtZV07XG4gICAgICAgICAgICAgICAgaXNTREYgPSBpbWFnZS5zZGY7XG4gICAgICAgICAgICAgICAgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW87XG4gICAgICAgICAgICAgICAgcmVjdEJ1ZmZlciA9IElNQUdFX1BBRERJTkcgLyBwaXhlbFJhdGlvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnbHlwaE9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uZWRHbHlwaC54ICsgaGFsZkFkdmFuY2UsIHBvc2l0aW9uZWRHbHlwaC55XSA6XG4gICAgICAgICAgICAgICAgWzAsIDBdO1xuXG4gICAgICAgICAgICBsZXQgYnVpbHRJbk9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgWzAsIDBdIDpcbiAgICAgICAgICAgICAgICBbcG9zaXRpb25lZEdseXBoLnggKyBoYWxmQWR2YW5jZSArIHRleHRPZmZzZXRbMF0sIHBvc2l0aW9uZWRHbHlwaC55ICsgdGV4dE9mZnNldFsxXSAtIGxpbmVPZmZzZXRdO1xuXG4gICAgICAgICAgICBsZXQgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBbMCwgMF07XG4gICAgICAgICAgICBpZiAocm90YXRlVmVydGljYWxHbHlwaCkge1xuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIFBPSSBsYWJlbHMgdGhhdCBhcmUgcm90YXRlZCA5MGRlZyBDVyBhbmQgd2hvc2UgZ2x5cGhzIG11c3QgcHJlc2VydmUgdXByaWdodCBvcmllbnRhdGlvblxuICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgcm90YXRlZCA5MGRlZyBDQ1cuIEFmdGVyIGEgcXVhZCBpcyByb3RhdGVkLCBpdCBpcyB0cmFuc2xhdGVkIHRvIHRoZSBvcmlnaW5hbCBidWlsdC1pbiBvZmZzZXQuXG4gICAgICAgICAgICAgICAgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBidWlsdEluT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJ1aWx0SW5PZmZzZXQgPSBbMCwgMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHgxID0gKHBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLmxlZnQgLSByZWN0QnVmZmVyKSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAtIGhhbGZBZHZhbmNlICsgYnVpbHRJbk9mZnNldFswXTtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gKC1wb3NpdGlvbmVkR2x5cGgubWV0cmljcy50b3AgLSByZWN0QnVmZmVyKSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSArIGJ1aWx0SW5PZmZzZXRbMV07XG4gICAgICAgICAgICBjb25zdCB4MiA9IHgxICsgdGV4dHVyZVJlY3QudyAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIHBpeGVsUmF0aW87XG4gICAgICAgICAgICBjb25zdCB5MiA9IHkxICsgdGV4dHVyZVJlY3QuaCAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIHBpeGVsUmF0aW87XG5cbiAgICAgICAgICAgIGNvbnN0IHRsID0gbmV3IFBvaW50KHgxLCB5MSk7XG4gICAgICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludCh4MiwgeTEpO1xuICAgICAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgICAgIGNvbnN0IGJyID0gbmV3IFBvaW50KHgyLCB5Mik7XG5cbiAgICAgICAgICAgIGlmIChyb3RhdGVWZXJ0aWNhbEdseXBoKSB7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwtc3VwcG9ydGluZyBnbHlwaHMgYXJlIGxhaWQgb3V0IGluIDI0eDI0IHBvaW50IGJveGVzICgxIHNxdWFyZSBlbSlcbiAgICAgICAgICAgICAgICAvLyBJbiBob3Jpem9udGFsIG9yaWVudGF0aW9uLCB0aGUgeSB2YWx1ZXMgZm9yIGdseXBocyBhcmUgYmVsb3cgdGhlIG1pZGxpbmVcbiAgICAgICAgICAgICAgICAvLyBhbmQgd2UgdXNlIGEgXCJ5T2Zmc2V0XCIgb2YgLTE3IHRvIHB1bGwgdGhlbSB1cCB0byB0aGUgbWlkZGxlLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHJvdGF0aW5nIGNvdW50ZXItY2xvY2t3aXNlIGFyb3VuZCB0aGUgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgbGVmdFxuICAgICAgICAgICAgICAgIC8vIGVkZ2Ugb2YgYSAyNHgyNCBsYXlvdXQgYm94IGNlbnRlcmVkIGJlbG93IHRoZSBtaWRsaW5lLCB3ZSBhbGlnbiB0aGUgY2VudGVyXG4gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGdseXBocyB3aXRoIHRoZSBob3Jpem9udGFsIG1pZGxpbmUsIHNvIHRoZSB5T2Zmc2V0IGlzIG5vIGxvbmdlclxuICAgICAgICAgICAgICAgIC8vIG5lY2Vzc2FyeSwgYnV0IHdlIGFsc28gcHVsbCB0aGUgZ2x5cGggdG8gdGhlIGxlZnQgYWxvbmcgdGhlIHggYXhpcy5cbiAgICAgICAgICAgICAgICAvLyBUaGUgeSBjb29yZGluYXRlIGluY2x1ZGVzIGJhc2VsaW5lIHlPZmZzZXQsIHRodXMgbmVlZHMgdG8gYmUgYWNjb3VudGVkXG4gICAgICAgICAgICAgICAgLy8gZm9yIHdoZW4gZ2x5cGggaXMgcm90YXRlZCBhbmQgdHJhbnNsYXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgUG9pbnQoLWhhbGZBZHZhbmNlLCBoYWxmQWR2YW5jZSAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsUm90YXRpb24gPSAtTWF0aC5QSSAvIDI7XG5cbiAgICAgICAgICAgICAgICAvLyB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBmdWxsLXdpZHRoIGFuZCBoYWxmLXdpZHRoXG4gICAgICAgICAgICAgICAgLy8gYWR2YW5jZSwgc2hvdWxkIGJlIDAgZm9yIGZ1bGwtd2lkdGggZ2x5cGhzIGFuZCB3aWxsIHB1bGwgdXAgaGFsZi13aWR0aCBnbHlwaHMuXG4gICAgICAgICAgICAgICAgY29uc3QgeEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24gPSBPTkVfRU0gLyAyIC0gaGFsZkFkdmFuY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgeUltYWdlT2Zmc2V0Q29ycmVjdGlvbiA9IHBvc2l0aW9uZWRHbHlwaC5pbWFnZU5hbWUgPyB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiA6IDAuMDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uID0gbmV3IFBvaW50KDUgLSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUIC0geEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24sIC15SW1hZ2VPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24gPSBuZXcgUG9pbnQoLi4udmVydGljYWxpemVkTGFiZWxPZmZzZXQpO1xuICAgICAgICAgICAgICAgIHRsLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0ci5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZChoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICAgICAgYmwuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHRSb3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbih0ZXh0Um90YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgY29zID0gTWF0aC5jb3ModGV4dFJvdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IFtjb3MsIC1zaW4sIHNpbiwgY29zXTtcblxuICAgICAgICAgICAgICAgIHRsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgdHIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgICAgICBibC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGJyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0VEwgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBwaXhlbE9mZnNldEJSID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtaW5Gb250U2NhbGVZID0gMDtcbiAgICAgICAgICAgIHF1YWRzLnB1c2goe3RsLCB0ciwgYmwsIGJyLCB0ZXg6IHRleHR1cmVSZWN0LCB3cml0aW5nTW9kZTogc2hhcGluZy53cml0aW5nTW9kZSwgZ2x5cGhPZmZzZXQsIHNlY3Rpb25JbmRleDogcG9zaXRpb25lZEdseXBoLnNlY3Rpb25JbmRleCwgaXNTREYsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVl9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFkcztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG4vKipcbiAqIEEgQ29sbGlzaW9uRmVhdHVyZSByZXByZXNlbnRzIHRoZSBhcmVhIG9mIHRoZSB0aWxlIGNvdmVyZWQgYnkgYSBzaW5nbGUgbGFiZWwuXG4gKiBJdCBpcyB1c2VkIHdpdGggQ29sbGlzaW9uSW5kZXggdG8gY2hlY2sgaWYgdGhlIGxhYmVsIG92ZXJsYXBzIHdpdGggYW55XG4gKiBwcmV2aW91cyBsYWJlbHMuIEEgQ29sbGlzaW9uRmVhdHVyZSBpcyBtb3N0bHkganVzdCBhIHNldCBvZiBDb2xsaXNpb25Cb3hcbiAqIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29sbGlzaW9uRmVhdHVyZSB7XG4gICAgYm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIGJveEVuZEluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBDb2xsaXNpb25GZWF0dXJlLCBhZGRpbmcgaXRzIGNvbGxpc2lvbiBib3ggZGF0YSB0byB0aGUgZ2l2ZW4gY29sbGlzaW9uQm94QXJyYXkgaW4gdGhlIHByb2Nlc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGluZSBUaGUgZ2VvbWV0cnkgdGhlIGxhYmVsIGlzIHBsYWNlZCBvbi5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIFRoZSBwb2ludCBhbG9uZyB0aGUgbGluZSBhcm91bmQgd2hpY2ggdGhlIGxhYmVsIGlzIGFuY2hvcmVkLlxuICAgICAqIEBwYXJhbSBzaGFwZWQgVGhlIHRleHQgb3IgaWNvbiBzaGFwaW5nIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIGJveFNjYWxlIEEgbWFnaWMgbnVtYmVyIHVzZWQgdG8gY29udmVydCBmcm9tIGdseXBoIG1ldHJpY3MgdW5pdHMgdG8gZ2VvbWV0cnkgdW5pdHMuXG4gICAgICogQHBhcmFtIHBhZGRpbmcgVGhlIGFtb3VudCBvZiBwYWRkaW5nIHRvIGFkZCBhcm91bmQgdGhlIGxhYmVsIGVkZ2VzLlxuICAgICAqIEBwYXJhbSBhbGlnbkxpbmUgV2hldGhlciB0aGUgbGFiZWwgaXMgYWxpZ25lZCB3aXRoIHRoZSBsaW5lIG9yIHRoZSB2aWV3cG9ydC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICBsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc2hhcGVkOiBPYmplY3QsXG4gICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgcm90YXRlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHkxID0gc2hhcGVkLnRvcCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgbGV0IHkyID0gc2hhcGVkLmJvdHRvbSAqIGJveFNjYWxlICsgcGFkZGluZztcbiAgICAgICAgbGV0IHgxID0gc2hhcGVkLmxlZnQgKiBib3hTY2FsZSAtIHBhZGRpbmc7XG4gICAgICAgIGxldCB4MiA9IHNoYXBlZC5yaWdodCAqIGJveFNjYWxlICsgcGFkZGluZztcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25QYWRkaW5nID0gc2hhcGVkLmNvbGxpc2lvblBhZGRpbmc7XG4gICAgICAgIGlmIChjb2xsaXNpb25QYWRkaW5nKSB7XG4gICAgICAgICAgICB4MSAtPSBjb2xsaXNpb25QYWRkaW5nWzBdICogYm94U2NhbGU7XG4gICAgICAgICAgICB5MSAtPSBjb2xsaXNpb25QYWRkaW5nWzFdICogYm94U2NhbGU7XG4gICAgICAgICAgICB4MiArPSBjb2xsaXNpb25QYWRkaW5nWzJdICogYm94U2NhbGU7XG4gICAgICAgICAgICB5MiArPSBjb2xsaXNpb25QYWRkaW5nWzNdICogYm94U2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJveFN0YXJ0SW5kZXggPSBjb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGFsaWduTGluZSkge1xuXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0geTIgLSB5MTtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHgyIC0geDE7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG1pbmltdW0gYm94IGhlaWdodCB0byBhdm9pZCB2ZXJ5IG1hbnkgc21hbGwgbGFiZWxzXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoMTAgKiBib3hTY2FsZSwgaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIChhbmNob3Iuc2VnbWVudDogYW55KSwgbGVuZ3RoLCBoZWlnaHQsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIG92ZXJzY2FsaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yICotcm90YXRlIGluIHBvaW50IGNvbGxpc2lvbiBib3hlc1xuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjA3NVxuICAgICAgICAgICAgICAgIC8vIERvZXNuJ3QgYWNjb3VudCBmb3IgaWNvbi10ZXh0LWZpdFxuXG4gICAgICAgICAgICAgICAgY29uc3QgdGwgPSBuZXcgUG9pbnQoeDEsIHkxKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludCh4MiwgeTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KHgxLCB5Mik7XG4gICAgICAgICAgICAgICAgY29uc3QgYnIgPSBuZXcgUG9pbnQoeDIsIHkyKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZVJhZGlhbnMgPSByb3RhdGUgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgICAgICAgICAgICAgdGwuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICB0ci5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIGJsLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgYnIuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbGxpc2lvbiBmZWF0dXJlcyByZXF1aXJlIGFuIFwib24tYXhpc1wiIGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIC8vIHNvIHRha2UgdGhlIGVudmVsb3BlIG9mIHRoZSByb3RhdGVkIGdlb21ldHJ5XG4gICAgICAgICAgICAgICAgLy8gKG1heSBiZSBxdWl0ZSBsYXJnZSBmb3Igd2lkZSBsYWJlbHMgcm90YXRlZCA0NSBkZWdyZWVzKVxuICAgICAgICAgICAgICAgIHgxID0gTWF0aC5taW4odGwueCwgdHIueCwgYmwueCwgYnIueCk7XG4gICAgICAgICAgICAgICAgeDIgPSBNYXRoLm1heCh0bC54LCB0ci54LCBibC54LCBici54KTtcbiAgICAgICAgICAgICAgICB5MSA9IE1hdGgubWluKHRsLnksIHRyLnksIGJsLnksIGJyLnkpO1xuICAgICAgICAgICAgICAgIHkyID0gTWF0aC5tYXgodGwueSwgdHIueSwgYmwueSwgYnIueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheS5lbXBsYWNlQmFjayhhbmNob3IueCwgYW5jaG9yLnksIHgxLCB5MSwgeDIsIHkyLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIDAsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3hFbmRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzZXQgb2YgQ29sbGlzaW9uQm94IG9iamVjdHMgZm9yIGEgbGluZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYWJlbExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBpbiBnZW9tZXRyeSB1bml0cy5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIFRoZSBwb2ludCBhbG9uZyB0aGUgbGluZSBhcm91bmQgd2hpY2ggdGhlIGxhYmVsIGlzIGFuY2hvcmVkLlxuICAgICAqIEBwYXJhbSBib3hTaXplIFRoZSBzaXplIG9mIHRoZSBjb2xsaXNpb24gYm94ZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkTGluZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbExlbmd0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzdGVwID0gYm94U2l6ZSAvIDI7XG4gICAgICAgIGNvbnN0IG5Cb3hlcyA9IE1hdGguZmxvb3IobGFiZWxMZW5ndGggLyBzdGVwKSB8fCAxO1xuICAgICAgICAvLyBXZSBjYWxjdWxhdGUgbGluZSBjb2xsaXNpb24gY2lyY2xlcyBvdXQgdG8gMzAwJSBvZiB3aGF0IHdvdWxkIG5vcm1hbGx5IGJlIG91clxuICAgICAgICAvLyBtYXggc2l6ZSwgdG8gYWxsb3cgY29sbGlzaW9uIGRldGVjdGlvbiB0byB3b3JrIG9uIGxhYmVscyB0aGF0IGV4cGFuZCBhc1xuICAgICAgICAvLyB0aGV5IG1vdmUgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gVmVydGljYWxseSBvcmllbnRlZCBsYWJlbHMgaW4gdGhlIGRpc3RhbnQgZmllbGQgY2FuIGV4dGVuZCBwYXN0IHRoaXMgcGFkZGluZ1xuICAgICAgICAvLyBUaGlzIGlzIGEgbm90aWNlYWJsZSBwcm9ibGVtIGluIG92ZXJzY2FsZWQgdGlsZXMgd2hlcmUgdGhlIHBpdGNoIDAtYmFzZWRcbiAgICAgICAgLy8gc3ltYm9sIHNwYWNpbmcgd2lsbCBwdXQgbGFiZWxzIHZlcnkgY2xvc2UgdG9nZXRoZXIgaW4gYSBwaXRjaGVkIG1hcC5cbiAgICAgICAgLy8gVG8gcmVkdWNlIHRoZSBjb3N0IG9mIGFkZGluZyBleHRyYSBjb2xsaXNpb24gY2lyY2xlcywgd2Ugc2xvd2x5IGluY3JlYXNlXG4gICAgICAgIC8vIHRoZW0gZm9yIG92ZXJzY2FsZWQgdGlsZXMuXG4gICAgICAgIGNvbnN0IG92ZXJzY2FsaW5nUGFkZGluZ0ZhY3RvciA9IDEgKyAuNCAqIE1hdGgubG9nKG92ZXJzY2FsaW5nKSAvIE1hdGguTE4yO1xuICAgICAgICBjb25zdCBuUGl0Y2hQYWRkaW5nQm94ZXMgPSBNYXRoLmZsb29yKG5Cb3hlcyAqIG92ZXJzY2FsaW5nUGFkZGluZ0ZhY3RvciAvIDIpO1xuXG4gICAgICAgIC8vIG9mZnNldCB0aGUgY2VudGVyIG9mIHRoZSBmaXJzdCBib3ggYnkgaGFsZiBhIGJveCBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZVxuICAgICAgICAvLyBib3ggaXMgYXQgdGhlIGVkZ2Ugb2YgdGhlIGxhYmVsLlxuICAgICAgICBjb25zdCBmaXJzdEJveE9mZnNldCA9IC1ib3hTaXplIC8gMjtcblxuICAgICAgICBsZXQgcCA9IGFuY2hvcjtcbiAgICAgICAgbGV0IGluZGV4ID0gc2VnbWVudCArIDE7XG4gICAgICAgIGxldCBhbmNob3JEaXN0YW5jZSA9IGZpcnN0Qm94T2Zmc2V0O1xuICAgICAgICBjb25zdCBsYWJlbFN0YXJ0RGlzdGFuY2UgPSAtbGFiZWxMZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBwYWRkaW5nU3RhcnREaXN0YW5jZSA9IGxhYmVsU3RhcnREaXN0YW5jZSAtIGxhYmVsTGVuZ3RoIC8gNDtcbiAgICAgICAgLy8gbW92ZSBiYWNrd2FyZHMgYWxvbmcgdGhlIGxpbmUgdG8gdGhlIGZpcnN0IHNlZ21lbnQgdGhlIGxhYmVsIGFwcGVhcnMgb25cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaW5kZXgtLTtcblxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3JEaXN0YW5jZSA+IGxhYmVsU3RhcnREaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2tNYXhBbmdsZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGNhdWdodCB0aGlzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGluZSBkb2Vzbid0IGV4dGVuZCBmYXIgZW5vdWdoIGJhY2sgZm9yIGFsbCBvZiBvdXIgcGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGdvdCBmYXIgZW5vdWdoIHRvIHNob3cgdGhlIGxhYmVsIHVuZGVyIG1vc3QgY29uZGl0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvckRpc3RhbmNlIC09IGxpbmVbaW5kZXhdLmRpc3QocCk7XG4gICAgICAgICAgICAgICAgcCA9IGxpbmVbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChhbmNob3JEaXN0YW5jZSA+IHBhZGRpbmdTdGFydERpc3RhbmNlKTtcblxuICAgICAgICBsZXQgc2VnbWVudExlbmd0aCA9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gLW5QaXRjaFBhZGRpbmdCb3hlczsgaSA8IG5Cb3hlcyArIG5QaXRjaFBhZGRpbmdCb3hlczsgaSsrKSB7XG5cbiAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSB0aGUgYm94IHdpbGwgYmUgZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgICAgICBjb25zdCBib3hPZmZzZXQgPSBpICogc3RlcDtcbiAgICAgICAgICAgIGxldCBib3hEaXN0YW5jZVRvQW5jaG9yID0gbGFiZWxTdGFydERpc3RhbmNlICsgYm94T2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBtYWtlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBpdGNoIHBhZGRpbmcgYm94ZXMgYmlnZ2VyXG4gICAgICAgICAgICBpZiAoYm94T2Zmc2V0IDwgMCkgYm94RGlzdGFuY2VUb0FuY2hvciArPSBib3hPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYm94T2Zmc2V0ID4gbGFiZWxMZW5ndGgpIGJveERpc3RhbmNlVG9BbmNob3IgKz0gYm94T2Zmc2V0IC0gbGFiZWxMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChib3hEaXN0YW5jZVRvQW5jaG9yIDwgYW5jaG9yRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbGluZSBkb2Vzbid0IGV4dGVuZCBmYXIgZW5vdWdoIGJhY2sgZm9yIHRoaXMgYm94LCBza2lwIGl0XG4gICAgICAgICAgICAgICAgLy8gKFRoaXMgY291bGQgYWxsb3cgZm9yIGxpbmUgY29sbGlzaW9ucyBvbiBkaXN0YW50IHRpbGVzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGUgYm94IGlzIG5vdCBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBNb3ZlIHRvIHRoZSBuZXh0IHNlZ21lbnQuXG4gICAgICAgICAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgKyBzZWdtZW50TGVuZ3RoIDwgYm94RGlzdGFuY2VUb0FuY2hvcikge1xuICAgICAgICAgICAgICAgIGFuY2hvckRpc3RhbmNlICs9IHNlZ21lbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzbid0IGVub3VnaCByb29tIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPj0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBsaW5lW2luZGV4XS5kaXN0KGxpbmVbaW5kZXggKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSB0aGUgYm94IHdpbGwgYmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWdtZW50XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50Qm94RGlzdGFuY2UgPSBib3hEaXN0YW5jZVRvQW5jaG9yIC0gYW5jaG9yRGlzdGFuY2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHAwID0gbGluZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBwMSA9IGxpbmVbaW5kZXggKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGJveEFuY2hvclBvaW50ID0gcDEuc3ViKHAwKS5fdW5pdCgpLl9tdWx0KHNlZ21lbnRCb3hEaXN0YW5jZSkuX2FkZChwMCkuX3JvdW5kKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgd2l0aGluIGJveFNpemUgb2YgdGhlIGFuY2hvciwgZm9yY2UgdGhlIGJveCB0byBiZSB1c2VkXG4gICAgICAgICAgICAvLyAoc28gZXZlbiAwLXdpZHRoIGxhYmVscyB1c2UgYXQgbGVhc3Qgb25lIGJveClcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIC44IG11bHRpcGxpY2F0aW9uIGdpdmVzIHVzIGEgbGl0dGxlIGJpdCBvZiBjb25zZXJ2YXRpdmVcbiAgICAgICAgICAgIC8vIHBhZGRpbmcgaW4gY2hvb3Npbmcgd2hpY2ggYm94ZXMgdG8gdXNlIChzZWUgQ29sbGlzaW9uSW5kZXgjcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcylcbiAgICAgICAgICAgIGNvbnN0IHBhZGRlZEFuY2hvckRpc3RhbmNlID0gTWF0aC5hYnMoYm94RGlzdGFuY2VUb0FuY2hvciAtIGZpcnN0Qm94T2Zmc2V0KSA8IHN0ZXAgP1xuICAgICAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgICAgIChib3hEaXN0YW5jZVRvQW5jaG9yIC0gZmlyc3RCb3hPZmZzZXQpICogMC44O1xuXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheS5lbXBsYWNlQmFjayhib3hBbmNob3JQb2ludC54LCBib3hBbmNob3JQb2ludC55LFxuICAgICAgICAgICAgICAgIC1ib3hTaXplIC8gMiwgLWJveFNpemUgLyAyLCBib3hTaXplIC8gMiwgYm94U2l6ZSAvIDIsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBib3hTaXplIC8gMiwgcGFkZGVkQW5jaG9yRGlzdGFuY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xsaXNpb25GZWF0dXJlO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaW55UXVldWUge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEgPSBbXSwgY29tcGFyZSA9IGRlZmF1bHRDb21wYXJlKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5jb21wYXJlID0gY29tcGFyZTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKHRoaXMubGVuZ3RoID4+IDEpIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuX2Rvd24oaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICAgIHRoaXMuX3VwKHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcG9wKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5kYXRhWzBdO1xuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmRhdGEucG9wKCk7XG4gICAgICAgIHRoaXMubGVuZ3RoLS07XG5cbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhWzBdID0gYm90dG9tO1xuICAgICAgICAgICAgdGhpcy5fZG93bigwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVswXTtcbiAgICB9XG5cbiAgICBfdXAocG9zKSB7XG4gICAgICAgIGNvbnN0IHtkYXRhLCBjb21wYXJlfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgd2hpbGUgKHBvcyA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IChwb3MgLSAxKSA+PiAxO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGRhdGFbcGFyZW50XTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIGN1cnJlbnQpID49IDApIGJyZWFrO1xuICAgICAgICAgICAgZGF0YVtwb3NdID0gY3VycmVudDtcbiAgICAgICAgICAgIHBvcyA9IHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgfVxuXG4gICAgX2Rvd24ocG9zKSB7XG4gICAgICAgIGNvbnN0IHtkYXRhLCBjb21wYXJlfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSB0aGlzLmxlbmd0aCA+PiAxO1xuICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtwb3NdO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPCBoYWxmTGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbGVmdCA9IChwb3MgPDwgMSkgKyAxO1xuICAgICAgICAgICAgbGV0IGJlc3QgPSBkYXRhW2xlZnRdO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgMTtcblxuICAgICAgICAgICAgaWYgKHJpZ2h0IDwgdGhpcy5sZW5ndGggJiYgY29tcGFyZShkYXRhW3JpZ2h0XSwgYmVzdCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJlc3QgPSBkYXRhW3JpZ2h0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21wYXJlKGJlc3QsIGl0ZW0pID49IDApIGJyZWFrO1xuXG4gICAgICAgICAgICBkYXRhW3Bvc10gPSBiZXN0O1xuICAgICAgICAgICAgcG9zID0gbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFF1ZXVlIGZyb20gJ3RpbnlxdWV1ZSc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7ZGlzdFRvU2VnbWVudFNxdWFyZWR9IGZyb20gJy4vaW50ZXJzZWN0aW9uX3Rlc3RzJztcblxuLyoqXG4gKiBGaW5kcyBhbiBhcHByb3hpbWF0aW9uIG9mIGEgcG9seWdvbidzIFBvbGUgT2YgSW5hY2Nlc3NpYmlsaXkgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG9sZV9vZl9pbmFjY2Vzc2liaWxpdHlcbiAqIFRoaXMgaXMgYSBjb3B5IG9mIGh0dHA6Ly9naXRodWIuY29tL21hcGJveC9wb2x5bGFiZWwgYWRhcHRlZCB0byB1c2UgUG9pbnRzXG4gKlxuICogQHBhcmFtIHBvbHlnb25SaW5ncyBmaXJzdCBpdGVtIGluIGFycmF5IGlzIHRoZSBvdXRlciByaW5nIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgdGhlIGxpc3Qgb2YgaG9sZXMsIHNob3VsZCBiZSBhbiBlbGVtZW50IG9mIHRoZSByZXN1bHQgb2YgdXRpbC9jbGFzc2lmeV9yaW5nc1xuICogQHBhcmFtIHByZWNpc2lvbiBTcGVjaWZpZWQgaW4gaW5wdXQgY29vcmRpbmF0ZSB1bml0cy4gSWYgMCByZXR1cm5zIGFmdGVyIGZpcnN0IHJ1biwgaWYgPiAwIHJlcGVhdGVkbHkgbmFycm93cyB0aGUgc2VhcmNoIHNwYWNlIHVudGlsIHRoZSByYWRpdXMgb2YgdGhlIGFyZWEgc2VhcmNoZWQgZm9yIHRoZSBiZXN0IHBvbGUgaXMgbGVzcyB0aGFuIHByZWNpc2lvblxuICogQHBhcmFtIGRlYnVnIFByaW50IHNvbWUgc3RhdGlzdGljcyB0byB0aGUgY29uc29sZSBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcmV0dXJucyBQb2xlIG9mIEluYWNjZXNzaWJpbGl5LlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBvbHlnb25SaW5nczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgcHJlY2lzaW9uPzogbnVtYmVyID0gMSwgZGVidWc/OiBib29sZWFuID0gZmFsc2UpOiBQb2ludCB7XG4gICAgLy8gZmluZCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBvdXRlciByaW5nXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSwgbWluWSA9IEluZmluaXR5LCBtYXhYID0gLUluZmluaXR5LCBtYXhZID0gLUluZmluaXR5O1xuICAgIGNvbnN0IG91dGVyUmluZyA9IHBvbHlnb25SaW5nc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dGVyUmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwID0gb3V0ZXJSaW5nW2ldO1xuICAgICAgICBpZiAoIWkgfHwgcC54IDwgbWluWCkgbWluWCA9IHAueDtcbiAgICAgICAgaWYgKCFpIHx8IHAueSA8IG1pblkpIG1pblkgPSBwLnk7XG4gICAgICAgIGlmICghaSB8fCBwLnggPiBtYXhYKSBtYXhYID0gcC54O1xuICAgICAgICBpZiAoIWkgfHwgcC55ID4gbWF4WSkgbWF4WSA9IHAueTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGhlaWdodCA9IG1heFkgLSBtaW5ZO1xuICAgIGNvbnN0IGNlbGxTaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XG4gICAgbGV0IGggPSBjZWxsU2l6ZSAvIDI7XG5cbiAgICAvLyBhIHByaW9yaXR5IHF1ZXVlIG9mIGNlbGxzIGluIG9yZGVyIG9mIHRoZWlyIFwicG90ZW50aWFsXCIgKG1heCBkaXN0YW5jZSB0byBwb2x5Z29uKVxuICAgIGNvbnN0IGNlbGxRdWV1ZSA9IG5ldyBRdWV1ZShbXSwgY29tcGFyZU1heCk7XG5cbiAgICBpZiAoY2VsbFNpemUgPT09IDApIHJldHVybiBuZXcgUG9pbnQobWluWCwgbWluWSk7XG5cbiAgICAvLyBjb3ZlciBwb2x5Z29uIHdpdGggaW5pdGlhbCBjZWxsc1xuICAgIGZvciAobGV0IHggPSBtaW5YOyB4IDwgbWF4WDsgeCArPSBjZWxsU2l6ZSkge1xuICAgICAgICBmb3IgKGxldCB5ID0gbWluWTsgeSA8IG1heFk7IHkgKz0gY2VsbFNpemUpIHtcbiAgICAgICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKHggKyBoLCB5ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0YWtlIGNlbnRyb2lkIGFzIHRoZSBmaXJzdCBiZXN0IGd1ZXNzXG4gICAgbGV0IGJlc3RDZWxsID0gZ2V0Q2VudHJvaWRDZWxsKHBvbHlnb25SaW5ncyk7XG4gICAgbGV0IG51bVByb2JlcyA9IGNlbGxRdWV1ZS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoY2VsbFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAvLyBwaWNrIHRoZSBtb3N0IHByb21pc2luZyBjZWxsIGZyb20gdGhlIHF1ZXVlXG4gICAgICAgIGNvbnN0IGNlbGwgPSBjZWxsUXVldWUucG9wKCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBiZXN0IGNlbGwgaWYgd2UgZm91bmQgYSBiZXR0ZXIgb25lXG4gICAgICAgIGlmIChjZWxsLmQgPiBiZXN0Q2VsbC5kIHx8ICFiZXN0Q2VsbC5kKSB7XG4gICAgICAgICAgICBiZXN0Q2VsbCA9IGNlbGw7XG4gICAgICAgICAgICBpZiAoZGVidWcpIGNvbnNvbGUubG9nKCdmb3VuZCBiZXN0ICVkIGFmdGVyICVkIHByb2JlcycsIE1hdGgucm91bmQoMWU0ICogY2VsbC5kKSAvIDFlNCwgbnVtUHJvYmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBkcmlsbCBkb3duIGZ1cnRoZXIgaWYgdGhlcmUncyBubyBjaGFuY2Ugb2YgYSBiZXR0ZXIgc29sdXRpb25cbiAgICAgICAgaWYgKGNlbGwubWF4IC0gYmVzdENlbGwuZCA8PSBwcmVjaXNpb24pIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIHNwbGl0IHRoZSBjZWxsIGludG8gZm91ciBjZWxsc1xuICAgICAgICBoID0gY2VsbC5oIC8gMjtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggLSBoLCBjZWxsLnAueSAtIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCArIGgsIGNlbGwucC55IC0gaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54IC0gaCwgY2VsbC5wLnkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggKyBoLCBjZWxsLnAueSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBudW1Qcm9iZXMgKz0gNDtcbiAgICB9XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYG51bSBwcm9iZXM6ICR7bnVtUHJvYmVzfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgYmVzdCBkaXN0YW5jZTogJHtiZXN0Q2VsbC5kfWApO1xuICAgIH1cblxuICAgIHJldHVybiBiZXN0Q2VsbC5wO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWF4KGEsIGIpIHtcbiAgICByZXR1cm4gYi5tYXggLSBhLm1heDtcbn1cblxuZnVuY3Rpb24gQ2VsbCh4LCB5LCBoLCBwb2x5Z29uKSB7XG4gICAgdGhpcy5wID0gbmV3IFBvaW50KHgsIHkpO1xuICAgIHRoaXMuaCA9IGg7IC8vIGhhbGYgdGhlIGNlbGwgc2l6ZVxuICAgIHRoaXMuZCA9IHBvaW50VG9Qb2x5Z29uRGlzdCh0aGlzLnAsIHBvbHlnb24pOyAvLyBkaXN0YW5jZSBmcm9tIGNlbGwgY2VudGVyIHRvIHBvbHlnb25cbiAgICB0aGlzLm1heCA9IHRoaXMuZCArIHRoaXMuaCAqIE1hdGguU1FSVDI7IC8vIG1heCBkaXN0YW5jZSB0byBwb2x5Z29uIHdpdGhpbiBhIGNlbGxcbn1cblxuLy8gc2lnbmVkIGRpc3RhbmNlIGZyb20gcG9pbnQgdG8gcG9seWdvbiBvdXRsaW5lIChuZWdhdGl2ZSBpZiBwb2ludCBpcyBvdXRzaWRlKVxuZnVuY3Rpb24gcG9pbnRUb1BvbHlnb25EaXN0KHAsIHBvbHlnb24pIHtcbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgbGV0IG1pbkRpc3RTcSA9IEluZmluaXR5O1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb2x5Z29uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSBwb2x5Z29uW2tdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByaW5nW2ldO1xuICAgICAgICAgICAgY29uc3QgYiA9IHJpbmdbal07XG5cbiAgICAgICAgICAgIGlmICgoYS55ID4gcC55ICE9PSBiLnkgPiBwLnkpICYmXG4gICAgICAgICAgICAgICAgKHAueCA8IChiLnggLSBhLngpICogKHAueSAtIGEueSkgLyAoYi55IC0gYS55KSArIGEueCkpIGluc2lkZSA9ICFpbnNpZGU7XG5cbiAgICAgICAgICAgIG1pbkRpc3RTcSA9IE1hdGgubWluKG1pbkRpc3RTcSwgZGlzdFRvU2VnbWVudFNxdWFyZWQocCwgYSwgYikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChpbnNpZGUgPyAxIDogLTEpICogTWF0aC5zcXJ0KG1pbkRpc3RTcSk7XG59XG5cbi8vIGdldCBwb2x5Z29uIGNlbnRyb2lkXG5mdW5jdGlvbiBnZXRDZW50cm9pZENlbGwocG9seWdvbikge1xuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGNvbnN0IHBvaW50cyA9IHBvbHlnb25bMF07XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGgsIGogPSBsZW4gLSAxOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgIGNvbnN0IGEgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IGIgPSBwb2ludHNbal07XG4gICAgICAgIGNvbnN0IGYgPSBhLnggKiBiLnkgLSBiLnggKiBhLnk7XG4gICAgICAgIHggKz0gKGEueCArIGIueCkgKiBmO1xuICAgICAgICB5ICs9IChhLnkgKyBiLnkpICogZjtcbiAgICAgICAgYXJlYSArPSBmICogMztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDZWxsKHggLyBhcmVhLCB5IC8gYXJlYSwgMCwgcG9seWdvbik7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcblxuaW1wb3J0IHtnZXRBbmNob3JzLCBnZXRDZW50ZXJBbmNob3J9IGZyb20gJy4vZ2V0X2FuY2hvcnMnO1xuaW1wb3J0IGNsaXBMaW5lIGZyb20gJy4vY2xpcF9saW5lJztcbmltcG9ydCB7c2hhcGVUZXh0LCBzaGFwZUljb24sIFdyaXRpbmdNb2RlLCBmaXRJY29uVG9UZXh0fSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHtnZXRHbHlwaFF1YWRzLCBnZXRJY29uUXVhZHN9IGZyb20gJy4vcXVhZHMnO1xuaW1wb3J0IENvbGxpc2lvbkZlYXR1cmUgZnJvbSAnLi9jb2xsaXNpb25fZmVhdHVyZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtcbiAgICBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlLFxuICAgIGFsbG93c0xldHRlclNwYWNpbmdcbn0gZnJvbSAnLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCBmaW5kUG9sZU9mSW5hY2Nlc3NpYmlsaXR5IGZyb20gJy4uL3V0aWwvZmluZF9wb2xlX29mX2luYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHtTSVpFX1BBQ0tfRkFDVE9SfSBmcm9tICcuL3N5bWJvbF9zaXplJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi9vbmVfZW0nO1xuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1NoYXBpbmcsIFBvc2l0aW9uZWRJY29uLCBUZXh0SnVzdGlmeX0gZnJvbSAnLi9zaGFwaW5nJztcbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSB7U3ltYm9sRmVhdHVyZX0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUge0dseXBoUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IG11cm11cjMgZnJvbSAnbXVybXVyaGFzaC1qcyc7XG5cbi8vIFRoZSBzeW1ib2wgbGF5b3V0IHByb2Nlc3MgbmVlZHMgYHRleHQtc2l6ZWAgZXZhbHVhdGVkIGF0IHVwIHRvIGZpdmUgZGlmZmVyZW50IHpvb20gbGV2ZWxzLCBhbmRcbi8vIGBpY29uLXNpemVgIGF0IHVwIHRvIHRocmVlOlxuLy9cbi8vICAgMS4gYHRleHQtc2l6ZWAgYXQgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIGJ1Y2tldC4gVXNlZCB0byBjYWxjdWxhdGUgYSBwZXItZmVhdHVyZSBzaXplIGZvciBzb3VyY2UgYHRleHQtc2l6ZWBcbi8vICAgICAgIGV4cHJlc3Npb25zLCBhbmQgdG8gY2FsY3VsYXRlIHRoZSBib3ggZGltZW5zaW9ucyBmb3IgaWNvbi10ZXh0LWZpdC5cbi8vICAgMi4gYGljb24tc2l6ZWAgYXQgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIGJ1Y2tldC4gVXNlZCB0byBjYWxjdWxhdGUgYSBwZXItZmVhdHVyZSBzaXplIGZvciBzb3VyY2UgYGljb24tc2l6ZWBcbi8vICAgICAgIGV4cHJlc3Npb25zLlxuLy8gICAzLiBgdGV4dC1zaXplYCBhbmQgYGljb24tc2l6ZWAgYXQgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIGJ1Y2tldCwgcGx1cyBvbmUuIFVzZWQgdG8gY2FsY3VsYXRlIGNvbGxpc2lvbiBib3hlcy5cbi8vICAgNC4gYHRleHQtc2l6ZWAgYXQgem9vbSBsZXZlbCAxOC4gVXNlZCBmb3Igc29tZXRoaW5nIGxpbmUtc3ltYm9sLXBsYWNlbWVudC1yZWxhdGVkLlxuLy8gICA1LiAgRm9yIGNvbXBvc2l0ZSBgKi1zaXplYCBleHByZXNzaW9uczogdHdvIHpvb20gbGV2ZWxzIG9mIGN1cnZlIHN0b3BzIHRoYXQgXCJjb3ZlclwiIHRoZSB6b29tIGxldmVsIG9mIHRoZVxuLy8gICAgICAgYnVja2V0LiBUaGVzZSBnbyBpbnRvIGEgdmVydGV4IGJ1ZmZlciBhbmQgYXJlIHVzZWQgYnkgdGhlIHNoYWRlciB0byBpbnRlcnBvbGF0ZSB0aGUgc2l6ZSBhdCByZW5kZXIgdGltZS5cbi8vXG4vLyAoMSkgYW5kICgyKSBhcmUgc3RvcmVkIGluIGBidWNrZXQubGF5ZXJzWzBdLmxheW91dGAuIFRoZSByZW1haW5kZXIgYXJlIGJlbG93LlxuLy9cbnR5cGUgU2l6ZXMgPSB7XG4gICAgbGF5b3V0VGV4dFNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAvLyAoMylcbiAgICBsYXlvdXRJY29uU2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sIC8vICgzKVxuICAgIHRleHRNYXhTaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgICAgLy8gKDQpXG4gICAgY29tcG9zaXRlVGV4dFNpemVzOiBbUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+XSwgLy8gKDUpXG4gICAgY29tcG9zaXRlSWNvblNpemVzOiBbUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+XSwgLy8gKDUpXG59O1xuXG5leHBvcnQgdHlwZSBUZXh0QW5jaG9yID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0JztcblxuLy8gVGhlIHJhZGlhbCBvZmZzZXQgaXMgdG8gdGhlIGVkZ2Ugb2YgdGhlIHRleHQgYm94XG4vLyBJbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24sIHRoZSBlZGdlIG9mIHRoZSB0ZXh0IGJveCBpcyB3aGVyZSBnbHlwaHMgc3RhcnRcbi8vIEJ1dCBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uLCB0aGUgZ2x5cGhzIGFwcGVhciB0byBcInN0YXJ0XCIgYXQgdGhlIGJhc2VsaW5lXG4vLyBXZSBkb24ndCBhY3R1YWxseSBsb2FkIGJhc2VsaW5lIGRhdGEsIGJ1dCB3ZSBhc3N1bWUgYW4gb2Zmc2V0IG9mIE9ORV9FTSAtIDE3XG4vLyAoc2VlIFwieU9mZnNldFwiIGluIHNoYXBpbmcuanMpXG5jb25zdCBiYXNlbGluZU9mZnNldCA9IDc7XG5jb25zdCBJTlZBTElEX1RFWFRfT0ZGU0VUID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVWYXJpYWJsZU9mZnNldChhbmNob3I6IFRleHRBbmNob3IsIG9mZnNldDogW251bWJlciwgbnVtYmVyXSkge1xuXG4gICAgZnVuY3Rpb24gZnJvbVJhZGlhbE9mZnNldChhbmNob3I6IFRleHRBbmNob3IsIHJhZGlhbE9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIGxldCB4ID0gMCwgeSA9IDA7XG4gICAgICAgIGlmIChyYWRpYWxPZmZzZXQgPCAwKSByYWRpYWxPZmZzZXQgPSAwOyAvLyBJZ25vcmUgbmVnYXRpdmUgb2Zmc2V0LlxuICAgICAgICAvLyBzb2x2ZSBmb3IgciB3aGVyZSByXjIgKyByXjIgPSByYWRpYWxPZmZzZXReMlxuICAgICAgICBjb25zdCBoeXBvdGVudXNlID0gcmFkaWFsT2Zmc2V0IC8gTWF0aC5zcXJ0KDIpO1xuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgICAgICB5ID0gaHlwb3RlbnVzZSAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgICAgIHkgPSAtaHlwb3RlbnVzZSArIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB5ID0gLXJhZGlhbE9mZnNldCArIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB5ID0gcmFkaWFsT2Zmc2V0IC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgICAgICB4ID0gLWh5cG90ZW51c2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgICAgICB4ID0gaHlwb3RlbnVzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgIHggPSByYWRpYWxPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgeCA9IC1yYWRpYWxPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbeCwgeV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbVRleHRPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikge1xuICAgICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgICAvLyBVc2UgYWJzb2x1dGUgb2Zmc2V0IHZhbHVlcy5cbiAgICAgICAgb2Zmc2V0WCA9IE1hdGguYWJzKG9mZnNldFgpO1xuICAgICAgICBvZmZzZXRZID0gTWF0aC5hYnMob2Zmc2V0WSk7XG5cbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgeSA9IG9mZnNldFkgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB5ID0gLW9mZnNldFkgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgeCA9IC1vZmZzZXRYO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgIHggPSBvZmZzZXRYO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cblxuICAgIHJldHVybiAob2Zmc2V0WzFdICE9PSBJTlZBTElEX1RFWFRfT0ZGU0VUKSA/IGZyb21UZXh0T2Zmc2V0KGFuY2hvciwgb2Zmc2V0WzBdLCBvZmZzZXRbMV0pIDogZnJvbVJhZGlhbE9mZnNldChhbmNob3IsIG9mZnNldFswXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtU3ltYm9sTGF5b3V0KGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tfOiBzdHJpbmddOiB7W251bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB7W186IHN0cmluZ106IHtbbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICBidWNrZXQuY3JlYXRlQXJyYXlzKCk7XG5cbiAgICBjb25zdCB0aWxlU2l6ZSA9IDUxMiAqIGJ1Y2tldC5vdmVyc2NhbGluZztcbiAgICBidWNrZXQudGlsZVBpeGVsUmF0aW8gPSBFWFRFTlQgLyB0aWxlU2l6ZTtcbiAgICBidWNrZXQuY29tcGFyZVRleHQgPSB7fTtcbiAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gZmFsc2U7XG5cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGJ1Y2tldC5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7XG5cbiAgICBjb25zdCBzaXplcyA9IHt9O1xuXG4gICAgaWYgKGJ1Y2tldC50ZXh0U2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgY29uc3Qge21pblpvb20sIG1heFpvb219ID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICAgICAgc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzID0gW1xuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pLCBjYW5vbmljYWwpLFxuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pLCBjYW5vbmljYWwpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKGJ1Y2tldC5pY29uU2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgY29uc3Qge21pblpvb20sIG1heFpvb219ID0gYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgc2l6ZXMuY29tcG9zaXRlSWNvblNpemVzID0gW1xuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pLCBjYW5vbmljYWwpLFxuICAgICAgICAgICAgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pLCBjYW5vbmljYWwpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc2l6ZXMubGF5b3V0VGV4dFNpemUgPSB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoYnVja2V0Lnpvb20gKyAxKSwgY2Fub25pY2FsKTtcbiAgICBzaXplcy5sYXlvdXRJY29uU2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhidWNrZXQuem9vbSArIDEpLCBjYW5vbmljYWwpO1xuICAgIHNpemVzLnRleHRNYXhTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKDE4KSk7XG5cbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gbGF5b3V0LmdldCgndGV4dC1saW5lLWhlaWdodCcpICogT05FX0VNO1xuICAgIGNvbnN0IHRleHRBbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCc7XG4gICAgY29uc3Qga2VlcFVwcmlnaHQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWtlZXAtdXByaWdodCcpO1xuICAgIGNvbnN0IHRleHRTaXplID0gbGF5b3V0LmdldCgndGV4dC1zaXplJyk7XG5cbiAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgYnVja2V0LmZlYXR1cmVzKSB7XG4gICAgICAgIGNvbnN0IGZvbnRzdGFjayA9IGxheW91dC5nZXQoJ3RleHQtZm9udCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLmpvaW4oJywnKTtcbiAgICAgICAgY29uc3QgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSA9IHRleHRTaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCBsYXlvdXRUZXh0U2l6ZSA9IHNpemVzLmxheW91dFRleHRTaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCBsYXlvdXRJY29uU2l6ZSA9IHNpemVzLmxheW91dEljb25TaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlZFRleHRPcmllbnRhdGlvbnMgPSB7XG4gICAgICAgICAgICBob3Jpem9udGFsOiB7fSxcbiAgICAgICAgICAgIHZlcnRpY2FsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGZlYXR1cmUudGV4dDtcbiAgICAgICAgbGV0IHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCB1bmZvcm1hdHRlZFRleHQgPSB0ZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nID0gbGF5b3V0LmdldCgndGV4dC1sZXR0ZXItc3BhY2luZycpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpICogT05FX0VNO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2luZ0lmQWxsb3dlZCA9IGFsbG93c0xldHRlclNwYWNpbmcodW5mb3JtYXR0ZWRUZXh0KSA/IHNwYWNpbmcgOiAwO1xuXG4gICAgICAgICAgICBjb25zdCB0ZXh0QW5jaG9yID0gbGF5b3V0LmdldCgndGV4dC1hbmNob3InKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlVGV4dEFuY2hvciA9IGxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAgICAgICAgIGlmICghdmFyaWFibGVUZXh0QW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkaWFsT2Zmc2V0ID0gbGF5b3V0LmdldCgndGV4dC1yYWRpYWwtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgICAgICAgICAgLy8gTGF5ZXJzIHdpdGggdmFyaWFibGUgYW5jaG9ycyB1c2UgdGhlIGB0ZXh0LXJhZGlhbC1vZmZzZXRgIHByb3BlcnR5IGFuZCB0aGUgW3gsIHldIG9mZnNldCB2ZWN0b3JcbiAgICAgICAgICAgICAgICAvLyBpcyBjYWxjdWxhdGVkIGF0IHBsYWNlbWVudCB0aW1lIGluc3RlYWQgb2YgbGF5b3V0IHRpbWVcbiAgICAgICAgICAgICAgICBpZiAocmFkaWFsT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBzcGVjIHNheXMgZG9uJ3QgdXNlIGB0ZXh0LW9mZnNldGAgYW5kIGB0ZXh0LXJhZGlhbC1vZmZzZXRgIHRvZ2V0aGVyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IHNwZWNpZnkgd2hhdCBoYXBwZW5zIGlmIHlvdSB1c2UgYm90aC4gV2UgZ28gd2l0aCB0aGUgcmFkaWFsIG9mZnNldC5cbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IGV2YWx1YXRlVmFyaWFibGVPZmZzZXQodGV4dEFuY2hvciwgW3JhZGlhbE9mZnNldCAqIE9ORV9FTSwgSU5WQUxJRF9URVhUX09GRlNFVF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSAobGF5b3V0LmdldCgndGV4dC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKS5tYXAodCA9PiB0ICogT05FX0VNKTogYW55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0ZXh0SnVzdGlmeSA9IHRleHRBbG9uZ0xpbmUgP1xuICAgICAgICAgICAgICAgIFwiY2VudGVyXCIgOlxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ3RleHQtanVzdGlmeScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuXG4gICAgICAgICAgICBjb25zdCBzeW1ib2xQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHN5bWJvbFBsYWNlbWVudCA9PT0gJ3BvaW50JyA/XG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1tYXgtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSAqIE9ORV9FTSA6XG4gICAgICAgICAgICAgICAgMDtcblxuICAgICAgICAgICAgY29uc3QgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHVuZm9ybWF0dGVkVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVmVydGljYWwgUE9JIGxhYmVsIHBsYWNlbWVudCBpcyBtZWFudCB0byBiZSB1c2VkIGZvciBzY3JpcHRzIHRoYXQgc3VwcG9ydCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAvLyB3cml0aW5nIG1vZGUsIHRodXMsIGRlZmF1bHQgbGVmdCBqdXN0aWZpY2F0aW9uIGlzIHVzZWQuIElmIExhdGluXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdHMgd291bGQgbmVlZCB0byBiZSBzdXBwb3J0ZWQsIHRoaXMgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IG90aGVyIGp1c3RpZmljYXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlZnQnLCBzcGFjaW5nSWZBbGxvd2VkLCB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCwgdHJ1ZSwgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBsYXllciB1c2VzIHRleHQtdmFyaWFibGUtYW5jaG9yLCBnZW5lcmF0ZSBzaGFwaW5ncyBmb3IgYWxsIGp1c3RpZmljYXRpb24gcG9zc2liaWxpdGllcy5cbiAgICAgICAgICAgIGlmICghdGV4dEFsb25nTGluZSAmJiB2YXJpYWJsZVRleHRBbmNob3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqdXN0aWZpY2F0aW9ucyA9IHRleHRKdXN0aWZ5ID09PSBcImF1dG9cIiA/XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVGV4dEFuY2hvci5tYXAoYSA9PiBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKGEpKSA6XG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0SnVzdGlmeV07XG5cbiAgICAgICAgICAgICAgICBsZXQgc2luZ2xlTGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwganVzdGlmaWNhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbjogVGV4dEp1c3RpZnkgPSBqdXN0aWZpY2F0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2hhcGluZyBmb3IgdGhlIGZpcnN0IGp1c3RpZmljYXRpb24gd2FzIG9ubHkgYSBzaW5nbGUgbGluZSwgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiByZS11c2UgaXQgZm9yIHRoZSBvdGhlciBqdXN0aWZpY2F0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dID0gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdXNpbmcgdGV4dC12YXJpYWJsZS1hbmNob3IgZm9yIHRoZSBsYXllciwgd2UgdXNlIGEgY2VudGVyIGFuY2hvciBmb3IgYWxsIHNoYXBpbmdzIGFuZCBhcHBseVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG9mZnNldHMgZm9yIHRoZSBhbmNob3IgaW4gdGhlIHBsYWNlbWVudCBzdGVwLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmaWNhdGlvbiwgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUuaG9yaXpvbnRhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0gPSBzaGFwaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUxpbmUgPSBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhZGRWZXJ0aWNhbFNoYXBpbmdGb3JQb2ludExhYmVsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRleHRKdXN0aWZ5ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0SnVzdGlmeSA9IGdldEFuY2hvckp1c3RpZmljYXRpb24odGV4dEFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSG9yaXpvbnRhbCBwb2ludCBvciBsaW5lIGxhYmVsLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgdGV4dEFuY2hvciwgdGV4dEp1c3RpZnksIHNwYWNpbmdJZkFsbG93ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsLCBmYWxzZSwgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgICAgICAgICAgICAgaWYgKHNoYXBpbmcpIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFt0ZXh0SnVzdGlmeV0gPSBzaGFwaW5nO1xuXG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwgcG9pbnQgbGFiZWwgKGlmIGFsbG93VmVydGljYWxQbGFjZW1lbnQgaXMgZW5hYmxlZCkuXG4gICAgICAgICAgICAgICAgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbGl6ZWQgbGluZSBsYWJlbC5cbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSh1bmZvcm1hdHRlZFRleHQpICYmIHRleHRBbG9uZ0xpbmUgJiYga2VlcFVwcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLCB0ZXh0SnVzdGlmeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nSWZBbGxvd2VkLCB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaGFwZWRJY29uO1xuICAgICAgICBsZXQgaXNTREZJY29uID0gZmFsc2U7XG4gICAgICAgIGlmIChmZWF0dXJlLmljb24gJiYgZmVhdHVyZS5pY29uLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gaW1hZ2VNYXBbZmVhdHVyZS5pY29uLm5hbWVdO1xuICAgICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgc2hhcGVkSWNvbiA9IHNoYXBlSWNvbihcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnNbZmVhdHVyZS5pY29uLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLWFuY2hvcicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpKTtcbiAgICAgICAgICAgICAgICBpc1NERkljb24gPSBpbWFnZS5zZGY7XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5zZGZJY29ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5zZGZJY29ucyA9IGltYWdlLnNkZjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5zZGZJY29ucyAhPT0gaW1hZ2Uuc2RmKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWFnZS5waXhlbFJhdGlvICE9PSBidWNrZXQucGl4ZWxSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dC5nZXQoJ2ljb24tcm90YXRlJykuY29uc3RhbnRPcigxKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbnNOZWVkTGluZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCkgfHwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbDtcbiAgICAgICAgYnVja2V0Lmljb25zSW5UZXh0ID0gc2hhcGVkVGV4dCA/IHNoYXBlZFRleHQuaWNvbnNJblRleHQgOiBmYWxzZTtcbiAgICAgICAgaWYgKHNoYXBlZFRleHQgfHwgc2hhcGVkSWNvbikge1xuICAgICAgICAgICAgYWRkRmVhdHVyZShidWNrZXQsIGZlYXR1cmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGltYWdlTWFwLCBzaXplcywgbGF5b3V0VGV4dFNpemUsIGxheW91dEljb25TaXplLCB0ZXh0T2Zmc2V0LCBpc1NERkljb24sIGNhbm9uaWNhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd0NvbGxpc2lvbkJveGVzKSB7XG4gICAgICAgIGJ1Y2tldC5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpO1xuICAgIH1cbn1cblxuLy8gQ2hvb3NlIHRoZSBqdXN0aWZpY2F0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBUZXh0QW5jaG9yXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihhbmNob3I6IFRleHRBbmNob3IpOiBUZXh0SnVzdGlmeSAge1xuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICB9XG4gICAgcmV0dXJuICdjZW50ZXInO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgZmVhdHVyZSBhbmQgaXRzIHNoYXBlZCB0ZXh0IGFuZCBpY29uIGRhdGEsIGFkZCBhICdzeW1ib2xcbiAqIGluc3RhbmNlJyBmb3IgZWFjaCBfcG9zc2libGVfIHBsYWNlbWVudCBvZiB0aGUgc3ltYm9sIGZlYXR1cmUuXG4gKiAoQXQgcmVuZGVyIHRpbWVQbGFjZVN5bWJvbHMjcGxhY2UoKSBzZWxlY3RzIHdoaWNoIG9mIHRoZXNlIGluc3RhbmNlcyB0b1xuICogc2hvdyBvciBoaWRlIGJhc2VkIG9uIGNvbGxpc2lvbnMgd2l0aCBzeW1ib2xzIGluIG90aGVyIGxheWVycy4pXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRGZWF0dXJlKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBTeW1ib2xGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zOiBhbnksXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uIHwgdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcyxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0SWNvblNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICAgaXNTREZJY29uOiBib29sZWFuLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxhYmVscyB0aGF0IGp1bXAgYXJvdW5kIHdoZW4gem9vbWluZyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIGEgdGV4dC1zaXplIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB6b29tIGxldmVscy5cbiAgICAvLyBidWNrZXQgY2FsY3VsYXRlcyB0ZXh0LXNpemUgYXQgYSBoaWdoIHpvb20gbGV2ZWwgc28gdGhhdCBhbGwgdGlsZXMgY2FuXG4gICAgLy8gdXNlIHRoZSBzYW1lIHZhbHVlIHdoZW4gY2FsY3VsYXRpbmcgYW5jaG9yIHBvc2l0aW9ucy5cbiAgICBsZXQgdGV4dE1heFNpemUgPSBzaXplcy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgaWYgKHRleHRNYXhTaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dE1heFNpemUgPSBsYXlvdXRUZXh0U2l6ZTtcbiAgICB9XG4gICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgY29uc3QgaWNvbk9mZnNldCA9IGxheW91dC5nZXQoJ2ljb24tb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgY29uc3QgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nID0gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk7XG4gICAgY29uc3QgZ2x5cGhTaXplID0gMjQsXG4gICAgICAgIGZvbnRTY2FsZSA9IGxheW91dFRleHRTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICB0ZXh0Qm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBmb250U2NhbGUsXG4gICAgICAgIHRleHRNYXhCb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIHRleHRNYXhTaXplIC8gZ2x5cGhTaXplLFxuICAgICAgICBpY29uQm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXRJY29uU2l6ZSxcbiAgICAgICAgc3ltYm9sTWluRGlzdGFuY2UgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiBsYXlvdXQuZ2V0KCdzeW1ib2wtc3BhY2luZycpLFxuICAgICAgICB0ZXh0UGFkZGluZyA9IGxheW91dC5nZXQoJ3RleHQtcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICBpY29uUGFkZGluZyA9IGxheW91dC5nZXQoJ2ljb24tcGFkZGluZycpICogYnVja2V0LnRpbGVQaXhlbFJhdGlvLFxuICAgICAgICB0ZXh0TWF4QW5nbGUgPSBsYXlvdXQuZ2V0KCd0ZXh0LW1heC1hbmdsZScpIC8gMTgwICogTWF0aC5QSSxcbiAgICAgICAgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgaWNvbkFsb25nTGluZSA9IGxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JyxcbiAgICAgICAgc3ltYm9sUGxhY2VtZW50ID0gbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpLFxuICAgICAgICB0ZXh0UmVwZWF0RGlzdGFuY2UgPSBzeW1ib2xNaW5EaXN0YW5jZSAvIDI7XG5cbiAgICBjb25zdCBpY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKTtcbiAgICBsZXQgdmVydGljYWxseVNoYXBlZEljb247XG4gICAgLy8gQWRqdXN0IHNoYXBlZCBpY29uIHNpemUgd2hlbiBpY29uLXRleHQtZml0IGlzIHVzZWQuXG4gICAgaWYgKHNoYXBlZEljb24gJiYgaWNvblRleHRGaXQgIT09ICdub25lJykge1xuICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdmVydGljYWxseVNoYXBlZEljb24gPSBmaXRJY29uVG9UZXh0KHNoYXBlZEljb24sIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwsIGljb25UZXh0Rml0LFxuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQtcGFkZGluZycpLCBpY29uT2Zmc2V0LCBmb250U2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcpIHtcbiAgICAgICAgICAgIHNoYXBlZEljb24gPSBmaXRJY29uVG9UZXh0KHNoYXBlZEljb24sIGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZywgaWNvblRleHRGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0LXBhZGRpbmcnKSwgaWNvbk9mZnNldCwgZm9udFNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkZFN5bWJvbEF0QW5jaG9yID0gKGxpbmUsIGFuY2hvcikgPT4ge1xuICAgICAgICBpZiAoYW5jaG9yLnggPCAwIHx8IGFuY2hvci54ID49IEVYVEVOVCB8fCBhbmNob3IueSA8IDAgfHwgYW5jaG9yLnkgPj0gRVhURU5UKSB7XG4gICAgICAgICAgICAvLyBTeW1ib2wgbGF5ZXJzIGFyZSBkcmF3biBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzLCBXZSBmaWx0ZXIgb3V0IHN5bWJvbHNcbiAgICAgICAgICAgIC8vIG91dHNpZGUgb3VyIHRpbGUgYm91bmRhcmllcyAod2hpY2ggbWF5IGJlIGluY2x1ZGVkIGluIHZlY3RvciB0aWxlIGJ1ZmZlcnMpXG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IGRvdWJsZS1kcmF3aW5nIHN5bWJvbHMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRTeW1ib2woYnVja2V0LCBhbmNob3IsIGxpbmUsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMsIHNoYXBlZEljb24sIGltYWdlTWFwLCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiwgYnVja2V0LmxheWVyc1swXSxcbiAgICAgICAgICAgIGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheSwgZmVhdHVyZS5pbmRleCwgZmVhdHVyZS5zb3VyY2VMYXllckluZGV4LCBidWNrZXQuaW5kZXgsXG4gICAgICAgICAgICB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgaWNvbkJveFNjYWxlLCBpY29uUGFkZGluZywgaWNvbkFsb25nTGluZSwgaWNvbk9mZnNldCxcbiAgICAgICAgICAgIGZlYXR1cmUsIHNpemVzLCBpc1NERkljb24sIGNhbm9uaWNhbCk7XG4gICAgfTtcblxuICAgIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lJykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY2xpcExpbmUoZmVhdHVyZS5nZW9tZXRyeSwgMCwgMCwgRVhURU5ULCBFWFRFTlQpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3JzID0gZ2V0QW5jaG9ycyhcbiAgICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICAgIHN5bWJvbE1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRNYXhBbmdsZSxcbiAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uLFxuICAgICAgICAgICAgICAgIGdseXBoU2l6ZSxcbiAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgYnVja2V0Lm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgIEVYVEVOVFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIGFuY2hvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZGVmYXVsdEhvcml6b250YWxTaGFwaW5nO1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVkVGV4dCB8fCAhYW5jaG9ySXNUb29DbG9zZShidWNrZXQsIHNoYXBlZFRleHQudGV4dCwgdGV4dFJlcGVhdERpc3RhbmNlLCBhbmNob3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lLWNlbnRlcicpIHtcbiAgICAgICAgLy8gTm8gY2xpcHBpbmcsIG11bHRpcGxlIGxpbmVzIHBlciBmZWF0dXJlIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIFwibGluZXNcIiB3aXRoIG9ubHkgb25lIHBvaW50IGFyZSBpZ25vcmVkIGFzIGluIGNsaXBMaW5lc1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGdldENlbnRlckFuY2hvcihcbiAgICAgICAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE1heEFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGZlYXR1cmUuZ2VvbWV0cnksIDApKSB7XG4gICAgICAgICAgICAvLyAxNiBoZXJlIHJlcHJlc2VudHMgMiBwaXhlbHNcbiAgICAgICAgICAgIGNvbnN0IHBvaSA9IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkocG9seWdvbiwgMTYpO1xuICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IocG9seWdvblswXSwgbmV3IEFuY2hvcihwb2kueCwgcG9pLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM4MDhcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIG5ldyBBbmNob3IobGluZVswXS54LCBsaW5lWzBdLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IoW3BvaW50XSwgbmV3IEFuY2hvcihwb2ludC54LCBwb2ludC55LCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IE1BWF9HTFlQSF9JQ09OX1NJWkUgPSAyNTU7XG5jb25zdCBNQVhfUEFDS0VEX1NJWkUgPSBNQVhfR0xZUEhfSUNPTl9TSVpFICogU0laRV9QQUNLX0ZBQ1RPUjtcbmV4cG9ydCB7TUFYX1BBQ0tFRF9TSVpFfTtcblxuZnVuY3Rpb24gYWRkVGV4dFZlcnRpY2VzKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXJyYXk6IHtsaW5lU3RhcnRJbmRleDogbnVtYmVyLCBsaW5lTGVuZ3RoOiBudW1iZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50VHlwZXM6IEFycmF5PCd2ZXJ0aWNhbCcgfCAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzOiB7W186IHN0cmluZ106IG51bWJlcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFNpemVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgY29uc3QgZ2x5cGhRdWFkcyA9IGdldEdseXBoUXVhZHMoYW5jaG9yLCBzaGFwZWRUZXh0LCB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCB0ZXh0QWxvbmdMaW5lLCBmZWF0dXJlLCBpbWFnZU1hcCwgYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgIGxldCB0ZXh0U2l6ZURhdGEgPSBudWxsO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHRleHRTaXplRGF0YSA9IFtcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwidGV4dC1zaXplXCIgaXMgPj0gJHtNQVhfR0xZUEhfSUNPTl9TSVpFfS4gUmVkdWNlIHlvdXIgXCJ0ZXh0LXNpemVcIi5gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgdGV4dFNpemVEYXRhID0gW1xuICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplc1swXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbClcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSB8fCB0ZXh0U2l6ZURhdGFbMV0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcInRleHQtc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgYnVja2V0LnRleHQsXG4gICAgICAgIGdseXBoUXVhZHMsXG4gICAgICAgIHRleHRTaXplRGF0YSxcbiAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgdGV4dEFsb25nTGluZSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgcGxhY2VkSWNvbkluZGV4LFxuICAgICAgICBjYW5vbmljYWwpO1xuXG4gICAgLy8gVGhlIHBsYWNlZFN5bWJvbEFycmF5IGlzIHVzZWQgYXQgcmVuZGVyIHRpbWUgaW4gZHJhd1RpbGVTeW1ib2xzXG4gICAgLy8gVGhlc2UgaW5kaWNlcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIGFycmF5IGF0IGNvbGxpc2lvbiBkZXRlY3Rpb24gdGltZVxuICAgIGZvciAoY29uc3QgcGxhY2VtZW50VHlwZSBvZiBwbGFjZW1lbnRUeXBlcykge1xuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlc1twbGFjZW1lbnRUeXBlXSA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBoUXVhZHMubGVuZ3RoICogNDtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKGhvcml6b250YWxTaGFwaW5nOiB7W186IFRleHRKdXN0aWZ5XTogU2hhcGluZ30pOiBTaGFwaW5nIHwgbnVsbCB7XG4gICAgLy8gV2UgZG9uJ3QgY2FyZSB3aGljaCBzaGFwaW5nIHdlIGdldCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3IgY29sbGlzaW9uIHB1cnBvc2VzXG4gICAgLy8gYW5kIGFsbCB0aGUganVzdGlmaWNhdGlvbnMgaGF2ZSB0aGUgc2FtZSBjb2xsaXNpb24gYm94XG4gICAgZm9yIChjb25zdCBqdXN0aWZpY2F0aW9uOiBhbnkgaW4gaG9yaXpvbnRhbFNoYXBpbmcpIHtcbiAgICAgICAgcmV0dXJuIGhvcml6b250YWxTaGFwaW5nW2p1c3RpZmljYXRpb25dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbGFiZWwgJiBpY29uIHBsYWNlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRTeW1ib2woYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgbGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnM6IGFueSxcbiAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgdmVydGljYWxseVNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uIHwgdm9pZCxcbiAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dFBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgaWNvbkJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgaWNvblBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBpY29uQWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIGljb25PZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgaXNTREZJY29uOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgY29uc3QgbGluZUFycmF5ID0gYnVja2V0LmFkZFRvTGluZVZlcnRleEFycmF5KGFuY2hvciwgbGluZSk7XG5cbiAgICBsZXQgdGV4dENvbGxpc2lvbkZlYXR1cmUsIGljb25Db2xsaXNpb25GZWF0dXJlLCB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlLCB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlO1xuXG4gICAgbGV0IG51bUljb25WZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bVZlcnRpY2FsSWNvblZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgPSAwO1xuICAgIGxldCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPSAwO1xuICAgIGxldCBwbGFjZWRJY29uU3ltYm9sSW5kZXggPSAtMTtcbiAgICBsZXQgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPSAtMTtcbiAgICBjb25zdCBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcyA9IHt9O1xuICAgIGxldCBrZXkgPSBtdXJtdXIzKCcnKTtcblxuICAgIGxldCB0ZXh0T2Zmc2V0MCA9IDA7XG4gICAgbGV0IHRleHRPZmZzZXQxID0gMDtcbiAgICBpZiAobGF5ZXIuX3VuZXZhbHVhdGVkTGF5b3V0LmdldFZhbHVlKCd0ZXh0LXJhZGlhbC1vZmZzZXQnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIFt0ZXh0T2Zmc2V0MCwgdGV4dE9mZnNldDFdID0gKGxheWVyLmxheW91dC5nZXQoJ3RleHQtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkubWFwKHQgPT4gdCAqIE9ORV9FTSk6IGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dE9mZnNldDAgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJhZGlhbC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSAqIE9ORV9FTTtcbiAgICAgICAgdGV4dE9mZnNldDEgPSBJTlZBTElEX1RFWFRfT0ZGU0VUO1xuICAgIH1cblxuICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IHRleHRSb3RhdGlvbiA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsVGV4dFJvdGF0aW9uID0gdGV4dFJvdGF0aW9uICsgOTAuMDtcbiAgICAgICAgY29uc3QgdmVydGljYWxTaGFwaW5nID0gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbDtcbiAgICAgICAgdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHZlcnRpY2FsU2hhcGluZywgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCB2ZXJ0aWNhbFRleHRSb3RhdGlvbik7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsbHlTaGFwZWRJY29uKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgdmVydGljYWxseVNoYXBlZEljb24sIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIGJ1Y2tldC5vdmVyc2NhbGluZywgdmVydGljYWxUZXh0Um90YXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9QbGFjZSBpY29uIGZpcnN0LCBzbyB0ZXh0IGNhbiBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBpbmRleCBpbiB0aGUgcGxhY2VkIHN5bWJvbCBhcnJheS5cbiAgICAvL1RleHQgc3ltYm9scyBjYW4gbGF6aWx5IHNoaWZ0IGF0IHJlbmRlci10aW1lIGJlY2F1c2Ugb2YgdmFyaWFibGUgYW5jaG9yIHBsYWNlbWVudC5cbiAgICAvL0lmIHRoZSBzdHlsZSBzcGVjaWZpZXMgYW4gYGljb24tdGV4dC1maXRgIHRoZW4gdGhlIGljb24gd291bGQgaGF2ZSB0byBzaGlmdCBhbG9uZyB3aXRoIGl0LlxuICAgIC8vIEZvciBtb3JlIGluZm8gY2hlY2sgYHVwZGF0ZVZhcmlhYmxlQW5jaG9yc2AgaW4gYGRyYXdfc3ltYm9sLmpzYCAuXG4gICAgaWYgKHNoYXBlZEljb24pIHtcbiAgICAgICAgY29uc3QgaWNvblJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICBjb25zdCBoYXNJY29uVGV4dEZpdCA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnO1xuICAgICAgICBjb25zdCBpY29uUXVhZHMgPSBnZXRJY29uUXVhZHMoc2hhcGVkSWNvbiwgaWNvblJvdGF0ZSwgaXNTREZJY29uLCBoYXNJY29uVGV4dEZpdCk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsSWNvblF1YWRzID0gdmVydGljYWxseVNoYXBlZEljb24gPyBnZXRJY29uUXVhZHModmVydGljYWxseVNoYXBlZEljb24sIGljb25Sb3RhdGUsIGlzU0RGSWNvbiwgaGFzSWNvblRleHRGaXQpIDogdW5kZWZpbmVkO1xuICAgICAgICBpY29uQ29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBsaW5lLCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHNoYXBlZEljb24sIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIC8qYWxpZ24gYm94ZXMgdG8gbGluZSovZmFsc2UsIGJ1Y2tldC5vdmVyc2NhbGluZywgaWNvblJvdGF0ZSk7XG5cbiAgICAgICAgbnVtSWNvblZlcnRpY2VzID0gaWNvblF1YWRzLmxlbmd0aCAqIDQ7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBsZXQgaWNvblNpemVEYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgIGljb25TaXplRGF0YSA9IFtcbiAgICAgICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1zaXplJykuZXZhbHVhdGUoZmVhdHVyZSwge30pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGljb25TaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcImljb24tc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwiaWNvbi1zaXplXCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgICAgIGljb25TaXplRGF0YSA9IFtcbiAgICAgICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogc2l6ZXMuY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLFxuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaWNvblNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFIHx8IGljb25TaXplRGF0YVsxXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcImljb24tc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwiaWNvbi1zaXplXCIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uLFxuICAgICAgICAgICAgaWNvblF1YWRzLFxuICAgICAgICAgICAgaWNvblNpemVEYXRhLFxuICAgICAgICAgICAgaWNvbk9mZnNldCxcbiAgICAgICAgICAgIGljb25BbG9uZ0xpbmUsXG4gICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgICAgIC8vIFRoZSBpY29uIGl0c2VsZiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgc3ltYm9sIHNpbmNlIHRoZSB0ZXh0IGlzbnQgcGxhY2VkIHlldFxuICAgICAgICAgICAgLTEsIGNhbm9uaWNhbCk7XG5cbiAgICAgICAgcGxhY2VkSWNvblN5bWJvbEluZGV4ID0gYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAodmVydGljYWxJY29uUXVhZHMpIHtcbiAgICAgICAgICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzID0gdmVydGljYWxJY29uUXVhZHMubGVuZ3RoICogNDtcblxuICAgICAgICAgICAgYnVja2V0LmFkZFN5bWJvbHMoXG4gICAgICAgICAgICAgICAgYnVja2V0Lmljb24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxJY29uUXVhZHMsXG4gICAgICAgICAgICAgICAgaWNvblNpemVEYXRhLFxuICAgICAgICAgICAgICAgIGljb25PZmZzZXQsXG4gICAgICAgICAgICAgICAgaWNvbkFsb25nTGluZSxcbiAgICAgICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgICAgIFdyaXRpbmdNb2RlLnZlcnRpY2FsLFxuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgbGluZUFycmF5LmxpbmVMZW5ndGgsXG4gICAgICAgICAgICAgICAgLy8gVGhlIGljb24gaXRzZWxmIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBzeW1ib2wgc2luY2UgdGhlIHRleHQgaXNudCBwbGFjZWQgeWV0XG4gICAgICAgICAgICAgICAgLTEsIGNhbm9uaWNhbCk7XG5cbiAgICAgICAgICAgIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID0gYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QganVzdGlmaWNhdGlvbjogYW55IGluIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCkge1xuICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dO1xuXG4gICAgICAgIGlmICghdGV4dENvbGxpc2lvbkZlYXR1cmUpIHtcbiAgICAgICAgICAgIGtleSA9IG11cm11cjMoc2hhcGluZy50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRSb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICAgICAgLy8gQXMgYSBjb2xsaXNpb24gYXBwcm94aW1hdGlvbiwgd2UgY2FuIHVzZSBlaXRoZXIgdGhlIHZlcnRpY2FsIG9yIGFueSBvZiB0aGUgaG9yaXpvbnRhbCB2ZXJzaW9ucyBvZiB0aGUgZmVhdHVyZVxuICAgICAgICAgICAgLy8gV2UncmUgY291bnRpbmcgb24gYWxsIHZlcnNpb25zIGhhdmluZyBzaW1pbGFyIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHRleHRDb2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGxpbmUsIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgc2hhcGluZywgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgYnVja2V0Lm92ZXJzY2FsaW5nLCB0ZXh0Um90YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbmdsZUxpbmUgPSBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGggPT09IDE7XG4gICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzICs9IGFkZFRleHRWZXJ0aWNlcyhcbiAgICAgICAgICAgIGJ1Y2tldCwgYW5jaG9yLCBzaGFwaW5nLCBpbWFnZU1hcCwgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsIHRleHRPZmZzZXQsIGxpbmVBcnJheSxcbiAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPyBXcml0aW5nTW9kZS5ob3Jpem9udGFsIDogV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksXG4gICAgICAgICAgICBzaW5nbGVMaW5lID8gKE9iamVjdC5rZXlzKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk6IGFueSkgOiBbanVzdGlmaWNhdGlvbl0sXG4gICAgICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcywgcGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcywgY2Fub25pY2FsKTtcblxuICAgICAgICBpZiAoc2luZ2xlTGluZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMgKz0gYWRkVGV4dFZlcnRpY2VzKFxuICAgICAgICAgICAgYnVja2V0LCBhbmNob3IsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwsIGltYWdlTWFwLCBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSxcbiAgICAgICAgICAgIHRleHRPZmZzZXQsIGxpbmVBcnJheSwgV3JpdGluZ01vZGUudmVydGljYWwsIFsndmVydGljYWwnXSwgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMsIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcywgY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Qm94U3RhcnRJbmRleCA9IHRleHRDb2xsaXNpb25GZWF0dXJlID8gdGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdGV4dEJveEVuZEluZGV4ID0gdGV4dENvbGxpc2lvbkZlYXR1cmUgPyB0ZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4ID0gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdmVydGljYWxUZXh0Qm94RW5kSW5kZXggPSB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCBpY29uQm94U3RhcnRJbmRleCA9IGljb25Db2xsaXNpb25GZWF0dXJlID8gaWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgaWNvbkJveEVuZEluZGV4ID0gaWNvbkNvbGxpc2lvbkZlYXR1cmUgPyBpY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4ID0gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdmVydGljYWxJY29uQm94RW5kSW5kZXggPSB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoYnVja2V0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoID49IFN5bWJvbEJ1Y2tldC5NQVhfR0xZUEhTKSB3YXJuT25jZShcbiAgICAgICAgXCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDdcIlxuICAgICk7XG5cbiAgICBpZiAoZmVhdHVyZS5zb3J0S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYnVja2V0LmFkZFRvU29ydEtleVJhbmdlcyhidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmVtcGxhY2VCYWNrKFxuICAgICAgICBhbmNob3IueCxcbiAgICAgICAgYW5jaG9yLnksXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnJpZ2h0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5yaWdodCA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5jZW50ZXIgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmNlbnRlciA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0IDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnZlcnRpY2FsIHx8IC0xLFxuICAgICAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LFxuICAgICAgICBrZXksXG4gICAgICAgIHRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICB0ZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHZlcnRpY2FsVGV4dEJveEVuZEluZGV4LFxuICAgICAgICBpY29uQm94U3RhcnRJbmRleCxcbiAgICAgICAgaWNvbkJveEVuZEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCxcbiAgICAgICAgZmVhdHVyZUluZGV4LFxuICAgICAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICBudW1JY29uVmVydGljZXMsXG4gICAgICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzLFxuICAgICAgICAwLFxuICAgICAgICB0ZXh0Qm94U2NhbGUsXG4gICAgICAgIHRleHRPZmZzZXQwLFxuICAgICAgICB0ZXh0T2Zmc2V0MSk7XG59XG5cbmZ1bmN0aW9uIGFuY2hvcklzVG9vQ2xvc2UoYnVja2V0OiBhbnksIHRleHQ6IHN0cmluZywgcmVwZWF0RGlzdGFuY2U6IG51bWJlciwgYW5jaG9yOiBQb2ludCkge1xuICAgIGNvbnN0IGNvbXBhcmVUZXh0ID0gYnVja2V0LmNvbXBhcmVUZXh0O1xuICAgIGlmICghKHRleHQgaW4gY29tcGFyZVRleHQpKSB7XG4gICAgICAgIGNvbXBhcmVUZXh0W3RleHRdID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3RoZXJBbmNob3JzID0gY29tcGFyZVRleHRbdGV4dF07XG4gICAgICAgIGZvciAobGV0IGsgPSBvdGhlckFuY2hvcnMubGVuZ3RoIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgICAgIGlmIChhbmNob3IuZGlzdChvdGhlckFuY2hvcnNba10pIDwgcmVwZWF0RGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHdpdGhpbiByZXBlYXREaXN0YW5jZSBvZiBvbmUgYW5jaG9yLCBzdG9wIGxvb2tpbmdcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiBhbmNob3IgaXMgbm90IHdpdGhpbiByZXBlYXREaXN0YW5jZSBvZiBhbnkgb3RoZXIgYW5jaG9yLCBhZGQgdG8gYXJyYXlcbiAgICBjb21wYXJlVGV4dFt0ZXh0XS5wdXNoKGFuY2hvcik7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLFxuICAgIGNvbGxpc2lvblZlcnRleEF0dHJpYnV0ZXMsXG4gICAgY29sbGlzaW9uQm94TGF5b3V0LFxuICAgIGNvbGxpc2lvbkNpcmNsZUxheW91dCxcbiAgICBkeW5hbWljTGF5b3V0QXR0cmlidXRlc1xufSBmcm9tICcuL3N5bWJvbF9hdHRyaWJ1dGVzJztcblxuaW1wb3J0IHtTeW1ib2xMYXlvdXRBcnJheSxcbiAgICBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3ltYm9sT3BhY2l0eUFycmF5LFxuICAgIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LFxuICAgIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFBsYWNlZFN5bWJvbEFycmF5LFxuICAgIFN5bWJvbEluc3RhbmNlQXJyYXksXG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXlcbn0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1RyaWFuZ2xlSW5kZXhBcnJheSwgTGluZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHRyYW5zZm9ybVRleHQgZnJvbSAnLi4vLi4vc3ltYm9sL3RyYW5zZm9ybV90ZXh0JztcbmltcG9ydCBtZXJnZUxpbmVzIGZyb20gJy4uLy4uL3N5bWJvbC9tZXJnZWxpbmVzJztcbmltcG9ydCB7YWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSwgc3RyaW5nQ29udGFpbnNSVExUZXh0fSBmcm9tICcuLi8uLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vLi4vc3ltYm9sL3NoYXBpbmcnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IHt2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXB9IGZyb20gJy4uLy4uL3V0aWwvdmVydGljYWxpemVfcHVuY3R1YXRpb24nO1xuaW1wb3J0IEFuY2hvciBmcm9tICcuLi8uLi9zeW1ib2wvYW5jaG9yJztcbmltcG9ydCB7Z2V0U2l6ZURhdGF9IGZyb20gJy4uLy4uL3N5bWJvbC9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge01BWF9QQUNLRURfU0laRX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3BsdWdpbiBhcyBnbG9iYWxSVExUZXh0UGx1Z2luLCBnZXRSVExUZXh0UGx1Z2luU3RhdHVzfSBmcm9tICcuLi8uLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5LCBDb2xsaXNpb25Cb3gsIFN5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSB7U3RydWN0QXJyYXksIFN0cnVjdEFycmF5TWVtYmVyfSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7U3ltYm9sUXVhZH0gZnJvbSAnLi4vLi4vc3ltYm9sL3F1YWRzJztcbmltcG9ydCB0eXBlIHtTaXplRGF0YX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDb2xsaXNpb25Cb3ggPSB7XG4gICAgeDE6IG51bWJlcjtcbiAgICB5MTogbnVtYmVyO1xuICAgIHgyOiBudW1iZXI7XG4gICAgeTI6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFg6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFk6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxpc2lvbkFycmF5cyA9IHtcbiAgICB0ZXh0Qm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHZlcnRpY2FsVGV4dEJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICBpY29uQm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHZlcnRpY2FsSWNvbkJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICB0ZXh0Q2lyY2xlcz86IEFycmF5PG51bWJlcj47XG4gICAgdGV4dEZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg/OiBudW1iZXI7XG4gICAgaWNvbkZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xGZWF0dXJlID0ge3xcbiAgICBzb3J0S2V5OiBudW1iZXIgfCB2b2lkLFxuICAgIHRleHQ6IEZvcm1hdHRlZCB8IHZvaWQsXG4gICAgaWNvbjogP1Jlc29sdmVkSW1hZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6ICdQb2ludCcgfCAnTGluZVN0cmluZycgfCAnUG9seWdvbicsXG4gICAgaWQ/OiBhbnlcbnx9O1xuXG5leHBvcnQgdHlwZSBTb3J0S2V5UmFuZ2UgPSB7XG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IG51bWJlcixcbiAgICBzeW1ib2xJbnN0YW5jZUVuZDogbnVtYmVyXG59O1xuXG4vLyBPcGFjaXR5IGFycmF5cyBhcmUgZnJlcXVlbnRseSB1cGRhdGVkIGJ1dCBkb24ndCBjb250YWluIGEgbG90IG9mIGluZm9ybWF0aW9uLCBzbyB3ZSBwYWNrIHRoZW1cbi8vIHRpZ2h0LiBFYWNoIFVpbnQzMiBpcyBhY3R1YWxseSBmb3VyIGR1cGxpY2F0ZSBVaW50OHMgZm9yIHRoZSBmb3VyIGNvcm5lcnMgb2YgYSBnbHlwaFxuLy8gNyBiaXRzIGFyZSBmb3IgdGhlIGN1cnJlbnQgb3BhY2l0eSwgYW5kIHRoZSBsb3dlc3QgYml0IGlzIHRoZSB0YXJnZXQgb3BhY2l0eVxuXG4vLyBhY3R1YWxseSBkZWZpbmVkIGluIHN5bWJvbF9hdHRyaWJ1dGVzLmpzXG4vLyBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IFtcbi8vICAgICB7IG5hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInIH1cbi8vIF07XG5jb25zdCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcyA9IFtcbiAgICB7bmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQ4Jywgb2Zmc2V0OiAwfVxuXTtcblxuZnVuY3Rpb24gYWRkVmVydGV4KGFycmF5LCBhbmNob3JYLCBhbmNob3JZLCBveCwgb3ksIHR4LCB0eSwgc2l6ZVZlcnRleCwgaXNTREY6IGJvb2xlYW4sIHBpeGVsT2Zmc2V0WCwgcGl4ZWxPZmZzZXRZLCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKSB7XG4gICAgY29uc3QgYVNpemVYID0gc2l6ZVZlcnRleCA/IE1hdGgubWluKE1BWF9QQUNLRURfU0laRSwgTWF0aC5yb3VuZChzaXplVmVydGV4WzBdKSkgOiAwO1xuICAgIGNvbnN0IGFTaXplWSA9IHNpemVWZXJ0ZXggPyBNYXRoLm1pbihNQVhfUEFDS0VEX1NJWkUsIE1hdGgucm91bmQoc2l6ZVZlcnRleFsxXSkpIDogMDtcbiAgICBhcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3Nfb2Zmc2V0XG4gICAgICAgIGFuY2hvclgsXG4gICAgICAgIGFuY2hvclksXG4gICAgICAgIE1hdGgucm91bmQob3ggKiAzMiksXG4gICAgICAgIE1hdGgucm91bmQob3kgKiAzMiksXG5cbiAgICAgICAgLy8gYV9kYXRhXG4gICAgICAgIHR4LCAvLyB4IGNvb3JkaW5hdGUgb2Ygc3ltYm9sIG9uIGdseXBoIGF0bGFzIHRleHR1cmVcbiAgICAgICAgdHksIC8vIHkgY29vcmRpbmF0ZSBvZiBzeW1ib2wgb24gZ2x5cGggYXRsYXMgdGV4dHVyZVxuICAgICAgICAoYVNpemVYIDw8IDEpICsgKGlzU0RGID8gMSA6IDApLFxuICAgICAgICBhU2l6ZVksXG4gICAgICAgIHBpeGVsT2Zmc2V0WCAqIDE2LFxuICAgICAgICBwaXhlbE9mZnNldFkgKiAxNixcbiAgICAgICAgbWluRm9udFNjYWxlWCAqIDI1NixcbiAgICAgICAgbWluRm9udFNjYWxlWSAqIDI1NlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIHA6IFBvaW50LCBhbmdsZTogbnVtYmVyKSB7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUlRMVGV4dChmb3JtYXR0ZWRUZXh0OiBGb3JtYXR0ZWQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybWF0dGVkVGV4dC5zZWN0aW9ucykge1xuICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnNSVExUZXh0KHNlY3Rpb24udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNsYXNzIFN5bWJvbEJ1ZmZlcnMge1xuICAgIGxheW91dFZlcnRleEFycmF5OiBTeW1ib2xMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgb3BhY2l0eVZlcnRleEFycmF5OiBTeW1ib2xPcGFjaXR5QXJyYXk7XG4gICAgb3BhY2l0eVZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgcGxhY2VkU3ltYm9sQXJyYXk6IFBsYWNlZFN5bWJvbEFycmF5O1xuXG4gICAgY29uc3RydWN0b3IocHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBwcm9ncmFtQ29uZmlndXJhdGlvbnM7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sT3BhY2l0eUFycmF5KCk7XG4gICAgICAgIHRoaXMucGxhY2VkU3ltYm9sQXJyYXkgPSBuZXcgUGxhY2VkU3ltYm9sQXJyYXkoKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0LCBkeW5hbWljSW5kZXhCdWZmZXI6IGJvb2xlYW4sIHVwbG9hZD86IGJvb2xlYW4sIHVwZGF0ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBsb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXksIGR5bmFtaWNJbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSwgc2hhZGVyT3BhY2l0eUF0dHJpYnV0ZXMsIHRydWUpO1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGhhY2sgc28gdGhhdCB3ZSBjYW4gd3JpdGUgdG8gb3BhY2l0eVZlcnRleEFycmF5IHdpdGggdWludDMyc1xuICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIHNoYWRlcnMgcmVhZCB1aW50OHNcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5pdGVtU2l6ZSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwbG9hZCB8fCB1cGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xCdWZmZXJzJywgU3ltYm9sQnVmZmVycyk7XG5cbmNsYXNzIENvbGxpc2lvbkJ1ZmZlcnMge1xuICAgIGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXkgfCBMaW5lSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcblxuICAgIGNvbGxpc2lvblZlcnRleEFycmF5OiBDb2xsaXNpb25WZXJ0ZXhBcnJheTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKExheW91dEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4sXG4gICAgICAgICAgICAgICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LFxuICAgICAgICAgICAgICAgIEluZGV4QXJyYXk6IENsYXNzPFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5Pikge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMubGF5b3V0QXR0cmlidXRlcyA9IGxheW91dEF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5ID0gbmV3IENvbGxpc2lvblZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEF0dHJpYnV0ZXMubWVtYmVycywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJ1ZmZlcnMnLCBDb2xsaXNpb25CdWZmZXJzKTtcblxuLyoqXG4gKiBVbmxpa2Ugb3RoZXIgYnVja2V0cywgd2hpY2ggc2ltcGx5IGltcGxlbWVudCAjYWRkRmVhdHVyZSB3aXRoIHR5cGUtc3BlY2lmaWNcbiAqIGxvZ2ljIGZvciAoZXNzZW50aWFsbHkpIHRyaWFuZ3VsYXRpbmcgZmVhdHVyZSBnZW9tZXRyaWVzLCBTeW1ib2xCdWNrZXRcbiAqIHJlcXVpcmVzIHNwZWNpYWxpemVkIGJlaGF2aW9yOlxuICpcbiAqIDEuIFdvcmtlclRpbGUjcGFyc2UoKSwgdGhlIGxvZ2ljYWwgb3duZXIgb2YgdGhlIGJ1Y2tldCBjcmVhdGlvbiBwcm9jZXNzLFxuICogICAgY2FsbHMgU3ltYm9sQnVja2V0I3BvcHVsYXRlKCksIHdoaWNoIHJlc29sdmVzIHRleHQgYW5kIGljb24gdG9rZW5zIG9uXG4gKiAgICBlYWNoIGZlYXR1cmUsIGFkZHMgZWFjaCBnbHlwaHMgYW5kIHN5bWJvbHMgbmVlZGVkIHRvIHRoZSBwYXNzZWQtaW5cbiAqICAgIGNvbGxlY3Rpb25zIG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuaWNvbkRlcGVuZGVuY2llcywgYW5kXG4gKiAgICBzdG9yZXMgdGhlIGZlYXR1cmUgZGF0YSBmb3IgdXNlIGluIHN1YnNlcXVlbnQgc3RlcCAodGhpcy5mZWF0dXJlcykuXG4gKlxuICogMi4gV29ya2VyVGlsZSBhc3luY2hyb25vdXNseSByZXF1ZXN0cyBmcm9tIHRoZSBtYWluIHRocmVhZCBhbGwgb2YgdGhlIGdseXBoc1xuICogICAgYW5kIGljb25zIG5lZWRlZCAoYnkgdGhpcyBidWNrZXQgYW5kIGFueSBvdGhlcnMpLiBXaGVuIGdseXBocyBhbmQgaWNvbnNcbiAqICAgIGhhdmUgYmVlbiByZWNlaXZlZCwgdGhlIFdvcmtlclRpbGUgY3JlYXRlcyBhIENvbGxpc2lvbkluZGV4IGFuZCBpbnZva2VzOlxuICpcbiAqIDMuIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0LCBzdGFja3MsIGljb25zKSBwZXJmb3JtIHRleHRzIHNoYXBpbmcgYW5kXG4gKiAgICBsYXlvdXQgb24gYSBTeW1ib2wgQnVja2V0LiBUaGlzIHN0ZXAgcG9wdWxhdGVzOlxuICogICAgICBgdGhpcy5zeW1ib2xJbnN0YW5jZXNgOiBtZXRhZGF0YSBvbiBnZW5lcmF0ZWQgc3ltYm9sc1xuICogICAgICBgdGhpcy5jb2xsaXNpb25Cb3hBcnJheWA6IGNvbGxpc2lvbiBkYXRhIGZvciB1c2UgYnkgZm9yZWdyb3VuZFxuICogICAgICBgdGhpcy50ZXh0YDogU3ltYm9sQnVmZmVycyBmb3IgdGV4dCBzeW1ib2xzXG4gKiAgICAgIGB0aGlzLmljb25zYDogU3ltYm9sQnVmZmVycyBmb3IgaWNvbnNcbiAqICAgICAgYHRoaXMuaWNvbkNvbGxpc2lvbkJveGA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIGljb24gY29sbGlzaW9uIGJveGVzXG4gKiAgICAgIGB0aGlzLnRleHRDb2xsaXNpb25Cb3hgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IGNvbGxpc2lvbiBib3hlc1xuICogICAgICBgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlYDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgaWNvbiBjb2xsaXNpb24gY2lyY2xlc1xuICogICAgICBgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlYDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgdGV4dCBjb2xsaXNpb24gY2lyY2xlc1xuICogICAgVGhlIHJlc3VsdHMgYXJlIHNlbnQgdG8gdGhlIGZvcmVncm91bmQgZm9yIHJlbmRlcmluZ1xuICpcbiAqIDQuIHBlcmZvcm1TeW1ib2xQbGFjZW1lbnQoYnVja2V0LCBjb2xsaXNpb25JbmRleCkgaXMgcnVuIG9uIHRoZSBmb3JlZ3JvdW5kLFxuICogICAgYW5kIHVzZXMgdGhlIENvbGxpc2lvbkluZGV4IGFsb25nIHdpdGggY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgdG8gZGV0ZXJtaW5lXG4gKiAgICB3aGljaCBzeW1ib2xzIGNhbiBhY3R1YWxseSBzaG93IG9uIHRoZSBtYXAuIENvbGxpZGVkIHN5bWJvbHMgYXJlIGhpZGRlblxuICogICAgdXNpbmcgYSBkeW5hbWljIFwiT3BhY2l0eVZlcnRleEFycmF5XCIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3ltYm9sQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBzdGF0aWMgTUFYX0dMWVBIUzogbnVtYmVyO1xuICAgIHN0YXRpYyBhZGREeW5hbWljQXR0cmlidXRlczogdHlwZW9mIGFkZER5bmFtaWNBdHRyaWJ1dGVzO1xuXG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHNkZkljb25zOiBib29sZWFuO1xuICAgIGljb25zSW5UZXh0OiBib29sZWFuO1xuICAgIGljb25zTmVlZExpbmVhcjogYm9vbGVhbjtcbiAgICBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAganVzdFJlbG9hZGVkOiBib29sZWFuO1xuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG5cbiAgICB0ZXh0U2l6ZURhdGE6IFNpemVEYXRhO1xuICAgIGljb25TaXplRGF0YTogU2l6ZURhdGE7XG5cbiAgICBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5O1xuICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5O1xuICAgIGZlYXR1cmVzOiBBcnJheTxTeW1ib2xGZWF0dXJlPjtcbiAgICBzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXk7XG4gICAgY29sbGlzaW9uQXJyYXlzOiBBcnJheTxDb2xsaXNpb25BcnJheXM+O1xuICAgIHNvcnRLZXlSYW5nZXM6IEFycmF5PFNvcnRLZXlSYW5nZT47XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHRpbGVQaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgY29tcGFyZVRleHQ6IHtbXzogc3RyaW5nXTogQXJyYXk8UG9pbnQ+fTtcbiAgICBmYWRlU3RhcnRUaW1lOiBudW1iZXI7XG4gICAgc29ydEZlYXR1cmVzQnlLZXk6IGJvb2xlYW47XG4gICAgc29ydEZlYXR1cmVzQnlZOiBib29sZWFuO1xuICAgIHNvcnRlZEFuZ2xlOiBudW1iZXI7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogQXJyYXk8bnVtYmVyPjtcblxuICAgIHRleHQ6IFN5bWJvbEJ1ZmZlcnM7XG4gICAgaWNvbjogU3ltYm9sQnVmZmVycztcbiAgICB0ZXh0Q29sbGlzaW9uQm94OiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIGljb25Db2xsaXNpb25Cb3g6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgdGV4dENvbGxpc2lvbkNpcmNsZTogQ29sbGlzaW9uQnVmZmVycztcbiAgICBpY29uQ29sbGlzaW9uQ2lyY2xlOiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBzb3VyY2VJRDogc3RyaW5nO1xuICAgIHN5bWJvbEluc3RhbmNlSW5kZXhlczogQXJyYXk8bnVtYmVyPjtcbiAgICB3cml0aW5nTW9kZXM6IEFycmF5PG51bWJlcj47XG4gICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbjtcbiAgICBoYXNSVExUZXh0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gb3B0aW9ucy5jb2xsaXNpb25Cb3hBcnJheTtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBvcHRpb25zLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuc291cmNlTGF5ZXJJbmRleCA9IG9wdGlvbnMuc291cmNlTGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvcnRLZXlSYW5nZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGxheWVyLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO1xuXG4gICAgICAgIHRoaXMudGV4dFNpemVEYXRhID0gZ2V0U2l6ZURhdGEodGhpcy56b29tLCB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10pO1xuICAgICAgICB0aGlzLmljb25TaXplRGF0YSA9IGdldFNpemVEYXRhKHRoaXMuem9vbSwgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddKTtcblxuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IHNvcnRLZXkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3Qgek9yZGVyID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKTtcbiAgICAgICAgdGhpcy5zb3J0RmVhdHVyZXNCeUtleSA9IHpPcmRlciAhPT0gJ3ZpZXdwb3J0LXknICYmIHNvcnRLZXkuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB6T3JkZXJCeVZpZXdwb3J0WSA9IHpPcmRlciA9PT0gJ3ZpZXdwb3J0LXknIHx8ICh6T3JkZXIgPT09ICdhdXRvJyAmJiAhdGhpcy5zb3J0RmVhdHVyZXNCeUtleSk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVzQnlZID0gek9yZGVyQnlWaWV3cG9ydFkgJiYgKGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpIHx8IGxheW91dC5nZXQoJ2ljb24tYWxsb3ctb3ZlcmxhcCcpIHx8XG4gICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSB8fCBsYXlvdXQuZ2V0KCdpY29uLWlnbm9yZS1wbGFjZW1lbnQnKSk7XG5cbiAgICAgICAgaWYgKGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSA9PT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgdGhpcy53cml0aW5nTW9kZXMgPSBsYXlvdXQuZ2V0KCd0ZXh0LXdyaXRpbmctbW9kZScpLm1hcCh3bSA9PiBXcml0aW5nTW9kZVt3bV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcblxuICAgICAgICB0aGlzLnNvdXJjZUlEID0gb3B0aW9ucy5zb3VyY2VJRDtcbiAgICB9XG5cbiAgICBjcmVhdGVBcnJheXMoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IG5ldyBTeW1ib2xCdWZmZXJzKG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMubGF5ZXJzLCB0aGlzLnpvb20sIHByb3BlcnR5ID0+IC9edGV4dC8udGVzdChwcm9wZXJ0eSkpKTtcbiAgICAgICAgdGhpcy5pY29uID0gbmV3IFN5bWJvbEJ1ZmZlcnMobmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdGhpcy5sYXllcnMsIHRoaXMuem9vbSwgcHJvcGVydHkgPT4gL15pY29uLy50ZXN0KHByb3BlcnR5KSkpO1xuXG4gICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheSA9IG5ldyBHbHlwaE9mZnNldEFycmF5KCk7XG4gICAgICAgIHRoaXMubGluZVZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlcyA9IG5ldyBTeW1ib2xJbnN0YW5jZUFycmF5KCk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXModGV4dDogc3RyaW5nLCBzdGFjazoge1tfOiBudW1iZXJdOiBib29sZWFufSwgdGV4dEFsb25nTGluZTogYm9vbGVhbiwgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbiwgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZTogYm9vbGVhbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN0YWNrW3RleHQuY2hhckNvZGVBdChpKV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCh0ZXh0QWxvbmdMaW5lIHx8IGFsbG93VmVydGljYWxQbGFjZW1lbnQpICYmIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbENoYXIgPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbdGV4dC5jaGFyQXQoaSldO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2tbdmVydGljYWxDaGFyLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnNbMF07XG4gICAgICAgIGNvbnN0IGxheW91dCA9IGxheWVyLmxheW91dDtcblxuICAgICAgICBjb25zdCB0ZXh0Rm9udCA9IGxheW91dC5nZXQoJ3RleHQtZm9udCcpO1xuICAgICAgICBjb25zdCB0ZXh0RmllbGQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGljb25JbWFnZSA9IGxheW91dC5nZXQoJ2ljb24taW1hZ2UnKTtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9XG4gICAgICAgICAgICAodGV4dEZpZWxkLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHxcbiAgICAgICAgICAgICAgICAodGV4dEZpZWxkLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkICYmICF0ZXh0RmllbGQudmFsdWUudmFsdWUuaXNFbXB0eSgpKSB8fFxuICAgICAgICAgICAgICAgIHRleHRGaWVsZC52YWx1ZS52YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICAodGV4dEZvbnQudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCB0ZXh0Rm9udC52YWx1ZS52YWx1ZS5sZW5ndGggPiAwKTtcbiAgICAgICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyByZXNvbHZlIHRoZSBpY29uLWltYWdlIHZhbHVlIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZGVmaW5lZCBpbiB0aGUgc3R5bGVcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdXMgdG8gZmlyZSB0aGUgc3R5bGVpbWFnZW1pc3NpbmcgZXZlbnQgaWYgaW1hZ2UgZXZhbHVhdGlvbiByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gdGhlIG9ubHkgd2F5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbnVsbCByZXR1cm5lZCBmcm9tIGEgY29hbGVzY2Ugc3RhdGVtZW50IHdpdGggbm8gdmFsaWQgaW1hZ2VzXG4gICAgICAgIC8vIGFuZCBudWxsIHJldHVybmVkIGJlY2F1c2UgaWNvbi1pbWFnZSB3YXNuJ3QgZGVmaW5lZCBpcyB0byBjaGVjayB3aGV0aGVyIG9yIG5vdCBpY29uSW1hZ2UucGFyYW1ldGVycyBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICAgICAgY29uc3QgaGFzSWNvbiA9IGljb25JbWFnZS52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8ICEhaWNvbkltYWdlLnZhbHVlLnZhbHVlIHx8IE9iamVjdC5rZXlzKGljb25JbWFnZS5wYXJhbWV0ZXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzeW1ib2xTb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGlmICghaGFzVGV4dCAmJiAhaGFzSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWNvbnMgPSBvcHRpb25zLmljb25EZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUltYWdlcyA9IG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzO1xuICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuXG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSBsYXllci5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKGdsb2JhbFByb3BlcnRpZXMsIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGxldCB0ZXh0OiBGb3JtYXR0ZWQgfCB2b2lkO1xuICAgICAgICAgICAgaWYgKGhhc1RleHQpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBGb3JtYXR0ZWRcbiAgICAgICAgICAgICAgICAvLyBidXQgcGxhaW4gc3RyaW5nIHRva2VuIGV2YWx1YXRpb24gc2tpcHMgdGhhdCBwYXRod2F5IHNvIGRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gaGVyZS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFRva2VucyA9IGxheWVyLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygndGV4dC1maWVsZCcsIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVGV4dCA9IEZvcm1hdHRlZC5mYWN0b3J5KHJlc29sdmVkVG9rZW5zKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbnNSVExUZXh0KGZvcm1hdHRlZFRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaGFzUlRMVGV4dCB8fCAvLyBub24tcnRsIHRleHQgc28gY2FuIHByb2NlZWQgc2FmZWx5XG4gICAgICAgICAgICAgICAgICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMoKSA9PT0gJ3VuYXZhaWxhYmxlJyB8fCAvLyBXZSBkb24ndCBpbnRlbmQgdG8gbGF6eS1sb2FkIHRoZSBydGwgdGV4dCBwbHVnaW4sIHNvIHByb2NlZWQgd2l0aCBpbmNvcnJlY3Qgc2hhcGluZ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgJiYgZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpIC8vIFVzZSB0aGUgcnRsVGV4dCBwbHVnaW4gdG8gc2hhcGUgdGV4dFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJhbnNmb3JtVGV4dChmb3JtYXR0ZWRUZXh0LCBsYXllciwgZXZhbHVhdGlvbkZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGljb246ID9SZXNvbHZlZEltYWdlO1xuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBJbWFnZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBwbGFpbiBzdHJpbmcgdG9rZW4gZXZhbHVhdGlvbiBza2lwcyB0aGF0IHBhdGh3YXkgc28gZG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBoZXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVG9rZW5zID0gbGF5ZXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCdpY29uLWltYWdlJywgZXZhbHVhdGlvbkZlYXR1cmUsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRUb2tlbnMgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGljb24gPSByZXNvbHZlZFRva2VucztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gUmVzb2x2ZWRJbWFnZS5mcm9tU3RyaW5nKHJlc29sdmVkVG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGV4dCAmJiAhaWNvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IHRoaXMuc29ydEZlYXR1cmVzQnlLZXkgP1xuICAgICAgICAgICAgICAgIHN5bWJvbFNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEZlYXR1cmU6IFN5bWJvbEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGxvYWRHZW9tZXRyeShmZWF0dXJlKSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogdmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdLFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgaWNvbnNbaWNvbi5uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFN0YWNrID0gdGV4dEZvbnQuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCA9IHRoaXMud3JpdGluZ01vZGVzICYmIHRoaXMud3JpdGluZ01vZGVzLmluZGV4T2YoV3JpdGluZ01vZGUudmVydGljYWwpID49IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRleHQuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlID0gYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSh0ZXh0LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkZvbnQgPSBzZWN0aW9uLmZvbnRTdGFjayB8fCBmb250U3RhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uU3RhY2sgPSBzdGFja3Nbc2VjdGlvbkZvbnRdID0gc3RhY2tzW3NlY3Rpb25Gb250XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXMoc2VjdGlvbi50ZXh0LCBzZWN0aW9uU3RhY2ssIHRleHRBbG9uZ0xpbmUsIHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCwgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgc2VjdGlvbiBpbWFnZSB0byB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uc1tzZWN0aW9uLmltYWdlLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdsaW5lJykge1xuICAgICAgICAgICAgLy8gTWVyZ2UgYWRqYWNlbnQgbGluZXMgd2l0aCB0aGUgc2FtZSB0ZXh0IHRvIGltcHJvdmUgbGFiZWxsaW5nLlxuICAgICAgICAgICAgLy8gSXQncyBiZXR0ZXIgdG8gcGxhY2UgbGFiZWxzIG9uIG9uZSBsb25nIGxpbmUgdGhhbiBvbiBtYW55IHNob3J0IHNlZ21lbnRzLlxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcyA9IG1lcmdlTGluZXModGhpcy5mZWF0dXJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIHNvcnRGZWF0dXJlc0J5S2V5IGlzIHRydWVcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLmxheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5sYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICAvLyBXaGVuIHRoZSBidWNrZXQgZW5jb3VudGVycyBvbmx5IHJ0bC10ZXh0IGJ1dCB0aGUgcGx1Z2luIGlzbnQgbG9hZGVkLCBubyBzeW1ib2wgaW5zdGFuY2VzIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgICAgLy8gSW4gb3JkZXIgZm9yIHRoZSBidWNrZXQgdG8gYmUgc2VyaWFsaXplZCwgYW5kIG5vdCBkaXNjYXJkZWQgYXMgYW4gZW1wdHkgYnVja2V0IGJvdGggY2hlY2tzIGFyZSBuZWNlc3NhcnkuXG4gICAgICAgIHJldHVybiB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaGFzUlRMVGV4dDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCB8fCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCAmJiB0aGlzLmhhc0RlYnVnRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3gudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkNpcmNsZS51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLmljb25Db2xsaXNpb25DaXJjbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dC51cGxvYWQoY29udGV4dCwgdGhpcy5zb3J0RmVhdHVyZXNCeVksICF0aGlzLnVwbG9hZGVkLCB0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKTtcbiAgICAgICAgdGhpcy5pY29uLnVwbG9hZChjb250ZXh0LCB0aGlzLnNvcnRGZWF0dXJlc0J5WSwgIXRoaXMudXBsb2FkZWQsIHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95RGVidWdEYXRhKCkge1xuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmljb25Db2xsaXNpb25Cb3guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmljb25Db2xsaXNpb25DaXJjbGUuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGV4dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaWNvbi5kZXN0cm95KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRGVidWdEYXRhKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveURlYnVnRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkVG9MaW5lVmVydGV4QXJyYXkoYW5jaG9yOiBBbmNob3IsIGxpbmU6IGFueSkge1xuICAgICAgICBjb25zdCBsaW5lU3RhcnRJbmRleCA9IHRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgaWYgKGFuY2hvci5zZWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBzdW1Gb3J3YXJkTGVuZ3RoID0gYW5jaG9yLmRpc3QobGluZVthbmNob3Iuc2VnbWVudCArIDFdKTtcbiAgICAgICAgICAgIGxldCBzdW1CYWNrd2FyZExlbmd0aCA9IGFuY2hvci5kaXN0KGxpbmVbYW5jaG9yLnNlZ21lbnRdKTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2VzID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gYW5jaG9yLnNlZ21lbnQgKyAxOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0ge3g6IGxpbmVbaV0ueCwgeTogbGluZVtpXS55LCB0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjogc3VtRm9yd2FyZExlbmd0aH07XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBsaW5lLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtRm9yd2FyZExlbmd0aCArPSBsaW5lW2kgKyAxXS5kaXN0KGxpbmVbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNob3Iuc2VnbWVudCB8fCAwOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0ge3g6IGxpbmVbaV0ueCwgeTogbGluZVtpXS55LCB0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjogc3VtQmFja3dhcmRMZW5ndGh9O1xuICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdW1CYWNrd2FyZExlbmd0aCArPSBsaW5lW2kgLSAxXS5kaXN0KGxpbmVbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lTGVuZ3RoOiB0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGggLSBsaW5lU3RhcnRJbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZFN5bWJvbHMoYXJyYXlzOiBTeW1ib2xCdWZmZXJzLFxuICAgICAgICAgICAgICAgcXVhZHM6IEFycmF5PFN5bWJvbFF1YWQ+LFxuICAgICAgICAgICAgICAgc2l6ZVZlcnRleDogYW55LFxuICAgICAgICAgICAgICAgbGluZU9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgIGFsb25nTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICB3cml0aW5nTW9kZTogYW55LFxuICAgICAgICAgICAgICAgbGFiZWxBbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICBsaW5lTGVuZ3RoOiBudW1iZXIsXG4gICAgICAgICAgICAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCBpbmRleEFycmF5ID0gYXJyYXlzLmluZGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCAqIHF1YWRzLmxlbmd0aCwgbGF5b3V0VmVydGV4QXJyYXksIGluZGV4QXJyYXksIGZlYXR1cmUuc29ydEtleSk7XG4gICAgICAgIGNvbnN0IGdseXBoT2Zmc2V0QXJyYXlTdGFydCA9IHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZlcnRleFN0YXJ0SW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICBjb25zdCBhbmdsZSA9ICh0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgd3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGZlYXR1cmUudGV4dCAmJiBmZWF0dXJlLnRleHQuc2VjdGlvbnM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWFkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qge3RsLCB0ciwgYmwsIGJyLCB0ZXgsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVksIGdseXBoT2Zmc2V0LCBpc1NERiwgc2VjdGlvbkluZGV4fSA9IHF1YWRzW2ldO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgeSA9IGdseXBoT2Zmc2V0WzFdO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0bC54LCB5ICsgdGwueSwgdGV4LngsIHRleC55LCBzaXplVmVydGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRUTC54LCBwaXhlbE9mZnNldFRMLnksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCB0ci54LCB5ICsgdHIueSwgdGV4LnggKyB0ZXgudywgdGV4LnksIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldEJSLngsIHBpeGVsT2Zmc2V0VEwueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIGJsLngsIHkgKyBibC55LCB0ZXgueCwgdGV4LnkgKyB0ZXguaCwgc2l6ZVZlcnRleCwgaXNTREYsIHBpeGVsT2Zmc2V0VEwueCwgcGl4ZWxPZmZzZXRCUi55LCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKTtcbiAgICAgICAgICAgIGFkZFZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSwgYnIueCwgeSArIGJyLnksIHRleC54ICsgdGV4LncsIHRleC55ICsgdGV4LmgsIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldEJSLngsIHBpeGVsT2Zmc2V0QlIueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG5cbiAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGFycmF5cy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLCBhbmdsZSk7XG5cbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAxLCBpbmRleCArIDIsIGluZGV4ICsgMyk7XG5cbiAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuXG4gICAgICAgICAgICB0aGlzLmdseXBoT2Zmc2V0QXJyYXkuZW1wbGFjZUJhY2soZ2x5cGhPZmZzZXRbMF0pO1xuXG4gICAgICAgICAgICBpZiAoaSA9PT0gcXVhZHMubGVuZ3RoIC0gMSB8fCBzZWN0aW9uSW5kZXggIT09IHF1YWRzW2kgKyAxXS5zZWN0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBhcnJheXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMobGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBmZWF0dXJlLmluZGV4LCB7fSwgY2Fub25pY2FsLCBzZWN0aW9ucyAmJiBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5cy5wbGFjZWRTeW1ib2xBcnJheS5lbXBsYWNlQmFjayhsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LFxuICAgICAgICAgICAgZ2x5cGhPZmZzZXRBcnJheVN0YXJ0LCB0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoIC0gZ2x5cGhPZmZzZXRBcnJheVN0YXJ0LCB2ZXJ0ZXhTdGFydEluZGV4LFxuICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXgsIGxpbmVMZW5ndGgsIChsYWJlbEFuY2hvci5zZWdtZW50OiBhbnkpLFxuICAgICAgICAgICAgc2l6ZVZlcnRleCA/IHNpemVWZXJ0ZXhbMF0gOiAwLCBzaXplVmVydGV4ID8gc2l6ZVZlcnRleFsxXSA6IDAsXG4gICAgICAgICAgICBsaW5lT2Zmc2V0WzBdLCBsaW5lT2Zmc2V0WzFdLFxuICAgICAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgICAgICAvLyBwbGFjZWRPcmllbnRhdGlvbiBpcyBudWxsIGluaXRpYWxseTsgd2lsbCBiZSB1cGRhdGVkIHRvIGhvcml6b250YWwoMSkvdmVydGljYWwoMikgaWYgcGxhY2VkXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgKGZhbHNlOiBhbnkpLFxuICAgICAgICAgICAgLy8gVGhlIGNyb3NzVGlsZUlEIGlzIG9ubHkgZmlsbGVkL3VzZWQgb24gdGhlIGZvcmVncm91bmQgZm9yIGR5bmFtaWMgdGV4dCBhbmNob3JzXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgYXNzb2NpYXRlZEljb25JbmRleFxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgcG9pbnQ6IFBvaW50LCBhbmNob3JYOiBudW1iZXIsIGFuY2hvclk6IG51bWJlciwgZXh0cnVkZTogUG9pbnQpIHtcbiAgICAgICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soMCwgMCk7XG4gICAgICAgIHJldHVybiBsYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgIC8vIHBvc1xuICAgICAgICAgICAgcG9pbnQueCxcbiAgICAgICAgICAgIHBvaW50LnksXG4gICAgICAgICAgICAvLyBhX2FuY2hvcl9wb3NcbiAgICAgICAgICAgIGFuY2hvclgsXG4gICAgICAgICAgICBhbmNob3JZLFxuICAgICAgICAgICAgLy8gZXh0cnVkZVxuICAgICAgICAgICAgTWF0aC5yb3VuZChleHRydWRlLngpLFxuICAgICAgICAgICAgTWF0aC5yb3VuZChleHRydWRlLnkpKTtcbiAgICB9XG5cbiAgICBhZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGFycmF5czogQ29sbGlzaW9uQnVmZmVycywgYm94QW5jaG9yUG9pbnQ6IFBvaW50LCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGlzQ2lyY2xlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgYXJyYXlzLmxheW91dFZlcnRleEFycmF5LCBhcnJheXMuaW5kZXhBcnJheSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0VmVydGV4QXJyYXkgPSBhcnJheXMubGF5b3V0VmVydGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGNvbGxpc2lvblZlcnRleEFycmF5ID0gYXJyYXlzLmNvbGxpc2lvblZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IGFuY2hvclggPSBzeW1ib2xJbnN0YW5jZS5hbmNob3JYO1xuICAgICAgICBjb25zdCBhbmNob3JZID0gc3ltYm9sSW5zdGFuY2UuYW5jaG9yWTtcblxuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDEsIHkxKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MiwgeTEpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgyLCB5MikpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDEsIHkyKSk7XG5cbiAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgaWYgKGlzQ2lyY2xlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXkgPSAoYXJyYXlzLmluZGV4QXJyYXk6IGFueSk7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDIsIGluZGV4ICsgMyk7XG5cbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleEFycmF5OiBMaW5lSW5kZXhBcnJheSA9IChhcnJheXMuaW5kZXhBcnJheTogYW55KTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAyLCBpbmRleCArIDMpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDMsIGluZGV4KTtcblxuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gNDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGlzVGV4dDogYm9vbGVhbikge1xuICAgICAgICBmb3IgKGxldCBiID0gc3RhcnRJbmRleDsgYiA8IGVuZEluZGV4OyBiKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKHRoaXMuY29sbGlzaW9uQm94QXJyYXkuZ2V0KGIpOiBhbnkpO1xuICAgICAgICAgICAgY29uc3QgeDEgPSBib3gueDE7XG4gICAgICAgICAgICBjb25zdCB5MSA9IGJveC55MTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gYm94LngyO1xuICAgICAgICAgICAgY29uc3QgeTIgPSBib3gueTI7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSByYWRpdXMgPiAwLCB0aGlzIGNvbGxpc2lvbiBib3ggaXMgYWN0dWFsbHkgYSBjaXJjbGVcbiAgICAgICAgICAgIC8vIFRoZSBkYXRhIHdlIGFkZCB0byB0aGUgYnVmZmVycyBpcyBleGFjdGx5IHRoZSBzYW1lLCBidXQgd2UnbGwgcmVuZGVyIHdpdGggYSBkaWZmZXJlbnQgc2hhZGVyLlxuICAgICAgICAgICAgY29uc3QgaXNDaXJjbGUgPSBib3gucmFkaXVzID4gMDtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyh4MSwgeTEsIHgyLCB5MiwgaXNDaXJjbGUgP1xuICAgICAgICAgICAgICAgIChpc1RleHQgPyB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUgOiB0aGlzLmljb25Db2xsaXNpb25DaXJjbGUpIDogKGlzVGV4dCA/IHRoaXMudGV4dENvbGxpc2lvbkJveCA6IHRoaXMuaWNvbkNvbGxpc2lvbkJveCksXG4gICAgICAgICAgICAgICAgYm94LmFuY2hvclBvaW50LCBzeW1ib2xJbnN0YW5jZSwgaXNDaXJjbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RlYnVnRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkJveCA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkJveExheW91dEFycmF5LCBjb2xsaXNpb25Cb3hMYXlvdXQubWVtYmVycywgTGluZUluZGV4QXJyYXkpO1xuICAgICAgICB0aGlzLmljb25Db2xsaXNpb25Cb3ggPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSwgY29sbGlzaW9uQm94TGF5b3V0Lm1lbWJlcnMsIExpbmVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksIGNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCBUcmlhbmdsZUluZGV4QXJyYXkpO1xuICAgICAgICB0aGlzLmljb25Db2xsaXNpb25DaXJjbGUgPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSwgY29sbGlzaW9uQ2lyY2xlTGF5b3V0Lm1lbWJlcnMsIFRyaWFuZ2xlSW5kZXhBcnJheSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LCBzeW1ib2xJbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZXNlIGZsYXQgYXJyYXlzIGFyZSBtZWFudCB0byBiZSBxdWlja2VyIHRvIGl0ZXJhdGUgb3ZlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAvLyBDb2xsaXNpb25Cb3hBcnJheVxuICAgIF9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgdGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdGV4dEVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxUZXh0RW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgaWNvblN0YXJ0SW5kZXg6IG51bWJlciwgaWNvbkVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsSWNvblN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxJY29uRW5kSW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkFycmF5cyB7XG5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0ge307XG4gICAgICAgIGZvciAobGV0IGsgPSB0ZXh0U3RhcnRJbmRleDsgayA8IHRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcykge1xuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkID0gMTsgLy8gTWF5IGJlIHVwZGF0ZWQgYXQgY29sbGlzaW9uIGRldGVjdGlvbiB0aW1lXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzLnB1c2goYm94LmFuY2hvclBvaW50WCwgYm94LmFuY2hvclBvaW50WSwgYm94LnJhZGl1cywgYm94LnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwgdXNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg7IGsgPCB2ZXJ0aWNhbFRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBpZiAoYm94LnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gaWNvblN0YXJ0SW5kZXg7IGsgPCBpY29uRW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgLy8gQW4gaWNvbiBjYW4gb25seSBoYXZlIG9uZSBib3ggbm93LCBzbyB0aGlzIGluZGV4aW5nIGlzIGEgYml0IHZlc3RpZ2lhbC4uLlxuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgaWYgKGJveC5yYWRpdXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb2xsaXNpb25BcnJheXMuaWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gdmVydGljYWxJY29uU3RhcnRJbmRleDsgayA8IHZlcnRpY2FsSWNvbkVuZEluZGV4OyBrKyspIHtcbiAgICAgICAgICAgIC8vIEFuIGljb24gY2FuIG9ubHkgaGF2ZSBvbmUgYm94IG5vdywgc28gdGhpcyBpbmRleGluZyBpcyBhIGJpdCB2ZXN0aWdpYWwuLi5cbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKGNvbGxpc2lvbkJveEFycmF5LmdldChrKTogYW55KTtcbiAgICAgICAgICAgIGlmIChib3gucmFkaXVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsaXNpb25BcnJheXM7XG4gICAgfVxuXG4gICAgZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2woXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94RW5kSW5kZXhcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVGV4dERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0RlYnVnRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkJveCAmJiB0aGlzLmljb25Db2xsaXNpb25Cb3ggJiYgdGhpcy50ZXh0Q29sbGlzaW9uQ2lyY2xlICYmIHRoaXMuaWNvbkNvbGxpc2lvbkNpcmNsZTtcbiAgICB9XG5cbiAgICBoYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkgJiYgdGhpcy50ZXh0Q29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpICYmIHRoaXMuaWNvbkNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSAmJiB0aGlzLnRleHRDb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkgJiYgdGhpcy5pY29uQ29sbGlzaW9uQ2lyY2xlLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbChpY29uT3JUZXh0OiBTeW1ib2xCdWZmZXJzLCBwbGFjZWRTeW1ib2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IGljb25PclRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHBsYWNlZFN5bWJvbEluZGV4KTtcblxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBsYWNlZFN5bWJvbC52ZXJ0ZXhTdGFydEluZGV4ICsgcGxhY2VkU3ltYm9sLm51bUdseXBocyAqIDQ7XG4gICAgICAgIGZvciAobGV0IHZlcnRleEluZGV4ID0gcGxhY2VkU3ltYm9sLnZlcnRleFN0YXJ0SW5kZXg7IHZlcnRleEluZGV4IDwgZW5kSW5kZXg7IHZlcnRleEluZGV4ICs9IDQpIHtcbiAgICAgICAgICAgIGljb25PclRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCwgdmVydGV4SW5kZXggKyAxLCB2ZXJ0ZXhJbmRleCArIDIpO1xuICAgICAgICAgICAgaWNvbk9yVGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyLCB2ZXJ0ZXhJbmRleCArIDMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEFuZ2xlID09PSBhbmdsZSAmJiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJvdGF0ZWRZcyA9IFtdO1xuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXhlcyA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgcm90YXRlZFlzLnB1c2goTWF0aC5yb3VuZChzaW4gKiBzeW1ib2xJbnN0YW5jZS5hbmNob3JYICsgY29zICogc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgfCAwKTtcbiAgICAgICAgICAgIGZlYXR1cmVJbmRleGVzLnB1c2goc3ltYm9sSW5zdGFuY2UuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5zb3J0KChhSW5kZXgsIGJJbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyb3RhdGVkWXNbYUluZGV4XSAtIHJvdGF0ZWRZc1tiSW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgIChmZWF0dXJlSW5kZXhlc1tiSW5kZXhdIC0gZmVhdHVyZUluZGV4ZXNbYUluZGV4XSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYWRkVG9Tb3J0S2V5UmFuZ2VzKHN5bWJvbEluc3RhbmNlSW5kZXg6IG51bWJlciwgc29ydEtleTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNvcnRLZXlSYW5nZXNbdGhpcy5zb3J0S2V5UmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCAmJiBsYXN0LnNvcnRLZXkgPT09IHNvcnRLZXkpIHtcbiAgICAgICAgICAgIGxhc3Quc3ltYm9sSW5zdGFuY2VFbmQgPSBzeW1ib2xJbnN0YW5jZUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEtleVJhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3J0S2V5LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IHN5bWJvbEluc3RhbmNlSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VFbmQ6IHN5bWJvbEluc3RhbmNlSW5kZXggKyAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnRGZWF0dXJlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0RmVhdHVyZXNCeVkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVkQW5nbGUgPT09IGFuZ2xlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGN1cnJlbnQgYXBwcm9hY2ggdG8gc29ydGluZyBkb2Vzbid0IHNvcnQgYWNyb3NzIHNlZ21lbnRzIHNvIGRvbid0IHRyeS5cbiAgICAgICAgLy8gU29ydGluZyB3aXRoaW4gc2VnbWVudHMgc2VwYXJhdGVseSBzZWVtZWQgbm90IHRvIGJlIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuICAgICAgICBpZiAodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEgfHwgdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEpIHJldHVybjtcblxuICAgICAgICAvLyBJZiB0aGUgc3ltYm9scyBhcmUgYWxsb3dlZCB0byBvdmVybGFwIHNvcnQgdGhlbSBieSB0aGVpciB2ZXJ0aWNhbCBzY3JlZW4gcG9zaXRpb24uXG4gICAgICAgIC8vIFRoZSBpbmRleCBhcnJheSBidWZmZXIgaXMgcmV3cml0dGVuIHRvIHJlZmVyZW5jZSB0aGUgKHVuY2hhbmdlZCkgdmVydGljZXMgaW4gdGhlXG4gICAgICAgIC8vIHNvcnRlZCBvcmRlci5cblxuICAgICAgICAvLyBUbyBhdm9pZCBzb3J0aW5nIHRoZSBhY3R1YWwgc3ltYm9sSW5zdGFuY2UgYXJyYXkgd2Ugc29ydCBhbiBhcnJheSBvZiBpbmRleGVzLlxuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyA9IHRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZSk7XG4gICAgICAgIHRoaXMuc29ydGVkQW5nbGUgPSBhbmdsZTtcblxuICAgICAgICB0aGlzLnRleHQuaW5kZXhBcnJheS5jbGVhcigpO1xuICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZVNvcnRPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoaW5kZXgsIGksIGFycmF5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhZGQgYSBnaXZlbiBpbmRleCB0aGUgZmlyc3QgdGltZSBpdCBzaG93cyB1cCxcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBkdXBsaWNhdGUgb3BhY2l0eSBlbnRyaWVzIHdoZW4gbXVsdGlwbGUganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyBzaGFyZSB0aGUgc2FtZSBnbHlwaHMuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgYXJyYXkuaW5kZXhPZihpbmRleCkgPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMudGV4dCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLnRleHQsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMuaWNvbiwgc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0LmluZGV4QnVmZmVyKSB0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSk7XG4gICAgICAgIGlmICh0aGlzLmljb24uaW5kZXhCdWZmZXIpIHRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xCdWNrZXQnLCBTeW1ib2xCdWNrZXQsIHtcbiAgICBvbWl0OiBbJ2xheWVycycsICdjb2xsaXNpb25Cb3hBcnJheScsICdmZWF0dXJlcycsICdjb21wYXJlVGV4dCddXG59KTtcblxuLy8gdGhpcyBjb25zdGFudCBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiBTdHJ1Y3RBcnJheSBpbmRleGVzIHVzZWQgaW4gYSBzeW1ib2xcbi8vIGJ1Y2tldC0tbmFtZWx5LCBnbHlwaE9mZnNldEFycmF5U3RhcnRcbi8vIGVnIHRoZSBtYXggdmFsaWQgVUludDE2IGlzIDY1LDUzNVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3IGZvciBtb3RpdmF0aW9uXG4vLyBsaW5lU3RhcnRJbmRleCBhbmQgdGV4dEJveFN0YXJ0SW5kZXggY291bGQgcG90ZW50aWFsbHkgYmUgY29uY2VybnNcbi8vIGJ1dCB3ZSBleHBlY3QgdGhlcmUgdG8gYmUgbWFueSBmZXdlciBib3hlcy9saW5lcyB0aGFuIGdseXBoc1xuU3ltYm9sQnVja2V0Lk1BWF9HTFlQSFMgPSA2NTUzNTtcblxuU3ltYm9sQnVja2V0LmFkZER5bmFtaWNBdHRyaWJ1dGVzID0gYWRkRHluYW1pY0F0dHJpYnV0ZXM7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbEJ1Y2tldDtcbmV4cG9ydCB7YWRkRHluYW1pY0F0dHJpYnV0ZXN9O1xuIiwiLy8gQGZsb3dcbmV4cG9ydCBkZWZhdWx0IHJlc29sdmVUb2tlbnM7XG5cbi8qKlxuICogUmVwbGFjZSB0b2tlbnMgaW4gYSBzdHJpbmcgdGVtcGxhdGUgd2l0aCB2YWx1ZXMgaW4gYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMgYSBrZXkvdmFsdWUgcmVsYXRpb25zaGlwIGJldHdlZW4gdG9rZW5zIGFuZCByZXBsYWNlbWVudHNcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZW1wbGF0ZSBzdHJpbmdcbiAqIEByZXR1cm5zIHRoZSB0ZW1wbGF0ZSB3aXRoIHRva2VucyByZXBsYWNlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRva2Vucyhwcm9wZXJ0aWVzOiB7K1tzdHJpbmddOiBtaXhlZH0sIHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgveyhbXnt9XSspfS9nLCAobWF0Y2gsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBrZXkgaW4gcHJvcGVydGllcyA/IFN0cmluZyhwcm9wZXJ0aWVzW2tleV0pIDogJyc7XG4gICAgfSk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQge1xuICAgIENvbG9yVHlwZVxufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJzeW1ib2wtcGxhY2VtZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwicG9pbnRcIiB8IFwibGluZVwiIHwgXCJsaW5lLWNlbnRlclwiPixcbiAgICBcInN5bWJvbC1zcGFjaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJzeW1ib2wtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJzeW1ib2wtei1vcmRlclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcImF1dG9cIiB8IFwidmlld3BvcnQteVwiIHwgXCJzb3VyY2VcIj4sXG4gICAgXCJpY29uLWFsbG93LW92ZXJsYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLW9wdGlvbmFsXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcImljb24tc2l6ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tdGV4dC1maXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJub25lXCIgfCBcIndpZHRoXCIgfCBcImhlaWdodFwiIHwgXCJib3RoXCI+LFxuICAgIFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImljb24taW1hZ2VcIjogRGF0YURyaXZlblByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiaWNvbi1yb3RhdGVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24ta2VlcC11cHJpZ2h0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi1hbmNob3JcIjogRGF0YURyaXZlblByb3BlcnR5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+LFxuICAgIFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1maWVsZFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Rm9ybWF0dGVkPixcbiAgICBcInRleHQtZm9udFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8QXJyYXk8c3RyaW5nPj4sXG4gICAgXCJ0ZXh0LXNpemVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LW1heC13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbGluZS1oZWlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbGV0dGVyLXNwYWNpbmdcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWp1c3RpZnlcIjogRGF0YURyaXZlblByb3BlcnR5PFwiYXV0b1wiIHwgXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiPixcbiAgICBcInRleHQtcmFkaWFsLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtdmFyaWFibGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PEFycmF5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+PixcbiAgICBcInRleHQtYW5jaG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImNlbnRlclwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiPixcbiAgICBcInRleHQtbWF4LWFuZ2xlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXdyaXRpbmctbW9kZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxBcnJheTxcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIj4+LFxuICAgIFwidGV4dC1yb3RhdGVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQta2VlcC11cHJpZ2h0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogRGF0YURyaXZlblByb3BlcnR5PFwibm9uZVwiIHwgXCJ1cHBlcmNhc2VcIiB8IFwibG93ZXJjYXNlXCI+LFxuICAgIFwidGV4dC1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwidGV4dC1hbGxvdy1vdmVybGFwXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC1vcHRpb25hbFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwic3ltYm9sLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1wbGFjZW1lbnRcIl0pLFxuICAgIFwic3ltYm9sLXNwYWNpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtc3BhY2luZ1wiXSksXG4gICAgXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtYXZvaWQtZWRnZXNcIl0pLFxuICAgIFwic3ltYm9sLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1zb3J0LWtleVwiXSksXG4gICAgXCJzeW1ib2wtei1vcmRlclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC16LW9yZGVyXCJdKSxcbiAgICBcImljb24tYWxsb3ctb3ZlcmxhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tYWxsb3ctb3ZlcmxhcFwiXSksXG4gICAgXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIl0pLFxuICAgIFwiaWNvbi1vcHRpb25hbFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tb3B0aW9uYWxcIl0pLFxuICAgIFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiXSksXG4gICAgXCJpY29uLXNpemVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1zaXplXCJdKSxcbiAgICBcImljb24tdGV4dC1maXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXRleHQtZml0XCJdKSxcbiAgICBcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tdGV4dC1maXQtcGFkZGluZ1wiXSksXG4gICAgXCJpY29uLWltYWdlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24taW1hZ2VcIl0pLFxuICAgIFwiaWNvbi1yb3RhdGVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1yb3RhdGVcIl0pLFxuICAgIFwiaWNvbi1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1wYWRkaW5nXCJdKSxcbiAgICBcImljb24ta2VlcC11cHJpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1rZWVwLXVwcmlnaHRcIl0pLFxuICAgIFwiaWNvbi1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1vZmZzZXRcIl0pLFxuICAgIFwiaWNvbi1hbmNob3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1hbmNob3JcIl0pLFxuICAgIFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXBpdGNoLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1maWVsZFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWZpZWxkXCJdKSxcbiAgICBcInRleHQtZm9udFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWZvbnRcIl0pLFxuICAgIFwidGV4dC1zaXplXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtc2l6ZVwiXSksXG4gICAgXCJ0ZXh0LW1heC13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW1heC13aWR0aFwiXSksXG4gICAgXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1saW5lLWhlaWdodFwiXSksXG4gICAgXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbGV0dGVyLXNwYWNpbmdcIl0pLFxuICAgIFwidGV4dC1qdXN0aWZ5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtanVzdGlmeVwiXSksXG4gICAgXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yYWRpYWwtb2Zmc2V0XCJdKSxcbiAgICBcInRleHQtdmFyaWFibGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC12YXJpYWJsZS1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1hbmNob3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1tYXgtYW5nbGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW1heC1hbmdsZVwiXSksXG4gICAgXCJ0ZXh0LXdyaXRpbmctbW9kZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtd3JpdGluZy1tb2RlXCJdKSxcbiAgICBcInRleHQtcm90YXRlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcm90YXRlXCJdKSxcbiAgICBcInRleHQtcGFkZGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcGFkZGluZ1wiXSksXG4gICAgXCJ0ZXh0LWtlZXAtdXByaWdodFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQta2VlcC11cHJpZ2h0XCJdKSxcbiAgICBcInRleHQtdHJhbnNmb3JtXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtdHJhbnNmb3JtXCJdKSxcbiAgICBcInRleHQtb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtb2Zmc2V0XCJdKSxcbiAgICBcInRleHQtYWxsb3ctb3ZlcmxhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtYWxsb3ctb3ZlcmxhcFwiXSksXG4gICAgXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIl0pLFxuICAgIFwidGV4dC1vcHRpb25hbFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtb3B0aW9uYWxcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaWNvbi1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaWNvbi1oYWxvLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpY29uLWhhbG8td2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWhhbG8tYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwidGV4dC1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwidGV4dC1oYWxvLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJ0ZXh0LWhhbG8td2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWhhbG8tYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaWNvbi1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1vcGFjaXR5XCJdKSxcbiAgICBcImljb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWNvbG9yXCJdKSxcbiAgICBcImljb24taGFsby1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby1jb2xvclwiXSksXG4gICAgXCJpY29uLWhhbG8td2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWhhbG8td2lkdGhcIl0pLFxuICAgIFwiaWNvbi1oYWxvLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWhhbG8tYmx1clwiXSksXG4gICAgXCJpY29uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1vcGFjaXR5XCJdKSxcbiAgICBcInRleHQtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWNvbG9yXCJdLCB7IHJ1bnRpbWVUeXBlOiBDb2xvclR5cGUsIGdldE92ZXJyaWRlOiAobykgPT4gby50ZXh0Q29sb3IsIGhhc092ZXJyaWRlOiAobykgPT4gISFvLnRleHRDb2xvciB9KSxcbiAgICBcInRleHQtaGFsby1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby1jb2xvclwiXSksXG4gICAgXCJ0ZXh0LWhhbG8td2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWhhbG8td2lkdGhcIl0pLFxuICAgIFwidGV4dC1oYWxvLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWhhbG8tYmx1clwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC10cmFuc2xhdGVcIl0pLFxuICAgIFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Wm9vbUNvbnN0YW50RXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge051bGxUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXRTZWN0aW9uT3ZlcnJpZGU8VD4gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGRlZmF1bHRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+O1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4pIHtcbiAgICAgICAgYXNzZXJ0KGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMudHlwZSA9IGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMgPyBkZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzLnJ1bnRpbWVUeXBlIDogTnVsbFR5cGU7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXM7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGVzICYmIG92ZXJyaWRlcy5oYXNPdmVycmlkZShjdHguZm9ybWF0dGVkU2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzLmdldE92ZXJyaWRlKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdHguZmVhdHVyZSAmJiBjdHguZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUuZXZhbHVhdGUoY3R4LmZlYXR1cmUsIGN0eC5mZWF0dXJlU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWUuaXNDb25zdGFudCgpKSB7XG4gICAgICAgICAgICBjb25zdCBleHByOiBab29tQ29uc3RhbnRFeHByZXNzaW9uPCdzb3VyY2UnPiA9ICgodGhpcy5kZWZhdWx0VmFsdWUudmFsdWUpOiBhbnkpO1xuICAgICAgICAgICAgZm4oZXhwci5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2Fubm90IGJlIHN0YXRpY2FsbHkgZXZhbHVhdGVkLCBhcyB0aGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGV2YWx1YXRpb24gY29udGV4dC5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdGb3JtYXRTZWN0aW9uT3ZlcnJpZGUnLCBGb3JtYXRTZWN0aW9uT3ZlcnJpZGUsIHtvbWl0OiBbJ2RlZmF1bHRWYWx1ZSddfSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgcmVzb2x2ZVRva2VucyBmcm9tICcuLi8uLi91dGlsL3Jlc29sdmVfdG9rZW5zJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIFRyYW5zaXRpb25hYmxlLFxuICAgIFRyYW5zaXRpb25pbmcsXG4gICAgTGF5b3V0LFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkLFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSxcbiAgICBQcm9wZXJ0eVZhbHVlXG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIGlzRXhwcmVzc2lvbixcbiAgICBTdHlsZUV4cHJlc3Npb24sXG4gICAgWm9vbUNvbnN0YW50RXhwcmVzc2lvbixcbiAgICBab29tRGVwZW5kZW50RXhwcmVzc2lvblxufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlLCBTb3VyY2VFeHByZXNzaW9uLCBDb21wb3NpdGVFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB7Rm9ybWF0dGVkVHlwZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdmFsdWVzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0U2VjdGlvbk92ZXJyaWRlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXRfc2VjdGlvbl9vdmVycmlkZSc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0JztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9saXRlcmFsJztcblxuY2xhc3MgU3ltYm9sU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1snaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB1bnNwZWNpZmllZCwgYCotcGl0Y2gtYWxpZ25tZW50YCBpbmhlcml0cyBgKi1yb3RhdGlvbi1hbGlnbm1lbnRgXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1waXRjaC1hbGlnbm1lbnQnXSA9IHRoaXMubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcGl0Y2gtYWxpZ25tZW50J10gPSB0aGlzLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyaXRpbmdNb2RlcyA9IHRoaXMubGF5b3V0LmdldCgndGV4dC13cml0aW5nLW1vZGUnKTtcbiAgICAgICAgICAgIGlmICh3cml0aW5nTW9kZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcywgcHJlc2VydmluZyBvcmRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZHVwZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2Ygd3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWR1cGVkLmluZGV4T2YobSkgPCAwKSBkZWR1cGVkLnB1c2gobSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtd3JpdGluZy1tb2RlJ10gPSBkZWR1cGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXdyaXRpbmctbW9kZSddID0gWydob3Jpem9udGFsJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRQYWludE92ZXJyaWRlcygpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhuYW1lOiAqLCBmZWF0dXJlOiBGZWF0dXJlLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYXlvdXQuZ2V0KG5hbWUpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHVuZXZhbHVhdGVkID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1tuYW1lXTtcbiAgICAgICAgaWYgKCF1bmV2YWx1YXRlZC5pc0RhdGFEcml2ZW4oKSAmJiAhaXNFeHByZXNzaW9uKHVuZXZhbHVhdGVkLnZhbHVlKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVUb2tlbnMoZmVhdHVyZS5wcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlKTsgLy8gU2hvdWxkIHRha2UgYSBkaWZmZXJlbnQgcGF0aCBpbiBGZWF0dXJlSW5kZXhcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9zZXRQYWludE92ZXJyaWRlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBvdmVycmlkYWJsZSBvZiBwcm9wZXJ0aWVzLnBhaW50Lm92ZXJyaWRhYmxlUHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsIG92ZXJyaWRhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVuID0gdGhpcy5wYWludC5nZXQob3ZlcnJpZGFibGUpO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBuZXcgRm9ybWF0U2VjdGlvbk92ZXJyaWRlKG92ZXJyaWRlbik7XG4gICAgICAgICAgICBjb25zdCBzdHlsZUV4cHJlc3Npb24gPSBuZXcgU3R5bGVFeHByZXNzaW9uKG92ZXJyaWRlLCBvdmVycmlkZW4ucHJvcGVydHkuc3BlY2lmaWNhdGlvbik7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgfHwgb3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignc291cmNlJywgc3R5bGVFeHByZXNzaW9uKTogU291cmNlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjb21wb3NpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4udmFsdWUuem9vbVN0b3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlbi52YWx1ZS5faW50ZXJwb2xhdGlvblR5cGUpOiBDb21wb3NpdGVFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFpbnQuX3ZhbHVlc1tvdmVycmlkYWJsZV0gPSBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKG92ZXJyaWRlbi5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4ucGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPFQsIFI+KG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sIG5ld1ZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXQgfHwgb2xkVmFsdWUuaXNEYXRhRHJpdmVuKCkgfHwgbmV3VmFsdWUuaXNEYXRhRHJpdmVuKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3ltYm9sU3R5bGVMYXllci5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LCBuYW1lKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaGFzUGFpbnRPdmVycmlkZShsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gbGF5b3V0LmdldCgndGV4dC1maWVsZCcpO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMucGFpbnQucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICBsZXQgaGFzT3ZlcnJpZGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY2hlY2tTZWN0aW9ucyA9IChzZWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm92ZXJyaWRlcyAmJiBwcm9wZXJ0eS5vdmVycmlkZXMuaGFzT3ZlcnJpZGUoc2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzT3ZlcnJpZGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgJiYgdGV4dEZpZWxkLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICBjaGVja1NlY3Rpb25zKHRleHRGaWVsZC52YWx1ZS52YWx1ZS5zZWN0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrRXhwcmVzc2lvbiA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc092ZXJyaWRlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBMaXRlcmFsICYmIHR5cGVPZihleHByZXNzaW9uLnZhbHVlKSA9PT0gRm9ybWF0dGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IEZvcm1hdHRlZCA9ICgoZXhwcmVzc2lvbi52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZm9ybWF0dGVkLnNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBGb3JtYXRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZXhwcmVzc2lvbi5zZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5lYWNoQ2hpbGQoY2hlY2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBleHByOiBab29tQ29uc3RhbnRFeHByZXNzaW9uPCdzb3VyY2UnPiA9ICgodGV4dEZpZWxkLnZhbHVlKTogYW55KTtcbiAgICAgICAgICAgIGlmIChleHByLl9zdHlsZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24oZXhwci5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhc092ZXJyaWRlcztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZFByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1jb2xvclwiXSksXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1wYXR0ZXJuXCJdKSxcbiAgICBcImJhY2tncm91bmQtb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfYmFja2dyb3VuZFwiXVtcImJhY2tncm91bmQtb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tncm91bmRTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcInJhc3Rlci1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWluXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1zYXR1cmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItY29udHJhc3RcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1yZXNhbXBsaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibGluZWFyXCIgfCBcIm5lYXJlc3RcIj4sXG4gICAgXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwicmFzdGVyLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1vcGFjaXR5XCJdKSxcbiAgICBcInJhc3Rlci1odWUtcm90YXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiXSksXG4gICAgXCJyYXN0ZXItc2F0dXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFxuICAgIFwicmFzdGVyLWNvbnRyYXN0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItY29udHJhc3RcIl0pLFxuICAgIFwicmFzdGVyLXJlc2FtcGxpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1yZXNhbXBsaW5nXCJdKSxcbiAgICBcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vLi4vdWkvbWFwJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxudHlwZSBDdXN0b21SZW5kZXJNZXRob2QgPSAoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgbWF0cml4OiBBcnJheTxudW1iZXI+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY3VzdG9tIHN0eWxlIGxheWVycy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ3VzdG9tIGxheWVycyBhbGxvdyBhIHVzZXIgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIG1hcCdzIEdMIGNvbnRleHQgdXNpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAqIFRoZXNlIGxheWVycyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBhbnkgcmVndWxhciBsYXllcnMgdXNpbmcge0BsaW5rIE1hcCNhZGRMYXllcn0uXG4gKlxuICogQ3VzdG9tIGxheWVycyBtdXN0IGhhdmUgYSB1bmlxdWUgYGlkYCBhbmQgbXVzdCBoYXZlIHRoZSBgdHlwZWAgb2YgYFwiY3VzdG9tXCJgLlxuICogVGhleSBtdXN0IGltcGxlbWVudCBgcmVuZGVyYCBhbmQgbWF5IGltcGxlbWVudCBgcHJlcmVuZGVyYCwgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYC5cbiAqIFRoZXkgY2FuIHRyaWdnZXIgcmVuZGVyaW5nIHVzaW5nIHtAbGluayBNYXAjdHJpZ2dlclJlcGFpbnR9XG4gKiBhbmQgdGhleSBzaG91bGQgYXBwcm9wcmlhdGVseSBoYW5kbGUge0BsaW5rIE1hcC5ldmVudDp3ZWJnbGNvbnRleHRsb3N0fSBhbmRcbiAqIHtAbGluayBNYXAuZXZlbnQ6d2ViZ2xjb250ZXh0cmVzdG9yZWR9LlxuICpcbiAqIFRoZSBgcmVuZGVyaW5nTW9kZWAgcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUgbGF5ZXIgaXMgdHJlYXRlZCBhcyBhIGBcIjJkXCJgIG9yIGBcIjNkXCJgIG1hcCBsYXllci4gVXNlOlxuICogLSBgXCJyZW5kZXJpbmdNb2RlXCI6IFwiM2RcImAgdG8gdXNlIHRoZSBkZXB0aCBidWZmZXIgYW5kIHNoYXJlIGl0IHdpdGggb3RoZXIgbGF5ZXJzXG4gKiAtIGBcInJlbmRlcmluZ01vZGVcIjogXCIyZFwiYCB0byBhZGQgYSBsYXllciB3aXRoIG5vIGRlcHRoLiBJZiB5b3UgbmVlZCB0byB1c2UgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgYSBgXCIyZFwiYCBsYXllciB5b3UgbXVzdCB1c2UgYW4gb2Zmc2NyZWVuXG4gKiAgIGZyYW1lYnVmZmVyIGFuZCB7QGxpbmsgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UjcHJlcmVuZGVyfVxuICpcbiAqIEBpbnRlcmZhY2UgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBBIHVuaXF1ZSBsYXllciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBsYXllcidzIHR5cGUuIE11c3QgYmUgYFwiY3VzdG9tXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbmRlcmluZ01vZGUgRWl0aGVyIGBcIjJkXCJgIG9yIGBcIjNkXCJgLiBEZWZhdWx0cyB0byBgXCIyZFwiYC5cbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gbGF5ZXIgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBOdWxsSXNsYW5kTGF5ZXIge1xuICogICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgICB0aGlzLmlkID0gJ251bGwtaXNsYW5kJztcbiAqICAgICAgICAgdGhpcy50eXBlID0gJ2N1c3RvbSc7XG4gKiAgICAgICAgIHRoaXMucmVuZGVyaW5nTW9kZSA9ICcyZCc7XG4gKiAgICAgfVxuICpcbiAqICAgICBvbkFkZChtYXAsIGdsKSB7XG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGBcbiAqICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuICogICAgICAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNCgwLjUsIDAuNSwgMC4wLCAxLjApO1xuICogICAgICAgICAgICAgZ2xfUG9pbnRTaXplID0gMjAuMDtcbiAqICAgICAgICAgfWA7XG4gKlxuICogICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGBcbiAqICAgICAgICAgdm9pZCBtYWluKCkge1xuICogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApO1xuICogICAgICAgICB9YDtcbiAqXG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTtcbiAqICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICogICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpO1xuICogICAgICAgICBnbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XG4gKlxuICogICAgICAgICB0aGlzLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcbiAqICAgICAgICAgZ2wubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICB9XG4gKlxuICogICAgIHJlbmRlcihnbCwgbWF0cml4KSB7XG4gKiAgICAgICAgIGdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBcInVfbWF0cml4XCIpLCBmYWxzZSwgbWF0cml4KTtcbiAqICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBtYXAub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAqICAgICBtYXAuYWRkTGF5ZXIobmV3IE51bGxJc2xhbmRMYXllcigpKTtcbiAqIH0pO1xuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBpbml0aWFsaXplIGdsIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXAgdGhpcyBjdXN0b20gbGF5ZXIgd2FzIGp1c3QgYWRkZWQgdG8uXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIGdsIGNvbnRleHQgZm9yIHRoZSBtYXAuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBjbGVhbiB1cCBnbCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBnbCBjb250ZXh0IGZvciB0aGUgbWFwLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgdG8gYWxsb3cgYSBsYXllciB0byBwcmVwYXJlIHJlc291cmNlcyBvciByZW5kZXIgaW50byBhIHRleHR1cmUuXG4gKlxuICogVGhlIGxheWVyIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCBHTCBzdGF0ZSBhbmQgbXVzdCBiaW5kIGEgZnJhbWVidWZmZXIgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBwcmVyZW5kZXJcbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgbWFwJ3MgZ2wgY29udGV4dC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbWF0cml4IFRoZSBtYXAncyBjYW1lcmEgbWF0cml4LiBJdCBwcm9qZWN0cyBzcGhlcmljYWwgbWVyY2F0b3JcbiAqIGNvb3JkaW5hdGVzIHRvIGdsIGNvb3JkaW5hdGVzLiBUaGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuXG4vKipcbiAqIENhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgYWxsb3dpbmcgdGhlIGxheWVyIHRvIGRyYXcgaW50byB0aGUgR0wgY29udGV4dC5cbiAqXG4gKiBUaGUgbGF5ZXIgY2FuIGFzc3VtZSBibGVuZGluZyBhbmQgZGVwdGggc3RhdGUgaXMgc2V0IHRvIGFsbG93IHRoZSBsYXllciB0byBwcm9wZXJseVxuICogYmxlbmQgYW5kIGNsaXAgb3RoZXIgbGF5ZXJzLiBUaGUgbGF5ZXIgY2Fubm90IG1ha2UgYW55IG90aGVyIGFzc3VtcHRpb25zIGFib3V0IHRoZVxuICogY3VycmVudCBHTCBzdGF0ZS5cbiAqXG4gKiBJZiB0aGUgbGF5ZXIgbmVlZHMgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgaXQgc2hvdWxkIGltcGxlbWVudCB0aGUgYHByZXJlbmRlcmAgbWV0aG9kXG4gKiB0byBkbyB0aGlzIGFuZCBvbmx5IHVzZSB0aGUgYHJlbmRlcmAgbWV0aG9kIGZvciBkcmF3aW5nIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZnJhbWVidWZmZXIuXG4gKlxuICogVGhlIGJsZW5kIGZ1bmN0aW9uIGlzIHNldCB0byBgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLiBUaGlzIGV4cGVjdHNcbiAqIGNvbG9ycyB0byBiZSBwcm92aWRlZCBpbiBwcmVtdWx0aXBsaWVkIGFscGhhIGZvcm0gd2hlcmUgdGhlIGByYCwgYGdgIGFuZCBgYmAgdmFsdWVzIGFyZSBhbHJlYWR5XG4gKiBtdWx0aXBsaWVkIGJ5IHRoZSBgYWAgdmFsdWUuIElmIHlvdSBhcmUgdW5hYmxlIHRvIHByb3ZpZGUgY29sb3JzIGluIHByZW11bHRpcGxpZWQgZm9ybSB5b3VcbiAqIG1heSB3YW50IHRvIGNoYW5nZSB0aGUgYmxlbmQgZnVuY3Rpb24gdG9cbiAqIGBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHJlbmRlclxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBtYXAncyBnbCBjb250ZXh0LlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtYXRyaXggVGhlIG1hcCdzIGNhbWVyYSBtYXRyaXguIEl0IHByb2plY3RzIHNwaGVyaWNhbCBtZXJjYXRvclxuICogY29vcmRpbmF0ZXMgdG8gZ2wgY29vcmRpbmF0ZXMuIFRoZSBzcGhlcmljYWwgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UgPSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgIHJlbmRlcmluZ01vZGU6IFwiMmRcIiB8IFwiM2RcIixcbiAgICByZW5kZXI6IEN1c3RvbVJlbmRlck1ldGhvZCxcbiAgICBwcmVyZW5kZXI6ID9DdXN0b21SZW5kZXJNZXRob2QsXG4gICAgb25BZGQ6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWQsXG4gICAgb25SZW1vdmU6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihsYXllck9iamVjdDogQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBpZCA9IGxheWVyT2JqZWN0LmlkO1xuXG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImlkXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsYXllck9iamVjdC5yZW5kZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCBcInJlbmRlclwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAmJlxuICAgICAgICBsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICE9PSAnMmQnICYmXG4gICAgICAgIGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgIT09ICczZCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogcHJvcGVydHkgXCJyZW5kZXJpbmdNb2RlXCIgbXVzdCBiZSBlaXRoZXIgXCIyZFwiIG9yIFwiM2RcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuY2xhc3MgQ3VzdG9tU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlO1xuXG4gICAgY29uc3RydWN0b3IoaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKGltcGxlbWVudGF0aW9uLCB7fSk7XG4gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcbiAgICB9XG5cbiAgICBpczNEKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGxlbWVudGF0aW9uLnByZXJlbmRlciAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKCkge31cbiAgICB1cGRhdGVUcmFuc2l0aW9ucygpIHt9XG4gICAgaGFzVHJhbnNpdGlvbigpIHt9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgXCJDdXN0b20gbGF5ZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKG1hcCwgbWFwLnBhaW50ZXIuY29udGV4dC5nbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZShtYXAsIG1hcC5wYWludGVyLmNvbnRleHQuZ2wpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGNpcmNsZSBmcm9tICcuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgZmlsbCBmcm9tICcuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGZpbGxFeHRydXNpb24gZnJvbSAnLi9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgbGluZSBmcm9tICcuL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHJhc3RlciBmcm9tICcuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgQ3VzdG9tU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNvbnN0IHN1YmNsYXNzZXMgPSB7XG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgaGlsbHNoYWRlLFxuICAgIGZpbGwsXG4gICAgJ2ZpbGwtZXh0cnVzaW9uJzogZmlsbEV4dHJ1c2lvbixcbiAgICBsaW5lLFxuICAgIHN5bWJvbCxcbiAgICBiYWNrZ3JvdW5kLFxuICAgIHJhc3RlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21TdHlsZUxheWVyKGxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IHN1YmNsYXNzZXNbbGF5ZXIudHlwZV0obGF5ZXIpO1xuICAgIH1cbn1cblxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5jb25zdCB7SFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEhUTUxWaWRlb0VsZW1lbnQsIEltYWdlRGF0YSwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1JHQkFJbWFnZSwgQWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFRleHR1cmVGb3JtYXQgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdSR0JBJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnQUxQSEEnPjtcbmV4cG9ydCB0eXBlIFRleHR1cmVGaWx0ZXIgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVInPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVJfTUlQTUFQX05FQVJFU1QnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdORUFSRVNUJz47XG5leHBvcnQgdHlwZSBUZXh0dXJlV3JhcCA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1JFUEVBVCc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0NMQU1QX1RPX0VER0UnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdNSVJST1JFRF9SRVBFQVQnPjtcblxudHlwZSBFbXB0eUltYWdlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogbnVsbFxufVxuXG5leHBvcnQgdHlwZSBUZXh0dXJlSW1hZ2UgPVxuICAgIHwgUkdCQUltYWdlXG4gICAgfCBBbHBoYUltYWdlXG4gICAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gICAgfCBIVE1MQ2FudmFzRWxlbWVudFxuICAgIHwgSFRNTFZpZGVvRWxlbWVudFxuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBFbXB0eUltYWdlXG4gICAgfCBJbWFnZUJpdG1hcDtcblxuY2xhc3MgVGV4dHVyZSB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgICBmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG4gICAgZmlsdGVyOiA/VGV4dHVyZUZpbHRlcjtcbiAgICB3cmFwOiA/VGV4dHVyZVdyYXA7XG4gICAgdXNlTWlwbWFwOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1hZ2U6IFRleHR1cmVJbWFnZSwgZm9ybWF0OiBUZXh0dXJlRm9ybWF0LCBvcHRpb25zOiA/eyBwcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW4gfSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gY29udGV4dC5nbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlKGltYWdlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoaW1hZ2U6IFRleHR1cmVJbWFnZSwgb3B0aW9uczogP3twcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW59LCBwb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBpbWFnZTtcbiAgICAgICAgY29uc3QgcmVzaXplID0gKCF0aGlzLnNpemUgfHwgdGhpcy5zaXplWzBdICE9PSB3aWR0aCB8fCB0aGlzLnNpemVbMV0gIT09IGhlaWdodCkgJiYgIXBvc2l0aW9uO1xuICAgICAgICBjb25zdCB7Y29udGV4dH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7Z2x9ID0gY29udGV4dDtcblxuICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnVzZU1pcG1hcCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldCgxKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQgPT09IGdsLlJHQkEgJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMucHJlbXVsdGlwbHkgIT09IGZhbHNlKSk7XG5cbiAgICAgICAgaWYgKHJlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaXplID0gW3dpZHRoLCBoZWlnaHRdO1xuXG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhIHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3gsIHl9ID0gcG9zaXRpb24gfHwge3g6IDAsIHk6IDB9O1xuICAgICAgICAgICAgaWYgKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEltYWdlRGF0YSB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHgsIHksIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiB0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKGZpbHRlcjogVGV4dHVyZUZpbHRlciwgd3JhcDogVGV4dHVyZVdyYXAsIG1pbkZpbHRlcjogP1RleHR1cmVGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qge2NvbnRleHR9ID0gdGhpcztcbiAgICAgICAgY29uc3Qge2dsfSA9IGNvbnRleHQ7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgaWYgKG1pbkZpbHRlciA9PT0gZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUICYmICF0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIG1pbkZpbHRlciB8fCBmaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXApO1xuICAgICAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2l6ZVBvd2VyT2ZUd28oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemVbMF0gPT09IHRoaXMuc2l6ZVsxXSAmJiAoTWF0aC5sb2codGhpcy5zaXplWzBdKSAvIE1hdGguTE4yKSAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xuICAgICAgICB0aGlzLnRleHR1cmUgPSAobnVsbDogYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEludm9rZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gaW4gYSBub24tYmxvY2tpbmcgd2F5IHdoZW4gdHJpZ2dlcigpIGlzIGNhbGxlZC4gSW52b2NhdGlvbiByZXF1ZXN0c1xuICogYXJlIGlnbm9yZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBpbnZva2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRocm90dGxlZEludm9rZXIge1xuICAgIF9jaGFubmVsOiBNZXNzYWdlQ2hhbm5lbDtcbiAgICBfdHJpZ2dlcmVkOiBib29sZWFuO1xuICAgIF9jYWxsYmFjazogRnVuY3Rpb25cblxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDIub25tZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoYW5uZWw7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gKCkgPT4ge307XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaHJvdHRsZWRJbnZva2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiaW5kQWxsLCBpc1dvcmtlciwgaXNTYWZhcml9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7c2VyaWFsaXplLCBkZXNlcmlhbGl6ZX0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBUaHJvdHRsZWRJbnZva2VyIGZyb20gJy4vdGhyb3R0bGVkX2ludm9rZXInO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQWN0b3IgZGVzaWduIHBhdHRlcm5dKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWN0b3JfbW9kZWwpXG4gKiB0aGF0IG1haW50YWlucyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXN5bmNocm9ub3VzIHRhc2tzIGFuZCB0aGUgb2JqZWN0c1xuICogdGhhdCBzcGluIHRoZW0gb2ZmIC0gaW4gdGhpcyBjYXNlLCB0YXNrcyBsaWtlIHBhcnNpbmcgcGFydHMgb2Ygc3R5bGVzLFxuICogb3duZWQgYnkgdGhlIHN0eWxlc1xuICpcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSB0YXJnZXRcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbWFwSWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE1hcCBpbnN0YW5jZSB1c2luZyB0aGlzIEFjdG9yLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQWN0b3Ige1xuICAgIHRhcmdldDogYW55O1xuICAgIHBhcmVudDogYW55O1xuICAgIG1hcElkOiA/bnVtYmVyO1xuICAgIGNhbGxiYWNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0YXNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIHRhc2tRdWV1ZTogQXJyYXk8bnVtYmVyPjtcbiAgICBjYW5jZWxDYWxsYmFja3M6IHsgbnVtYmVyOiBDYW5jZWxhYmxlIH07XG4gICAgaW52b2tlcjogVGhyb3R0bGVkSW52b2tlcjtcbiAgICBnbG9iYWxTY29wZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IodGFyZ2V0OiBhbnksIHBhcmVudDogYW55LCBtYXBJZDogP251bWJlcikge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMubWFwSWQgPSBtYXBJZDtcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSB7fTtcbiAgICAgICAgdGhpcy50YXNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmNhbmNlbENhbGxiYWNrcyA9IHt9O1xuICAgICAgICBiaW5kQWxsKFsncmVjZWl2ZScsICdwcm9jZXNzJ10sIHRoaXMpO1xuICAgICAgICB0aGlzLmludm9rZXIgPSBuZXcgVGhyb3R0bGVkSW52b2tlcih0aGlzLnByb2Nlc3MpO1xuICAgICAgICB0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsU2NvcGUgPSBpc1dvcmtlcigpID8gdGFyZ2V0IDogd2luZG93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSBmcm9tIGEgbWFpbi10aHJlYWQgbWFwIHRvIGEgV29ya2VyIG9yIGZyb20gYSBXb3JrZXIgYmFjayB0b1xuICAgICAqIGEgbWFpbi10aHJlYWQgbWFwIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBtZXRob2QgdG8gaW52b2tlIG9yICdbc291cmNlLXR5cGVdLltzb3VyY2UtbmFtZV0ubmFtZScgZm9yIGEgbWV0aG9kIG9uIGEgV29ya2VyU291cmNlLlxuICAgICAqIEBwYXJhbSB0YXJnZXRNYXBJZCBBIHBhcnRpY3VsYXIgbWFwSWQgdG8gd2hpY2ggdG8gc2VuZCB0aGlzIG1lc3NhZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZW5kKHR5cGU6IHN0cmluZywgZGF0YTogbWl4ZWQsIGNhbGxiYWNrOiA/RnVuY3Rpb24sIHRhcmdldE1hcElkOiA/c3RyaW5nLCBtdXN0UXVldWU6IGJvb2xlYW4gPSBmYWxzZSk6ID9DYW5jZWxhYmxlIHtcbiAgICAgICAgLy8gV2UncmUgdXNpbmcgYSBzdHJpbmcgSUQgaW5zdGVhZCBvZiBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcgdXNlZCBhcyBvYmplY3Qga2V5c1xuICAgICAgICAvLyBhbnl3YXksIGFuZCB0aHVzIHN0cmluZ2lmaWVkIGltcGxpY2l0bHkuIFdlIHVzZSByYW5kb20gSURzIGJlY2F1c2UgYW4gYWN0b3IgbWF5IHJlY2VpdmVcbiAgICAgICAgLy8gbWVzc2FnZSBmcm9tIG11bHRpcGxlIG90aGVyIGFjdG9ycyB3aGljaCBjb3VsZCBydW4gaW4gZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBBXG4gICAgICAgIC8vIGxpbmVhcmx5IGluY3JlYXNpbmcgSUQgY291bGQgcHJvZHVjZSBjb2xsaXNpb25zLlxuICAgICAgICBjb25zdCBpZCA9IE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAxZTE4KSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBoYXNDYWxsYmFjazogISFjYWxsYmFjayxcbiAgICAgICAgICAgIHRhcmdldE1hcElkLFxuICAgICAgICAgICAgbXVzdFF1ZXVlLFxuICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemUoZGF0YSwgYnVmZmVycylcbiAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHNvIHRoYXQgaXQgbmV2ZXIgZmlyZXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxjYW5jZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcElkOiB0aGlzLm1hcElkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVjZWl2ZShtZXNzYWdlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAgIGlkID0gZGF0YS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50YXJnZXRNYXBJZCAmJiB0aGlzLm1hcElkICE9PSBkYXRhLnRhcmdldE1hcElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnPGNhbmNlbD4nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgcXVldWUuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBpdFxuICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4ga2lja2VkIG9mZiB5ZXQuIFRoZSBpZCB3aWxsIHJlbWFpbiBpbiB0aGUgcXVldWUsIGJ1dCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIHRhc2ssIGl0IHdpbGwgYmUgZHJvcHBlZCBvbmNlIGl0J3MgdGltZSB0byBleGVjdXRlIGl0LlxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFza3NbaWRdO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1dvcmtlcigpIHx8IGRhdGEubXVzdFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gd29ya2Vycywgc3RvcmUgdGhlIHRhc2tzIHRoYXQgd2UgbmVlZCB0byBwcm9jZXNzIGJlZm9yZSBhY3R1YWxseSBwcm9jZXNzaW5nIHRoZW0uIFRoaXNcbiAgICAgICAgICAgICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgcmVjZWl2aW5nIG1lc3NhZ2VzLCBhbmQgaW4gcGFydGljdWxhcixcbiAgICAgICAgICAgICAgICAvLyA8Y2FuY2VsPiBtZXNzYWdlcy4gU29tZSB0YXNrcyBtYXkgdGFrZSBhIHdoaWxlIGluIHRoZSB3b3JrZXIgdGhyZWFkLCBzbyBiZWZvcmVcbiAgICAgICAgICAgICAgICAvLyBleGVjdXRpbmcgdGhlIG5leHQgdGFzayBpbiBvdXIgcXVldWUsIHBvc3RNZXNzYWdlIHByZWVtcHRzIHRoaXMgYW5kIDxjYW5jZWw+XG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgY2FuIGJlIHByb2Nlc3NlZC4gV2UncmUgdXNpbmcgYSBNZXNzYWdlQ2hhbm5lbCBvYmplY3QgdG8gZ2V0IHRocm90dGxlIHRoZVxuICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBmbG93IHRvIG9uZSBhdCBhIHRpbWUuXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrc1tpZF0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlci50cmlnZ2VyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtYWluIHRocmVhZCwgcHJvY2VzcyBtZXNzYWdlcyBpbW1lZGlhdGVseSBzbyB0aGF0IG90aGVyIHdvcmsgZG9lcyBub3Qgc2xpcCBpblxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gZ2V0dGluZyBwYXJ0aWFsIGRhdGEgYmFjayBmcm9tIHdvcmtlcnMuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVGFzayhpZCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzKCkge1xuICAgICAgICBpZiAoIXRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50YXNrUXVldWUuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMudGFza3NbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy50YXNrc1tpZF07XG4gICAgICAgIC8vIFNjaGVkdWxlIGFub3RoZXIgcHJvY2VzcyBjYWxsIGlmIHdlIGtub3cgdGhlcmUncyBtb3JlIHRvIHByb2Nlc3MgX2JlZm9yZV8gaW52b2tpbmcgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgdGFzay4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBldmVuIGlmIHRoZSBjdXJyZW50IHRhc2tcbiAgICAgICAgLy8gZG9lc24ndCBleGVjdXRlIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgaWYgKHRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIElEIGRvZXNuJ3QgaGF2ZSBhc3NvY2lhdGVkIHRhc2sgZGF0YSBhbnltb3JlLCBpdCB3YXMgY2FuY2VsZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NUYXNrKGlkLCB0YXNrKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVGFzayhpZDogbnVtYmVyLCB0YXNrOiBhbnkpIHtcbiAgICAgICAgaWYgKHRhc2sudHlwZSA9PT0gJzxyZXNwb25zZT4nKSB7XG4gICAgICAgICAgICAvLyBUaGUgZG9uZSgpIGZ1bmN0aW9uIGluIHRoZSBjb3VudGVycGFydCBoYXMgYmVlbiBjYWxsZWQsIGFuZCB3ZSBhcmUgbm93XG4gICAgICAgICAgICAvLyBmaXJpbmcgdGhlIGNhbGxiYWNrIGluIHRoZSBvcmlnaW5hdGluZyBhY3RvciwgaWYgdGhlcmUgaXMgb25lLlxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGEgcmVzcG9uc2UsIGJ1dCBkb24ndCBoYXZlIGEgY2FsbGJhY2ssIHRoZSByZXF1ZXN0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgICBpZiAodGFzay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkZXNlcmlhbGl6ZSh0YXNrLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVzZXJpYWxpemUodGFzay5kYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IHRhc2suaGFzQ2FsbGJhY2sgPyAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICc8cmVzcG9uc2U+JyxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPyBzZXJpYWxpemUoZXJyKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHNlcmlhbGl6ZShkYXRhLCBidWZmZXJzKVxuICAgICAgICAgICAgICAgIH0sIGJ1ZmZlcnMpO1xuICAgICAgICAgICAgfSA6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSAoZGVzZXJpYWxpemUodGFzay5kYXRhKTogYW55KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFt0YXNrLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFzay50eXBlID09ICdsb2FkVGlsZScsICdyZW1vdmVUaWxlJywgZXRjLlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdGhpcy5wYXJlbnRbdGFzay50eXBlXSh0YXNrLnNvdXJjZU1hcElkLCBwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gc291cmNldHlwZS5tZXRob2RcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gdGFzay50eXBlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NvcGUgPSAodGhpcy5wYXJlbnQ6IGFueSkuZ2V0V29ya2VyU291cmNlKHRhc2suc291cmNlTWFwSWQsIGtleXNbMF0sIHBhcmFtcy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gc2NvcGVba2V5c1sxXV0ocGFyYW1zLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gZnVuY3Rpb24gd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBmdW5jdGlvbiAke3Rhc2sudHlwZX1gKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29tcGxldGVkICYmIGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93cyBjYW5jZWxpbmcgdGhlIHRhc2sgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5pbnZva2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBY3RvcjtcbiIsImV4cG9ydCB7IGdldFVSTCwgZ2V0VGlsZUJCb3gsIGdldE1lcmNDb29yZHMgfTtcblxuXG4vKipcbiAqIGdldFVSTFxuICpcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgYmFzZVVybCAgQmFzZSB1cmwgb2YgdGhlIFdNUyBzZXJ2ZXJcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgbGF5ZXIgICAgTGF5ZXIgbmFtZVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICAgICAgICBUaWxlIHpvb21cbiAqIEBwYXJhbSAgICB7T2JqZWN0fSAgW29wdGlvbnNdXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLmZvcm1hdD0naW1hZ2UvcG5nJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuc2VydmljZT0nV01TJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMudmVyc2lvbj0nMS4xLjEnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5yZXF1ZXN0PSdHZXRNYXAnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zcnM9J0VQU0c6Mzg1NyddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLndpZHRoPScyNTYnXVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICBbb3B0aW9ucy5oZWlnaHQ9JzI1NiddXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIHVybFxuICogQGV4YW1wbGVcbiAqIHZhciBiYXNlVXJsID0gJ2h0dHA6Ly9nZW9kYXRhLnN0YXRlLm5qLnVzL2ltYWdlcnl3bXMvTmF0dXJhbDIwMTUnO1xuICogdmFyIGxheWVyID0gJ05hdHVyYWwyMDE1JztcbiAqIHZhciB1cmwgPSB3aG9vdHMuZ2V0VVJMKGJhc2VVcmwsIGxheWVyLCAxNTQzMDgsIDE5NzE2NywgMTkpO1xuICovXG5mdW5jdGlvbiBnZXRVUkwoYmFzZVVybCwgbGF5ZXIsIHgsIHksIHosIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHZhciB1cmwgPSBiYXNlVXJsICsgJz8nICsgW1xuICAgICAgICAnYmJveD0nICAgICsgZ2V0VGlsZUJCb3goeCwgeSwgeiksXG4gICAgICAgICdmb3JtYXQ9JyAgKyAob3B0aW9ucy5mb3JtYXQgfHwgJ2ltYWdlL3BuZycpLFxuICAgICAgICAnc2VydmljZT0nICsgKG9wdGlvbnMuc2VydmljZSB8fCAnV01TJyksXG4gICAgICAgICd2ZXJzaW9uPScgKyAob3B0aW9ucy52ZXJzaW9uIHx8ICcxLjEuMScpLFxuICAgICAgICAncmVxdWVzdD0nICsgKG9wdGlvbnMucmVxdWVzdCB8fCAnR2V0TWFwJyksXG4gICAgICAgICdzcnM9JyAgICAgKyAob3B0aW9ucy5zcnMgfHwgJ0VQU0c6Mzg1NycpLFxuICAgICAgICAnd2lkdGg9JyAgICsgKG9wdGlvbnMud2lkdGggfHwgMjU2KSxcbiAgICAgICAgJ2hlaWdodD0nICArIChvcHRpb25zLmhlaWdodCB8fCAyNTYpLFxuICAgICAgICAnbGF5ZXJzPScgICsgbGF5ZXJcbiAgICBdLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiB1cmw7XG59XG5cblxuLyoqXG4gKiBnZXRUaWxlQkJveFxuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgVGlsZSBjb29yZGluYXRlIHhcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeSAgVGlsZSBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIFN0cmluZyBvZiB0aGUgYm91bmRpbmcgYm94XG4gKi9cbmZ1bmN0aW9uIGdldFRpbGVCQm94KHgsIHksIHopIHtcbiAgICAvLyBmb3IgR29vZ2xlL09TTSB0aWxlIHNjaGVtZSB3ZSBuZWVkIHRvIGFsdGVyIHRoZSB5XG4gICAgeSA9IChNYXRoLnBvdygyLCB6KSAtIHkgLSAxKTtcblxuICAgIHZhciBtaW4gPSBnZXRNZXJjQ29vcmRzKHggKiAyNTYsIHkgKiAyNTYsIHopLFxuICAgICAgICBtYXggPSBnZXRNZXJjQ29vcmRzKCh4ICsgMSkgKiAyNTYsICh5ICsgMSkgKiAyNTYsIHopO1xuXG4gICAgcmV0dXJuIG1pblswXSArICcsJyArIG1pblsxXSArICcsJyArIG1heFswXSArICcsJyArIG1heFsxXTtcbn1cblxuXG4vKipcbiAqIGdldE1lcmNDb29yZHNcbiAqXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggIFBpeGVsIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBQaXhlbCBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge0FycmF5fSAgIFt4LCB5XVxuICovXG5mdW5jdGlvbiBnZXRNZXJjQ29vcmRzKHgsIHksIHopIHtcbiAgICB2YXIgcmVzb2x1dGlvbiA9ICgyICogTWF0aC5QSSAqIDYzNzgxMzcgLyAyNTYpIC8gTWF0aC5wb3coMiwgeiksXG4gICAgICAgIG1lcmNfeCA9ICh4ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApLFxuICAgICAgICBtZXJjX3kgPSAoeSAqIHJlc29sdXRpb24gLSAyICogTWF0aC5QSSAgKiA2Mzc4MTM3IC8gMi4wKTtcblxuICAgIHJldHVybiBbbWVyY194LCBtZXJjX3ldO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRUaWxlQkJveH0gZnJvbSAnQG1hcGJveC93aG9vdHMtanMnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuZXhwb3J0IGNsYXNzIENhbm9uaWNhbFRpbGVJRCB7XG4gICAgejogbnVtYmVyO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcih6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh6ID49IDAgJiYgeiA8PSAyNSk7XG4gICAgICAgIGFzc2VydCh4ID49IDAgJiYgeCA8IE1hdGgucG93KDIsIHopKTtcbiAgICAgICAgYXNzZXJ0KHkgPj0gMCAmJiB5IDwgTWF0aC5wb3coMiwgeikpO1xuICAgICAgICB0aGlzLnogPSB6O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLmtleSA9IGNhbGN1bGF0ZUtleSgwLCB6LCB6LCB4LCB5KTtcbiAgICB9XG5cbiAgICBlcXVhbHMoaWQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy56ID09PSBpZC56ICYmIHRoaXMueCA9PT0gaWQueCAmJiB0aGlzLnkgPT09IGlkLnk7XG4gICAgfVxuXG4gICAgLy8gZ2l2ZW4gYSBsaXN0IG9mIHVybHMsIGNob29zZSBhIHVybCB0ZW1wbGF0ZSBhbmQgcmV0dXJuIGEgdGlsZSBVUkxcbiAgICB1cmwodXJsczogQXJyYXk8c3RyaW5nPiwgc2NoZW1lOiA/c3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJib3ggPSBnZXRUaWxlQkJveCh0aGlzLngsIHRoaXMueSwgdGhpcy56KTtcbiAgICAgICAgY29uc3QgcXVhZGtleSA9IGdldFF1YWRrZXkodGhpcy56LCB0aGlzLngsIHRoaXMueSk7XG5cbiAgICAgICAgcmV0dXJuIHVybHNbKHRoaXMueCArIHRoaXMueSkgJSB1cmxzLmxlbmd0aF1cbiAgICAgICAgICAgIC5yZXBsYWNlKCd7cHJlZml4fScsICh0aGlzLnggJSAxNikudG9TdHJpbmcoMTYpICsgKHRoaXMueSAlIDE2KS50b1N0cmluZygxNikpXG4gICAgICAgICAgICAucmVwbGFjZSgne3p9JywgU3RyaW5nKHRoaXMueikpXG4gICAgICAgICAgICAucmVwbGFjZSgne3h9JywgU3RyaW5nKHRoaXMueCkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3l9JywgU3RyaW5nKHNjaGVtZSA9PT0gJ3RtcycgPyAoTWF0aC5wb3coMiwgdGhpcy56KSAtIHRoaXMueSAtIDEpIDogdGhpcy55KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7cXVhZGtleX0nLCBxdWFka2V5KVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3tiYm94LWVwc2ctMzg1N30nLCBiYm94KTtcbiAgICB9XG5cbiAgICBnZXRUaWxlUG9pbnQoY29vcmQ6IE1lcmNhdG9yQ29vcmRpbmF0ZSkge1xuICAgICAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHRoaXMueik7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoY29vcmQueCAqIHRpbGVzQXRab29tIC0gdGhpcy54KSAqIEVYVEVOVCxcbiAgICAgICAgICAgIChjb29yZC55ICogdGlsZXNBdFpvb20gLSB0aGlzLnkpICogRVhURU5UKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuen0vJHt0aGlzLnh9LyR7dGhpcy55fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW53cmFwcGVkVGlsZUlEIHtcbiAgICB3cmFwOiBudW1iZXI7XG4gICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcih3cmFwOiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMuY2Fub25pY2FsID0gY2Fub25pY2FsO1xuICAgICAgICB0aGlzLmtleSA9IGNhbGN1bGF0ZUtleSh3cmFwLCBjYW5vbmljYWwueiwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3ZlcnNjYWxlZFRpbGVJRCB7XG4gICAgb3ZlcnNjYWxlZFo6IG51bWJlcjtcbiAgICB3cmFwOiBudW1iZXI7XG4gICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcG9zTWF0cml4OiBGbG9hdDMyQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3RvcihvdmVyc2NhbGVkWjogbnVtYmVyLCB3cmFwOiBudW1iZXIsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KG92ZXJzY2FsZWRaID49IHopO1xuICAgICAgICB0aGlzLm92ZXJzY2FsZWRaID0gb3ZlcnNjYWxlZFo7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMuY2Fub25pY2FsID0gbmV3IENhbm9uaWNhbFRpbGVJRCh6LCAreCwgK3kpO1xuICAgICAgICB0aGlzLmtleSA9IGNhbGN1bGF0ZUtleSh3cmFwLCBvdmVyc2NhbGVkWiwgeiwgeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKGlkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJzY2FsZWRaID09PSBpZC5vdmVyc2NhbGVkWiAmJiB0aGlzLndyYXAgPT09IGlkLndyYXAgJiYgdGhpcy5jYW5vbmljYWwuZXF1YWxzKGlkLmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgc2NhbGVkVG8odGFyZ2V0WjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRaIDw9IHRoaXMub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSB0YXJnZXRaO1xuICAgICAgICBpZiAodGFyZ2V0WiA+IHRoaXMuY2Fub25pY2FsLnopIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0YXJnZXRaLCB0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRhcmdldFosIHRoaXMud3JhcCwgdGFyZ2V0WiwgdGhpcy5jYW5vbmljYWwueCA+PiB6RGlmZmVyZW5jZSwgdGhpcy5jYW5vbmljYWwueSA+PiB6RGlmZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGNhbGN1bGF0ZVNjYWxlZEtleSBpcyBhbiBvcHRpbWl6YXRpb246XG4gICAgICogd2hlbiB3aXRoV3JhcCA9PSB0cnVlLCBpbXBsZW1lbnRzIHRoZSBzYW1lIGFzIHRoaXMuc2NhbGVkVG8oeikua2V5LFxuICAgICAqIHdoZW4gd2l0aFdyYXAgPT0gZmFsc2UsIGltcGxlbWVudHMgdGhlIHNhbWUgYXMgdGhpcy5zY2FsZWRUbyh6KS53cmFwcGVkKCkua2V5LlxuICAgICAqL1xuICAgIGNhbGN1bGF0ZVNjYWxlZEtleSh0YXJnZXRaOiBudW1iZXIsIHdpdGhXcmFwOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgYXNzZXJ0KHRhcmdldFogPD0gdGhpcy5vdmVyc2NhbGVkWik7XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHRhcmdldFo7XG4gICAgICAgIGlmICh0YXJnZXRaID4gdGhpcy5jYW5vbmljYWwueikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUtleSh0aGlzLndyYXAgKiArd2l0aFdyYXAsIHRhcmdldFosIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUtleSh0aGlzLndyYXAgKiArd2l0aFdyYXAsIHRhcmdldFosIHRhcmdldFosIHRoaXMuY2Fub25pY2FsLnggPj4gekRpZmZlcmVuY2UsIHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDaGlsZE9mKHBhcmVudDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICBpZiAocGFyZW50LndyYXAgIT09IHRoaXMud3JhcCkge1xuICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgYSBjaGlsZCBpZiB3ZSdyZSBpbiBhIGRpZmZlcmVudCB3b3JsZCBjb3B5XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSB0aGlzLmNhbm9uaWNhbC56IC0gcGFyZW50LmNhbm9uaWNhbC56O1xuICAgICAgICAvLyBXZSdyZSBmaXJzdCB0ZXN0aW5nIGZvciB6ID09IDAsIHRvIGF2b2lkIGEgMzIgYml0IHNoaWZ0LCB3aGljaCBpcyB1bmRlZmluZWQuXG4gICAgICAgIHJldHVybiBwYXJlbnQub3ZlcnNjYWxlZFogPT09IDAgfHwgKFxuICAgICAgICAgICAgcGFyZW50Lm92ZXJzY2FsZWRaIDwgdGhpcy5vdmVyc2NhbGVkWiAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5jYW5vbmljYWwueCA9PT0gKHRoaXMuY2Fub25pY2FsLnggPj4gekRpZmZlcmVuY2UpICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LmNhbm9uaWNhbC55ID09PSAodGhpcy5jYW5vbmljYWwueSA+PiB6RGlmZmVyZW5jZSkpO1xuICAgIH1cblxuICAgIGNoaWxkcmVuKHNvdXJjZU1heFpvb206IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5vdmVyc2NhbGVkWiA+PSBzb3VyY2VNYXhab29tKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gYSBzaW5nbGUgdGlsZSBjb29yZCByZXByZXNlbnRpbmcgYSBhbiBvdmVyc2NhbGVkIHRpbGVcbiAgICAgICAgICAgIHJldHVybiBbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGhpcy5vdmVyc2NhbGVkWiArIDEsIHRoaXMud3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSldO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeiA9IHRoaXMuY2Fub25pY2FsLnogKyAxO1xuICAgICAgICBjb25zdCB4ID0gdGhpcy5jYW5vbmljYWwueCAqIDI7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmNhbm9uaWNhbC55ICogMjtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCwgeSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHggKyAxLCB5KSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCwgeSArIDEpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4ICsgMSwgeSArIDEpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgaXNMZXNzVGhhbihyaHM6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcCA8IHJocy53cmFwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMud3JhcCA+IHJocy53cmFwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPCByaHMub3ZlcnNjYWxlZFopIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5vdmVyc2NhbGVkWiA+IHJocy5vdmVyc2NhbGVkWikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC54IDwgcmhzLmNhbm9uaWNhbC54KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnggPiByaHMuY2Fub25pY2FsLngpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueSA8IHJocy5jYW5vbmljYWwueSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB3cmFwcGVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGhpcy5vdmVyc2NhbGVkWiwgMCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgfVxuXG4gICAgdW53cmFwVG8od3JhcDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aGlzLm92ZXJzY2FsZWRaLCB3cmFwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICB9XG5cbiAgICBvdmVyc2NhbGVGYWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygyLCB0aGlzLm92ZXJzY2FsZWRaIC0gdGhpcy5jYW5vbmljYWwueik7XG4gICAgfVxuXG4gICAgdG9VbndyYXBwZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW53cmFwcGVkVGlsZUlEKHRoaXMud3JhcCwgdGhpcy5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5vdmVyc2NhbGVkWn0vJHt0aGlzLmNhbm9uaWNhbC54fS8ke3RoaXMuY2Fub25pY2FsLnl9YDtcbiAgICB9XG5cbiAgICBnZXRUaWxlUG9pbnQoY29vcmQ6IE1lcmNhdG9yQ29vcmRpbmF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5vbmljYWwuZ2V0VGlsZVBvaW50KG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoY29vcmQueCAtIHRoaXMud3JhcCwgY29vcmQueSkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlS2V5KHdyYXA6IG51bWJlciwgb3ZlcnNjYWxlZFo6IG51bWJlciwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgd3JhcCAqPSAyO1xuICAgIGlmICh3cmFwIDwgMCkgd3JhcCA9IHdyYXAgKiAtMSAtIDE7XG4gICAgY29uc3QgZGltID0gMSA8PCB6O1xuICAgIHJldHVybiAoZGltICogZGltICogd3JhcCArIGRpbSAqIHkgKyB4KS50b1N0cmluZygzNikgKyB6LnRvU3RyaW5nKDM2KSArIG92ZXJzY2FsZWRaLnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVhZGtleSh6LCB4LCB5KSB7XG4gICAgbGV0IHF1YWRrZXkgPSAnJywgbWFzaztcbiAgICBmb3IgKGxldCBpID0gejsgaSA+IDA7IGktLSkge1xuICAgICAgICBtYXNrID0gMSA8PCAoaSAtIDEpO1xuICAgICAgICBxdWFka2V5ICs9ICgoeCAmIG1hc2sgPyAxIDogMCkgKyAoeSAmIG1hc2sgPyAyIDogMCkpO1xuICAgIH1cbiAgICByZXR1cm4gcXVhZGtleTtcbn1cblxucmVnaXN0ZXIoJ0Nhbm9uaWNhbFRpbGVJRCcsIENhbm9uaWNhbFRpbGVJRCk7XG5yZWdpc3RlcignT3ZlcnNjYWxlZFRpbGVJRCcsIE92ZXJzY2FsZWRUaWxlSUQsIHtvbWl0OiBbJ3Bvc01hdHJpeCddfSk7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuLy8gREVNRGF0YSBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciBkZWNvZGluZywgYmFja2ZpbGxpbmcsIGFuZCBzdG9yaW5nIGVsZXZhdGlvbiBkYXRhIGZvciBwcm9jZXNzaW5nIGluIHRoZSBoaWxsc2hhZGUgc2hhZGVyc1xuLy8gZGF0YSBjYW4gYmUgcG9wdWxhdGVkIGVpdGhlciBmcm9tIGEgcG5ncmF3IGltYWdlIHRpbGUgb3IgZnJvbSBzZXJsaWF6ZWQgZGF0YSBzZW50IGJhY2sgZnJvbSBhIHdvcmtlci4gV2hlbiBkYXRhIGlzIGluaXRpYWxseVxuLy8gbG9hZGVkIGZyb20gYSBpbWFnZSB0aWxlLCB3ZSBkZWNvZGUgdGhlIHBpeGVsIHZhbHVlcyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZGVjb2RpbmcgZm9ybXVsYSwgYnV0IHdlIHN0b3JlIHRoZVxuLy8gZWxldmF0aW9uIGRhdGEgYXMgYW4gSW50MzIgdmFsdWUuIHdlIGFkZCA2NTUzNiAoMl4xNikgdG8gZWxpbWluYXRlIG5lZ2F0aXZlIHZhbHVlcyBhbmQgZW5hYmxlIHRoZSB1c2Ugb2Zcbi8vIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjcmVhdGluZyB0aGUgdGV4dHVyZSB1c2VkIGluIHRoZSBoaWxsc2hhZGVQcmVwYXJlIHN0ZXAuXG5cbi8vIERFTURhdGEgYWxzbyBoYW5kbGVzIHRoZSBiYWNrZmlsbGluZyBvZiBkYXRhIGZyb20gYSB0aWxlJ3MgbmVpZ2hib3JpbmcgdGlsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgdXNlIGEgcGl4ZWwncyA4XG4vLyBzdXJyb3VuZGluZyBwaXhlbCB2YWx1ZXMgdG8gY29tcHV0ZSB0aGUgc2xvcGUgYXQgdGhhdCBwaXhlbCwgYW5kIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2xvcGUgYXQgcGl4ZWxzIG9uIGFcbi8vIHRpbGUncyBlZGdlIHdpdGhvdXQgYmFja2ZpbGxpbmcgZnJvbSBuZWlnaGJvcmluZyB0aWxlcy5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNRGF0YSB7XG4gICAgdWlkOiBzdHJpbmc7XG4gICAgZGF0YTogVWludDMyQXJyYXk7XG4gICAgc3RyaWRlOiBudW1iZXI7XG4gICAgZGltOiBudW1iZXI7XG4gICAgZW5jb2Rpbmc6IFwibWFwYm94XCIgfCBcInRlcnJhcml1bVwiO1xuXG4gICAgLy8gUkdCQUltYWdlIGRhdGEgaGFzIHVuaWZvcm0gMXB4IHBhZGRpbmcgb24gYWxsIHNpZGVzOiBzcXVhcmUgdGlsZSBlZGdlIHNpemUgZGVmaW5lcyBzdHJpZGVcbiAgICAvLyBhbmQgZGltIGlzIGNhbGN1bGF0ZWQgYXMgc3RyaWRlIC0gMi5cbiAgICBjb25zdHJ1Y3Rvcih1aWQ6IHN0cmluZywgZGF0YTogUkdCQUltYWdlLCBlbmNvZGluZzogXCJtYXBib3hcIiB8IFwidGVycmFyaXVtXCIpIHtcbiAgICAgICAgdGhpcy51aWQgPSB1aWQ7XG4gICAgICAgIGlmIChkYXRhLmhlaWdodCAhPT0gZGF0YS53aWR0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZScpO1xuICAgICAgICBpZiAoZW5jb2RpbmcgJiYgZW5jb2RpbmcgIT09IFwibWFwYm94XCIgJiYgZW5jb2RpbmcgIT09IFwidGVycmFyaXVtXCIpIHJldHVybiB3YXJuT25jZShcbiAgICAgICAgICAgIGBcIiR7ZW5jb2Rpbmd9XCIgaXMgbm90IGEgdmFsaWQgZW5jb2RpbmcgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSBcIm1hcGJveFwiIGFuZCBcInRlcnJhcml1bVwiLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdHJpZGUgPSBkYXRhLmhlaWdodDtcbiAgICAgICAgY29uc3QgZGltID0gdGhpcy5kaW0gPSBkYXRhLmhlaWdodCAtIDI7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShkYXRhLmRhdGEuYnVmZmVyKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nIHx8ICdtYXBib3gnO1xuXG4gICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nIHNlYW1zIGJldHdlZW4gdGlsZXMsIGhlcmUgd2UgYXJlIGluaXRpYWxseSBwb3B1bGF0aW5nIGEgMXB4IGJvcmRlciBvZiBwaXhlbHMgYXJvdW5kIHRoZSBpbWFnZVxuICAgICAgICAvLyB3aXRoIHRoZSBkYXRhIG9mIHRoZSBuZWFyZXN0IHBpeGVsIGZyb20gdGhlIGltYWdlLiB0aGlzIGRhdGEgaXMgZXZlbnR1YWxseSByZXBsYWNlZCB3aGVuIHRoZSB0aWxlJ3MgbmVpZ2hib3JpbmdcbiAgICAgICAgLy8gdGlsZXMgYXJlIGxvYWRlZCBhbmQgdGhlIGFjY3VyYXRlIGRhdGEgY2FuIGJlIGJhY2tmaWxsZWQgdXNpbmcgREVNRGF0YSNiYWNrZmlsbEJvcmRlclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGRpbTsgeCsrKSB7XG4gICAgICAgICAgICAvLyBsZWZ0IHZlcnRpY2FsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSwgeCldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCB4KV07XG4gICAgICAgICAgICAvLyByaWdodCB2ZXJ0aWNhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCB4KV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSAtIDEsIHgpXTtcbiAgICAgICAgICAgIC8vIGxlZnQgaG9yaXpvbnRhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgLTEpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgMCldO1xuICAgICAgICAgICAgLy8gcmlnaHQgaG9yaXpvbnRhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgZGltKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIGRpbSAtIDEpXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb3JuZXJzXG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIC0xKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KDAsIDApXTtcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0sIC0xKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSAtIDEsIDApXTtcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSwgZGltKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KDAsIGRpbSAtIDEpXTtcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0sIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCBkaW0gLSAxKV07XG4gICAgfVxuXG4gICAgZ2V0KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBpeGVscyA9IG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2lkeCh4LCB5KSAqIDQ7XG4gICAgICAgIGNvbnN0IHVucGFjayA9IHRoaXMuZW5jb2RpbmcgPT09IFwidGVycmFyaXVtXCIgPyB0aGlzLl91bnBhY2tUZXJyYXJpdW0gOiB0aGlzLl91bnBhY2tNYXBib3g7XG4gICAgICAgIHJldHVybiB1bnBhY2socGl4ZWxzW2luZGV4XSwgcGl4ZWxzW2luZGV4ICsgMV0sIHBpeGVsc1tpbmRleCArIDJdKTtcbiAgICB9XG5cbiAgICBnZXRVbnBhY2tWZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuY29kaW5nID09PSBcInRlcnJhcml1bVwiID8gWzI1Ni4wLCAxLjAsIDEuMCAvIDI1Ni4wLCAzMjc2OC4wXSA6IFs2NTUzLjYsIDI1LjYsIDAuMSwgMTAwMDAuMF07XG4gICAgfVxuXG4gICAgX2lkeCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBpZiAoeCA8IC0xIHx8IHggPj0gdGhpcy5kaW0gKyAxIHx8ICB5IDwgLTEgfHwgeSA+PSB0aGlzLmRpbSArIDEpIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YScpO1xuICAgICAgICByZXR1cm4gKHkgKyAxKSAqIHRoaXMuc3RyaWRlICsgKHggKyAxKTtcbiAgICB9XG5cbiAgICBfdW5wYWNrTWFwYm94KHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICAgICAgLy8gdW5wYWNraW5nIGZvcm11bGEgZm9yIG1hcGJveC50ZXJyYWluLXJnYjpcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2FjY2Vzcy1lbGV2YXRpb24tZGF0YS8jbWFwYm94LXRlcnJhaW4tcmdiXG4gICAgICAgIHJldHVybiAoKHIgKiAyNTYgKiAyNTYgKyBnICogMjU2LjAgKyBiKSAvIDEwLjAgLSAxMDAwMC4wKTtcbiAgICB9XG5cbiAgICBfdW5wYWNrVGVycmFyaXVtKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICAgICAgLy8gdW5wYWNraW5nIGZvcm11bGEgZm9yIG1hcHplbiB0ZXJyYXJpdW06XG4gICAgICAgIC8vIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcHVibGljLWRhdGFzZXRzL3RlcnJhaW4vXG4gICAgICAgIHJldHVybiAoKHIgKiAyNTYgKyBnICsgYiAvIDI1NikgLSAzMjc2OC4wKTtcbiAgICB9XG5cbiAgICBnZXRQaXhlbHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogdGhpcy5zdHJpZGUsIGhlaWdodDogdGhpcy5zdHJpZGV9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSk7XG4gICAgfVxuXG4gICAgYmFja2ZpbGxCb3JkZXIoYm9yZGVyVGlsZTogREVNRGF0YSwgZHg6IG51bWJlciwgZHk6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5kaW0gIT09IGJvcmRlclRpbGUuZGltKSB0aHJvdyBuZXcgRXJyb3IoJ2RlbSBkaW1lbnNpb24gbWlzbWF0Y2gnKTtcblxuICAgICAgICBsZXQgeE1pbiA9IGR4ICogdGhpcy5kaW0sXG4gICAgICAgICAgICB4TWF4ID0gZHggKiB0aGlzLmRpbSArIHRoaXMuZGltLFxuICAgICAgICAgICAgeU1pbiA9IGR5ICogdGhpcy5kaW0sXG4gICAgICAgICAgICB5TWF4ID0gZHkgKiB0aGlzLmRpbSArIHRoaXMuZGltO1xuXG4gICAgICAgIHN3aXRjaCAoZHgpIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAgIHhNaW4gPSB4TWF4IC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB4TWF4ID0geE1pbiArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZHkpIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAgIHlNaW4gPSB5TWF4IC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB5TWF4ID0geU1pbiArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG94ID0gLWR4ICogdGhpcy5kaW07XG4gICAgICAgIGNvbnN0IG95ID0gLWR5ICogdGhpcy5kaW07XG4gICAgICAgIGZvciAobGV0IHkgPSB5TWluOyB5IDwgeU1heDsgeSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0geE1pbjsgeCA8IHhNYXg7IHgrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgeSldID0gYm9yZGVyVGlsZS5kYXRhW3RoaXMuX2lkeCh4ICsgb3gsIHkgKyBveSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5yZWdpc3RlcignREVNRGF0YScsIERFTURhdGEpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZlYXR1cmVJbmRleCBmcm9tICcuL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgdHlwZSBCdWNrZXRQYXJhbWV0ZXJzPExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+ID0ge1xuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGF5ZXJzOiBBcnJheTxMYXllcj4sXG4gICAgem9vbTogbnVtYmVyLFxuICAgIHBpeGVsUmF0aW86IG51bWJlcixcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyLFxuICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgc291cmNlSUQ6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBQb3B1bGF0ZVBhcmFtZXRlcnMgPSB7XG4gICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXgsXG4gICAgaWNvbkRlcGVuZGVuY2llczoge30sXG4gICAgcGF0dGVybkRlcGVuZGVuY2llczoge30sXG4gICAgZ2x5cGhEZXBlbmRlbmNpZXM6IHt9LFxuICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPlxufVxuXG5leHBvcnQgdHlwZSBJbmRleGVkRmVhdHVyZSA9IHtcbiAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICBpZDogbnVtYmVyIHwgc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxufVxuXG5leHBvcnQgdHlwZSBCdWNrZXRGZWF0dXJlID0ge3xcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QsXG4gICAgdHlwZTogMSB8IDIgfCAzLFxuICAgIGlkPzogYW55LFxuICAgICtwYXR0ZXJuczoge1tfOiBzdHJpbmddOiB7XCJtaW5cIjogc3RyaW5nLCBcIm1pZFwiOiBzdHJpbmcsIFwibWF4XCI6IHN0cmluZ319LFxuICAgIHNvcnRLZXk/OiBudW1iZXJcbnx9O1xuXG4vKipcbiAqIFRoZSBgQnVja2V0YCBpbnRlcmZhY2UgaXMgdGhlIHNpbmdsZSBwb2ludCBvZiBrbm93bGVkZ2UgYWJvdXQgdHVybmluZyB2ZWN0b3JcbiAqIHRpbGVzIGludG8gV2ViR0wgYnVmZmVycy5cbiAqXG4gKiBgQnVja2V0YCBpcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UuIEFuIGltcGxlbWVudGF0aW9uIGV4aXN0cyBmb3IgZWFjaCBzdHlsZSBsYXllciB0eXBlLlxuICogQ3JlYXRlIGEgYnVja2V0IHZpYSB0aGUgYFN0eWxlTGF5ZXIjY3JlYXRlQnVja2V0YCBtZXRob2QuXG4gKlxuICogVGhlIGNvbmNyZXRlIGJ1Y2tldCB0eXBlcywgdXNpbmcgbGF5b3V0IG9wdGlvbnMgZnJvbSB0aGUgc3R5bGUgbGF5ZXIsXG4gKiB0cmFuc2Zvcm0gZmVhdHVyZSBnZW9tZXRyaWVzIGludG8gdmVydGV4IGFuZCBpbmRleCBkYXRhIGZvciB1c2UgYnkgdGhlXG4gKiB2ZXJ0ZXggc2hhZGVyLiAgVGhleSBhbHNvICh2aWEgYFByb2dyYW1Db25maWd1cmF0aW9uYCkgdXNlIGZlYXR1cmVcbiAqIHByb3BlcnRpZXMgYW5kIHRoZSB6b29tIGxldmVsIHRvIHBvcHVsYXRlIHRoZSBhdHRyaWJ1dGVzIG5lZWRlZCBmb3JcbiAqIGRhdGEtZHJpdmVuIHN0eWxpbmcuXG4gKlxuICogQnVja2V0cyBhcmUgZGVzaWduZWQgdG8gYmUgYnVpbHQgb24gYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGVuIHNlcmlhbGl6ZWQgYW5kXG4gKiB0cmFuc2ZlcnJlZCBiYWNrIHRvIHRoZSBtYWluIHRocmVhZCBmb3IgcmVuZGVyaW5nLiAgT24gdGhlIHdvcmtlciBzaWRlLCBhXG4gKiBidWNrZXQncyB2ZXJ0ZXgsIGluZGV4LCBhbmQgYXR0cmlidXRlIGRhdGEgaXMgc3RvcmVkIGluIGBidWNrZXQuYXJyYXlzOlxuICogQXJyYXlHcm91cGAuICBXaGVuIGEgYnVja2V0J3MgZGF0YSBpcyBzZXJpYWxpemVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIG1haW5cbiAqIHRocmVhZCwgaXMgZ2V0cyBkZXNlcmlhbGl6ZWQgKHVzaW5nIGBuZXcgQnVja2V0KHNlcmlhbGl6ZWRCdWNrZXREYXRhKWAsIHdpdGhcbiAqIHRoZSBhcnJheSBkYXRhIG5vdyBzdG9yZWQgaW4gYGJ1Y2tldC5idWZmZXJzOiBCdWZmZXJHcm91cGAuICBCdWZmZXJHcm91cHNcbiAqIGhvbGQgdGhlIHNhbWUgZGF0YSBhcyBBcnJheUdyb3VwcywgYnV0IGFyZSB0dW5lZCBmb3IgY29uc3VtcHRpb24gYnkgV2ViR0wuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXQge1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgK2xheWVyczogQXJyYXk8YW55PjtcbiAgICArc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PGFueT47XG4gICAgK3N0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCk6IHZvaWQ7XG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IHZvaWQ7XG4gICAgaXNFbXB0eSgpOiBib29sZWFuO1xuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpOiB2b2lkO1xuICAgIHVwbG9hZFBlbmRpbmcoKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgdGhlIFdlYkdMIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcnMuIE5vdGUgdGhhdCBiZWNhdXNlXG4gICAgICogYnVja2V0cyBhcmUgc2hhcmVkIGJldHdlZW4gbGF5ZXJzIGhhdmluZyB0aGUgc2FtZSBsYXlvdXQgcHJvcGVydGllcywgdGhleVxuICAgICAqIG11c3QgYmUgZGVzdHJveWVkIGluIGdyb3VwcyAoYWxsIGJ1Y2tldHMgZm9yIGEgdGlsZSwgb3IgYWxsIHN5bWJvbCBidWNrZXRzKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoaW5wdXQ6IEFycmF5PEJ1Y2tldD4sIHN0eWxlOiBTdHlsZSk6IHtbXzogc3RyaW5nXTogQnVja2V0fSB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG5cbiAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHRoZSBtYXAncyBzdHlsZSBoYXMgYmVlbiBzZXQgdG8gbnVsbCB3aGlsZVxuICAgIC8vIHRoaXMgYnVja2V0IGhhcyBiZWVuIHBhcnNpbmcuXG4gICAgaWYgKCFzdHlsZSkgcmV0dXJuIG91dHB1dDtcblxuICAgIGZvciAoY29uc3QgYnVja2V0IG9mIGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGxheWVycyA9IGJ1Y2tldC5sYXllcklkc1xuICAgICAgICAgICAgLm1hcCgoaWQpID0+IHN0eWxlLmdldExheWVyKGlkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbG9vayB1cCBTdHlsZUxheWVyIG9iamVjdHMgZnJvbSBsYXllciBpZHMgKHNpbmNlIHdlIGRvbid0XG4gICAgICAgIC8vIHdhbnQgdG8gd2FzdGUgdGltZSBzZXJpYWxpemluZy9jb3B5aW5nIHRoZW0gZnJvbSB0aGUgd29ya2VyKVxuICAgICAgICAoYnVja2V0OiBhbnkpLmxheWVycyA9IGxheWVycztcbiAgICAgICAgaWYgKChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcykge1xuICAgICAgICAgICAgKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVycyA9IChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcklkcy5tYXAoKGxJZCkgPT4gbGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pZCA9PT0gbElkKVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIG91dHB1dFtsYXllci5pZF0gPSBidWNrZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY2xhc3MgRGljdGlvbmFyeUNvZGVyIHtcbiAgICBfc3RyaW5nVG9OdW1iZXI6IHtbXzogc3RyaW5nXTogbnVtYmVyIH07XG4gICAgX251bWJlclRvU3RyaW5nOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioc3RyaW5nczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9zdHJpbmdUb051bWJlciA9IHt9O1xuICAgICAgICB0aGlzLl9udW1iZXJUb1N0cmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ3NbaV07XG4gICAgICAgICAgICB0aGlzLl9zdHJpbmdUb051bWJlcltzdHJpbmddID0gaTtcbiAgICAgICAgICAgIHRoaXMuX251bWJlclRvU3RyaW5nW2ldID0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5jb2RlKHN0cmluZzogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydChzdHJpbmcgaW4gdGhpcy5fc3RyaW5nVG9OdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbc3RyaW5nXTtcbiAgICB9XG5cbiAgICBkZWNvZGUobjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydChuIDwgdGhpcy5fbnVtYmVyVG9TdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW25dO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGljdGlvbmFyeUNvZGVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtHZW9KU09OR2VvbWV0cnl9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmNsYXNzIEZlYXR1cmUge1xuICAgIHR5cGU6ICdGZWF0dXJlJztcbiAgICBfZ2VvbWV0cnk6ID9HZW9KU09OR2VvbWV0cnk7XG4gICAgcHJvcGVydGllczoge307XG4gICAgaWQ6IG51bWJlciB8IHN0cmluZyB8IHZvaWQ7XG5cbiAgICBfdmVjdG9yVGlsZUZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlO1xuXG4gICAgY29uc3RydWN0b3IodmVjdG9yVGlsZUZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBpZDogc3RyaW5nIHwgbnVtYmVyIHwgdm9pZCkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnRmVhdHVyZSc7XG5cbiAgICAgICAgdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUgPSB2ZWN0b3JUaWxlRmVhdHVyZTtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl96ID0gejtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl94ID0geDtcbiAgICAgICAgKHZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl95ID0geTtcblxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSB2ZWN0b3JUaWxlRmVhdHVyZS5wcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgZ2V0IGdlb21ldHJ5KCk6ID9HZW9KU09OR2VvbWV0cnkge1xuICAgICAgICBpZiAodGhpcy5fZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fZ2VvbWV0cnkgPSB0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS50b0dlb0pTT04oXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl94LFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feSxcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3opLmdlb21ldHJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeTtcbiAgICB9XG5cbiAgICBzZXQgZ2VvbWV0cnkoZzogP0dlb0pTT05HZW9tZXRyeSkge1xuICAgICAgICB0aGlzLl9nZW9tZXRyeSA9IGc7XG4gICAgfVxuXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuZ2VvbWV0cnlcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRoaXMpIHtcbiAgICAgICAgICAgIGlmIChpID09PSAnX2dlb21ldHJ5JyB8fCBpID09PSAnX3ZlY3RvclRpbGVGZWF0dXJlJykgY29udGludWU7XG4gICAgICAgICAgICBqc29uW2ldID0gKHRoaXM6IGFueSlbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuZXhwb3J0IHR5cGUgRmVhdHVyZVN0YXRlcyA9IHtbZmVhdHVyZV9pZDogc3RyaW5nXTogRmVhdHVyZVN0YXRlfTtcbmV4cG9ydCB0eXBlIExheWVyRmVhdHVyZVN0YXRlcyA9IHtbbGF5ZXI6IHN0cmluZ106IEZlYXR1cmVTdGF0ZXN9O1xuXG4vKipcbiAqIFNvdXJjZUZlYXR1cmVTdGF0ZSBtYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgcGVuZGluZyBjaGFuZ2VzXG4gKiB0byBmZWF0dXJlcyBpbiBhIHNvdXJjZSwgc2VwYXJhdGVkIGJ5IHNvdXJjZSBsYXllci5cbiAqIHN0YXRlQ2hhbmdlcyBhbmQgZGVsZXRlZFN0YXRlcyBiYXRjaCBhbGwgY2hhbmdlcyB0byB0aGUgdGlsZSAodXBkYXRlcyBhbmQgcmVtb3ZlcywgcmVzcGVjdGl2ZWx5KVxuICogYmV0d2VlbiBjb2FsZXNjZSgpIGV2ZW50cy4gYWRkRmVhdHVyZVN0YXRlKCkgYW5kIHJlbW92ZUZlYXR1cmVTdGF0ZSgpIGFsc28gdXBkYXRlIHRoZWlyIGNvdW50ZXJwYXJ0J3NcbiAqIGxpc3Qgb2YgY2hhbmdlcywgc3VjaCB0aGF0IGNvYWxlc2NlKCkgY2FuIGFwcGx5IHRoZSBwcm9wZXIgc3RhdGUgY2hhbmdlcyB3aGlsZSBhZ25vc3RpYyB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucy5cbiAqIEluIGRlbGV0ZWRTdGF0ZXMsIGFsbCBudWxsJ3MgZGVub3RlIGNvbXBsZXRlIHJlbW92YWwgb2Ygc3RhdGUgYXQgdGhhdCBzY29wZVxuICogQHByaXZhdGVcbiovXG5jbGFzcyBTb3VyY2VGZWF0dXJlU3RhdGUge1xuICAgIHN0YXRlOiBMYXllckZlYXR1cmVTdGF0ZXM7XG4gICAgc3RhdGVDaGFuZ2VzOiBMYXllckZlYXR1cmVTdGF0ZXM7XG4gICAgZGVsZXRlZFN0YXRlczoge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcyA9IHt9O1xuICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXMgPSB7fTtcbiAgICB9XG5cbiAgICB1cGRhdGVTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZywgbmV3U3RhdGU6IE9iamVjdCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdIHx8IHt9O1xuICAgICAgICBleHRlbmQodGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdLCBuZXdTdGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZnQgaW4gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZnQgIT09IGZlYXR1cmUpIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZnRdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVEZWxldGlvblF1ZXVlZCA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlRGVsZXRpb25RdWV1ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3U3RhdGVbcHJvcF0pIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1bcHJvcF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsZXRpb25JblF1ZXVlID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0aW9uSW5RdWV1ZSkgZGVsZXRlIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkPzogbnVtYmVyIHwgc3RyaW5nLCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJEZWxldGVkID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbDtcbiAgICAgICAgaWYgKHNvdXJjZUxheWVyRGVsZXRlZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBTdHJpbmcoZmVhdHVyZUlkKTtcblxuICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSB8fCB7fTtcblxuICAgICAgICBpZiAoa2V5ICYmIGZlYXR1cmVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmVhdHVyZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUluUXVldWUgPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gJiYgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdO1xuICAgICAgICAgICAgaWYgKHVwZGF0ZUluUXVldWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPSBudWxsO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGdldFN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBTdHJpbmcoZmVhdHVyZUlkKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHJlY29uY2lsZWRTdGF0ZSA9IGV4dGVuZCh7fSwgYmFzZVtmZWF0dXJlXSwgY2hhbmdlc1tmZWF0dXJlXSk7XG5cbiAgICAgICAgLy9yZXR1cm4gZW1wdHkgb2JqZWN0IGlmIHRoZSB3aG9sZSBzb3VyY2UgbGF5ZXIgaXMgYXdhaXRpbmcgZGVsZXRpb25cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGwpIHJldHVybiB7fTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZURlbGV0aW9ucyA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZUlkXTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlRGVsZXRpb25zID09PSBudWxsKSByZXR1cm4ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZmVhdHVyZURlbGV0aW9ucykgZGVsZXRlIHJlY29uY2lsZWRTdGF0ZVtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjb25jaWxlZFN0YXRlO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVUaWxlU3RhdGUodGlsZTogVGlsZSwgcGFpbnRlcjogYW55KSB7XG4gICAgICAgIHRpbGUuc2V0RmVhdHVyZVN0YXRlKHRoaXMuc3RhdGUsIHBhaW50ZXIpO1xuICAgIH1cblxuICAgIGNvYWxlc2NlQ2hhbmdlcyh0aWxlczoge1tfOiBhbnldOiBUaWxlfSwgcGFpbnRlcjogYW55KSB7XG4gICAgICAgIC8vdHJhY2sgY2hhbmdlcyB3aXRoIGZ1bGwgc3RhdGUgb2JqZWN0cywgYnV0IG9ubHkgZm9yIGZlYXR1cmVzIHRoYXQgZ290IG1vZGlmaWVkXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzQ2hhbmdlZDogTGF5ZXJGZWF0dXJlU3RhdGVzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllciBpbiB0aGlzLnN0YXRlQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgICAgICBjb25zdCBsYXllclN0YXRlcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIGluIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0pIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0ge307XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdLCB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pO1xuICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2ZlYXR1cmVdID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdID0gbGF5ZXJTdGF0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUxheWVyIGluIHRoaXMuZGVsZXRlZFN0YXRlcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgICAgICBjb25zdCBsYXllclN0YXRlcyA9IHt9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZnQgaW4gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZnRdID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2Z0XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIGluIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlV2hvbGVGZWF0dXJlU3RhdGUgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlV2hvbGVGZWF0dXJlU3RhdGUpIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmZWF0dXJlXSA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSA9IGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgICAgICBleHRlbmQoZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSwgbGF5ZXJTdGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzID0ge307XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZlYXR1cmVzQ2hhbmdlZCkubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW2lkXTtcbiAgICAgICAgICAgIHRpbGUuc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmVzQ2hhbmdlZCwgcGFpbnRlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvdXJjZUZlYXR1cmVTdGF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuL2V4dGVudCc7XG5pbXBvcnQgZmVhdHVyZUZpbHRlciBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCBHcmlkIGZyb20gJ2dyaWQtaW5kZXgnO1xuaW1wb3J0IERpY3Rpb25hcnlDb2RlciBmcm9tICcuLi91dGlsL2RpY3Rpb25hcnlfY29kZXInO1xuaW1wb3J0IHZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuaW1wb3J0IFByb3RvYnVmIGZyb20gJ3BiZic7XG5pbXBvcnQgR2VvSlNPTkZlYXR1cmUgZnJvbSAnLi4vdXRpbC92ZWN0b3J0aWxlX3RvX2dlb2pzb24nO1xuaW1wb3J0IHthcnJheXNJbnRlcnNlY3QsIG1hcE9iamVjdH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNCb3h9IGZyb20gJy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlRmlsdGVyfSBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9uLCBQcm9tb3RlSWRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuaW1wb3J0IHtGZWF0dXJlSW5kZXhBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5cbnR5cGUgUXVlcnlQYXJhbWV0ZXJzID0ge1xuICAgIHNjYWxlOiBudW1iZXIsXG4gICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXIsXG4gICAgcGFyYW1zOiB7XG4gICAgICAgIGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICAgICAgbGF5ZXJzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz5cbiAgICB9XG59XG5cbmNsYXNzIEZlYXR1cmVJbmRleCB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgejogbnVtYmVyO1xuICAgIGdyaWQ6IEdyaWQ7XG4gICAgZ3JpZDNEOiBHcmlkO1xuICAgIGZlYXR1cmVJbmRleEFycmF5OiBGZWF0dXJlSW5kZXhBcnJheTtcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuXG4gICAgcmF3VGlsZURhdGE6IEFycmF5QnVmZmVyO1xuICAgIGJ1Y2tldExheWVySURzOiBBcnJheTxBcnJheTxzdHJpbmc+PjtcblxuICAgIHZ0TGF5ZXJzOiB7W186IHN0cmluZ106IFZlY3RvclRpbGVMYXllcn07XG4gICAgc291cmNlTGF5ZXJDb2RlcjogRGljdGlvbmFyeUNvZGVyO1xuXG4gICAgY29uc3RydWN0b3IodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBwcm9tb3RlSWQ/OiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgdGhpcy54ID0gdGlsZUlELmNhbm9uaWNhbC54O1xuICAgICAgICB0aGlzLnkgPSB0aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgICAgIHRoaXMueiA9IHRpbGVJRC5jYW5vbmljYWwuejtcbiAgICAgICAgdGhpcy5ncmlkID0gbmV3IEdyaWQoRVhURU5ULCAxNiwgMCk7XG4gICAgICAgIHRoaXMuZ3JpZDNEID0gbmV3IEdyaWQoRVhURU5ULCAxNiwgMCk7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4QXJyYXkgPSBuZXcgRmVhdHVyZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9tb3RlSWQgPSBwcm9tb3RlSWQ7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgZmVhdHVyZUluZGV4OiBudW1iZXIsIHNvdXJjZUxheWVySW5kZXg6IG51bWJlciwgYnVja2V0SW5kZXg6IG51bWJlciwgaXMzRD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2soZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCk7XG5cbiAgICAgICAgY29uc3QgZ3JpZCA9IGlzM0QgPyB0aGlzLmdyaWQzRCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IGdlb21ldHJ5Lmxlbmd0aDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByaW5nID0gZ2VvbWV0cnlbcl07XG5cbiAgICAgICAgICAgIGNvbnN0IGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcmluZ1tpXTtcbiAgICAgICAgICAgICAgICBiYm94WzBdID0gTWF0aC5taW4oYmJveFswXSwgcC54KTtcbiAgICAgICAgICAgICAgICBiYm94WzFdID0gTWF0aC5taW4oYmJveFsxXSwgcC55KTtcbiAgICAgICAgICAgICAgICBiYm94WzJdID0gTWF0aC5tYXgoYmJveFsyXSwgcC54KTtcbiAgICAgICAgICAgICAgICBiYm94WzNdID0gTWF0aC5tYXgoYmJveFszXSwgcC55KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJib3hbMF0gPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICBiYm94WzFdIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgYmJveFsyXSA+PSAwICYmXG4gICAgICAgICAgICAgICAgYmJveFszXSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JpZC5pbnNlcnQoa2V5LCBiYm94WzBdLCBiYm94WzFdLCBiYm94WzJdLCBiYm94WzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRWVExheWVycygpOiB7W186IHN0cmluZ106IFZlY3RvclRpbGVMYXllcn0ge1xuICAgICAgICBpZiAoIXRoaXMudnRMYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMudnRMYXllcnMgPSBuZXcgdnQuVmVjdG9yVGlsZShuZXcgUHJvdG9idWYodGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycztcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXJDb2RlciA9IG5ldyBEaWN0aW9uYXJ5Q29kZXIodGhpcy52dExheWVycyA/IE9iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKSA6IFsnX2dlb2pzb25UaWxlTGF5ZXInXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudnRMYXllcnM7XG4gICAgfVxuXG4gICAgLy8gRmluZHMgbm9uLXN5bWJvbCBmZWF0dXJlcyBpbiB0aGlzIHRpbGUgYXQgYSBwYXJ0aWN1bGFyIHBvc2l0aW9uLlxuICAgIHF1ZXJ5KGFyZ3M6IFF1ZXJ5UGFyYW1ldGVycywgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sIHNlcmlhbGl6ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogT2JqZWN0fSwgc291cmNlRmVhdHVyZVN0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGUpOiB7W186IHN0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSB7XG4gICAgICAgIHRoaXMubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gYXJncy5wYXJhbXMgfHwge30sXG4gICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyA9IEVYVEVOVCAvIGFyZ3MudGlsZVNpemUgLyBhcmdzLnNjYWxlLFxuICAgICAgICAgICAgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihwYXJhbXMuZmlsdGVyKTtcblxuICAgICAgICBjb25zdCBxdWVyeUdlb21ldHJ5ID0gYXJncy5xdWVyeUdlb21ldHJ5O1xuICAgICAgICBjb25zdCBxdWVyeVBhZGRpbmcgPSBhcmdzLnF1ZXJ5UGFkZGluZyAqIHBpeGVsc1RvVGlsZVVuaXRzO1xuXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IGdldEJvdW5kcyhxdWVyeUdlb21ldHJ5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0aGlzLmdyaWQucXVlcnkoYm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBib3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcpO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYUJvdW5kcyA9IGdldEJvdW5kcyhhcmdzLmNhbWVyYVF1ZXJ5R2VvbWV0cnkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZzNEID0gdGhpcy5ncmlkM0QucXVlcnkoXG4gICAgICAgICAgICAgICAgY2FtZXJhQm91bmRzLm1pblggLSBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5taW5ZIC0gcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWF4WCArIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1heFkgKyBxdWVyeVBhZGRpbmcsXG4gICAgICAgICAgICAgICAgKGJ4MSwgYnkxLCBieDIsIGJ5MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdHNCb3goYXJncy5jYW1lcmFRdWVyeUdlb21ldHJ5LCBieDEgLSBxdWVyeVBhZGRpbmcsIGJ5MSAtIHF1ZXJ5UGFkZGluZywgYngyICsgcXVlcnlQYWRkaW5nLCBieTIgKyBxdWVyeVBhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1hdGNoaW5nM0QpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nLnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdGNoaW5nLnNvcnQodG9wRG93bkZlYXR1cmVDb21wYXJhdG9yKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IHByZXZpb3VzSW5kZXg7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWF0Y2hpbmcubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2hpbmdba107XG5cbiAgICAgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBzYW1lIGZlYXR1cmUgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcHJldmlvdXNJbmRleCkgY29udGludWU7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5nZXQoaW5kZXgpO1xuICAgICAgICAgICAgbGV0IGZlYXR1cmVHZW9tZXRyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIG1hdGNoLmJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIG1hdGNoLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgbWF0Y2guZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hdmFpbGFibGVJbWFnZXMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgKGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBzdHlsZUxheWVyOiBTdHlsZUxheWVyLCBmZWF0dXJlU3RhdGU6IE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmVHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlTGF5ZXIucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGZlYXR1cmVHZW9tZXRyeSwgdGhpcy56LCBhcmdzLnRyYW5zZm9ybSwgcGl4ZWxzVG9UaWxlVW5pdHMsIGFyZ3MucGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgIHJlc3VsdDoge1tfOiBzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0sXG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGZpbHRlcjogRmVhdHVyZUZpbHRlcixcbiAgICAgICAgZmlsdGVyTGF5ZXJJRHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgIHNlcmlhbGl6ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogT2JqZWN0fSxcbiAgICAgICAgc291cmNlRmVhdHVyZVN0YXRlPzogU291cmNlRmVhdHVyZVN0YXRlLFxuICAgICAgICBpbnRlcnNlY3Rpb25UZXN0PzogKGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBzdHlsZUxheWVyOiBTdHlsZUxheWVyLCBmZWF0dXJlU3RhdGU6IE9iamVjdCwgaWQ6IHN0cmluZyB8IG51bWJlciB8IHZvaWQpID0+IGJvb2xlYW4gfCBudW1iZXIpIHtcblxuICAgICAgICBjb25zdCBsYXllcklEcyA9IHRoaXMuYnVja2V0TGF5ZXJJRHNbYnVja2V0SW5kZXhdO1xuICAgICAgICBpZiAoZmlsdGVyTGF5ZXJJRHMgJiYgIWFycmF5c0ludGVyc2VjdChmaWx0ZXJMYXllcklEcywgbGF5ZXJJRHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyTmFtZSA9IHRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUoc291cmNlTGF5ZXJJbmRleCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gdGhpcy52dExheWVyc1tzb3VyY2VMYXllck5hbWVdO1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gc291cmNlTGF5ZXIuZmVhdHVyZShmZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgIGlmICghZmlsdGVyLmZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLCBmZWF0dXJlKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWQoZmVhdHVyZSwgc291cmNlTGF5ZXJOYW1lKTtcblxuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxheWVySURzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllcklEID0gbGF5ZXJJRHNbbF07XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJMYXllcklEcyAmJiBmaWx0ZXJMYXllcklEcy5pbmRleE9mKGxheWVySUQpIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdHlsZUxheWVyID0gc3R5bGVMYXllcnNbbGF5ZXJJRF07XG5cbiAgICAgICAgICAgIGlmICghc3R5bGVMYXllcikgY29udGludWU7XG5cbiAgICAgICAgICAgIGxldCBmZWF0dXJlU3RhdGUgPSB7fTtcbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZUZlYXR1cmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGBmZWF0dXJlLXN0YXRlYCBleHByZXNzaW9uIGV2YWx1YXRpb24gcmVxdWlyZXMgZmVhdHVyZSBzdGF0ZSB0byBiZSBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGUgPSBzb3VyY2VGZWF0dXJlU3RhdGUuZ2V0U3RhdGUoc3R5bGVMYXllci5zb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInLCBpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMYXllciA9IHNlcmlhbGl6ZWRMYXllcnNbbGF5ZXJJRF07XG5cbiAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllci5wYWludCA9IGV2YWx1YXRlUHJvcGVydGllcyhzZXJpYWxpemVkTGF5ZXIucGFpbnQsIHN0eWxlTGF5ZXIucGFpbnQsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllci5sYXlvdXQgPSBldmFsdWF0ZVByb3BlcnRpZXMoc2VyaWFsaXplZExheWVyLmxheW91dCwgc3R5bGVMYXllci5sYXlvdXQsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uWiA9ICFpbnRlcnNlY3Rpb25UZXN0IHx8IGludGVyc2VjdGlvblRlc3QoZmVhdHVyZSwgc3R5bGVMYXllciwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uWikge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYXBwbGllZCBmb3Igbm9uLXN5bWJvbCBmZWF0dXJlc1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZW9qc29uRmVhdHVyZSA9IG5ldyBHZW9KU09ORmVhdHVyZShmZWF0dXJlLCB0aGlzLnosIHRoaXMueCwgdGhpcy55LCBpZCk7XG4gICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkubGF5ZXIgPSBzZXJpYWxpemVkTGF5ZXI7XG4gICAgICAgICAgICBsZXQgbGF5ZXJSZXN1bHQgPSByZXN1bHRbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXJSZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxheWVyUmVzdWx0ID0gcmVzdWx0W2xheWVySURdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXllclJlc3VsdC5wdXNoKHtmZWF0dXJlSW5kZXgsIGZlYXR1cmU6IGdlb2pzb25GZWF0dXJlLCBpbnRlcnNlY3Rpb25afSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHNldCBvZiBzeW1ib2wgaW5kZXhlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvb2tlZCB1cCxcbiAgICAvLyByZXR1cm4gYSBtYXRjaGluZyBzZXQgb2YgR2VvSlNPTkZlYXR1cmVzXG4gICAgbG9va3VwU3ltYm9sRmVhdHVyZXMoc3ltYm9sRmVhdHVyZUluZGV4ZXM6IEFycmF5PG51bWJlcj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxheWVySURzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGZpbHRlclNwZWMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3ltYm9sRmVhdHVyZUluZGV4IG9mIHN5bWJvbEZlYXR1cmVJbmRleGVzKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sRmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYXllcklEcyxcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVJbWFnZXMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFzTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySURzIG9mIHRoaXMuYnVja2V0TGF5ZXJJRHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcklEcykge1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gbGF5ZXJJRCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0SWQoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHNvdXJjZUxheWVySWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bWJlciB8IHZvaWQge1xuICAgICAgICBsZXQgaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICBpZiAodGhpcy5wcm9tb3RlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gdHlwZW9mIHRoaXMucHJvbW90ZUlkID09PSAnc3RyaW5nJyA/IHRoaXMucHJvbW90ZUlkIDogdGhpcy5wcm9tb3RlSWRbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZCA9IGZlYXR1cmUucHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnYm9vbGVhbicpIGlkID0gIE51bWJlcihpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoXG4gICAgJ0ZlYXR1cmVJbmRleCcsXG4gICAgRmVhdHVyZUluZGV4LFxuICAgIHtvbWl0OiBbJ3Jhd1RpbGVEYXRhJywgJ3NvdXJjZUxheWVyQ29kZXInXX1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVJbmRleDtcblxuZnVuY3Rpb24gZXZhbHVhdGVQcm9wZXJ0aWVzKHNlcmlhbGl6ZWRQcm9wZXJ0aWVzLCBzdHlsZUxheWVyUHJvcGVydGllcywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpIHtcbiAgICByZXR1cm4gbWFwT2JqZWN0KHNlcmlhbGl6ZWRQcm9wZXJ0aWVzLCAocHJvcGVydHksIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gc3R5bGVMYXllclByb3BlcnRpZXMgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZCA/IHN0eWxlTGF5ZXJQcm9wZXJ0aWVzLmdldChrZXkpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHByb3AgJiYgcHJvcC5ldmFsdWF0ZSA/IHByb3AuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpIDogcHJvcDtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRzKGdlb21ldHJ5OiBBcnJheTxQb2ludD4pIHtcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG4gICAgZm9yIChjb25zdCBwIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgIH1cbiAgICByZXR1cm4ge21pblgsIG1pblksIG1heFgsIG1heFl9O1xufVxuXG5mdW5jdGlvbiB0b3BEb3duRmVhdHVyZUNvbXBhcmF0b3IoYSwgYikge1xuICAgIHJldHVybiBiIC0gYTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dW5pcXVlSWQsIHBhcnNlQ2FjaGVDb250cm9sfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtkZXNlcmlhbGl6ZSBhcyBkZXNlcmlhbGl6ZUJ1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB7bGF6eUxvYWRSVExUZXh0UGx1Z2lufSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5cbmNvbnN0IENMT0NLX1NLRVdfUkVUUllfVElNRU9VVCA9IDMwMDAwO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtXb3JrZXJUaWxlUmVzdWx0fSBmcm9tICcuL3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBERU1EYXRhIGZyb20gJy4uL2RhdGEvZGVtX2RhdGEnO1xuaW1wb3J0IHR5cGUge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHR5cGUgSW1hZ2VBdGxhcyBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIEZyYW1lYnVmZmVyIGZyb20gJy4uL2dsL2ZyYW1lYnVmZmVyJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMYXllckZlYXR1cmVTdGF0ZXN9IGZyb20gJy4vc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgVGlsZVN0YXRlID1cbiAgICB8ICdsb2FkaW5nJyAgIC8vIFRpbGUgZGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLlxuICAgIHwgJ2xvYWRlZCcgICAgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGxvYWRlZC4gVGlsZSBjYW4gYmUgcmVuZGVyZWQuXG4gICAgfCAncmVsb2FkaW5nJyAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyBiZWluZyB1cGRhdGVkLiBUaWxlIGNhbiBiZSByZW5kZXJlZC5cbiAgICB8ICd1bmxvYWRlZCcgIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBkZWxldGVkLlxuICAgIHwgJ2Vycm9yZWQnICAgLy8gVGlsZSBkYXRhIHdhcyBub3QgbG9hZGVkIGJlY2F1c2Ugb2YgYW4gZXJyb3IuXG4gICAgfCAnZXhwaXJlZCc7ICAvKiBUaWxlIGRhdGEgd2FzIHByZXZpb3VzbHkgbG9hZGVkLCBidXQgaGFzIGV4cGlyZWQgcGVyIGl0c1xuICAgICAgICAgICAgICAgICAgICogSFRUUCBoZWFkZXJzIGFuZCBpcyBpbiB0aGUgcHJvY2VzcyBvZiByZWZyZXNoaW5nLiAqL1xuXG4vKipcbiAqIEEgdGlsZSBvYmplY3QgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29vcmRpbmF0ZSwgd2hpY2ggZGVmaW5lc1xuICogaXRzIHBsYWNlLCBhcyB3ZWxsIGFzIGEgdW5pcXVlIElEIGFuZCBkYXRhIHRyYWNraW5nIGZvciBpdHMgY29udGVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRpbGUge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB1aWQ6IG51bWJlcjtcbiAgICB1c2VzOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBidWNrZXRzOiB7W186IHN0cmluZ106IEJ1Y2tldH07XG4gICAgbGF0ZXN0RmVhdHVyZUluZGV4OiA/RmVhdHVyZUluZGV4O1xuICAgIGxhdGVzdFJhd1RpbGVEYXRhOiA/QXJyYXlCdWZmZXI7XG4gICAgaW1hZ2VBdGxhczogP0ltYWdlQXRsYXM7XG4gICAgaW1hZ2VBdGxhc1RleHR1cmU6IFRleHR1cmU7XG4gICAgZ2x5cGhBdGxhc0ltYWdlOiA/QWxwaGFJbWFnZTtcbiAgICBnbHlwaEF0bGFzVGV4dHVyZTogVGV4dHVyZTtcbiAgICBleHBpcmF0aW9uVGltZTogYW55O1xuICAgIGV4cGlyZWRSZXF1ZXN0Q291bnQ6IG51bWJlcjtcbiAgICBzdGF0ZTogVGlsZVN0YXRlO1xuICAgIHRpbWVBZGRlZDogYW55O1xuICAgIGZhZGVFbmRUaW1lOiBhbnk7XG4gICAgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheTtcbiAgICByZWRvV2hlbkRvbmU6IGJvb2xlYW47XG4gICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIHBsYWNlbWVudFNvdXJjZTogYW55O1xuICAgIGFjdG9yOiA/QWN0b3I7XG4gICAgdnRMYXllcnM6IHtbXzogc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcblxuICAgIG5laWdoYm9yaW5nVGlsZXM6ID9PYmplY3Q7XG4gICAgZGVtOiA/REVNRGF0YTtcbiAgICBhYm9ydGVkOiA/Ym9vbGVhbjtcbiAgICBuZWVkc0hpbGxzaGFkZVByZXBhcmU6ID9ib29sZWFuO1xuICAgIHJlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIHRleHR1cmU6IGFueTtcbiAgICBmYm86ID9GcmFtZWJ1ZmZlcjtcbiAgICBkZW1UZXh0dXJlOiA/VGV4dHVyZTtcbiAgICByZWZyZXNoZWRVcG9uRXhwaXJhdGlvbjogYm9vbGVhbjtcbiAgICByZWxvYWRDYWxsYmFjazogYW55O1xuICAgIHJlc291cmNlVGltaW5nOiA/QXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz47XG4gICAgcXVlcnlQYWRkaW5nOiBudW1iZXI7XG5cbiAgICBzeW1ib2xGYWRlSG9sZFVudGlsOiA/bnVtYmVyO1xuICAgIGhhc1N5bWJvbEJ1Y2tldHM6IGJvb2xlYW47XG4gICAgaGFzUlRMVGV4dDogYm9vbGVhbjtcbiAgICBkZXBlbmRlbmNpZXM6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T3ZlcnNjYWxlZFRpbGVJRH0gdGlsZUlEXG4gICAgICogQHBhcmFtIHNpemVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLnVpZCA9IHVuaXF1ZUlkKCk7XG4gICAgICAgIHRoaXMudXNlcyA9IDA7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLmJ1Y2tldHMgPSB7fTtcbiAgICAgICAgdGhpcy5leHBpcmF0aW9uVGltZSA9IG51bGw7XG4gICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gMDtcbiAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IHt9O1xuXG4gICAgICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgcmVzcG9uc2Ugd2FzIGFscmVhZHkgZXhwaXJlZCB3aGVuXG4gICAgICAgIC8vIHJlY2VpdmVkLiBXZSdyZSB1c2luZyB0aGlzIHRvIGFkZCBhIGRlbGF5IHdoZW4gbWFraW5nIGEgbmV3IHJlcXVlc3RcbiAgICAgICAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHJldHJ5aW5nIGltbWVkaWF0ZWx5IGluIGNhc2Ugb2YgYSBzZXJ2ZXJcbiAgICAgICAgLy8gc2VydmluZyBleHBpcmVkIHRpbGVzLlxuICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZGluZyc7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGYWRlRHVyYXRpb24oZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICBjb25zdCBmYWRlRW5kVGltZSA9IGR1cmF0aW9uICsgdGhpcy50aW1lQWRkZWQ7XG4gICAgICAgIGlmIChmYWRlRW5kVGltZSA8IGJyb3dzZXIubm93KCkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZmFkZUVuZFRpbWUgJiYgZmFkZUVuZFRpbWUgPCB0aGlzLmZhZGVFbmRUaW1lKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5mYWRlRW5kVGltZSA9IGZhZGVFbmRUaW1lO1xuICAgIH1cblxuICAgIHdhc1JlcXVlc3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09ICdlcnJvcmVkJyB8fCB0aGlzLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aGlzLnN0YXRlID09PSAncmVsb2FkaW5nJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGRhdGEgb2JqZWN0IHdpdGggYSAnYnVmZmVycycgcHJvcGVydHksIGxvYWQgaXQgaW50b1xuICAgICAqIHRoaXMgdGlsZSdzIGVsZW1lbnRHcm91cHMgYW5kIGJ1ZmZlcnMgcHJvcGVydGllcyBhbmQgc2V0IGxvYWRlZFxuICAgICAqIHRvIHRydWUuIElmIHRoZSBkYXRhIGlzIG51bGwsIGxpa2UgaW4gdGhlIGNhc2Ugb2YgYW4gZW1wdHlcbiAgICAgKiBHZW9KU09OIHRpbGUsIG5vLW9wIGJ1dCBzdGlsbCBzZXQgbG9hZGVkIHRvIHRydWUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKiBAcGFyYW0gcGFpbnRlclxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkVmVjdG9yRGF0YShkYXRhOiBXb3JrZXJUaWxlUmVzdWx0LCBwYWludGVyOiBhbnksIGp1c3RSZWxvYWRlZDogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVubG9hZFZlY3RvckRhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZGVkJztcblxuICAgICAgICAvLyBlbXB0eSBHZW9KU09OIHRpbGVcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gbmV3IENvbGxpc2lvbkJveEFycmF5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4ID0gZGF0YS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICBpZiAoZGF0YS5yYXdUaWxlRGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgdmVjdG9yIHRpbGVzIGhhdmUgcmF3VGlsZURhdGEsIGFuZCB0aGV5IHdvbid0IHVwZGF0ZSBpdCBmb3JcbiAgICAgICAgICAgICAgICAvLyAncmVsb2FkVGlsZSdcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFJhd1RpbGVEYXRhID0gZGF0YS5yYXdUaWxlRGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSA9IGRhdGEucmF3VGlsZURhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGF0ZXN0UmF3VGlsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiByYXdUaWxlRGF0YSBoYXNuJ3QgdXBkYXRlZCwgaG9sZCBvbnRvIGEgcG9pbnRlciB0byB0aGUgbGFzdFxuICAgICAgICAgICAgICAgIC8vIG9uZSB3ZSByZWNlaXZlZFxuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhID0gdGhpcy5sYXRlc3RSYXdUaWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gZGF0YS5jb2xsaXNpb25Cb3hBcnJheTtcbiAgICAgICAgdGhpcy5idWNrZXRzID0gZGVzZXJpYWxpemVCdWNrZXQoZGF0YS5idWNrZXRzLCBwYWludGVyLnN0eWxlKTtcblxuICAgICAgICB0aGlzLmhhc1N5bWJvbEJ1Y2tldHMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICBpZiAoYnVja2V0IGluc3RhbmNlb2YgU3ltYm9sQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoanVzdFJlbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5qdXN0UmVsb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5oYXNTeW1ib2xCdWNrZXRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldCBpbnN0YW5jZW9mIFN5bWJvbEJ1Y2tldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Lmhhc1JUTFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5TG9hZFJUTFRleHRQbHVnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gTWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsIHBhaW50ZXIuc3R5bGUuZ2V0TGF5ZXIoaWQpLnF1ZXJ5UmFkaXVzKGJ1Y2tldCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzID0gZGF0YS5pbWFnZUF0bGFzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmdseXBoQXRsYXNJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzSW1hZ2UgPSBkYXRhLmdseXBoQXRsYXNJbWFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgYW55IGRhdGEgb3IgV2ViR0wgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyB0aWxlLlxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB1bmxvYWRWZWN0b3JEYXRhKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgdGhpcy5idWNrZXRzW2lkXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWNrZXRzID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdseXBoQXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICd1bmxvYWRlZCc7XG4gICAgfVxuXG4gICAgZ2V0QnVja2V0KGxheWVyOiBTdHlsZUxheWVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldHNbbGF5ZXIuaWRdO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldC51cGxvYWRQZW5kaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBidWNrZXQudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzICYmICF0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmltYWdlQXRsYXMuaW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdseXBoQXRsYXNJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuZ2x5cGhBdGxhc0ltYWdlLCBnbC5BTFBIQSk7XG4gICAgICAgICAgICB0aGlzLmdseXBoQXRsYXNJbWFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmVwYXJlKGltYWdlTWFuYWdlcjogSW1hZ2VNYW5hZ2VyKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcy5wYXRjaFVwZGF0ZWRJbWFnZXMoaW1hZ2VNYW5hZ2VyLCB0aGlzLmltYWdlQXRsYXNUZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFF1ZXJpZXMgbm9uLXN5bWJvbCBmZWF0dXJlcyByZW5kZXJlZCBmb3IgdGhpcyB0aWxlLlxuICAgIC8vIFN5bWJvbCBmZWF0dXJlcyBhcmUgcXVlcmllZCBnbG9iYWxseVxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhsYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnM6IHtbc3RyaW5nXTogT2JqZWN0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmVhdHVyZVN0YXRlOiBTb3VyY2VGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLCBsYXllcnM6IEFycmF5PHN0cmluZz4sIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KToge1tfOiBzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8ICF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSlcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXgsXG4gICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhZGRpbmc6IHRoaXMucXVlcnlQYWRkaW5nICogbWF4UGl0Y2hTY2FsZUZhY3RvclxuICAgICAgICB9LCBsYXllcnMsIHNlcmlhbGl6ZWRMYXllcnMsIHNvdXJjZUZlYXR1cmVTdGF0ZSk7XG4gICAgfVxuXG4gICAgcXVlcnlTb3VyY2VGZWF0dXJlcyhyZXN1bHQ6IEFycmF5PEdlb0pTT05GZWF0dXJlPiwgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ID0gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmICghZmVhdHVyZUluZGV4IHx8ICFmZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2dExheWVycyA9IGZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHBhcmFtcyA/IHBhcmFtcy5zb3VyY2VMYXllciA6ICcnO1xuICAgICAgICBjb25zdCBsYXllciA9IHZ0TGF5ZXJzLl9nZW9qc29uVGlsZUxheWVyIHx8IHZ0TGF5ZXJzW3NvdXJjZUxheWVyXTtcblxuICAgICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihwYXJhbXMgJiYgcGFyYW1zLmZpbHRlcik7XG4gICAgICAgIGNvbnN0IHt6LCB4LCB5fSA9IHRoaXMudGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3QgY29vcmQgPSB7eiwgeCwgeX07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLCBmZWF0dXJlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZmVhdHVyZUluZGV4LmdldElkKGZlYXR1cmUsIHNvdXJjZUxheWVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW9qc29uRmVhdHVyZSA9IG5ldyBHZW9KU09ORmVhdHVyZShmZWF0dXJlLCB6LCB4LCB5LCBpZCk7XG4gICAgICAgICAgICAgICAgKGdlb2pzb25GZWF0dXJlOiBhbnkpLnRpbGUgPSBjb29yZDtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW9qc29uRmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ3JlbG9hZGluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ2V4cGlyZWQnO1xuICAgIH1cblxuICAgIHBhdHRlcm5zTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZUF0bGFzICYmICEhT2JqZWN0LmtleXModGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBzZXRFeHBpcnlEYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBwcmlvciA9IHRoaXMuZXhwaXJhdGlvblRpbWU7XG5cbiAgICAgICAgaWYgKGRhdGEuY2FjaGVDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDQyA9IHBhcnNlQ2FjaGVDb250cm9sKGRhdGEuY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRDQ1snbWF4LWFnZSddKSB0aGlzLmV4cGlyYXRpb25UaW1lID0gRGF0ZS5ub3coKSArIHBhcnNlZENDWydtYXgtYWdlJ10gKiAxMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXhwaXJlcykge1xuICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uVGltZSA9IG5ldyBEYXRlKGRhdGEuZXhwaXJlcykuZ2V0VGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgaXNFeHBpcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGlyYXRpb25UaW1lID4gbm93KSB7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFwcmlvcikge1xuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUgPCBwcmlvcikge1xuICAgICAgICAgICAgICAgIC8vIEV4cGlyaW5nIGRhdGUgaXMgZ29pbmcgYmFja3dhcmRzOlxuICAgICAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuZXhwaXJhdGlvblRpbWUgLSBwcmlvcjtcblxuICAgICAgICAgICAgICAgIGlmICghZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VydmVyIGlzIHNlcnZpbmcgdGhlIHNhbWUgZXhwaXJlZCByZXNvdXJjZSBvdmVyIGFuZCBvdmVyOiBmYWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhY2sgdG8gZXhwb25lbnRpYWwgYmFja29mZi5cbiAgICAgICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IGVpdGhlciB0aGUgY2xpZW50IG9yIHRoZSBzZXJ2ZXIgY2xvY2sgaXMgd3JvbmcgYW5kXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBpbnRlcnBvbGF0ZSBhIHZhbGlkIGV4cGlyYXRpb24gZGF0ZSAoZnJvbSB0aGUgY2xpZW50IFBPVilcbiAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2aW5nIGEgbWluaW11bSB0aW1lb3V0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbm93ICsgTWF0aC5tYXgoZGVsdGEsIENMT0NLX1NLRVdfUkVUUllfVElNRU9VVCk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2V4cGlyZWQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RXhwaXJ5VGltZW91dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTAwMCAqICgxIDw8IE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCAtIDEsIDMxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1heCB2YWx1ZSBmb3IgYHNldFRpbWVvdXRgIGltcGxlbWVudGF0aW9ucyBpcyBhIDMyIGJpdCBpbnRlZ2VyOyBjYXAgdGhpcyBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lIC0gbmV3IERhdGUoKS5nZXRUaW1lKCksIE1hdGgucG93KDIsIDMxKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RmVhdHVyZVN0YXRlKHN0YXRlczogTGF5ZXJGZWF0dXJlU3RhdGVzLCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCB8fFxuICAgICAgICAgICAgIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhIHx8XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdnRMYXllcnMgPSB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgaWYgKCFwYWludGVyLnN0eWxlLmhhc0xheWVyKGlkKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICAvLyBCdWNrZXRzIGFyZSBncm91cGVkIGJ5IGNvbW1vbiBzb3VyY2UtbGF5ZXJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVySWQgPSBidWNrZXQubGF5ZXJzWzBdWydzb3VyY2VMYXllciddIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHZ0TGF5ZXJzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJTdGF0ZXMgPSBzdGF0ZXNbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyIHx8ICFzb3VyY2VMYXllclN0YXRlcyB8fCBPYmplY3Qua2V5cyhzb3VyY2VMYXllclN0YXRlcykubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgYnVja2V0LnVwZGF0ZShzb3VyY2VMYXllclN0YXRlcywgc291cmNlTGF5ZXIsIHRoaXMuaW1hZ2VBdGxhcyAmJiB0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucyB8fCB7fSk7XG4gICAgICAgICAgICBpZiAocGFpbnRlciAmJiBwYWludGVyLnN0eWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSBNYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZywgcGFpbnRlci5zdHlsZS5nZXRMYXllcihpZCkucXVlcnlSYWRpdXMoYnVja2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob2xkaW5nRm9yRmFkZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN5bWJvbEZhZGVGaW5pc2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgfHwgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsIDwgYnJvd3Nlci5ub3coKTtcbiAgICB9XG5cbiAgICBjbGVhckZhZGVIb2xkKCkge1xuICAgICAgICB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2V0SG9sZER1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsID0gYnJvd3Nlci5ub3coKSArIGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNldERlcGVuZGVuY2llcyhuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgaW5kZXhbZGVwXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNbbmFtZXNwYWNlXSA9IGluZGV4O1xuICAgIH1cblxuICAgIGhhc0RlcGVuZGVuY3kobmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPiwga2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLmRlcGVuZGVuY2llc1tuYW1lc3BhY2VdO1xuICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaWxlO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBbJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdtaW56b29tJywgJ21heHpvb20nLCAnZmlsdGVyJywgJ2xheW91dCddO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmNvbnN0IHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZU1ldHJpY3MgPSB7XG4gICAgbG9hZFRpbWU6IG51bWJlcixcbiAgICBmdWxsTG9hZFRpbWU6IG51bWJlcixcbiAgICBmcHM6IG51bWJlcixcbiAgICBwZXJjZW50RHJvcHBlZEZyYW1lczogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZU1hcmtlcnMgPSB7XG4gICAgY3JlYXRlOiAnY3JlYXRlJyxcbiAgICBsb2FkOiAnbG9hZCcsXG4gICAgZnVsbExvYWQ6ICdmdWxsTG9hZCdcbn07XG5cbmxldCBsYXN0RnJhbWVUaW1lID0gbnVsbDtcbmxldCBmcmFtZVRpbWVzID0gW107XG5cbmNvbnN0IG1pbkZyYW1lcmF0ZVRhcmdldCA9IDMwO1xuY29uc3QgZnJhbWVUaW1lVGFyZ2V0ID0gMTAwMCAvIG1pbkZyYW1lcmF0ZVRhcmdldDtcblxuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlVXRpbHMgPSB7XG4gICAgbWFyayhtYXJrZXI6ICRLZXlzPHR5cGVvZiBQZXJmb3JtYW5jZU1hcmtlcnM+KSB7XG4gICAgICAgIHBlcmZvcm1hbmNlLm1hcmsobWFya2VyKTtcbiAgICB9LFxuICAgIGZyYW1lKHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGN1cnJUaW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgICAgIGlmIChsYXN0RnJhbWVUaW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lVGltZSA9IGN1cnJUaW1lc3RhbXAgLSBsYXN0RnJhbWVUaW1lO1xuICAgICAgICAgICAgZnJhbWVUaW1lcy5wdXNoKGZyYW1lVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEZyYW1lVGltZSA9IGN1cnJUaW1lc3RhbXA7XG4gICAgfSxcbiAgICBjbGVhck1ldHJpY3MoKSB7XG4gICAgICAgIGxhc3RGcmFtZVRpbWUgPSBudWxsO1xuICAgICAgICBmcmFtZVRpbWVzID0gW107XG4gICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMoJ2xvYWRUaW1lJyk7XG4gICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMoJ2Z1bGxMb2FkVGltZScpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbWFya2VyIGluIFBlcmZvcm1hbmNlTWFya2Vycykge1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhQZXJmb3JtYW5jZU1hcmtlcnNbbWFya2VyXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldFBlcmZvcm1hbmNlTWV0cmljcygpOiBQZXJmb3JtYW5jZU1ldHJpY3Mge1xuICAgICAgICBjb25zdCBsb2FkVGltZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUoJ2xvYWRUaW1lJywgUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSwgUGVyZm9ybWFuY2VNYXJrZXJzLmxvYWQpLmR1cmF0aW9uO1xuICAgICAgICBjb25zdCBmdWxsTG9hZFRpbWUgPSBwZXJmb3JtYW5jZS5tZWFzdXJlKCdmdWxsTG9hZFRpbWUnLCBQZXJmb3JtYW5jZU1hcmtlcnMuY3JlYXRlLCBQZXJmb3JtYW5jZU1hcmtlcnMuZnVsbExvYWQpLmR1cmF0aW9uO1xuICAgICAgICBjb25zdCB0b3RhbEZyYW1lcyA9IGZyYW1lVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGF2Z0ZyYW1lVGltZSA9IGZyYW1lVGltZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCkgLyB0b3RhbEZyYW1lcyAvIDEwMDA7XG4gICAgICAgIGNvbnN0IGZwcyA9IDEgLyBhdmdGcmFtZVRpbWU7XG5cbiAgICAgICAgLy8gY291bnQgZnJhbWVzIHRoYXQgbWlzc2VkIG91ciBmcmFtZXJhdGUgdGFyZ2V0XG4gICAgICAgIGNvbnN0IGRyb3BwZWRGcmFtZXMgPSBmcmFtZVRpbWVzXG4gICAgICAgICAgICAuZmlsdGVyKChmcmFtZVRpbWUpID0+IGZyYW1lVGltZSA+IGZyYW1lVGltZVRhcmdldClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgKyAoY3VyciAtICBmcmFtZVRpbWVUYXJnZXQpIC8gZnJhbWVUaW1lVGFyZ2V0O1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIGNvbnN0IHBlcmNlbnREcm9wcGVkRnJhbWVzID0gKGRyb3BwZWRGcmFtZXMgLyAodG90YWxGcmFtZXMgKyBkcm9wcGVkRnJhbWVzKSkgKiAxMDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYWRUaW1lLFxuICAgICAgICAgICAgZnVsbExvYWRUaW1lLFxuICAgICAgICAgICAgZnBzLFxuICAgICAgICAgICAgcGVyY2VudERyb3BwZWRGcmFtZXNcbiAgICAgICAgfTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3IgdGhlIHBlcmZvcm1hbmNlIHJlc291cmNlIHRpbWluZyBBUEkgaW4gd2ViIHdvcmtlcnMgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvblxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdFBhcmFtZXRlcnN9IHJlcXVlc3RcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0UGVyZm9ybWFuY2Uge1xuICAgIF9tYXJrczoge3N0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nLCBtZWFzdXJlOiBzdHJpbmd9O1xuXG4gICAgY29uc3RydWN0b3IgKHJlcXVlc3Q6IFJlcXVlc3RQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX21hcmtzID0ge1xuICAgICAgICAgICAgc3RhcnQ6IFtyZXF1ZXN0LnVybCwgJ3N0YXJ0J10uam9pbignIycpLFxuICAgICAgICAgICAgZW5kOiBbcmVxdWVzdC51cmwsICdlbmQnXS5qb2luKCcjJyksXG4gICAgICAgICAgICBtZWFzdXJlOiByZXF1ZXN0LnVybC50b1N0cmluZygpXG4gICAgICAgIH07XG5cbiAgICAgICAgcGVyZm9ybWFuY2UubWFyayh0aGlzLl9tYXJrcy5zdGFydCk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgIGxldCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuXG4gICAgICAgIC8vIGZhbGxiYWNrIGlmIHdlYiB3b3JrZXIgaW1wbGVtZW50YXRpb24gb2YgcGVyZi5nZXRFbnRyaWVzQnlOYW1lIHJldHVybnMgZW1wdHlcbiAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUodGhpcy5fbWFya3MubWVhc3VyZSwgdGhpcy5fbWFya3Muc3RhcnQsIHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgICAgICByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuXG4gICAgICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHRoaXMuX21hcmtzLnN0YXJ0KTtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXModGhpcy5fbWFya3MubWVhc3VyZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb3VyY2VUaW1pbmdEYXRhO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcGVyZm9ybWFuY2U7XG4iLCJcbmltcG9ydCByZWZQcm9wZXJ0aWVzIGZyb20gJy4vdXRpbC9yZWZfcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iajtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGxldCBzdHIgPSAnWyc7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG9iaikge1xuICAgICAgICAgICAgc3RyICs9IGAke3N0cmluZ2lmeSh2YWwpfSxgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJ9XWA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaikuc29ydCgpO1xuXG4gICAgbGV0IHN0ciA9ICd7JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGAke0pTT04uc3RyaW5naWZ5KGtleXNbaV0pfToke3N0cmluZ2lmeShvYmpba2V5c1tpXV0pfSxgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c3RyfX1gO1xufVxuXG5mdW5jdGlvbiBnZXRLZXkobGF5ZXIpIHtcbiAgICBsZXQga2V5ID0gJyc7XG4gICAgZm9yIChjb25zdCBrIG9mIHJlZlByb3BlcnRpZXMpIHtcbiAgICAgICAga2V5ICs9IGAvJHtzdHJpbmdpZnkobGF5ZXJba10pfWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwQnlMYXlvdXQ7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgbGF5ZXJzLCByZXR1cm4gYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGxheWVycyB3aGVyZSBhbGxcbiAqIGxheWVycyBpbiBlYWNoIGdyb3VwIGhhdmUgaWRlbnRpY2FsIGxheW91dC1hZmZlY3RpbmcgcHJvcGVydGllcy4gVGhlc2VcbiAqIGFyZSB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgZm9ybWVybHkgdXNlZCBieSBleHBsaWNpdCBgcmVmYCBtZWNoYW5pc21cbiAqIGZvciBsYXllcnM6ICd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnbWluem9vbScsICdtYXh6b29tJyxcbiAqICdmaWx0ZXInLCBhbmQgJ2xheW91dCcuXG4gKlxuICogVGhlIGlucHV0IGlzIG5vdCBtb2RpZmllZC4gVGhlIG91dHB1dCBsYXllcnMgYXJlIHJlZmVyZW5jZXMgdG8gdGhlXG4gKiBpbnB1dCBsYXllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8TGF5ZXI+fSBsYXllcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY2FjaGVkS2V5c10gLSBhbiBvYmplY3QgdG8ga2VlcCBhbHJlYWR5IGNhbGN1bGF0ZWQga2V5cy5cbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxMYXllcj4+fVxuICovXG5mdW5jdGlvbiBncm91cEJ5TGF5b3V0KGxheWVycywgY2FjaGVkS2V5cykge1xuICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBjb25zdCBrID0gKGNhY2hlZEtleXMgJiYgY2FjaGVkS2V5c1tsYXllcnNbaV0uaWRdKSB8fCBnZXRLZXkobGF5ZXJzW2ldKTtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBjYWNoZSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKGNhY2hlZEtleXMpXG4gICAgICAgICAgICBjYWNoZWRLZXlzW2xheWVyc1tpXS5pZF0gPSBrO1xuXG4gICAgICAgIGxldCBncm91cCA9IGdyb3Vwc1trXTtcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgZ3JvdXAgPSBncm91cHNba10gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5wdXNoKGxheWVyc1tpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gZ3JvdXBzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGdyb3Vwc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IGdyb3VwQnlMYXlvdXQgZnJvbSAnLi4vc3R5bGUtc3BlYy9ncm91cF9ieV9sYXlvdXQnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMYXllckNvbmZpZ3MgPSB7W186IHN0cmluZ106IExheWVyU3BlY2lmaWNhdGlvbiB9O1xuZXhwb3J0IHR5cGUgRmFtaWx5PExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+ID0gQXJyYXk8TGF5ZXI+O1xuXG5jbGFzcyBTdHlsZUxheWVySW5kZXgge1xuICAgIGZhbWlsaWVzQnlTb3VyY2U6IHsgW3NvdXJjZTogc3RyaW5nXTogeyBbc291cmNlTGF5ZXI6IHN0cmluZ106IEFycmF5PEZhbWlseTwqPj4gfSB9O1xuICAgIGtleUNhY2hlOiB7IFtzb3VyY2U6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgX2xheWVyQ29uZmlnczogTGF5ZXJDb25maWdzO1xuICAgIF9sYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllciB9O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXJDb25maWdzOiA/QXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPikge1xuICAgICAgICB0aGlzLmtleUNhY2hlID0ge307XG4gICAgICAgIGlmIChsYXllckNvbmZpZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShsYXllckNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZShsYXllckNvbmZpZ3M6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4pIHtcbiAgICAgICAgdGhpcy5fbGF5ZXJDb25maWdzID0ge307XG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZShsYXllckNvbmZpZ3MsIFtdKTtcbiAgICB9XG5cbiAgICB1cGRhdGUobGF5ZXJDb25maWdzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWcgb2YgbGF5ZXJDb25maWdzKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXllckNvbmZpZ3NbbGF5ZXJDb25maWcuaWRdID0gbGF5ZXJDb25maWc7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyQ29uZmlnLmlkXSA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGxheWVyLmZpbHRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlDYWNoZVtsYXllckNvbmZpZy5pZF0pXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbbGF5ZXJDb25maWcuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmVtb3ZlZElkcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmFtaWxpZXNCeVNvdXJjZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlMYXlvdXQodmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksIHRoaXMua2V5Q2FjaGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWdzIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJzID0gbGF5ZXJDb25maWdzLm1hcCgobGF5ZXJDb25maWcpID0+IHRoaXMuX2xheWVyc1tsYXllckNvbmZpZy5pZF0pO1xuXG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1swXTtcbiAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlSWQgPSBsYXllci5zb3VyY2UgfHwgJyc7XG4gICAgICAgICAgICBsZXQgc291cmNlR3JvdXAgPSB0aGlzLmZhbWlsaWVzQnlTb3VyY2Vbc291cmNlSWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VHcm91cCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUdyb3VwID0gdGhpcy5mYW1pbGllc0J5U291cmNlW3NvdXJjZUlkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gbGF5ZXIuc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGxldCBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlTGF5ZXJGYW1pbGllcy5wdXNoKGxheWVycyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlTGF5ZXJJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtHbHlwaE1ldHJpY3MsIFN0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcblxuY29uc3QgcGFkZGluZyA9IDE7XG5cbmV4cG9ydCB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9uID0ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgbWV0cmljczogR2x5cGhNZXRyaWNzXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9ucyA9IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiBHbHlwaFBvc2l0aW9uIH0gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHbHlwaEF0bGFzIHtcbiAgICBpbWFnZTogQWxwaGFJbWFnZTtcbiAgICBwb3NpdGlvbnM6IEdseXBoUG9zaXRpb25zO1xuXG4gICAgY29uc3RydWN0b3Ioc3RhY2tzOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGggfSB9KSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBzdGFja3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHN0YWNrc1tzdGFja107XG4gICAgICAgICAgICBjb25zdCBzdGFja1Bvc2l0aW9ucyA9IHBvc2l0aW9uc1tzdGFja10gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBnbHlwaHNbK2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNyYyB8fCBzcmMuYml0bWFwLndpZHRoID09PSAwIHx8IHNyYy5iaXRtYXAuaGVpZ2h0ID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgdzogc3JjLmJpdG1hcC53aWR0aCArIDIgKiBwYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICBoOiBzcmMuYml0bWFwLmhlaWdodCArIDIgKiBwYWRkaW5nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBiaW5zLnB1c2goYmluKTtcbiAgICAgICAgICAgICAgICBzdGFja1Bvc2l0aW9uc1tpZF0gPSB7cmVjdDogYmluLCBtZXRyaWNzOiBzcmMubWV0cmljc307XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBBbHBoYUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gc3RhY2tzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBzdGFja3Nbc3RhY2tdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGdseXBoc1sraWRdO1xuICAgICAgICAgICAgICAgIGlmICghc3JjIHx8IHNyYy5iaXRtYXAud2lkdGggPT09IDAgfHwgc3JjLmJpdG1hcC5oZWlnaHQgPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHBvc2l0aW9uc1tzdGFja11baWRdLnJlY3Q7XG4gICAgICAgICAgICAgICAgQWxwaGFJbWFnZS5jb3B5KHNyYy5iaXRtYXAsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4OiBiaW4ueCArIHBhZGRpbmcsIHk6IGJpbi55ICsgcGFkZGluZ30sIHNyYy5iaXRtYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdHbHlwaEF0bGFzJywgR2x5cGhBdGxhcyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5cbmltcG9ydCB7cGVyZm9ybVN5bWJvbExheW91dH0gZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgRGljdGlvbmFyeUNvZGVyIGZyb20gJy4uL3V0aWwvZGljdGlvbmFyeV9jb2Rlcic7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IEZpbGxCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9idWNrZXQnO1xuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7d2Fybk9uY2UsIG1hcE9iamVjdCwgdmFsdWVzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IEltYWdlQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCBHbHlwaEF0bGFzIGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcbmltcG9ydCB0eXBlIHtQcm9tb3RlSWRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgV29ya2VyVGlsZSB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHVpZDogc3RyaW5nO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICByZXR1cm5EZXBlbmRlbmNpZXM6IGJvb2xlYW47XG5cbiAgICBzdGF0dXM6ICdwYXJzaW5nJyB8ICdkb25lJztcbiAgICBkYXRhOiBWZWN0b3JUaWxlO1xuICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheTtcblxuICAgIGFib3J0OiA/KCkgPT4gdm9pZDtcbiAgICByZWxvYWRDYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrO1xuICAgIHZlY3RvclRpbGU6IFZlY3RvclRpbGU7XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gbmV3IE92ZXJzY2FsZWRUaWxlSUQocGFyYW1zLnRpbGVJRC5vdmVyc2NhbGVkWiwgcGFyYW1zLnRpbGVJRC53cmFwLCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC56LCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC54LCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC55KTtcbiAgICAgICAgdGhpcy51aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICB0aGlzLnpvb20gPSBwYXJhbXMuem9vbTtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID0gcGFyYW1zLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSBwYXJhbXMudGlsZVNpemU7XG4gICAgICAgIHRoaXMuc291cmNlID0gcGFyYW1zLnNvdXJjZTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IHRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO1xuICAgICAgICB0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyA9IHBhcmFtcy5zaG93Q29sbGlzaW9uQm94ZXM7XG4gICAgICAgIHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nID0gISFwYXJhbXMuY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA9ICEhcGFyYW1zLnJldHVybkRlcGVuZGVuY2llcztcbiAgICAgICAgdGhpcy5wcm9tb3RlSWQgPSBwYXJhbXMucHJvbW90ZUlkO1xuICAgIH1cblxuICAgIHBhcnNlKGRhdGE6IFZlY3RvclRpbGUsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBhY3RvcjogQWN0b3IsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAncGFyc2luZyc7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2RlcihPYmplY3Qua2V5cyhkYXRhLmxheWVycykuc29ydCgpKTtcblxuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXggPSBuZXcgRmVhdHVyZUluZGV4KHRoaXMudGlsZUlELCB0aGlzLnByb21vdGVJZCk7XG4gICAgICAgIGZlYXR1cmVJbmRleC5idWNrZXRMYXllcklEcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldHM6IHtbXzogc3RyaW5nXTogQnVja2V0fSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICBpY29uRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIHBhdHRlcm5EZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgZ2x5cGhEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgYXZhaWxhYmxlSW1hZ2VzXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbGF5ZXJGYW1pbGllcyA9IGxheWVySW5kZXguZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07XG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXJJZCBpbiBsYXllckZhbWlsaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGRhdGEubGF5ZXJzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc291cmNlTGF5ZXIudmVyc2lvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGBWZWN0b3IgdGlsZSBzb3VyY2UgXCIke3RoaXMuc291cmNlfVwiIGxheWVyIFwiJHtzb3VyY2VMYXllcklkfVwiIGAgK1xuICAgICAgICAgICAgICAgICAgICBgZG9lcyBub3QgdXNlIHZlY3RvciB0aWxlIHNwZWMgdjIgYW5kIHRoZXJlZm9yZSBtYXkgaGF2ZSBzb21lIHJlbmRlcmluZyBlcnJvcnMuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVySW5kZXggPSBzb3VyY2VMYXllckNvZGVyLmVuY29kZShzb3VyY2VMYXllcklkKTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlTGF5ZXIubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHNvdXJjZUxheWVyLmZlYXR1cmUoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZmVhdHVyZUluZGV4LmdldElkKGZlYXR1cmUsIHNvdXJjZUxheWVySWQpO1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goe2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhbWlseSBvZiBsYXllckZhbWlsaWVzW3NvdXJjZUxheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBmYW1pbHlbMF07XG5cbiAgICAgICAgICAgICAgICBhc3NlcnQobGF5ZXIuc291cmNlID09PSB0aGlzLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gJiYgdGhpcy56b29tIDwgTWF0aC5mbG9vcihsYXllci5taW56b29tKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1heHpvb20gJiYgdGhpcy56b29tID49IGxheWVyLm1heHpvb20pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoZmFtaWx5LCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2xheWVyLmlkXSA9IGxheWVyLmNyZWF0ZUJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsYXllcnM6IGZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiB0aGlzLm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBidWNrZXQucG9wdWxhdGUoZmVhdHVyZXMsIG9wdGlvbnMsIHRoaXMudGlsZUlELmNhbm9uaWNhbCk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzLnB1c2goZmFtaWx5Lm1hcCgobCkgPT4gbC5pZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9yOiA/RXJyb3I7XG4gICAgICAgIGxldCBnbHlwaE1hcDogP3tbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19O1xuICAgICAgICBsZXQgaWNvbk1hcDogP3tbXzogc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgICAgIGxldCBwYXR0ZXJuTWFwOiA/e1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfTtcblxuICAgICAgICBjb25zdCBzdGFja3MgPSBtYXBPYmplY3Qob3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcywgKGdseXBocykgPT4gT2JqZWN0LmtleXMoZ2x5cGhzKS5tYXAoTnVtYmVyKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGFja3MpLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0R2x5cGhzJywge3VpZDogdGhpcy51aWQsIHN0YWNrc30sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdseXBoTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpY29ucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuaWNvbkRlcGVuZGVuY2llcyk7XG4gICAgICAgIGlmIChpY29ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEltYWdlcycsIHtpY29ucywgc291cmNlOiB0aGlzLnNvdXJjZSwgdGlsZUlEOiB0aGlzLnRpbGVJRCwgdHlwZTogJ2ljb25zJ30sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGljb25NYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWNvbk1hcCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyhvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXMpO1xuICAgICAgICBpZiAocGF0dGVybnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRJbWFnZXMnLCB7aWNvbnM6IHBhdHRlcm5zLCBzb3VyY2U6IHRoaXMuc291cmNlLCB0aWxlSUQ6IHRoaXMudGlsZUlELCB0eXBlOiAncGF0dGVybnMnfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybk1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcblxuICAgICAgICBmdW5jdGlvbiBtYXliZVByZXBhcmUoKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChnbHlwaE1hcCAmJiBpY29uTWFwICYmIHBhdHRlcm5NYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaEF0bGFzID0gbmV3IEdseXBoQXRsYXMoZ2x5cGhNYXApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlQXRsYXMgPSBuZXcgSW1hZ2VBdGxhcyhpY29uTWFwLCBwYXR0ZXJuTWFwKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJ1Y2tldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0IGluc3RhbmNlb2YgU3ltYm9sQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUxheWVycyhidWNrZXQubGF5ZXJzLCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtU3ltYm9sTGF5b3V0KGJ1Y2tldCwgZ2x5cGhNYXAsIGdseXBoQXRsYXMucG9zaXRpb25zLCBpY29uTWFwLCBpbWFnZUF0bGFzLmljb25Qb3NpdGlvbnMsIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLCB0aGlzLnRpbGVJRC5jYW5vbmljYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5oYXNQYXR0ZXJuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVja2V0IGluc3RhbmNlb2YgTGluZUJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxCdWNrZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQgaW5zdGFuY2VvZiBGaWxsRXh0cnVzaW9uQnVja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoYnVja2V0LmxheWVycywgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmFkZEZlYXR1cmVzKG9wdGlvbnMsIHRoaXMudGlsZUlELmNhbm9uaWNhbCwgaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0czogdmFsdWVzKGJ1Y2tldHMpLmZpbHRlcihiID0+ICFiLmlzRW1wdHkoKSksXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IHRoaXMuY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGdseXBoQXRsYXNJbWFnZTogZ2x5cGhBdGxhcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdGxhcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2VkIGZvciBiZW5jaG1hcmtpbmc6XG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGdseXBoTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcDogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBpY29uTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gZ2x5cGhBdGxhcy5wb3NpdGlvbnMgOiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlY2FsY3VsYXRlTGF5ZXJzKGxheWVyczogJFJlYWRPbmx5QXJyYXk8U3R5bGVMYXllcj4sIHpvb206IG51bWJlciwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgLy8gTGF5ZXJzIGFyZSBzaGFyZWQgYW5kIG1heSBoYXZlIGJlZW4gdXNlZCBieSBhIFdvcmtlclRpbGUgd2l0aCBhIGRpZmZlcmVudCB6b29tLlxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoem9vbSk7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgbGF5ZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdvcmtlclRpbGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEFycmF5QnVmZmVyfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQgdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmltcG9ydCBXb3JrZXJUaWxlIGZyb20gJy4vd29ya2VyX3RpbGUnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1JlcXVlc3RQZXJmb3JtYW5jZX0gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JUaWxlUmVzdWx0ID0ge1xuICAgIHZlY3RvclRpbGU6IFZlY3RvclRpbGU7XG4gICAgcmF3RGF0YTogQXJyYXlCdWZmZXI7XG4gICAgZXhwaXJlcz86IGFueTtcbiAgICBjYWNoZUNvbnRyb2w/OiBhbnk7XG4gICAgcmVzb3VyY2VUaW1pbmc/OiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2tcbiAqIEBwYXJhbSBlcnJvclxuICogQHBhcmFtIHZlY3RvclRpbGVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2sgPSBDYWxsYmFjazw/TG9hZFZlY3RvclRpbGVSZXN1bHQ+O1xuXG5leHBvcnQgdHlwZSBBYm9ydFZlY3RvckRhdGEgPSAoKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTG9hZFZlY3RvckRhdGEgPSAocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spID0+ID9BYm9ydFZlY3RvckRhdGE7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZFZlY3RvclRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZ2V0QXJyYXlCdWZmZXIocGFyYW1zLnJlcXVlc3QsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAgICAgdmVjdG9yVGlsZTogbmV3IHZ0LlZlY3RvclRpbGUobmV3IFByb3RvYnVmKGRhdGEpKSxcbiAgICAgICAgICAgICAgICByYXdEYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcbiAgICAgICAgICAgICAgICBleHBpcmVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgVmVjdG9yVGlsZVNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgVmVjdG9yVGlsZVxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgVmVjdG9yVGlsZVdvcmtlclNvdXJjZShhY3Rvciwgc3R5bGVMYXllcnMsIGN1c3RvbUxvYWRWZWN0b3JEYXRhRnVuY3Rpb24pYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIGltcGxlbWVudHMgV29ya2VyU291cmNlIHtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4O1xuICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcbiAgICBsb2FkVmVjdG9yRGF0YTogTG9hZFZlY3RvckRhdGE7XG4gICAgbG9hZGluZzoge1tfOiBzdHJpbmddOiBXb3JrZXJUaWxlIH07XG4gICAgbG9hZGVkOiB7W186IHN0cmluZ106IFdvcmtlclRpbGUgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBbbG9hZFZlY3RvckRhdGFdIE9wdGlvbmFsIG1ldGhvZCBmb3IgY3VzdG9tIGxvYWRpbmcgb2YgYSBWZWN0b3JUaWxlXG4gICAgICogb2JqZWN0IGJhc2VkIG9uIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gdGhlIG1haW4tdGhyZWFkIFNvdXJjZS4gU2VlXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHlcbiAgICAgKiBsb2FkcyB0aGUgcGJmIGF0IGBwYXJhbXMudXJsYC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGFjdG9yOiBBY3RvciwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGxvYWRWZWN0b3JEYXRhOiA/TG9hZFZlY3RvckRhdGEpIHtcbiAgICAgICAgdGhpcy5hY3RvciA9IGFjdG9yO1xuICAgICAgICB0aGlzLmxheWVySW5kZXggPSBsYXllckluZGV4O1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcztcbiAgICAgICAgdGhpcy5sb2FkVmVjdG9yRGF0YSA9IGxvYWRWZWN0b3JEYXRhIHx8IGxvYWRWZWN0b3JUaWxlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBEZWxlZ2F0ZXMgdG9cbiAgICAgKiB7QGxpbmsgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSNsb2FkVmVjdG9yRGF0YX0gKHdoaWNoIGJ5IGRlZmF1bHQgZXhwZWN0c1xuICAgICAqIGEgYHBhcmFtcy51cmxgIHByb3BlcnR5KSBmb3IgZmV0Y2hpbmcgYW5kIHByb2R1Y2luZyBhIFZlY3RvclRpbGUgb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZFRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCB1aWQgPSBwYXJhbXMudWlkO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nKVxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0ge307XG5cbiAgICAgICAgY29uc3QgcGVyZiA9IChwYXJhbXMgJiYgcGFyYW1zLnJlcXVlc3QgJiYgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSA/XG4gICAgICAgICAgICBuZXcgUmVxdWVzdFBlcmZvcm1hbmNlKHBhcmFtcy5yZXF1ZXN0KSA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtlclRpbGUgPSB0aGlzLmxvYWRpbmdbdWlkXSA9IG5ldyBXb3JrZXJUaWxlKHBhcmFtcyk7XG4gICAgICAgIHdvcmtlclRpbGUuYWJvcnQgPSB0aGlzLmxvYWRWZWN0b3JEYXRhKHBhcmFtcywgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmdbdWlkXTtcblxuICAgICAgICAgICAgaWYgKGVyciB8fCAhcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFt1aWRdID0gd29ya2VyVGlsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmF3VGlsZURhdGEgPSByZXNwb25zZS5yYXdEYXRhO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0ge307XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXhwaXJlcykgY2FjaGVDb250cm9sLmV4cGlyZXMgPSByZXNwb25zZS5leHBpcmVzO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbCkgY2FjaGVDb250cm9sLmNhY2hlQ29udHJvbCA9IHJlc3BvbnNlLmNhY2hlQ29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmcgPSB7fTtcbiAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZi5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG5lY2Vzc2FyeSB0byBldmFsIHRoZSByZXN1bHQgb2YgZ2V0RW50cmllc0J5TmFtZSgpIGhlcmUgdmlhIHBhcnNlL3N0cmluZ2lmeVxuICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VUaW1pbmcucmVzb3VyY2VUaW1pbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc291cmNlVGltaW5nRGF0YSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JrZXJUaWxlLnZlY3RvclRpbGUgPSByZXNwb25zZS52ZWN0b3JUaWxlO1xuICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZShyZXNwb25zZS52ZWN0b3JUaWxlLCB0aGlzLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB0aGlzLmFjdG9yLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyIHx8ICFyZXN1bHQpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmZXJyaW5nIGEgY29weSBvZiByYXdUaWxlRGF0YSBiZWNhdXNlIHRoZSB3b3JrZXIgbmVlZHMgdG8gcmV0YWluIGl0cyBjb3B5LlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGV4dGVuZCh7cmF3VGlsZURhdGE6IHJhd1RpbGVEYXRhLnNsaWNlKDApfSwgcmVzdWx0LCBjYWNoZUNvbnRyb2wsIHJlc291cmNlVGltaW5nKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSB3b3JrZXJUaWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVsb2FkVGlsZX0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkLFxuICAgICAgICAgICAgdnRTb3VyY2UgPSB0aGlzO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXJUaWxlID0gbG9hZGVkW3VpZF07XG4gICAgICAgICAgICB3b3JrZXJUaWxlLnNob3dDb2xsaXNpb25Cb3hlcyA9IHBhcmFtcy5zaG93Q29sbGlzaW9uQm94ZXM7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsb2FkQ2FsbGJhY2sgPSB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGlmIChyZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd29ya2VyVGlsZS5yZWxvYWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHZ0U291cmNlLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB2dFNvdXJjZS5hY3RvciwgcmVsb2FkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHdvcmtlclRpbGUuc3RhdHVzID09PSAncGFyc2luZycpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrID0gZG9uZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29ya2VyVGlsZS5zdGF0dXMgPT09ICdkb25lJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBubyB2ZWN0b3IgdGlsZSBkYXRhIG9uIHRoZSBpbml0aWFsIGxvYWQsIGRvbid0IHRyeSBhbmQgcmUtcGFyc2UgdGlsZVxuICAgICAgICAgICAgICAgIGlmICh3b3JrZXJUaWxlLnZlY3RvclRpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHRoaXMubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHRoaXMuYWN0b3IsIGRvbmUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjYWJvcnRUaWxlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhYm9ydFRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRpbmcgJiYgbG9hZGluZ1t1aWRdICYmIGxvYWRpbmdbdWlkXS5hYm9ydCkge1xuICAgICAgICAgICAgbG9hZGluZ1t1aWRdLmFib3J0KCk7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGluZ1t1aWRdO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI3JlbW92ZVRpbGV9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlbW92ZVRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkZWRbdWlkXTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBERU1EYXRhIGZyb20gJy4uL2RhdGEvZGVtX2RhdGEnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlckRFTVRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuL3dvcmtlcl9zb3VyY2UnO1xuY29uc3Qge0ltYWdlQml0bWFwfSA9IHdpbmRvdztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSB7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxvYWRlZDoge1tfOiBzdHJpbmddOiBERU1EYXRhfTtcbiAgICBvZmZzY3JlZW5DYW52YXM6IE9mZnNjcmVlbkNhbnZhcztcbiAgICBvZmZzY3JlZW5DYW52YXNDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyREVNVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHt1aWQsIGVuY29kaW5nLCByYXdJbWFnZURhdGF9ID0gcGFyYW1zO1xuICAgICAgICAvLyBNYWluIHRocmVhZCB3aWxsIHRyYW5zZmVyIEltYWdlQml0bWFwIGlmIG9mZnNjcmVlbiBkZWNvZGUgd2l0aCBPZmZzY3JlZW5DYW52YXMgaXMgc3VwcG9ydGVkLCBlbHNlIGl0IHdpbGwgdHJhbnNmZXIgYW4gYWxyZWFkeSBkZWNvZGVkIGltYWdlLlxuICAgICAgICBjb25zdCBpbWFnZVBpeGVscyA9IChJbWFnZUJpdG1hcCAmJiByYXdJbWFnZURhdGEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkgPyB0aGlzLmdldEltYWdlRGF0YShyYXdJbWFnZURhdGEpIDogcmF3SW1hZ2VEYXRhO1xuICAgICAgICBjb25zdCBkZW0gPSBuZXcgREVNRGF0YSh1aWQsIGltYWdlUGl4ZWxzLCBlbmNvZGluZyk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy5sb2FkZWQgfHwge307XG4gICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSBkZW07XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRlbSk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VEYXRhKGltZ0JpdG1hcDogSW1hZ2VCaXRtYXApOiBSR0JBSW1hZ2Uge1xuICAgICAgICAvLyBMYXppbHkgaW5pdGlhbGl6ZSBPZmZzY3JlZW5DYW52YXNcbiAgICAgICAgaWYgKCF0aGlzLm9mZnNjcmVlbkNhbnZhcyB8fCAhdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBEZW0gdGlsZXMgYXJlIHR5cGljYWxseSAyNTZ4MjU2XG4gICAgICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoaW1nQml0bWFwLndpZHRoLCBpbWdCaXRtYXAuaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dCA9IHRoaXMub2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCA9IGltZ0JpdG1hcC53aWR0aDtcbiAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0ID0gaW1nQml0bWFwLmhlaWdodDtcblxuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGltZ0JpdG1hcCwgMCwgMCwgaW1nQml0bWFwLndpZHRoLCBpbWdCaXRtYXAuaGVpZ2h0KTtcbiAgICAgICAgLy8gSW5zZXJ0IGFuIGFkZGl0aW9uYWwgMXB4IHBhZGRpbmcgYXJvdW5kIHRoZSBpbWFnZSB0byBhbGxvdyBiYWNrZmlsbGluZyBmb3IgbmVpZ2hib3JpbmcgZGF0YS5cbiAgICAgICAgY29uc3QgaW1nRGF0YSA9IHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsIC0xLCBpbWdCaXRtYXAud2lkdGggKyAyLCBpbWdCaXRtYXAuaGVpZ2h0ICsgMik7XG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5vZmZzY3JlZW5DYW52YXMud2lkdGgsIHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodCk7XG4gICAgICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogaW1nRGF0YS53aWR0aCwgaGVpZ2h0OiBpbWdEYXRhLmhlaWdodH0sIGltZ0RhdGEuZGF0YSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRlZFt1aWRdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlO1xuIiwibW9kdWxlLmV4cG9ydHMuUkFESVVTID0gNjM3ODEzNztcbm1vZHVsZS5leHBvcnRzLkZMQVRURU5JTkcgPSAxLzI5OC4yNTcyMjM1NjM7XG5tb2R1bGUuZXhwb3J0cy5QT0xBUl9SQURJVVMgPSA2MzU2NzUyLjMxNDI7XG4iLCJ2YXIgd2dzODQgPSByZXF1aXJlKCd3Z3M4NCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xubW9kdWxlLmV4cG9ydHMucmluZyA9IHJpbmdBcmVhO1xuXG5mdW5jdGlvbiBnZW9tZXRyeShfKSB7XG4gICAgdmFyIGFyZWEgPSAwLCBpO1xuICAgIHN3aXRjaCAoXy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25BcmVhKF8uY29vcmRpbmF0ZXMpO1xuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF8uY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcmVhICs9IHBvbHlnb25BcmVhKF8uY29vcmRpbmF0ZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZWE7XG4gICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgXy5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJlYSArPSBnZW9tZXRyeShfLmdlb21ldHJpZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZWE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwb2x5Z29uQXJlYShjb29yZHMpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgaWYgKGNvb3JkcyAmJiBjb29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhcmVhICs9IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1swXSkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJlYSAtPSBNYXRoLmFicyhyaW5nQXJlYShjb29yZHNbaV0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJlYTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIGFyZWEgb2YgdGhlIHBvbHlnb24gd2VyZSBpdCBwcm9qZWN0ZWQgb250b1xuICogICAgIHRoZSBlYXJ0aC4gIE5vdGUgdGhhdCB0aGlzIGFyZWEgd2lsbCBiZSBwb3NpdGl2ZSBpZiByaW5nIGlzIG9yaWVudGVkXG4gKiAgICAgY2xvY2t3aXNlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBuZWdhdGl2ZS5cbiAqXG4gKiBSZWZlcmVuY2U6XG4gKiBSb2JlcnQuIEcuIENoYW1iZXJsYWluIGFuZCBXaWxsaWFtIEguIER1cXVldHRlLCBcIlNvbWUgQWxnb3JpdGhtcyBmb3JcbiAqICAgICBQb2x5Z29ucyBvbiBhIFNwaGVyZVwiLCBKUEwgUHVibGljYXRpb24gMDctMDMsIEpldCBQcm9wdWxzaW9uXG4gKiAgICAgTGFib3JhdG9yeSwgUGFzYWRlbmEsIENBLCBKdW5lIDIwMDcgaHR0cDovL3Rycy1uZXcuanBsLm5hc2EuZ292L2RzcGFjZS9oYW5kbGUvMjAxNC80MDQwOVxuICpcbiAqIFJldHVybnM6XG4gKiB7ZmxvYXR9IFRoZSBhcHByb3hpbWF0ZSBzaWduZWQgZ2VvZGVzaWMgYXJlYSBvZiB0aGUgcG9seWdvbiBpbiBzcXVhcmVcbiAqICAgICBtZXRlcnMuXG4gKi9cblxuZnVuY3Rpb24gcmluZ0FyZWEoY29vcmRzKSB7XG4gICAgdmFyIHAxLCBwMiwgcDMsIGxvd2VySW5kZXgsIG1pZGRsZUluZGV4LCB1cHBlckluZGV4LCBpLFxuICAgIGFyZWEgPSAwLFxuICAgIGNvb3Jkc0xlbmd0aCA9IGNvb3Jkcy5sZW5ndGg7XG5cbiAgICBpZiAoY29vcmRzTGVuZ3RoID4gMikge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAyKSB7Ly8gaSA9IE4tMlxuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gY29vcmRzTGVuZ3RoIC0xO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAxKSB7Ly8gaSA9IE4tMVxuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB1cHBlckluZGV4ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGkgPSAwIHRvIE4tM1xuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gaSsxO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSBpKzI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwMSA9IGNvb3Jkc1tsb3dlckluZGV4XTtcbiAgICAgICAgICAgIHAyID0gY29vcmRzW21pZGRsZUluZGV4XTtcbiAgICAgICAgICAgIHAzID0gY29vcmRzW3VwcGVySW5kZXhdO1xuICAgICAgICAgICAgYXJlYSArPSAoIHJhZChwM1swXSkgLSByYWQocDFbMF0pICkgKiBNYXRoLnNpbiggcmFkKHAyWzFdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmVhID0gYXJlYSAqIHdnczg0LlJBRElVUyAqIHdnczg0LlJBRElVUyAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZWE7XG59XG5cbmZ1bmN0aW9uIHJhZChfKSB7XG4gICAgcmV0dXJuIF8gKiBNYXRoLlBJIC8gMTgwO1xufSIsInZhciBnZW9qc29uQXJlYSA9IHJlcXVpcmUoJ0BtYXBib3gvZ2VvanNvbi1hcmVhJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmV3aW5kO1xuXG5mdW5jdGlvbiByZXdpbmQoZ2osIG91dGVyKSB7XG4gICAgc3dpdGNoICgoZ2ogJiYgZ2oudHlwZSkgfHwgbnVsbCkge1xuICAgICAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgICAgICBnai5mZWF0dXJlcyA9IGdqLmZlYXR1cmVzLm1hcChjdXJyeU91dGVyKHJld2luZCwgb3V0ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIGdqLmdlb21ldHJpZXMgPSBnai5nZW9tZXRyaWVzLm1hcChjdXJyeU91dGVyKHJld2luZCwgb3V0ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiBnajtcbiAgICAgICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgICAgICBnai5nZW9tZXRyeSA9IHJld2luZChnai5nZW9tZXRyeSwgb3V0ZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGdqO1xuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0KGdqLCBvdXRlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZ2o7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjdXJyeU91dGVyKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oXykgeyByZXR1cm4gYShfLCBiKTsgfTtcbn1cblxuZnVuY3Rpb24gY29ycmVjdChfLCBvdXRlcikge1xuICAgIGlmIChfLnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBfLmNvb3JkaW5hdGVzID0gY29ycmVjdFJpbmdzKF8uY29vcmRpbmF0ZXMsIG91dGVyKTtcbiAgICB9IGVsc2UgaWYgKF8udHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgXy5jb29yZGluYXRlcyA9IF8uY29vcmRpbmF0ZXMubWFwKGN1cnJ5T3V0ZXIoY29ycmVjdFJpbmdzLCBvdXRlcikpO1xuICAgIH1cbiAgICByZXR1cm4gXztcbn1cblxuZnVuY3Rpb24gY29ycmVjdFJpbmdzKF8sIG91dGVyKSB7XG4gICAgb3V0ZXIgPSAhIW91dGVyO1xuICAgIF9bMF0gPSB3aW5kKF9bMF0sIG91dGVyKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IF8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgX1tpXSA9IHdpbmQoX1tpXSwgIW91dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIF87XG59XG5cbmZ1bmN0aW9uIHdpbmQoXywgZGlyKSB7XG4gICAgcmV0dXJuIGN3KF8pID09PSBkaXIgPyBfIDogXy5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGN3KF8pIHtcbiAgICByZXR1cm4gZ2VvanNvbkFyZWEucmluZyhfKSA+PSAwO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgbXZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuY29uc3QgdG9HZW9KU09OID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT047XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuLy8gVGhlIGZlYXR1cmUgdHlwZSB1c2VkIGJ5IGdlb2pzb24tdnQgYW5kIHN1cGVyY2x1c3Rlci4gU2hvdWxkIGJlIGV4dHJhY3RlZCB0b1xuLy8gZ2xvYmFsIHR5cGUgYW5kIHVzZWQgaW4gbW9kdWxlIGRlZmluaXRpb25zIGZvciB0aG9zZSB0d28gbW9kdWxlcy5cbnR5cGUgRmVhdHVyZSA9IHtcbiAgICB0eXBlOiAxLFxuICAgIGlkOiBtaXhlZCxcbiAgICB0YWdzOiB7W186IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59LFxuICAgIGdlb21ldHJ5OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbn0gfCB7XG4gICAgdHlwZTogMiB8IDMsXG4gICAgaWQ6IG1peGVkLFxuICAgIHRhZ3M6IHtbXzogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0sXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFtudW1iZXIsIG51bWJlcl0+Pixcbn1cblxuY2xhc3MgRmVhdHVyZVdyYXBwZXIgaW1wbGVtZW50cyBWZWN0b3JUaWxlRmVhdHVyZSB7XG4gICAgX2ZlYXR1cmU6IEZlYXR1cmU7XG5cbiAgICBleHRlbnQ6IG51bWJlcjtcbiAgICB0eXBlOiAxIHwgMiB8IDM7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwcm9wZXJ0aWVzOiB7W186IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59O1xuXG4gICAgY29uc3RydWN0b3IoZmVhdHVyZTogRmVhdHVyZSkge1xuICAgICAgICB0aGlzLl9mZWF0dXJlID0gZmVhdHVyZTtcblxuICAgICAgICB0aGlzLmV4dGVudCA9IEVYVEVOVDtcbiAgICAgICAgdGhpcy50eXBlID0gZmVhdHVyZS50eXBlO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3M7XG5cbiAgICAgICAgLy8gSWYgdGhlIGZlYXR1cmUgaGFzIGEgdG9wLWxldmVsIGBpZGAgcHJvcGVydHksIGNvcHkgaXQgb3ZlciwgYnV0IG9ubHlcbiAgICAgICAgLy8gaWYgaXQgY2FuIGJlIGNvZXJjZWQgdG8gYW4gaW50ZWdlciwgYmVjYXVzZSB0aGlzIHdyYXBwZXIgaXMgdXNlZCBmb3JcbiAgICAgICAgLy8gc2VyaWFsaXppbmcgZ2VvanNvbiBmZWF0dXJlIGRhdGEgaW50byB2ZWN0b3IgdGlsZSBQQkYgZGF0YSwgYW5kIHRoZVxuICAgICAgICAvLyB2ZWN0b3IgdGlsZSBzcGVjIG9ubHkgc3VwcG9ydHMgaW50ZWdlciB2YWx1ZXMgZm9yIGZlYXR1cmUgaWRzIC0tXG4gICAgICAgIC8vIGFsbG93aW5nIG5vbi1pbnRlZ2VyIHZhbHVlcyBoZXJlIHJlc3VsdHMgaW4gYSBub24tY29tcGxpYW50IFBCRlxuICAgICAgICAvLyB0aGF0IGNhdXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBpcyBwYXJzZWQgd2l0aCB2ZWN0b3ItdGlsZS1qc1xuICAgICAgICBpZiAoJ2lkJyBpbiBmZWF0dXJlICYmICFpc05hTihmZWF0dXJlLmlkKSkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHBhcnNlSW50KGZlYXR1cmUuaWQsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRHZW9tZXRyeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZlYXR1cmUudHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgdGhpcy5fZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnB1c2goW25ldyBQb2ludChwb2ludFswXSwgcG9pbnRbMV0pXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiByaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1JpbmcucHVzaChuZXcgUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnB1c2gobmV3UmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0dlb0pTT04oeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdG9HZW9KU09OLmNhbGwodGhpcywgeCwgeSwgeik7XG4gICAgfVxufVxuXG5jbGFzcyBHZW9KU09OV3JhcHBlciBpbXBsZW1lbnRzIFZlY3RvclRpbGUsIFZlY3RvclRpbGVMYXllciB7XG4gICAgbGF5ZXJzOiB7W186IHN0cmluZ106IFZlY3RvclRpbGVMYXllcn07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGV4dGVudDogbnVtYmVyO1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIF9mZWF0dXJlczogQXJyYXk8RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihmZWF0dXJlczogQXJyYXk8RmVhdHVyZT4pIHtcbiAgICAgICAgdGhpcy5sYXllcnMgPSB7J19nZW9qc29uVGlsZUxheWVyJzogdGhpc307XG4gICAgICAgIHRoaXMubmFtZSA9ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuZXh0ZW50ID0gRVhURU5UO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICB9XG5cbiAgICBmZWF0dXJlKGk6IG51bWJlcik6IFZlY3RvclRpbGVGZWF0dXJlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLl9mZWF0dXJlc1tpXSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9KU09OV3JhcHBlcjtcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdAbWFwYm94L3BvaW50LWdlb21ldHJ5JylcbnZhciBWZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJ0BtYXBib3gvdmVjdG9yLXRpbGUnKS5WZWN0b3JUaWxlRmVhdHVyZVxuXG5tb2R1bGUuZXhwb3J0cyA9IEdlb0pTT05XcmFwcGVyXG5cbi8vIGNvbmZvcm0gdG8gdmVjdG9ydGlsZSBhcGlcbmZ1bmN0aW9uIEdlb0pTT05XcmFwcGVyIChmZWF0dXJlcywgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHRoaXMuZmVhdHVyZXMgPSBmZWF0dXJlc1xuICB0aGlzLmxlbmd0aCA9IGZlYXR1cmVzLmxlbmd0aFxufVxuXG5HZW9KU09OV3JhcHBlci5wcm90b3R5cGUuZmVhdHVyZSA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiBuZXcgRmVhdHVyZVdyYXBwZXIodGhpcy5mZWF0dXJlc1tpXSwgdGhpcy5vcHRpb25zLmV4dGVudClcbn1cblxuZnVuY3Rpb24gRmVhdHVyZVdyYXBwZXIgKGZlYXR1cmUsIGV4dGVudCkge1xuICB0aGlzLmlkID0gdHlwZW9mIGZlYXR1cmUuaWQgPT09ICdudW1iZXInID8gZmVhdHVyZS5pZCA6IHVuZGVmaW5lZFxuICB0aGlzLnR5cGUgPSBmZWF0dXJlLnR5cGVcbiAgdGhpcy5yYXdHZW9tZXRyeSA9IGZlYXR1cmUudHlwZSA9PT0gMSA/IFtmZWF0dXJlLmdlb21ldHJ5XSA6IGZlYXR1cmUuZ2VvbWV0cnlcbiAgdGhpcy5wcm9wZXJ0aWVzID0gZmVhdHVyZS50YWdzXG4gIHRoaXMuZXh0ZW50ID0gZXh0ZW50IHx8IDQwOTZcbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLmxvYWRHZW9tZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJpbmdzID0gdGhpcy5yYXdHZW9tZXRyeVxuICB0aGlzLmdlb21ldHJ5ID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJpbmcgPSByaW5nc1tpXVxuICAgIHZhciBuZXdSaW5nID0gW11cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgIG5ld1JpbmcucHVzaChuZXcgUG9pbnQocmluZ1tqXVswXSwgcmluZ1tqXVsxXSkpXG4gICAgfVxuICAgIHRoaXMuZ2VvbWV0cnkucHVzaChuZXdSaW5nKVxuICB9XG4gIHJldHVybiB0aGlzLmdlb21ldHJ5XG59XG5cbkZlYXR1cmVXcmFwcGVyLnByb3RvdHlwZS5iYm94ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuZ2VvbWV0cnkpIHRoaXMubG9hZEdlb21ldHJ5KClcblxuICB2YXIgcmluZ3MgPSB0aGlzLmdlb21ldHJ5XG4gIHZhciB4MSA9IEluZmluaXR5XG4gIHZhciB4MiA9IC1JbmZpbml0eVxuICB2YXIgeTEgPSBJbmZpbml0eVxuICB2YXIgeTIgPSAtSW5maW5pdHlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJpbmcgPSByaW5nc1tpXVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgY29vcmQgPSByaW5nW2pdXG5cbiAgICAgIHgxID0gTWF0aC5taW4oeDEsIGNvb3JkLngpXG4gICAgICB4MiA9IE1hdGgubWF4KHgyLCBjb29yZC54KVxuICAgICAgeTEgPSBNYXRoLm1pbih5MSwgY29vcmQueSlcbiAgICAgIHkyID0gTWF0aC5tYXgoeTIsIGNvb3JkLnkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFt4MSwgeTEsIHgyLCB5Ml1cbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLnRvR2VvSlNPTiA9IFZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT05cbiIsInZhciBQYmYgPSByZXF1aXJlKCdwYmYnKVxudmFyIEdlb0pTT05XcmFwcGVyID0gcmVxdWlyZSgnLi9saWIvZ2VvanNvbl93cmFwcGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBmcm9tVmVjdG9yVGlsZUpzXG5tb2R1bGUuZXhwb3J0cy5mcm9tVmVjdG9yVGlsZUpzID0gZnJvbVZlY3RvclRpbGVKc1xubW9kdWxlLmV4cG9ydHMuZnJvbUdlb2pzb25WdCA9IGZyb21HZW9qc29uVnRcbm1vZHVsZS5leHBvcnRzLkdlb0pTT05XcmFwcGVyID0gR2VvSlNPTldyYXBwZXJcblxuLyoqXG4gKiBTZXJpYWxpemUgYSB2ZWN0b3ItdGlsZS1qcy1jcmVhdGVkIHRpbGUgdG8gcGJmXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRpbGVcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdW5jb21wcmVzc2VkLCBwYmYtc2VyaWFsaXplZCB0aWxlIGRhdGFcbiAqL1xuZnVuY3Rpb24gZnJvbVZlY3RvclRpbGVKcyAodGlsZSkge1xuICB2YXIgb3V0ID0gbmV3IFBiZigpXG4gIHdyaXRlVGlsZSh0aWxlLCBvdXQpXG4gIHJldHVybiBvdXQuZmluaXNoKClcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVkIGEgZ2VvanNvbi12dC1jcmVhdGVkIHRpbGUgdG8gcGJmLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBsYXllcnMgLSBBbiBvYmplY3QgbWFwcGluZyBsYXllciBuYW1lcyB0byBnZW9qc29uLXZ0LWNyZWF0ZWQgdmVjdG9yIHRpbGUgb2JqZWN0c1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIEFuIG9iamVjdCBzcGVjaWZ5aW5nIHRoZSB2ZWN0b3ItdGlsZSBzcGVjaWZpY2F0aW9uIHZlcnNpb24gYW5kIGV4dGVudCB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgYGxheWVyc2AuXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMudmVyc2lvbj0xXSAtIFZlcnNpb24gb2YgdmVjdG9yLXRpbGUgc3BlYyB1c2VkXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZXh0ZW50PTQwOTZdIC0gRXh0ZW50IG9mIHRoZSB2ZWN0b3IgdGlsZVxuICogQHJldHVybiB7QnVmZmVyfSB1bmNvbXByZXNzZWQsIHBiZi1zZXJpYWxpemVkIHRpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBmcm9tR2VvanNvblZ0IChsYXllcnMsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGwgPSB7fVxuICBmb3IgKHZhciBrIGluIGxheWVycykge1xuICAgIGxba10gPSBuZXcgR2VvSlNPTldyYXBwZXIobGF5ZXJzW2tdLmZlYXR1cmVzLCBvcHRpb25zKVxuICAgIGxba10ubmFtZSA9IGtcbiAgICBsW2tdLnZlcnNpb24gPSBvcHRpb25zLnZlcnNpb25cbiAgICBsW2tdLmV4dGVudCA9IG9wdGlvbnMuZXh0ZW50XG4gIH1cbiAgcmV0dXJuIGZyb21WZWN0b3JUaWxlSnMoe2xheWVyczogbH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlVGlsZSAodGlsZSwgcGJmKSB7XG4gIGZvciAodmFyIGtleSBpbiB0aWxlLmxheWVycykge1xuICAgIHBiZi53cml0ZU1lc3NhZ2UoMywgd3JpdGVMYXllciwgdGlsZS5sYXllcnNba2V5XSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUxheWVyIChsYXllciwgcGJmKSB7XG4gIHBiZi53cml0ZVZhcmludEZpZWxkKDE1LCBsYXllci52ZXJzaW9uIHx8IDEpXG4gIHBiZi53cml0ZVN0cmluZ0ZpZWxkKDEsIGxheWVyLm5hbWUgfHwgJycpXG4gIHBiZi53cml0ZVZhcmludEZpZWxkKDUsIGxheWVyLmV4dGVudCB8fCA0MDk2KVxuXG4gIHZhciBpXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGtleXM6IFtdLFxuICAgIHZhbHVlczogW10sXG4gICAga2V5Y2FjaGU6IHt9LFxuICAgIHZhbHVlY2FjaGU6IHt9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgbGF5ZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb250ZXh0LmZlYXR1cmUgPSBsYXllci5mZWF0dXJlKGkpXG4gICAgcGJmLndyaXRlTWVzc2FnZSgyLCB3cml0ZUZlYXR1cmUsIGNvbnRleHQpXG4gIH1cblxuICB2YXIga2V5cyA9IGNvbnRleHQua2V5c1xuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHBiZi53cml0ZVN0cmluZ0ZpZWxkKDMsIGtleXNbaV0pXG4gIH1cblxuICB2YXIgdmFsdWVzID0gY29udGV4dC52YWx1ZXNcbiAgZm9yIChpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHBiZi53cml0ZU1lc3NhZ2UoNCwgd3JpdGVWYWx1ZSwgdmFsdWVzW2ldKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmVhdHVyZSAoY29udGV4dCwgcGJmKSB7XG4gIHZhciBmZWF0dXJlID0gY29udGV4dC5mZWF0dXJlXG5cbiAgaWYgKGZlYXR1cmUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHBiZi53cml0ZVZhcmludEZpZWxkKDEsIGZlYXR1cmUuaWQpXG4gIH1cblxuICBwYmYud3JpdGVNZXNzYWdlKDIsIHdyaXRlUHJvcGVydGllcywgY29udGV4dClcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoMywgZmVhdHVyZS50eXBlKVxuICBwYmYud3JpdGVNZXNzYWdlKDQsIHdyaXRlR2VvbWV0cnksIGZlYXR1cmUpXG59XG5cbmZ1bmN0aW9uIHdyaXRlUHJvcGVydGllcyAoY29udGV4dCwgcGJmKSB7XG4gIHZhciBmZWF0dXJlID0gY29udGV4dC5mZWF0dXJlXG4gIHZhciBrZXlzID0gY29udGV4dC5rZXlzXG4gIHZhciB2YWx1ZXMgPSBjb250ZXh0LnZhbHVlc1xuICB2YXIga2V5Y2FjaGUgPSBjb250ZXh0LmtleWNhY2hlXG4gIHZhciB2YWx1ZWNhY2hlID0gY29udGV4dC52YWx1ZWNhY2hlXG5cbiAgZm9yICh2YXIga2V5IGluIGZlYXR1cmUucHJvcGVydGllcykge1xuICAgIHZhciBrZXlJbmRleCA9IGtleWNhY2hlW2tleV1cbiAgICBpZiAodHlwZW9mIGtleUluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAga2V5cy5wdXNoKGtleSlcbiAgICAgIGtleUluZGV4ID0ga2V5cy5sZW5ndGggLSAxXG4gICAgICBrZXljYWNoZVtrZXldID0ga2V5SW5kZXhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KGtleUluZGV4KVxuXG4gICAgdmFyIHZhbHVlID0gZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV1cbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnYm9vbGVhbicgJiYgdHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gICAgfVxuICAgIHZhciB2YWx1ZUtleSA9IHR5cGUgKyAnOicgKyB2YWx1ZVxuICAgIHZhciB2YWx1ZUluZGV4ID0gdmFsdWVjYWNoZVt2YWx1ZUtleV1cbiAgICBpZiAodHlwZW9mIHZhbHVlSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgICAgIHZhbHVlSW5kZXggPSB2YWx1ZXMubGVuZ3RoIC0gMVxuICAgICAgdmFsdWVjYWNoZVt2YWx1ZUtleV0gPSB2YWx1ZUluZGV4XG4gICAgfVxuICAgIHBiZi53cml0ZVZhcmludCh2YWx1ZUluZGV4KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1hbmQgKGNtZCwgbGVuZ3RoKSB7XG4gIHJldHVybiAobGVuZ3RoIDw8IDMpICsgKGNtZCAmIDB4Nylcbn1cblxuZnVuY3Rpb24gemlnemFnIChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgMSkgXiAobnVtID4+IDMxKVxufVxuXG5mdW5jdGlvbiB3cml0ZUdlb21ldHJ5IChmZWF0dXJlLCBwYmYpIHtcbiAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5sb2FkR2VvbWV0cnkoKVxuICB2YXIgdHlwZSA9IGZlYXR1cmUudHlwZVxuICB2YXIgeCA9IDBcbiAgdmFyIHkgPSAwXG4gIHZhciByaW5ncyA9IGdlb21ldHJ5Lmxlbmd0aFxuICBmb3IgKHZhciByID0gMDsgciA8IHJpbmdzOyByKyspIHtcbiAgICB2YXIgcmluZyA9IGdlb21ldHJ5W3JdXG4gICAgdmFyIGNvdW50ID0gMVxuICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICBjb3VudCA9IHJpbmcubGVuZ3RoXG4gICAgfVxuICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDEsIGNvdW50KSkgLy8gbW92ZXRvXG4gICAgLy8gZG8gbm90IHdyaXRlIHBvbHlnb24gY2xvc2luZyBwYXRoIGFzIGxpbmV0b1xuICAgIHZhciBsaW5lQ291bnQgPSB0eXBlID09PSAzID8gcmluZy5sZW5ndGggLSAxIDogcmluZy5sZW5ndGhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVDb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA9PT0gMSAmJiB0eXBlICE9PSAxKSB7XG4gICAgICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDIsIGxpbmVDb3VudCAtIDEpKSAvLyBsaW5ldG9cbiAgICAgIH1cbiAgICAgIHZhciBkeCA9IHJpbmdbaV0ueCAtIHhcbiAgICAgIHZhciBkeSA9IHJpbmdbaV0ueSAtIHlcbiAgICAgIHBiZi53cml0ZVZhcmludCh6aWd6YWcoZHgpKVxuICAgICAgcGJmLndyaXRlVmFyaW50KHppZ3phZyhkeSkpXG4gICAgICB4ICs9IGR4XG4gICAgICB5ICs9IGR5XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAzKSB7XG4gICAgICBwYmYud3JpdGVWYXJpbnQoY29tbWFuZCg3LCAxKSkgLy8gY2xvc2VwYXRoXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFsdWUgKHZhbHVlLCBwYmYpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWVcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGJmLndyaXRlU3RyaW5nRmllbGQoMSwgdmFsdWUpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcGJmLndyaXRlQm9vbGVhbkZpZWxkKDcsIHZhbHVlKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHZhbHVlICUgMSAhPT0gMCkge1xuICAgICAgcGJmLndyaXRlRG91YmxlRmllbGQoMywgdmFsdWUpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHBiZi53cml0ZVNWYXJpbnRGaWVsZCg2LCB2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcGJmLndyaXRlVmFyaW50RmllbGQoNSwgdmFsdWUpXG4gICAgfVxuICB9XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRLRChpZHMsIGNvb3Jkcywgbm9kZVNpemUsIGxlZnQsIHJpZ2h0LCBkZXB0aCkge1xuICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHJldHVybjtcblxuICAgIGNvbnN0IG0gPSAobGVmdCArIHJpZ2h0KSA+PiAxO1xuXG4gICAgc2VsZWN0KGlkcywgY29vcmRzLCBtLCBsZWZ0LCByaWdodCwgZGVwdGggJSAyKTtcblxuICAgIHNvcnRLRChpZHMsIGNvb3Jkcywgbm9kZVNpemUsIGxlZnQsIG0gLSAxLCBkZXB0aCArIDEpO1xuICAgIHNvcnRLRChpZHMsIGNvb3Jkcywgbm9kZVNpemUsIG0gKyAxLCByaWdodCwgZGVwdGggKyAxKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0KGlkcywgY29vcmRzLCBrLCBsZWZ0LCByaWdodCwgaW5jKSB7XG5cbiAgICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSByaWdodCAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgY29uc3QgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBNYXRoLmxvZyhuKTtcbiAgICAgICAgICAgIGNvbnN0IHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xuICAgICAgICAgICAgY29uc3Qgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICAgICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICAgICAgICBzZWxlY3QoaWRzLCBjb29yZHMsIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBpbmMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdCA9IGNvb3Jkc1syICogayArIGluY107XG4gICAgICAgIGxldCBpID0gbGVmdDtcbiAgICAgICAgbGV0IGogPSByaWdodDtcblxuICAgICAgICBzd2FwSXRlbShpZHMsIGNvb3JkcywgbGVmdCwgayk7XG4gICAgICAgIGlmIChjb29yZHNbMiAqIHJpZ2h0ICsgaW5jXSA+IHQpIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCByaWdodCk7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBqKSB7XG4gICAgICAgICAgICBzd2FwSXRlbShpZHMsIGNvb3JkcywgaSwgaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB3aGlsZSAoY29vcmRzWzIgKiBpICsgaW5jXSA8IHQpIGkrKztcbiAgICAgICAgICAgIHdoaWxlIChjb29yZHNbMiAqIGogKyBpbmNdID4gdCkgai0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvb3Jkc1syICogbGVmdCArIGluY10gPT09IHQpIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCBqKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgICBzd2FwSXRlbShpZHMsIGNvb3JkcywgaiwgcmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPD0gaykgbGVmdCA9IGogKyAxO1xuICAgICAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGksIGopIHtcbiAgICBzd2FwKGlkcywgaSwgaik7XG4gICAgc3dhcChjb29yZHMsIDIgKiBpLCAyICogaik7XG4gICAgc3dhcChjb29yZHMsIDIgKiBpICsgMSwgMiAqIGogKyAxKTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICBjb25zdCB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2UoaWRzLCBjb29yZHMsIG1pblgsIG1pblksIG1heFgsIG1heFksIG5vZGVTaXplKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbMCwgaWRzLmxlbmd0aCAtIDEsIDBdO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCB4LCB5O1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBheGlzID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgeCA9IGNvb3Jkc1syICogaV07XG4gICAgICAgICAgICAgICAgeSA9IGNvb3Jkc1syICogaSArIDFdO1xuICAgICAgICAgICAgICAgIGlmICh4ID49IG1pblggJiYgeCA8PSBtYXhYICYmIHkgPj0gbWluWSAmJiB5IDw9IG1heFkpIHJlc3VsdC5wdXNoKGlkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XG5cbiAgICAgICAgeCA9IGNvb3Jkc1syICogbV07XG4gICAgICAgIHkgPSBjb29yZHNbMiAqIG0gKyAxXTtcblxuICAgICAgICBpZiAoeCA+PSBtaW5YICYmIHggPD0gbWF4WCAmJiB5ID49IG1pblkgJiYgeSA8PSBtYXhZKSByZXN1bHQucHVzaChpZHNbbV0pO1xuXG4gICAgICAgIGNvbnN0IG5leHRBeGlzID0gKGF4aXMgKyAxKSAlIDI7XG5cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBtaW5YIDw9IHggOiBtaW5ZIDw9IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobGVmdCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gLSAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dEF4aXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChheGlzID09PSAwID8gbWF4WCA+PSB4IDogbWF4WSA+PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gKyAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gocmlnaHQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3aXRoaW4oaWRzLCBjb29yZHMsIHF4LCBxeSwgciwgbm9kZVNpemUpIHtcbiAgICBjb25zdCBzdGFjayA9IFswLCBpZHMubGVuZ3RoIC0gMSwgMF07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgcjIgPSByICogcjtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXhpcyA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBjb25zdCByaWdodCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBjb25zdCBsZWZ0ID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChzcURpc3QoY29vcmRzWzIgKiBpXSwgY29vcmRzWzIgKiBpICsgMV0sIHF4LCBxeSkgPD0gcjIpIHJlc3VsdC5wdXNoKGlkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XG5cbiAgICAgICAgY29uc3QgeCA9IGNvb3Jkc1syICogbV07XG4gICAgICAgIGNvbnN0IHkgPSBjb29yZHNbMiAqIG0gKyAxXTtcblxuICAgICAgICBpZiAoc3FEaXN0KHgsIHksIHF4LCBxeSkgPD0gcjIpIHJlc3VsdC5wdXNoKGlkc1ttXSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEF4aXMgPSAoYXhpcyArIDEpICUgMjtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IHF4IC0gciA8PSB4IDogcXkgLSByIDw9IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobGVmdCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gLSAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dEF4aXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChheGlzID09PSAwID8gcXggKyByID49IHggOiBxeSArIHIgPj0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChtICsgMSk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHJpZ2h0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dEF4aXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc3FEaXN0KGF4LCBheSwgYngsIGJ5KSB7XG4gICAgY29uc3QgZHggPSBheCAtIGJ4O1xuICAgIGNvbnN0IGR5ID0gYXkgLSBieTtcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iLCJcbmltcG9ydCBzb3J0IGZyb20gJy4vc29ydCc7XG5pbXBvcnQgcmFuZ2UgZnJvbSAnLi9yYW5nZSc7XG5pbXBvcnQgd2l0aGluIGZyb20gJy4vd2l0aGluJztcblxuY29uc3QgZGVmYXVsdEdldFggPSBwID0+IHBbMF07XG5jb25zdCBkZWZhdWx0R2V0WSA9IHAgPT4gcFsxXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgS0RCdXNoIHtcbiAgICBjb25zdHJ1Y3Rvcihwb2ludHMsIGdldFggPSBkZWZhdWx0R2V0WCwgZ2V0WSA9IGRlZmF1bHRHZXRZLCBub2RlU2l6ZSA9IDY0LCBBcnJheVR5cGUgPSBGbG9hdDY0QXJyYXkpIHtcbiAgICAgICAgdGhpcy5ub2RlU2l6ZSA9IG5vZGVTaXplO1xuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgICAgICBjb25zdCBJbmRleEFycmF5VHlwZSA9IHBvaW50cy5sZW5ndGggPCA2NTUzNiA/IFVpbnQxNkFycmF5IDogVWludDMyQXJyYXk7XG5cbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5pZHMgPSBuZXcgSW5kZXhBcnJheVR5cGUocG9pbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzID0gbmV3IEFycmF5VHlwZShwb2ludHMubGVuZ3RoICogMik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlkc1tpXSA9IGk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGldID0gZ2V0WChwb2ludHNbaV0pO1xuICAgICAgICAgICAgY29vcmRzWzIgKiBpICsgMV0gPSBnZXRZKHBvaW50c1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBzb3J0KGlkcywgY29vcmRzLCBub2RlU2l6ZSwgMCwgaWRzLmxlbmd0aCAtIDEsIDApO1xuICAgIH1cblxuICAgIHJhbmdlKG1pblgsIG1pblksIG1heFgsIG1heFkpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKHRoaXMuaWRzLCB0aGlzLmNvb3JkcywgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgdGhpcy5ub2RlU2l6ZSk7XG4gICAgfVxuXG4gICAgd2l0aGluKHgsIHksIHIpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhpbih0aGlzLmlkcywgdGhpcy5jb29yZHMsIHgsIHksIHIsIHRoaXMubm9kZVNpemUpO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IEtEQnVzaCBmcm9tICdrZGJ1c2gnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBtaW5ab29tOiAwLCAgIC8vIG1pbiB6b29tIHRvIGdlbmVyYXRlIGNsdXN0ZXJzIG9uXG4gICAgbWF4Wm9vbTogMTYsICAvLyBtYXggem9vbSBsZXZlbCB0byBjbHVzdGVyIHRoZSBwb2ludHMgb25cbiAgICByYWRpdXM6IDQwLCAgIC8vIGNsdXN0ZXIgcmFkaXVzIGluIHBpeGVsc1xuICAgIGV4dGVudDogNTEyLCAgLy8gdGlsZSBleHRlbnQgKHJhZGl1cyBpcyBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIGl0KVxuICAgIG5vZGVTaXplOiA2NCwgLy8gc2l6ZSBvZiB0aGUgS0QtdHJlZSBsZWFmIG5vZGUsIGFmZmVjdHMgcGVyZm9ybWFuY2VcbiAgICBsb2c6IGZhbHNlLCAgIC8vIHdoZXRoZXIgdG8gbG9nIHRpbWluZyBpbmZvXG5cbiAgICAvLyB3aGV0aGVyIHRvIGdlbmVyYXRlIG51bWVyaWMgaWRzIGZvciBpbnB1dCBmZWF0dXJlcyB0aGF0IGRvbid0IGhhdmUgdGhlbVxuICAgIGdlbmVyYXRlSWQ6IGZhbHNlLFxuXG4gICAgLy8gYSByZWR1Y2UgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIGN1c3RvbSBjbHVzdGVyIHByb3BlcnRpZXNcbiAgICByZWR1Y2U6IG51bGwsIC8vIChhY2N1bXVsYXRlZCwgcHJvcHMpID0+IHsgYWNjdW11bGF0ZWQuc3VtICs9IHByb3BzLnN1bTsgfVxuXG4gICAgLy8gcHJvcGVydGllcyB0byB1c2UgZm9yIGluZGl2aWR1YWwgcG9pbnRzIHdoZW4gcnVubmluZyB0aGUgcmVkdWNlclxuICAgIG1hcDogcHJvcHMgPT4gcHJvcHMgLy8gcHJvcHMgPT4gKHtzdW06IHByb3BzLm15X3ZhbHVlfSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cGVyY2x1c3RlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyZWVzID0gbmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tICsgMSk7XG4gICAgfVxuXG4gICAgbG9hZChwb2ludHMpIHtcbiAgICAgICAgY29uc3Qge2xvZywgbWluWm9vbSwgbWF4Wm9vbSwgbm9kZVNpemV9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZSgndG90YWwgdGltZScpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBgcHJlcGFyZSAkeyAgcG9pbnRzLmxlbmd0aCAgfSBwb2ludHNgO1xuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWUodGltZXJJZCk7XG5cbiAgICAgICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBjbHVzdGVyIG9iamVjdCBmb3IgZWFjaCBwb2ludCBhbmQgaW5kZXggaW5wdXQgcG9pbnRzIGludG8gYSBLRC10cmVlXG4gICAgICAgIGxldCBjbHVzdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFwb2ludHNbaV0uZ2VvbWV0cnkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2x1c3RlcnMucHVzaChjcmVhdGVQb2ludENsdXN0ZXIocG9pbnRzW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmVlc1ttYXhab29tICsgMV0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcblxuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWVFbmQodGltZXJJZCk7XG5cbiAgICAgICAgLy8gY2x1c3RlciBwb2ludHMgb24gbWF4IHpvb20sIHRoZW4gY2x1c3RlciB0aGUgcmVzdWx0cyBvbiBwcmV2aW91cyB6b29tLCBldGMuO1xuICAgICAgICAvLyByZXN1bHRzIGluIGEgY2x1c3RlciBoaWVyYXJjaHkgYWNyb3NzIHpvb20gbGV2ZWxzXG4gICAgICAgIGZvciAobGV0IHogPSBtYXhab29tOyB6ID49IG1pblpvb207IHotLSkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gK0RhdGUubm93KCk7XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBzZXQgb2YgY2x1c3RlcnMgZm9yIHRoZSB6b29tIGFuZCBpbmRleCB0aGVtIHdpdGggYSBLRC10cmVlXG4gICAgICAgICAgICBjbHVzdGVycyA9IHRoaXMuX2NsdXN0ZXIoY2x1c3RlcnMsIHopO1xuICAgICAgICAgICAgdGhpcy50cmVlc1t6XSA9IG5ldyBLREJ1c2goY2x1c3RlcnMsIGdldFgsIGdldFksIG5vZGVTaXplLCBGbG9hdDMyQXJyYXkpO1xuXG4gICAgICAgICAgICBpZiAobG9nKSBjb25zb2xlLmxvZygneiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zJywgeiwgY2x1c3RlcnMubGVuZ3RoLCArRGF0ZS5ub3coKSAtIG5vdyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWVFbmQoJ3RvdGFsIHRpbWUnKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVycyhiYm94LCB6b29tKSB7XG4gICAgICAgIGxldCBtaW5MbmcgPSAoKGJib3hbMF0gKyAxODApICUgMzYwICsgMzYwKSAlIDM2MCAtIDE4MDtcbiAgICAgICAgY29uc3QgbWluTGF0ID0gTWF0aC5tYXgoLTkwLCBNYXRoLm1pbig5MCwgYmJveFsxXSkpO1xuICAgICAgICBsZXQgbWF4TG5nID0gYmJveFsyXSA9PT0gMTgwID8gMTgwIDogKChiYm94WzJdICsgMTgwKSAlIDM2MCArIDM2MCkgJSAzNjAgLSAxODA7XG4gICAgICAgIGNvbnN0IG1heExhdCA9IE1hdGgubWF4KC05MCwgTWF0aC5taW4oOTAsIGJib3hbM10pKTtcblxuICAgICAgICBpZiAoYmJveFsyXSAtIGJib3hbMF0gPj0gMzYwKSB7XG4gICAgICAgICAgICBtaW5MbmcgPSAtMTgwO1xuICAgICAgICAgICAgbWF4TG5nID0gMTgwO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbkxuZyA+IG1heExuZykge1xuICAgICAgICAgICAgY29uc3QgZWFzdGVybkhlbSA9IHRoaXMuZ2V0Q2x1c3RlcnMoW21pbkxuZywgbWluTGF0LCAxODAsIG1heExhdF0sIHpvb20pO1xuICAgICAgICAgICAgY29uc3Qgd2VzdGVybkhlbSA9IHRoaXMuZ2V0Q2x1c3RlcnMoWy0xODAsIG1pbkxhdCwgbWF4TG5nLCBtYXhMYXRdLCB6b29tKTtcbiAgICAgICAgICAgIHJldHVybiBlYXN0ZXJuSGVtLmNvbmNhdCh3ZXN0ZXJuSGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh6b29tKV07XG4gICAgICAgIGNvbnN0IGlkcyA9IHRyZWUucmFuZ2UobG5nWChtaW5MbmcpLCBsYXRZKG1heExhdCksIGxuZ1gobWF4TG5nKSwgbGF0WShtaW5MYXQpKTtcbiAgICAgICAgY29uc3QgY2x1c3RlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0cmVlLnBvaW50c1tpZF07XG4gICAgICAgICAgICBjbHVzdGVycy5wdXNoKGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlckpTT04oYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJzO1xuICAgIH1cblxuICAgIGdldENoaWxkcmVuKGNsdXN0ZXJJZCkge1xuICAgICAgICBjb25zdCBvcmlnaW5JZCA9IHRoaXMuX2dldE9yaWdpbklkKGNsdXN0ZXJJZCk7XG4gICAgICAgIGNvbnN0IG9yaWdpblpvb20gPSB0aGlzLl9nZXRPcmlnaW5ab29tKGNsdXN0ZXJJZCk7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ05vIGNsdXN0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLic7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVzW29yaWdpblpvb21dO1xuICAgICAgICBpZiAoIWluZGV4KSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGluZGV4LnBvaW50c1tvcmlnaW5JZF07XG4gICAgICAgIGlmICghb3JpZ2luKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuXG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLm9wdGlvbnMucmFkaXVzIC8gKHRoaXMub3B0aW9ucy5leHRlbnQgKiBNYXRoLnBvdygyLCBvcmlnaW5ab29tIC0gMSkpO1xuICAgICAgICBjb25zdCBpZHMgPSBpbmRleC53aXRoaW4ob3JpZ2luLngsIG9yaWdpbi55LCByKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBpbmRleC5wb2ludHNbaWRdO1xuICAgICAgICAgICAgaWYgKGMucGFyZW50SWQgPT09IGNsdXN0ZXJJZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYy5udW1Qb2ludHMgPyBnZXRDbHVzdGVySlNPTihjKSA6IHRoaXMucG9pbnRzW2MuaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cblxuICAgIGdldExlYXZlcyhjbHVzdGVySWQsIGxpbWl0LCBvZmZzZXQpIHtcbiAgICAgICAgbGltaXQgPSBsaW1pdCB8fCAxMDtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgICAgY29uc3QgbGVhdmVzID0gW107XG4gICAgICAgIHRoaXMuX2FwcGVuZExlYXZlcyhsZWF2ZXMsIGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIGxlYXZlcztcbiAgICB9XG5cbiAgICBnZXRUaWxlKHosIHgsIHkpIHtcbiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHopXTtcbiAgICAgICAgY29uc3QgejIgPSBNYXRoLnBvdygyLCB6KTtcbiAgICAgICAgY29uc3Qge2V4dGVudCwgcmFkaXVzfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgcCA9IHJhZGl1cyAvIGV4dGVudDtcbiAgICAgICAgY29uc3QgdG9wID0gKHkgLSBwKSAvIHoyO1xuICAgICAgICBjb25zdCBib3R0b20gPSAoeSArIDEgKyBwKSAvIHoyO1xuXG4gICAgICAgIGNvbnN0IHRpbGUgPSB7XG4gICAgICAgICAgICBmZWF0dXJlczogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICB0cmVlLnJhbmdlKCh4IC0gcCkgLyB6MiwgdG9wLCAoeCArIDEgKyBwKSAvIHoyLCBib3R0b20pLFxuICAgICAgICAgICAgdHJlZS5wb2ludHMsIHgsIHksIHoyLCB0aWxlKTtcblxuICAgICAgICBpZiAoeCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHRyZWUucmFuZ2UoMSAtIHAgLyB6MiwgdG9wLCAxLCBib3R0b20pLFxuICAgICAgICAgICAgICAgIHRyZWUucG9pbnRzLCB6MiwgeSwgejIsIHRpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ID09PSB6MiAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICB0cmVlLnJhbmdlKDAsIHRvcCwgcCAvIHoyLCBib3R0b20pLFxuICAgICAgICAgICAgICAgIHRyZWUucG9pbnRzLCAtMSwgeSwgejIsIHRpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpbGUuZmVhdHVyZXMubGVuZ3RoID8gdGlsZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20oY2x1c3RlcklkKSB7XG4gICAgICAgIGxldCBleHBhbnNpb25ab29tID0gdGhpcy5fZ2V0T3JpZ2luWm9vbShjbHVzdGVySWQpIC0gMTtcbiAgICAgICAgd2hpbGUgKGV4cGFuc2lvblpvb20gPD0gdGhpcy5vcHRpb25zLm1heFpvb20pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihjbHVzdGVySWQpO1xuICAgICAgICAgICAgZXhwYW5zaW9uWm9vbSsrO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMSkgYnJlYWs7XG4gICAgICAgICAgICBjbHVzdGVySWQgPSBjaGlsZHJlblswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cGFuc2lvblpvb207XG4gICAgfVxuXG4gICAgX2FwcGVuZExlYXZlcyhyZXN1bHQsIGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCwgc2tpcHBlZCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGNoaWxkLnByb3BlcnRpZXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQgKyBwcm9wcy5wb2ludF9jb3VudCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgd2hvbGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IHByb3BzLnBvaW50X2NvdW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVudGVyIHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQgPSB0aGlzLl9hcHBlbmRMZWF2ZXMocmVzdWx0LCBwcm9wcy5jbHVzdGVyX2lkLCBsaW1pdCwgb2Zmc2V0LCBza2lwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhpdCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcHBlZCA8IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgYSBzaW5nbGUgcG9pbnRcbiAgICAgICAgICAgICAgICBza2lwcGVkKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBhIHNpbmdsZSBwb2ludFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSBsaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICB9XG5cbiAgICBfYWRkVGlsZUZlYXR1cmVzKGlkcywgcG9pbnRzLCB4LCB5LCB6MiwgdGlsZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgaXNDbHVzdGVyID0gYy5udW1Qb2ludHM7XG4gICAgICAgICAgICBjb25zdCBmID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IDEsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IFtbXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCAqIChjLnggKiB6MiAtIHgpKSxcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50ICogKGMueSAqIHoyIC0geSkpXG4gICAgICAgICAgICAgICAgXV0sXG4gICAgICAgICAgICAgICAgdGFnczogaXNDbHVzdGVyID8gZ2V0Q2x1c3RlclByb3BlcnRpZXMoYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBhc3NpZ24gaWRcbiAgICAgICAgICAgIGxldCBpZDtcbiAgICAgICAgICAgIGlmIChpc0NsdXN0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGMuaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZW5lcmF0ZUlkKSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uYWxseSBnZW5lcmF0ZSBpZFxuICAgICAgICAgICAgICAgIGlkID0gYy5pbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb2ludHNbYy5pbmRleF0uaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBrZWVwIGlkIGlmIGFscmVhZHkgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBpZCA9IHRoaXMucG9pbnRzW2MuaW5kZXhdLmlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkgZi5pZCA9IGlkO1xuXG4gICAgICAgICAgICB0aWxlLmZlYXR1cmVzLnB1c2goZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfbGltaXRab29tKHopIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLCBNYXRoLm1pbih6LCB0aGlzLm9wdGlvbnMubWF4Wm9vbSArIDEpKTtcbiAgICB9XG5cbiAgICBfY2x1c3Rlcihwb2ludHMsIHpvb20pIHtcbiAgICAgICAgY29uc3QgY2x1c3RlcnMgPSBbXTtcbiAgICAgICAgY29uc3Qge3JhZGl1cywgZXh0ZW50LCByZWR1Y2V9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCByID0gcmFkaXVzIC8gKGV4dGVudCAqIE1hdGgucG93KDIsIHpvb20pKTtcblxuICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBwb2ludFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIC8vIGlmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGUgcG9pbnQgYXQgdGhpcyB6b29tIGxldmVsLCBza2lwIGl0XG4gICAgICAgICAgICBpZiAocC56b29tIDw9IHpvb20pIGNvbnRpbnVlO1xuICAgICAgICAgICAgcC56b29tID0gem9vbTtcblxuICAgICAgICAgICAgLy8gZmluZCBhbGwgbmVhcmJ5IHBvaW50c1xuICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZXNbem9vbSArIDFdO1xuICAgICAgICAgICAgY29uc3QgbmVpZ2hib3JJZHMgPSB0cmVlLndpdGhpbihwLngsIHAueSwgcik7XG5cbiAgICAgICAgICAgIGxldCBudW1Qb2ludHMgPSBwLm51bVBvaW50cyB8fCAxO1xuICAgICAgICAgICAgbGV0IHd4ID0gcC54ICogbnVtUG9pbnRzO1xuICAgICAgICAgICAgbGV0IHd5ID0gcC55ICogbnVtUG9pbnRzO1xuXG4gICAgICAgICAgICBsZXQgY2x1c3RlclByb3BlcnRpZXMgPSByZWR1Y2UgJiYgbnVtUG9pbnRzID4gMSA/IHRoaXMuX21hcChwLCB0cnVlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIC8vIGVuY29kZSBib3RoIHpvb20gYW5kIHBvaW50IGluZGV4IG9uIHdoaWNoIHRoZSBjbHVzdGVyIG9yaWdpbmF0ZWQgLS0gb2Zmc2V0IGJ5IHRvdGFsIGxlbmd0aCBvZiBmZWF0dXJlc1xuICAgICAgICAgICAgY29uc3QgaWQgPSAoaSA8PCA1KSArICh6b29tICsgMSkgKyB0aGlzLnBvaW50cy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmVpZ2hib3JJZCBvZiBuZWlnaGJvcklkcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB0cmVlLnBvaW50c1tuZWlnaGJvcklkXTtcbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IG5laWdoYm9ycyB0aGF0IGFyZSBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgICAgICAgICAgIGlmIChiLnpvb20gPD0gem9vbSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgYi56b29tID0gem9vbTsgLy8gc2F2ZSB0aGUgem9vbSAoc28gaXQgZG9lc24ndCBnZXQgcHJvY2Vzc2VkIHR3aWNlKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtUG9pbnRzMiA9IGIubnVtUG9pbnRzIHx8IDE7XG4gICAgICAgICAgICAgICAgd3ggKz0gYi54ICogbnVtUG9pbnRzMjsgLy8gYWNjdW11bGF0ZSBjb29yZGluYXRlcyBmb3IgY2FsY3VsYXRpbmcgd2VpZ2h0ZWQgY2VudGVyXG4gICAgICAgICAgICAgICAgd3kgKz0gYi55ICogbnVtUG9pbnRzMjtcblxuICAgICAgICAgICAgICAgIG51bVBvaW50cyArPSBudW1Qb2ludHMyO1xuICAgICAgICAgICAgICAgIGIucGFyZW50SWQgPSBpZDtcblxuICAgICAgICAgICAgICAgIGlmIChyZWR1Y2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbHVzdGVyUHJvcGVydGllcykgY2x1c3RlclByb3BlcnRpZXMgPSB0aGlzLl9tYXAocCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZHVjZShjbHVzdGVyUHJvcGVydGllcywgdGhpcy5fbWFwKGIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChudW1Qb2ludHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKHApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnBhcmVudElkID0gaWQ7XG4gICAgICAgICAgICAgICAgY2x1c3RlcnMucHVzaChjcmVhdGVDbHVzdGVyKHd4IC8gbnVtUG9pbnRzLCB3eSAvIG51bVBvaW50cywgaWQsIG51bVBvaW50cywgY2x1c3RlclByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbHVzdGVycztcbiAgICB9XG5cbiAgICAvLyBnZXQgaW5kZXggb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggdGhlIGNsdXN0ZXIgb3JpZ2luYXRlZFxuICAgIF9nZXRPcmlnaW5JZChjbHVzdGVySWQpIHtcbiAgICAgICAgcmV0dXJuIChjbHVzdGVySWQgLSB0aGlzLnBvaW50cy5sZW5ndGgpID4+IDU7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHpvb20gb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggdGhlIGNsdXN0ZXIgb3JpZ2luYXRlZFxuICAgIF9nZXRPcmlnaW5ab29tKGNsdXN0ZXJJZCkge1xuICAgICAgICByZXR1cm4gKGNsdXN0ZXJJZCAtIHRoaXMucG9pbnRzLmxlbmd0aCkgJSAzMjtcbiAgICB9XG5cbiAgICBfbWFwKHBvaW50LCBjbG9uZSkge1xuICAgICAgICBpZiAocG9pbnQubnVtUG9pbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmUgPyBleHRlbmQoe30sIHBvaW50LnByb3BlcnRpZXMpIDogcG9pbnQucHJvcGVydGllcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMucG9pbnRzW3BvaW50LmluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm9wdGlvbnMubWFwKG9yaWdpbmFsKTtcbiAgICAgICAgcmV0dXJuIGNsb25lICYmIHJlc3VsdCA9PT0gb3JpZ2luYWwgPyBleHRlbmQoe30sIHJlc3VsdCkgOiByZXN1bHQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDbHVzdGVyKHgsIHksIGlkLCBudW1Qb2ludHMsIHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4LCAvLyB3ZWlnaHRlZCBjbHVzdGVyIGNlbnRlclxuICAgICAgICB5LFxuICAgICAgICB6b29tOiBJbmZpbml0eSwgLy8gdGhlIGxhc3Qgem9vbSB0aGUgY2x1c3RlciB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICAgIGlkLCAvLyBlbmNvZGVzIGluZGV4IG9mIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgY2x1c3RlciBhbmQgaXRzIHpvb20gbGV2ZWxcbiAgICAgICAgcGFyZW50SWQ6IC0xLCAvLyBwYXJlbnQgY2x1c3RlciBpZFxuICAgICAgICBudW1Qb2ludHMsXG4gICAgICAgIHByb3BlcnRpZXNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQb2ludENsdXN0ZXIocCwgaWQpIHtcbiAgICBjb25zdCBbeCwgeV0gPSBwLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IGxuZ1goeCksIC8vIHByb2plY3RlZCBwb2ludCBjb29yZGluYXRlc1xuICAgICAgICB5OiBsYXRZKHkpLFxuICAgICAgICB6b29tOiBJbmZpbml0eSwgLy8gdGhlIGxhc3Qgem9vbSB0aGUgcG9pbnQgd2FzIHByb2Nlc3NlZCBhdFxuICAgICAgICBpbmRleDogaWQsIC8vIGluZGV4IG9mIHRoZSBzb3VyY2UgZmVhdHVyZSBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgYXJyYXksXG4gICAgICAgIHBhcmVudElkOiAtMSAvLyBwYXJlbnQgY2x1c3RlciBpZFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldENsdXN0ZXJKU09OKGNsdXN0ZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgIGlkOiBjbHVzdGVyLmlkLFxuICAgICAgICBwcm9wZXJ0aWVzOiBnZXRDbHVzdGVyUHJvcGVydGllcyhjbHVzdGVyKSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgICBjb29yZGluYXRlczogW3hMbmcoY2x1c3Rlci54KSwgeUxhdChjbHVzdGVyLnkpXVxuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2x1c3RlclByb3BlcnRpZXMoY2x1c3Rlcikge1xuICAgIGNvbnN0IGNvdW50ID0gY2x1c3Rlci5udW1Qb2ludHM7XG4gICAgY29uc3QgYWJicmV2ID1cbiAgICAgICAgY291bnQgPj0gMTAwMDAgPyBgJHtNYXRoLnJvdW5kKGNvdW50IC8gMTAwMCkgIH1rYCA6XG4gICAgICAgIGNvdW50ID49IDEwMDAgPyBgJHtNYXRoLnJvdW5kKGNvdW50IC8gMTAwKSAvIDEwICB9a2AgOiBjb3VudDtcbiAgICByZXR1cm4gZXh0ZW5kKGV4dGVuZCh7fSwgY2x1c3Rlci5wcm9wZXJ0aWVzKSwge1xuICAgICAgICBjbHVzdGVyOiB0cnVlLFxuICAgICAgICBjbHVzdGVyX2lkOiBjbHVzdGVyLmlkLFxuICAgICAgICBwb2ludF9jb3VudDogY291bnQsXG4gICAgICAgIHBvaW50X2NvdW50X2FiYnJldmlhdGVkOiBhYmJyZXZcbiAgICB9KTtcbn1cblxuLy8gbG9uZ2l0dWRlL2xhdGl0dWRlIHRvIHNwaGVyaWNhbCBtZXJjYXRvciBpbiBbMC4uMV0gcmFuZ2VcbmZ1bmN0aW9uIGxuZ1gobG5nKSB7XG4gICAgcmV0dXJuIGxuZyAvIDM2MCArIDAuNTtcbn1cbmZ1bmN0aW9uIGxhdFkobGF0KSB7XG4gICAgY29uc3Qgc2luID0gTWF0aC5zaW4obGF0ICogTWF0aC5QSSAvIDE4MCk7XG4gICAgY29uc3QgeSA9ICgwLjUgLSAwLjI1ICogTWF0aC5sb2coKDEgKyBzaW4pIC8gKDEgLSBzaW4pKSAvIE1hdGguUEkpO1xuICAgIHJldHVybiB5IDwgMCA/IDAgOiB5ID4gMSA/IDEgOiB5O1xufVxuXG4vLyBzcGhlcmljYWwgbWVyY2F0b3IgdG8gbG9uZ2l0dWRlL2xhdGl0dWRlXG5mdW5jdGlvbiB4TG5nKHgpIHtcbiAgICByZXR1cm4gKHggLSAwLjUpICogMzYwO1xufVxuZnVuY3Rpb24geUxhdCh5KSB7XG4gICAgY29uc3QgeTIgPSAoMTgwIC0geSAqIDM2MCkgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHJldHVybiAzNjAgKiBNYXRoLmF0YW4oTWF0aC5leHAoeTIpKSAvIE1hdGguUEkgLSA5MDtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYykge1xuICAgIGZvciAoY29uc3QgaWQgaW4gc3JjKSBkZXN0W2lkXSA9IHNyY1tpZF07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG5cbmZ1bmN0aW9uIGdldFgocCkge1xuICAgIHJldHVybiBwLng7XG59XG5mdW5jdGlvbiBnZXRZKHApIHtcbiAgICByZXR1cm4gcC55O1xufVxuIiwiXG4vLyBjYWxjdWxhdGUgc2ltcGxpZmljYXRpb24gZGF0YSB1c2luZyBvcHRpbWl6ZWQgRG91Z2xhcy1QZXVja2VyIGFsZ29yaXRobVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaW1wbGlmeShjb29yZHMsIGZpcnN0LCBsYXN0LCBzcVRvbGVyYW5jZSkge1xuICAgIHZhciBtYXhTcURpc3QgPSBzcVRvbGVyYW5jZTtcbiAgICB2YXIgbWlkID0gKGxhc3QgLSBmaXJzdCkgPj4gMTtcbiAgICB2YXIgbWluUG9zVG9NaWQgPSBsYXN0IC0gZmlyc3Q7XG4gICAgdmFyIGluZGV4O1xuXG4gICAgdmFyIGF4ID0gY29vcmRzW2ZpcnN0XTtcbiAgICB2YXIgYXkgPSBjb29yZHNbZmlyc3QgKyAxXTtcbiAgICB2YXIgYnggPSBjb29yZHNbbGFzdF07XG4gICAgdmFyIGJ5ID0gY29vcmRzW2xhc3QgKyAxXTtcblxuICAgIGZvciAodmFyIGkgPSBmaXJzdCArIDM7IGkgPCBsYXN0OyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGQgPSBnZXRTcVNlZ0Rpc3QoY29vcmRzW2ldLCBjb29yZHNbaSArIDFdLCBheCwgYXksIGJ4LCBieSk7XG5cbiAgICAgICAgaWYgKGQgPiBtYXhTcURpc3QpIHtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIG1heFNxRGlzdCA9IGQ7XG5cbiAgICAgICAgfSBlbHNlIGlmIChkID09PSBtYXhTcURpc3QpIHtcbiAgICAgICAgICAgIC8vIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgd2UgY2hvb3NlIGEgcGl2b3QgY2xvc2UgdG8gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdCxcbiAgICAgICAgICAgIC8vIHJlZHVjaW5nIHJlY3Vyc2lvbiBkZXB0aCwgZm9yIGNlcnRhaW4gZGVnZW5lcmF0ZSBpbnB1dHNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvZ2VvanNvbi12dC9pc3N1ZXMvMTA0XG4gICAgICAgICAgICB2YXIgcG9zVG9NaWQgPSBNYXRoLmFicyhpIC0gbWlkKTtcbiAgICAgICAgICAgIGlmIChwb3NUb01pZCA8IG1pblBvc1RvTWlkKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIG1pblBvc1RvTWlkID0gcG9zVG9NaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF4U3FEaXN0ID4gc3FUb2xlcmFuY2UpIHtcbiAgICAgICAgaWYgKGluZGV4IC0gZmlyc3QgPiAzKSBzaW1wbGlmeShjb29yZHMsIGZpcnN0LCBpbmRleCwgc3FUb2xlcmFuY2UpO1xuICAgICAgICBjb29yZHNbaW5kZXggKyAyXSA9IG1heFNxRGlzdDtcbiAgICAgICAgaWYgKGxhc3QgLSBpbmRleCA+IDMpIHNpbXBsaWZ5KGNvb3JkcywgaW5kZXgsIGxhc3QsIHNxVG9sZXJhbmNlKTtcbiAgICB9XG59XG5cbi8vIHNxdWFyZSBkaXN0YW5jZSBmcm9tIGEgcG9pbnQgdG8gYSBzZWdtZW50XG5mdW5jdGlvbiBnZXRTcVNlZ0Rpc3QocHgsIHB5LCB4LCB5LCBieCwgYnkpIHtcblxuICAgIHZhciBkeCA9IGJ4IC0geDtcbiAgICB2YXIgZHkgPSBieSAtIHk7XG5cbiAgICBpZiAoZHggIT09IDAgfHwgZHkgIT09IDApIHtcblxuICAgICAgICB2YXIgdCA9ICgocHggLSB4KSAqIGR4ICsgKHB5IC0geSkgKiBkeSkgLyAoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIGlmICh0ID4gMSkge1xuICAgICAgICAgICAgeCA9IGJ4O1xuICAgICAgICAgICAgeSA9IGJ5O1xuXG4gICAgICAgIH0gZWxzZSBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIHggKz0gZHggKiB0O1xuICAgICAgICAgICAgeSArPSBkeSAqIHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkeCA9IHB4IC0geDtcbiAgICBkeSA9IHB5IC0geTtcblxuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlRmVhdHVyZShpZCwgdHlwZSwgZ2VvbSwgdGFncykge1xuICAgIHZhciBmZWF0dXJlID0ge1xuICAgICAgICBpZDogdHlwZW9mIGlkID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBpZCxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgZ2VvbWV0cnk6IGdlb20sXG4gICAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICAgIG1pblg6IEluZmluaXR5LFxuICAgICAgICBtaW5ZOiBJbmZpbml0eSxcbiAgICAgICAgbWF4WDogLUluZmluaXR5LFxuICAgICAgICBtYXhZOiAtSW5maW5pdHlcbiAgICB9O1xuICAgIGNhbGNCQm94KGZlYXR1cmUpO1xuICAgIHJldHVybiBmZWF0dXJlO1xufVxuXG5mdW5jdGlvbiBjYWxjQkJveChmZWF0dXJlKSB7XG4gICAgdmFyIGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5O1xuICAgIHZhciB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnIHx8IHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tW2ldKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBnZW9tW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb21baV1bal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICBmZWF0dXJlLm1pblggPSBNYXRoLm1pbihmZWF0dXJlLm1pblgsIGdlb21baV0pO1xuICAgICAgICBmZWF0dXJlLm1pblkgPSBNYXRoLm1pbihmZWF0dXJlLm1pblksIGdlb21baSArIDFdKTtcbiAgICAgICAgZmVhdHVyZS5tYXhYID0gTWF0aC5tYXgoZmVhdHVyZS5tYXhYLCBnZW9tW2ldKTtcbiAgICAgICAgZmVhdHVyZS5tYXhZID0gTWF0aC5tYXgoZmVhdHVyZS5tYXhZLCBnZW9tW2kgKyAxXSk7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgc2ltcGxpZnkgZnJvbSAnLi9zaW1wbGlmeSc7XG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG4vLyBjb252ZXJ0cyBHZW9KU09OIGZlYXR1cmUgaW50byBhbiBpbnRlcm1lZGlhdGUgcHJvamVjdGVkIEpTT04gdmVjdG9yIGZvcm1hdCB3aXRoIHNpbXBsaWZpY2F0aW9uIGRhdGFcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udmVydChkYXRhLCBvcHRpb25zKSB7XG4gICAgdmFyIGZlYXR1cmVzID0gW107XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLmZlYXR1cmVzW2ldLCBvcHRpb25zLCBpKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywgZGF0YSwgb3B0aW9ucyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaW5nbGUgZ2VvbWV0cnkgb3IgYSBnZW9tZXRyeSBjb2xsZWN0aW9uXG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCB7Z2VvbWV0cnk6IGRhdGF9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZXM7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBnZW9qc29uLCBvcHRpb25zLCBpbmRleCkge1xuICAgIGlmICghZ2VvanNvbi5nZW9tZXRyeSkgcmV0dXJuO1xuXG4gICAgdmFyIGNvb3JkcyA9IGdlb2pzb24uZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgdmFyIHR5cGUgPSBnZW9qc29uLmdlb21ldHJ5LnR5cGU7XG4gICAgdmFyIHRvbGVyYW5jZSA9IE1hdGgucG93KG9wdGlvbnMudG9sZXJhbmNlIC8gKCgxIDw8IG9wdGlvbnMubWF4Wm9vbSkgKiBvcHRpb25zLmV4dGVudCksIDIpO1xuICAgIHZhciBnZW9tZXRyeSA9IFtdO1xuICAgIHZhciBpZCA9IGdlb2pzb24uaWQ7XG4gICAgaWYgKG9wdGlvbnMucHJvbW90ZUlkKSB7XG4gICAgICAgIGlkID0gZ2VvanNvbi5wcm9wZXJ0aWVzW29wdGlvbnMucHJvbW90ZUlkXTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZ2VuZXJhdGVJZCkge1xuICAgICAgICBpZCA9IGluZGV4IHx8IDA7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGNvbnZlcnRQb2ludChjb29yZHMsIGdlb21ldHJ5KTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0UG9pbnQoY29vcmRzW2ldLCBnZW9tZXRyeSk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGNvbnZlcnRMaW5lKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICBpZiAob3B0aW9ucy5saW5lTWV0cmljcykge1xuICAgICAgICAgICAgLy8gZXhwbG9kZSBpbnRvIGxpbmVzdHJpbmdzIHRvIGJlIGFibGUgdG8gdHJhY2sgbWV0cmljc1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gW107XG4gICAgICAgICAgICAgICAgY29udmVydExpbmUoY29vcmRzW2ldLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGlkLCAnTGluZVN0cmluZycsIGdlb21ldHJ5LCBnZW9qc29uLnByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHMsIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgY29udmVydExpbmVzKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgdHJ1ZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwb2x5Z29uID0gW107XG4gICAgICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzW2ldLCBwb2x5Z29uLCB0b2xlcmFuY2UsIHRydWUpO1xuICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb2pzb24uZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb2pzb24uZ2VvbWV0cnkuZ2VvbWV0cmllc1tpXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBnZW9qc29uLnByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sIG9wdGlvbnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShpZCwgdHlwZSwgZ2VvbWV0cnksIGdlb2pzb24ucHJvcGVydGllcykpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UG9pbnQoY29vcmRzLCBvdXQpIHtcbiAgICBvdXQucHVzaChwcm9qZWN0WChjb29yZHNbMF0pKTtcbiAgICBvdXQucHVzaChwcm9qZWN0WShjb29yZHNbMV0pKTtcbiAgICBvdXQucHVzaCgwKTtcbn1cblxuZnVuY3Rpb24gY29udmVydExpbmUocmluZywgb3V0LCB0b2xlcmFuY2UsIGlzUG9seWdvbikge1xuICAgIHZhciB4MCwgeTA7XG4gICAgdmFyIHNpemUgPSAwO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciB4ID0gcHJvamVjdFgocmluZ1tqXVswXSk7XG4gICAgICAgIHZhciB5ID0gcHJvamVjdFkocmluZ1tqXVsxXSk7XG5cbiAgICAgICAgb3V0LnB1c2goeCk7XG4gICAgICAgIG91dC5wdXNoKHkpO1xuICAgICAgICBvdXQucHVzaCgwKTtcblxuICAgICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgICAgIGlmIChpc1BvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBzaXplICs9ICh4MCAqIHkgLSB4ICogeTApIC8gMjsgLy8gYXJlYVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaXplICs9IE1hdGguc3FydChNYXRoLnBvdyh4IC0geDAsIDIpICsgTWF0aC5wb3coeSAtIHkwLCAyKSk7IC8vIGxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHgwID0geDtcbiAgICAgICAgeTAgPSB5O1xuICAgIH1cblxuICAgIHZhciBsYXN0ID0gb3V0Lmxlbmd0aCAtIDM7XG4gICAgb3V0WzJdID0gMTtcbiAgICBzaW1wbGlmeShvdXQsIDAsIGxhc3QsIHRvbGVyYW5jZSk7XG4gICAgb3V0W2xhc3QgKyAyXSA9IDE7XG5cbiAgICBvdXQuc2l6ZSA9IE1hdGguYWJzKHNpemUpO1xuICAgIG91dC5zdGFydCA9IDA7XG4gICAgb3V0LmVuZCA9IG91dC5zaXplO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0TGluZXMocmluZ3MsIG91dCwgdG9sZXJhbmNlLCBpc1BvbHlnb24pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBnZW9tID0gW107XG4gICAgICAgIGNvbnZlcnRMaW5lKHJpbmdzW2ldLCBnZW9tLCB0b2xlcmFuY2UsIGlzUG9seWdvbik7XG4gICAgICAgIG91dC5wdXNoKGdlb20pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdFgoeCkge1xuICAgIHJldHVybiB4IC8gMzYwICsgMC41O1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0WSh5KSB7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luKHkgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICB2YXIgeTIgPSAwLjUgLSAwLjI1ICogTWF0aC5sb2coKDEgKyBzaW4pIC8gKDEgLSBzaW4pKSAvIE1hdGguUEk7XG4gICAgcmV0dXJuIHkyIDwgMCA/IDAgOiB5MiA+IDEgPyAxIDogeTI7XG59XG4iLCJcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbi8qIGNsaXAgZmVhdHVyZXMgYmV0d2VlbiB0d28gYXhpcy1wYXJhbGxlbCBsaW5lczpcbiAqICAgICB8ICAgICAgICB8XG4gKiAgX19ffF9fXyAgICAgfCAgICAgL1xuICogLyAgIHwgICBcXF9fX198X19fXy9cbiAqICAgICB8ICAgICAgICB8XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpcChmZWF0dXJlcywgc2NhbGUsIGsxLCBrMiwgYXhpcywgbWluQWxsLCBtYXhBbGwsIG9wdGlvbnMpIHtcblxuICAgIGsxIC89IHNjYWxlO1xuICAgIGsyIC89IHNjYWxlO1xuXG4gICAgaWYgKG1pbkFsbCA+PSBrMSAmJiBtYXhBbGwgPCBrMikgcmV0dXJuIGZlYXR1cmVzOyAvLyB0cml2aWFsIGFjY2VwdFxuICAgIGVsc2UgaWYgKG1heEFsbCA8IGsxIHx8IG1pbkFsbCA+PSBrMikgcmV0dXJuIG51bGw7IC8vIHRyaXZpYWwgcmVqZWN0XG5cbiAgICB2YXIgY2xpcHBlZCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIHZhciBmZWF0dXJlID0gZmVhdHVyZXNbaV07XG4gICAgICAgIHZhciBnZW9tZXRyeSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgICAgIHZhciB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgICAgIHZhciBtaW4gPSBheGlzID09PSAwID8gZmVhdHVyZS5taW5YIDogZmVhdHVyZS5taW5ZO1xuICAgICAgICB2YXIgbWF4ID0gYXhpcyA9PT0gMCA/IGZlYXR1cmUubWF4WCA6IGZlYXR1cmUubWF4WTtcblxuICAgICAgICBpZiAobWluID49IGsxICYmIG1heCA8IGsyKSB7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgICAgICAgICBjbGlwcGVkLnB1c2goZmVhdHVyZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXggPCBrMSB8fCBtaW4gPj0gazIpIHsgLy8gdHJpdmlhbCByZWplY3RcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld0dlb21ldHJ5ID0gW107XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICBjbGlwUG9pbnRzKGdlb21ldHJ5LCBuZXdHZW9tZXRyeSwgazEsIGsyLCBheGlzKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgY2xpcExpbmUoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIGZhbHNlLCBvcHRpb25zLmxpbmVNZXRyaWNzKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIGZhbHNlKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgY2xpcExpbmVzKGdlb21ldHJ5LCBuZXdHZW9tZXRyeSwgazEsIGsyLCBheGlzLCB0cnVlKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdlb21ldHJ5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBbXTtcbiAgICAgICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnlbal0sIHBvbHlnb24sIGsxLCBrMiwgYXhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlnb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0dlb21ldHJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGluZU1ldHJpY3MgJiYgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5ld0dlb21ldHJ5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBwZWQucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5W2pdLCBmZWF0dXJlLnRhZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnTGluZVN0cmluZyc7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gbmV3R2VvbWV0cnlbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdNdWx0aUxpbmVTdHJpbmcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICAgICAgICAgIHR5cGUgPSBuZXdHZW9tZXRyeS5sZW5ndGggPT09IDMgPyAnUG9pbnQnIDogJ011bHRpUG9pbnQnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGlwcGVkLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeSwgZmVhdHVyZS50YWdzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcHBlZC5sZW5ndGggPyBjbGlwcGVkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gY2xpcFBvaW50cyhnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGEgPSBnZW9tW2kgKyBheGlzXTtcblxuICAgICAgICBpZiAoYSA+PSBrMSAmJiBhIDw9IGsyKSB7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICAgICAgbmV3R2VvbS5wdXNoKGdlb21baSArIDJdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xpcExpbmUoZ2VvbSwgbmV3R2VvbSwgazEsIGsyLCBheGlzLCBpc1BvbHlnb24sIHRyYWNrTWV0cmljcykge1xuXG4gICAgdmFyIHNsaWNlID0gbmV3U2xpY2UoZ2VvbSk7XG4gICAgdmFyIGludGVyc2VjdCA9IGF4aXMgPT09IDAgPyBpbnRlcnNlY3RYIDogaW50ZXJzZWN0WTtcbiAgICB2YXIgbGVuID0gZ2VvbS5zdGFydDtcbiAgICB2YXIgc2VnTGVuLCB0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aCAtIDM7IGkgKz0gMykge1xuICAgICAgICB2YXIgYXggPSBnZW9tW2ldO1xuICAgICAgICB2YXIgYXkgPSBnZW9tW2kgKyAxXTtcbiAgICAgICAgdmFyIGF6ID0gZ2VvbVtpICsgMl07XG4gICAgICAgIHZhciBieCA9IGdlb21baSArIDNdO1xuICAgICAgICB2YXIgYnkgPSBnZW9tW2kgKyA0XTtcbiAgICAgICAgdmFyIGEgPSBheGlzID09PSAwID8gYXggOiBheTtcbiAgICAgICAgdmFyIGIgPSBheGlzID09PSAwID8gYnggOiBieTtcbiAgICAgICAgdmFyIGV4aXRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0cmFja01ldHJpY3MpIHNlZ0xlbiA9IE1hdGguc3FydChNYXRoLnBvdyhheCAtIGJ4LCAyKSArIE1hdGgucG93KGF5IC0gYnksIDIpKTtcblxuICAgICAgICBpZiAoYSA8IGsxKSB7XG4gICAgICAgICAgICAvLyAtLS18LS0+ICB8IChsaW5lIGVudGVycyB0aGUgY2xpcCByZWdpb24gZnJvbSB0aGUgbGVmdClcbiAgICAgICAgICAgIGlmIChiID4gazEpIHtcbiAgICAgICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazEpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja01ldHJpY3MpIHNsaWNlLnN0YXJ0ID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhID4gazIpIHtcbiAgICAgICAgICAgIC8vIHwgIDwtLXwtLS0gKGxpbmUgZW50ZXJzIHRoZSBjbGlwIHJlZ2lvbiBmcm9tIHRoZSByaWdodClcbiAgICAgICAgICAgIGlmIChiIDwgazIpIHtcbiAgICAgICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazIpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja01ldHJpY3MpIHNsaWNlLnN0YXJ0ID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZFBvaW50KHNsaWNlLCBheCwgYXksIGF6KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiA8IGsxICYmIGEgPj0gazEpIHtcbiAgICAgICAgICAgIC8vIDwtLXwtLS0gIHwgb3IgPC0tfC0tLS0tfC0tLSAobGluZSBleGl0cyB0aGUgY2xpcCByZWdpb24gb24gdGhlIGxlZnQpXG4gICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazEpO1xuICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiA+IGsyICYmIGEgPD0gazIpIHtcbiAgICAgICAgICAgIC8vIHwgIC0tLXwtLT4gb3IgLS0tfC0tLS0tfC0tPiAobGluZSBleGl0cyB0aGUgY2xpcCByZWdpb24gb24gdGhlIHJpZ2h0KVxuICAgICAgICAgICAgdCA9IGludGVyc2VjdChzbGljZSwgYXgsIGF5LCBieCwgYnksIGsyKTtcbiAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzUG9seWdvbiAmJiBleGl0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0cmFja01ldHJpY3MpIHNsaWNlLmVuZCA9IGxlbiArIHNlZ0xlbiAqIHQ7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goc2xpY2UpO1xuICAgICAgICAgICAgc2xpY2UgPSBuZXdTbGljZShnZW9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFja01ldHJpY3MpIGxlbiArPSBzZWdMZW47XG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSBsYXN0IHBvaW50XG4gICAgdmFyIGxhc3QgPSBnZW9tLmxlbmd0aCAtIDM7XG4gICAgYXggPSBnZW9tW2xhc3RdO1xuICAgIGF5ID0gZ2VvbVtsYXN0ICsgMV07XG4gICAgYXogPSBnZW9tW2xhc3QgKyAyXTtcbiAgICBhID0gYXhpcyA9PT0gMCA/IGF4IDogYXk7XG4gICAgaWYgKGEgPj0gazEgJiYgYSA8PSBrMikgYWRkUG9pbnQoc2xpY2UsIGF4LCBheSwgYXopO1xuXG4gICAgLy8gY2xvc2UgdGhlIHBvbHlnb24gaWYgaXRzIGVuZHBvaW50cyBhcmUgbm90IHRoZSBzYW1lIGFmdGVyIGNsaXBwaW5nXG4gICAgbGFzdCA9IHNsaWNlLmxlbmd0aCAtIDM7XG4gICAgaWYgKGlzUG9seWdvbiAmJiBsYXN0ID49IDMgJiYgKHNsaWNlW2xhc3RdICE9PSBzbGljZVswXSB8fCBzbGljZVtsYXN0ICsgMV0gIT09IHNsaWNlWzFdKSkge1xuICAgICAgICBhZGRQb2ludChzbGljZSwgc2xpY2VbMF0sIHNsaWNlWzFdLCBzbGljZVsyXSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRoZSBmaW5hbCBzbGljZVxuICAgIGlmIChzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgbmV3R2VvbS5wdXNoKHNsaWNlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5ld1NsaWNlKGxpbmUpIHtcbiAgICB2YXIgc2xpY2UgPSBbXTtcbiAgICBzbGljZS5zaXplID0gbGluZS5zaXplO1xuICAgIHNsaWNlLnN0YXJ0ID0gbGluZS5zdGFydDtcbiAgICBzbGljZS5lbmQgPSBsaW5lLmVuZDtcbiAgICByZXR1cm4gc2xpY2U7XG59XG5cbmZ1bmN0aW9uIGNsaXBMaW5lcyhnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjbGlwTGluZShnZW9tW2ldLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbiwgZmFsc2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkUG9pbnQob3V0LCB4LCB5LCB6KSB7XG4gICAgb3V0LnB1c2goeCk7XG4gICAgb3V0LnB1c2goeSk7XG4gICAgb3V0LnB1c2goeik7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdFgob3V0LCBheCwgYXksIGJ4LCBieSwgeCkge1xuICAgIHZhciB0ID0gKHggLSBheCkgLyAoYnggLSBheCk7XG4gICAgb3V0LnB1c2goeCk7XG4gICAgb3V0LnB1c2goYXkgKyAoYnkgLSBheSkgKiB0KTtcbiAgICBvdXQucHVzaCgxKTtcbiAgICByZXR1cm4gdDtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0WShvdXQsIGF4LCBheSwgYngsIGJ5LCB5KSB7XG4gICAgdmFyIHQgPSAoeSAtIGF5KSAvIChieSAtIGF5KTtcbiAgICBvdXQucHVzaChheCArIChieCAtIGF4KSAqIHQpO1xuICAgIG91dC5wdXNoKHkpO1xuICAgIG91dC5wdXNoKDEpO1xuICAgIHJldHVybiB0O1xufVxuIiwiXG5pbXBvcnQgY2xpcCBmcm9tICcuL2NsaXAnO1xuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcChmZWF0dXJlcywgb3B0aW9ucykge1xuICAgIHZhciBidWZmZXIgPSBvcHRpb25zLmJ1ZmZlciAvIG9wdGlvbnMuZXh0ZW50O1xuICAgIHZhciBtZXJnZWQgPSBmZWF0dXJlcztcbiAgICB2YXIgbGVmdCAgPSBjbGlwKGZlYXR1cmVzLCAxLCAtMSAtIGJ1ZmZlciwgYnVmZmVyLCAgICAgMCwgLTEsIDIsIG9wdGlvbnMpOyAvLyBsZWZ0IHdvcmxkIGNvcHlcbiAgICB2YXIgcmlnaHQgPSBjbGlwKGZlYXR1cmVzLCAxLCAgMSAtIGJ1ZmZlciwgMiArIGJ1ZmZlciwgMCwgLTEsIDIsIG9wdGlvbnMpOyAvLyByaWdodCB3b3JsZCBjb3B5XG5cbiAgICBpZiAobGVmdCB8fCByaWdodCkge1xuICAgICAgICBtZXJnZWQgPSBjbGlwKGZlYXR1cmVzLCAxLCAtYnVmZmVyLCAxICsgYnVmZmVyLCAwLCAtMSwgMiwgb3B0aW9ucykgfHwgW107IC8vIGNlbnRlciB3b3JsZCBjb3B5XG5cbiAgICAgICAgaWYgKGxlZnQpIG1lcmdlZCA9IHNoaWZ0RmVhdHVyZUNvb3JkcyhsZWZ0LCAxKS5jb25jYXQobWVyZ2VkKTsgLy8gbWVyZ2UgbGVmdCBpbnRvIGNlbnRlclxuICAgICAgICBpZiAocmlnaHQpIG1lcmdlZCA9IG1lcmdlZC5jb25jYXQoc2hpZnRGZWF0dXJlQ29vcmRzKHJpZ2h0LCAtMSkpOyAvLyBtZXJnZSByaWdodCBpbnRvIGNlbnRlclxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0RmVhdHVyZUNvb3JkcyhmZWF0dXJlcywgb2Zmc2V0KSB7XG4gICAgdmFyIG5ld0ZlYXR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgICAgIHZhciBuZXdHZW9tZXRyeTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcgfHwgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBuZXdHZW9tZXRyeSA9IHNoaWZ0Q29vcmRzKGZlYXR1cmUuZ2VvbWV0cnksIG9mZnNldCk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZlYXR1cmUuZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdHZW9tZXRyeS5wdXNoKHNoaWZ0Q29vcmRzKGZlYXR1cmUuZ2VvbWV0cnlbal0sIG9mZnNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICBuZXdHZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGZlYXR1cmUuZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3UG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZmVhdHVyZS5nZW9tZXRyeVtqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQb2x5Z29uLnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXVtrXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2gobmV3UG9seWdvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuZXdGZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnksIGZlYXR1cmUudGFncykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gc2hpZnRDb29yZHMocG9pbnRzLCBvZmZzZXQpIHtcbiAgICB2YXIgbmV3UG9pbnRzID0gW107XG4gICAgbmV3UG9pbnRzLnNpemUgPSBwb2ludHMuc2l6ZTtcblxuICAgIGlmIChwb2ludHMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdQb2ludHMuc3RhcnQgPSBwb2ludHMuc3RhcnQ7XG4gICAgICAgIG5ld1BvaW50cy5lbmQgPSBwb2ludHMuZW5kO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIG5ld1BvaW50cy5wdXNoKHBvaW50c1tpXSArIG9mZnNldCwgcG9pbnRzW2kgKyAxXSwgcG9pbnRzW2kgKyAyXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQb2ludHM7XG59XG4iLCJcbi8vIFRyYW5zZm9ybXMgdGhlIGNvb3JkaW5hdGVzIG9mIGVhY2ggZmVhdHVyZSBpbiB0aGUgZ2l2ZW4gdGlsZSBmcm9tXG4vLyBtZXJjYXRvci1wcm9qZWN0ZWQgc3BhY2UgaW50byAoZXh0ZW50IHggZXh0ZW50KSB0aWxlIHNwYWNlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtVGlsZSh0aWxlLCBleHRlbnQpIHtcbiAgICBpZiAodGlsZS50cmFuc2Zvcm1lZCkgcmV0dXJuIHRpbGU7XG5cbiAgICB2YXIgejIgPSAxIDw8IHRpbGUueixcbiAgICAgICAgdHggPSB0aWxlLngsXG4gICAgICAgIHR5ID0gdGlsZS55LFxuICAgICAgICBpLCBqLCBrO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRpbGUuZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSB0aWxlLmZlYXR1cmVzW2ldLFxuICAgICAgICAgICAgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgICB0eXBlID0gZmVhdHVyZS50eXBlO1xuXG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBbXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb20ubGVuZ3RoOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmdlb21ldHJ5LnB1c2godHJhbnNmb3JtUG9pbnQoZ2VvbVtqXSwgZ2VvbVtqICsgMV0sIGV4dGVudCwgejIsIHR4LCB0eSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb20ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmluZyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBnZW9tW2pdLmxlbmd0aDsgayArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJpbmcucHVzaCh0cmFuc2Zvcm1Qb2ludChnZW9tW2pdW2tdLCBnZW9tW2pdW2sgKyAxXSwgZXh0ZW50LCB6MiwgdHgsIHR5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkucHVzaChyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRpbGUudHJhbnNmb3JtZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KHgsIHksIGV4dGVudCwgejIsIHR4LCB0eSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgucm91bmQoZXh0ZW50ICogKHggKiB6MiAtIHR4KSksXG4gICAgICAgIE1hdGgucm91bmQoZXh0ZW50ICogKHkgKiB6MiAtIHR5KSldO1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6LCB0eCwgdHksIG9wdGlvbnMpIHtcbiAgICB2YXIgdG9sZXJhbmNlID0geiA9PT0gb3B0aW9ucy5tYXhab29tID8gMCA6IG9wdGlvbnMudG9sZXJhbmNlIC8gKCgxIDw8IHopICogb3B0aW9ucy5leHRlbnQpO1xuICAgIHZhciB0aWxlID0ge1xuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICAgIG51bVBvaW50czogMCxcbiAgICAgICAgbnVtU2ltcGxpZmllZDogMCxcbiAgICAgICAgbnVtRmVhdHVyZXM6IDAsXG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgeDogdHgsXG4gICAgICAgIHk6IHR5LFxuICAgICAgICB6OiB6LFxuICAgICAgICB0cmFuc2Zvcm1lZDogZmFsc2UsXG4gICAgICAgIG1pblg6IDIsXG4gICAgICAgIG1pblk6IDEsXG4gICAgICAgIG1heFg6IC0xLFxuICAgICAgICBtYXhZOiAwXG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRpbGUubnVtRmVhdHVyZXMrKztcbiAgICAgICAgYWRkRmVhdHVyZSh0aWxlLCBmZWF0dXJlc1tpXSwgdG9sZXJhbmNlLCBvcHRpb25zKTtcblxuICAgICAgICB2YXIgbWluWCA9IGZlYXR1cmVzW2ldLm1pblg7XG4gICAgICAgIHZhciBtaW5ZID0gZmVhdHVyZXNbaV0ubWluWTtcbiAgICAgICAgdmFyIG1heFggPSBmZWF0dXJlc1tpXS5tYXhYO1xuICAgICAgICB2YXIgbWF4WSA9IGZlYXR1cmVzW2ldLm1heFk7XG5cbiAgICAgICAgaWYgKG1pblggPCB0aWxlLm1pblgpIHRpbGUubWluWCA9IG1pblg7XG4gICAgICAgIGlmIChtaW5ZIDwgdGlsZS5taW5ZKSB0aWxlLm1pblkgPSBtaW5ZO1xuICAgICAgICBpZiAobWF4WCA+IHRpbGUubWF4WCkgdGlsZS5tYXhYID0gbWF4WDtcbiAgICAgICAgaWYgKG1heFkgPiB0aWxlLm1heFkpIHRpbGUubWF4WSA9IG1heFk7XG4gICAgfVxuICAgIHJldHVybiB0aWxlO1xufVxuXG5mdW5jdGlvbiBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmUsIHRvbGVyYW5jZSwgb3B0aW9ucykge1xuXG4gICAgdmFyIGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5LFxuICAgICAgICB0eXBlID0gZmVhdHVyZS50eXBlLFxuICAgICAgICBzaW1wbGlmaWVkID0gW107XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICBzaW1wbGlmaWVkLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICBzaW1wbGlmaWVkLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICAgICAgdGlsZS5udW1Qb2ludHMrKztcbiAgICAgICAgICAgIHRpbGUubnVtU2ltcGxpZmllZCsrO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICBhZGRMaW5lKHNpbXBsaWZpZWQsIGdlb20sIHRpbGUsIHRvbGVyYW5jZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhZGRMaW5lKHNpbXBsaWZpZWQsIGdlb21baV0sIHRpbGUsIHRvbGVyYW5jZSwgdHlwZSA9PT0gJ1BvbHlnb24nLCBpID09PSAwKTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZ2VvbS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBnZW9tW2tdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhZGRMaW5lKHNpbXBsaWZpZWQsIHBvbHlnb25baV0sIHRpbGUsIHRvbGVyYW5jZSwgdHJ1ZSwgaSA9PT0gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2ltcGxpZmllZC5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHRhZ3MgPSBmZWF0dXJlLnRhZ3MgfHwgbnVsbDtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJyAmJiBvcHRpb25zLmxpbmVNZXRyaWNzKSB7XG4gICAgICAgICAgICB0YWdzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZS50YWdzKSB0YWdzW2tleV0gPSBmZWF0dXJlLnRhZ3Nba2V5XTtcbiAgICAgICAgICAgIHRhZ3NbJ21hcGJveF9jbGlwX3N0YXJ0J10gPSBnZW9tLnN0YXJ0IC8gZ2VvbS5zaXplO1xuICAgICAgICAgICAgdGFnc1snbWFwYm94X2NsaXBfZW5kJ10gPSBnZW9tLmVuZCAvIGdlb20uc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGlsZUZlYXR1cmUgPSB7XG4gICAgICAgICAgICBnZW9tZXRyeTogc2ltcGxpZmllZCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUgPT09ICdQb2x5Z29uJyB8fCB0eXBlID09PSAnTXVsdGlQb2x5Z29uJyA/IDMgOlxuICAgICAgICAgICAgICAgIHR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyA/IDIgOiAxLFxuICAgICAgICAgICAgdGFnczogdGFnc1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZmVhdHVyZS5pZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGlsZUZlYXR1cmUuaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICB9XG4gICAgICAgIHRpbGUuZmVhdHVyZXMucHVzaCh0aWxlRmVhdHVyZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRMaW5lKHJlc3VsdCwgZ2VvbSwgdGlsZSwgdG9sZXJhbmNlLCBpc1BvbHlnb24sIGlzT3V0ZXIpIHtcbiAgICB2YXIgc3FUb2xlcmFuY2UgPSB0b2xlcmFuY2UgKiB0b2xlcmFuY2U7XG5cbiAgICBpZiAodG9sZXJhbmNlID4gMCAmJiAoZ2VvbS5zaXplIDwgKGlzUG9seWdvbiA/IHNxVG9sZXJhbmNlIDogdG9sZXJhbmNlKSkpIHtcbiAgICAgICAgdGlsZS5udW1Qb2ludHMgKz0gZ2VvbS5sZW5ndGggLyAzO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJpbmcgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICBpZiAodG9sZXJhbmNlID09PSAwIHx8IGdlb21baSArIDJdID4gc3FUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgIHRpbGUubnVtU2ltcGxpZmllZCsrO1xuICAgICAgICAgICAgcmluZy5wdXNoKGdlb21baV0pO1xuICAgICAgICAgICAgcmluZy5wdXNoKGdlb21baSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgIH1cblxuICAgIGlmIChpc1BvbHlnb24pIHJld2luZChyaW5nLCBpc091dGVyKTtcblxuICAgIHJlc3VsdC5wdXNoKHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXdpbmQocmluZywgY2xvY2t3aXNlKSB7XG4gICAgdmFyIGFyZWEgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDI7IGkgPCBsZW47IGogPSBpLCBpICs9IDIpIHtcbiAgICAgICAgYXJlYSArPSAocmluZ1tpXSAtIHJpbmdbal0pICogKHJpbmdbaSArIDFdICsgcmluZ1tqICsgMV0pO1xuICAgIH1cbiAgICBpZiAoYXJlYSA+IDAgPT09IGNsb2Nrd2lzZSkge1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aDsgaSA8IGxlbiAvIDI7IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHggPSByaW5nW2ldO1xuICAgICAgICAgICAgdmFyIHkgPSByaW5nW2kgKyAxXTtcbiAgICAgICAgICAgIHJpbmdbaV0gPSByaW5nW2xlbiAtIDIgLSBpXTtcbiAgICAgICAgICAgIHJpbmdbaSArIDFdID0gcmluZ1tsZW4gLSAxIC0gaV07XG4gICAgICAgICAgICByaW5nW2xlbiAtIDIgLSBpXSA9IHg7XG4gICAgICAgICAgICByaW5nW2xlbiAtIDEgLSBpXSA9IHk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCBjb252ZXJ0IGZyb20gJy4vY29udmVydCc7ICAgICAvLyBHZW9KU09OIGNvbnZlcnNpb24gYW5kIHByZXByb2Nlc3NpbmdcbmltcG9ydCBjbGlwIGZyb20gJy4vY2xpcCc7ICAgICAgICAgICAvLyBzdHJpcGUgY2xpcHBpbmcgYWxnb3JpdGhtXG5pbXBvcnQgd3JhcCBmcm9tICcuL3dyYXAnOyAgICAgICAgICAgLy8gZGF0ZSBsaW5lIHByb2Nlc3NpbmdcbmltcG9ydCB0cmFuc2Zvcm0gZnJvbSAnLi90cmFuc2Zvcm0nOyAvLyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uXG5pbXBvcnQgY3JlYXRlVGlsZSBmcm9tICcuL3RpbGUnOyAgICAgLy8gZmluYWwgc2ltcGxpZmllZCB0aWxlIGdlbmVyYXRpb25cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VvanNvbnZ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdlb0pTT05WVChkYXRhLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLnRpbWUoJ3ByZXByb2Nlc3MgZGF0YScpO1xuXG4gICAgaWYgKG9wdGlvbnMubWF4Wm9vbSA8IDAgfHwgb3B0aW9ucy5tYXhab29tID4gMjQpIHRocm93IG5ldyBFcnJvcignbWF4Wm9vbSBzaG91bGQgYmUgaW4gdGhlIDAtMjQgcmFuZ2UnKTtcbiAgICBpZiAob3B0aW9ucy5wcm9tb3RlSWQgJiYgb3B0aW9ucy5nZW5lcmF0ZUlkKSB0aHJvdyBuZXcgRXJyb3IoJ3Byb21vdGVJZCBhbmQgZ2VuZXJhdGVJZCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4nKTtcblxuICAgIHZhciBmZWF0dXJlcyA9IGNvbnZlcnQoZGF0YSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnRpbGVzID0ge307XG4gICAgdGhpcy50aWxlQ29vcmRzID0gW107XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdwcmVwcm9jZXNzIGRhdGEnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2luZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCcsIG9wdGlvbnMuaW5kZXhNYXhab29tLCBvcHRpb25zLmluZGV4TWF4UG9pbnRzKTtcbiAgICAgICAgY29uc29sZS50aW1lKCdnZW5lcmF0ZSB0aWxlcycpO1xuICAgICAgICB0aGlzLnN0YXRzID0ge307XG4gICAgICAgIHRoaXMudG90YWwgPSAwO1xuICAgIH1cblxuICAgIGZlYXR1cmVzID0gd3JhcChmZWF0dXJlcywgb3B0aW9ucyk7XG5cbiAgICAvLyBzdGFydCBzbGljaW5nIGZyb20gdGhlIHRvcCB0aWxlIGRvd25cbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSB0aGlzLnNwbGl0VGlsZShmZWF0dXJlcywgMCwgMCwgMCk7XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkgY29uc29sZS5sb2coJ2ZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCcsIHRoaXMudGlsZXNbMF0ubnVtRmVhdHVyZXMsIHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKTtcbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdnZW5lcmF0ZSB0aWxlcycpO1xuICAgICAgICBjb25zb2xlLmxvZygndGlsZXMgZ2VuZXJhdGVkOicsIHRoaXMudG90YWwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKTtcbiAgICB9XG59XG5cbkdlb0pTT05WVC5wcm90b3R5cGUub3B0aW9ucyA9IHtcbiAgICBtYXhab29tOiAxNCwgICAgICAgICAgICAvLyBtYXggem9vbSB0byBwcmVzZXJ2ZSBkZXRhaWwgb25cbiAgICBpbmRleE1heFpvb206IDUsICAgICAgICAvLyBtYXggem9vbSBpbiB0aGUgdGlsZSBpbmRleFxuICAgIGluZGV4TWF4UG9pbnRzOiAxMDAwMDAsIC8vIG1heCBudW1iZXIgb2YgcG9pbnRzIHBlciB0aWxlIGluIHRoZSB0aWxlIGluZGV4XG4gICAgdG9sZXJhbmNlOiAzLCAgICAgICAgICAgLy8gc2ltcGxpZmljYXRpb24gdG9sZXJhbmNlIChoaWdoZXIgbWVhbnMgc2ltcGxlcilcbiAgICBleHRlbnQ6IDQwOTYsICAgICAgICAgICAvLyB0aWxlIGV4dGVudFxuICAgIGJ1ZmZlcjogNjQsICAgICAgICAgICAgIC8vIHRpbGUgYnVmZmVyIG9uIGVhY2ggc2lkZVxuICAgIGxpbmVNZXRyaWNzOiBmYWxzZSwgICAgIC8vIHdoZXRoZXIgdG8gY2FsY3VsYXRlIGxpbmUgbWV0cmljc1xuICAgIHByb21vdGVJZDogbnVsbCwgICAgICAgIC8vIG5hbWUgb2YgYSBmZWF0dXJlIHByb3BlcnR5IHRvIGJlIHByb21vdGVkIHRvIGZlYXR1cmUuaWRcbiAgICBnZW5lcmF0ZUlkOiBmYWxzZSwgICAgICAvLyB3aGV0aGVyIHRvIGdlbmVyYXRlIGZlYXR1cmUgaWRzLiBDYW5ub3QgYmUgdXNlZCB3aXRoIHByb21vdGVJZFxuICAgIGRlYnVnOiAwICAgICAgICAgICAgICAgIC8vIGxvZ2dpbmcgbGV2ZWwgKDAsIDEgb3IgMilcbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuc3BsaXRUaWxlID0gZnVuY3Rpb24gKGZlYXR1cmVzLCB6LCB4LCB5LCBjeiwgY3gsIGN5KSB7XG5cbiAgICB2YXIgc3RhY2sgPSBbZmVhdHVyZXMsIHosIHgsIHldLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICAvLyBhdm9pZCByZWN1cnNpb24gYnkgdXNpbmcgYSBwcm9jZXNzaW5nIHF1ZXVlXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBmZWF0dXJlcyA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIHZhciB6MiA9IDEgPDwgeixcbiAgICAgICAgICAgIGlkID0gdG9JRCh6LCB4LCB5KSxcbiAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW2lkXTtcblxuICAgICAgICBpZiAoIXRpbGUpIHtcbiAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZSgnY3JlYXRpb24nKTtcblxuICAgICAgICAgICAgdGlsZSA9IHRoaXMudGlsZXNbaWRdID0gY3JlYXRlVGlsZShmZWF0dXJlcywgeiwgeCwgeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnRpbGVDb29yZHMucHVzaCh7ejogeiwgeDogeCwgeTogeX0pO1xuXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aWxlIHolZC0lZC0lZCAoZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkLCBzaW1wbGlmaWVkOiAlZCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgeiwgeCwgeSwgdGlsZS5udW1GZWF0dXJlcywgdGlsZS5udW1Qb2ludHMsIHRpbGUubnVtU2ltcGxpZmllZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUVuZCgnY3JlYXRpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9ICd6JyArIHo7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0c1trZXldID0gKHRoaXMuc3RhdHNba2V5XSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2F2ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgZ2VvbWV0cnkgaW4gdGlsZSBzbyB0aGF0IHdlIGNhbiBkcmlsbCBkb3duIGxhdGVyIGlmIHdlIHN0b3Agbm93XG4gICAgICAgIHRpbGUuc291cmNlID0gZmVhdHVyZXM7XG5cbiAgICAgICAgLy8gaWYgaXQncyB0aGUgZmlyc3QtcGFzcyB0aWxpbmdcbiAgICAgICAgaWYgKCFjeikge1xuICAgICAgICAgICAgLy8gc3RvcCB0aWxpbmcgaWYgd2UgcmVhY2hlZCBtYXggem9vbSwgb3IgaWYgdGhlIHRpbGUgaXMgdG9vIHNpbXBsZVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMuaW5kZXhNYXhab29tIHx8IHRpbGUubnVtUG9pbnRzIDw9IG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIGEgZHJpbGxkb3duIHRvIGEgc3BlY2lmaWMgdGlsZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcCB0aWxpbmcgaWYgd2UgcmVhY2hlZCBiYXNlIHpvb20gb3Igb3VyIHRhcmdldCB0aWxlIHpvb21cbiAgICAgICAgICAgIGlmICh6ID09PSBvcHRpb25zLm1heFpvb20gfHwgeiA9PT0gY3opIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiBpdCdzIG5vdCBhbiBhbmNlc3RvciBvZiB0aGUgdGFyZ2V0IHRpbGVcbiAgICAgICAgICAgIHZhciBtID0gMSA8PCAoY3ogLSB6KTtcbiAgICAgICAgICAgIGlmICh4ICE9PSBNYXRoLmZsb29yKGN4IC8gbSkgfHwgeSAhPT0gTWF0aC5mbG9vcihjeSAvIG0pKSBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIHNsaWNlIGZ1cnRoZXIgZG93biwgbm8gbmVlZCB0byBrZWVwIHNvdXJjZSBnZW9tZXRyeVxuICAgICAgICB0aWxlLnNvdXJjZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjbGlwcGluZycpO1xuXG4gICAgICAgIC8vIHZhbHVlcyB3ZSdsbCB1c2UgZm9yIGNsaXBwaW5nXG4gICAgICAgIHZhciBrMSA9IDAuNSAqIG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQsXG4gICAgICAgICAgICBrMiA9IDAuNSAtIGsxLFxuICAgICAgICAgICAgazMgPSAwLjUgKyBrMSxcbiAgICAgICAgICAgIGs0ID0gMSArIGsxLFxuICAgICAgICAgICAgdGwsIGJsLCB0ciwgYnIsIGxlZnQsIHJpZ2h0O1xuXG4gICAgICAgIHRsID0gYmwgPSB0ciA9IGJyID0gbnVsbDtcblxuICAgICAgICBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIHoyLCB4IC0gazEsIHggKyBrMywgMCwgdGlsZS5taW5YLCB0aWxlLm1heFgsIG9wdGlvbnMpO1xuICAgICAgICByaWdodCA9IGNsaXAoZmVhdHVyZXMsIHoyLCB4ICsgazIsIHggKyBrNCwgMCwgdGlsZS5taW5YLCB0aWxlLm1heFgsIG9wdGlvbnMpO1xuICAgICAgICBmZWF0dXJlcyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgIHRsID0gY2xpcChsZWZ0LCB6MiwgeSAtIGsxLCB5ICsgazMsIDEsIHRpbGUubWluWSwgdGlsZS5tYXhZLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJsID0gY2xpcChsZWZ0LCB6MiwgeSArIGsyLCB5ICsgazQsIDEsIHRpbGUubWluWSwgdGlsZS5tYXhZLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGxlZnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICB0ciA9IGNsaXAocmlnaHQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnIgPSBjbGlwKHJpZ2h0LCB6MiwgeSArIGsyLCB5ICsgazQsIDEsIHRpbGUubWluWSwgdGlsZS5tYXhZLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJpZ2h0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZUVuZCgnY2xpcHBpbmcnKTtcblxuICAgICAgICBzdGFjay5wdXNoKHRsIHx8IFtdLCB6ICsgMSwgeCAqIDIsICAgICB5ICogMik7XG4gICAgICAgIHN0YWNrLnB1c2goYmwgfHwgW10sIHogKyAxLCB4ICogMiwgICAgIHkgKiAyICsgMSk7XG4gICAgICAgIHN0YWNrLnB1c2godHIgfHwgW10sIHogKyAxLCB4ICogMiArIDEsIHkgKiAyKTtcbiAgICAgICAgc3RhY2sucHVzaChiciB8fCBbXSwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIgKyAxKTtcbiAgICB9XG59O1xuXG5HZW9KU09OVlQucHJvdG90eXBlLmdldFRpbGUgPSBmdW5jdGlvbiAoeiwgeCwgeSkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBleHRlbnQgPSBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgaWYgKHogPCAwIHx8IHogPiAyNCkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgejIgPSAxIDw8IHo7XG4gICAgeCA9ICgoeCAlIHoyKSArIHoyKSAlIHoyOyAvLyB3cmFwIHRpbGUgeCBjb29yZGluYXRlXG5cbiAgICB2YXIgaWQgPSB0b0lEKHosIHgsIHkpO1xuICAgIGlmICh0aGlzLnRpbGVzW2lkXSkgcmV0dXJuIHRyYW5zZm9ybSh0aGlzLnRpbGVzW2lkXSwgZXh0ZW50KTtcblxuICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUubG9nKCdkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCcsIHosIHgsIHkpO1xuXG4gICAgdmFyIHowID0geixcbiAgICAgICAgeDAgPSB4LFxuICAgICAgICB5MCA9IHksXG4gICAgICAgIHBhcmVudDtcblxuICAgIHdoaWxlICghcGFyZW50ICYmIHowID4gMCkge1xuICAgICAgICB6MC0tO1xuICAgICAgICB4MCA9IE1hdGguZmxvb3IoeDAgLyAyKTtcbiAgICAgICAgeTAgPSBNYXRoLmZsb29yKHkwIC8gMik7XG4gICAgICAgIHBhcmVudCA9IHRoaXMudGlsZXNbdG9JRCh6MCwgeDAsIHkwKV07XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5zb3VyY2UpIHJldHVybiBudWxsO1xuXG4gICAgLy8gaWYgd2UgZm91bmQgYSBwYXJlbnQgdGlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBnZW9tZXRyeSwgd2UgY2FuIGRyaWxsIGRvd24gZnJvbSBpdFxuICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUubG9nKCdmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQnLCB6MCwgeDAsIHkwKTtcblxuICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZSgnZHJpbGxpbmcgZG93bicpO1xuICAgIHRoaXMuc3BsaXRUaWxlKHBhcmVudC5zb3VyY2UsIHowLCB4MCwgeTAsIHosIHgsIHkpO1xuICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZUVuZCgnZHJpbGxpbmcgZG93bicpO1xuXG4gICAgcmV0dXJuIHRoaXMudGlsZXNbaWRdID8gdHJhbnNmb3JtKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpIDogbnVsbDtcbn07XG5cbmZ1bmN0aW9uIHRvSUQoeiwgeCwgeSkge1xuICAgIHJldHVybiAoKCgxIDw8IHopICogeSArIHgpICogMzIpICsgejtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYykge1xuICAgIGZvciAodmFyIGkgaW4gc3JjKSBkZXN0W2ldID0gc3JjW2ldO1xuICAgIHJldHVybiBkZXN0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRKU09OfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQge1JlcXVlc3RQZXJmb3JtYW5jZX0gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgcmV3aW5kIGZyb20gJ0BtYXBib3gvZ2VvanNvbi1yZXdpbmQnO1xuaW1wb3J0IEdlb0pTT05XcmFwcGVyIGZyb20gJy4vZ2VvanNvbl93cmFwcGVyJztcbmltcG9ydCB2dHBiZiBmcm9tICd2dC1wYmYnO1xuaW1wb3J0IFN1cGVyY2x1c3RlciBmcm9tICdzdXBlcmNsdXN0ZXInO1xuaW1wb3J0IGdlb2pzb252dCBmcm9tICdnZW9qc29uLXZ0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBWZWN0b3JUaWxlV29ya2VyU291cmNlIGZyb20gJy4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQge2NyZWF0ZUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuXG5pbXBvcnQgdHlwZSB7TG9hZFZlY3RvckRhdGFDYWxsYmFja30gZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0UGFyYW1ldGVycywgUmVzcG9uc2VDYWxsYmFja30gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0dlb0pTT05GZWF0dXJlfSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMb2FkR2VvSlNPTlBhcmFtZXRlcnMgPSB7XG4gICAgcmVxdWVzdD86IFJlcXVlc3RQYXJhbWV0ZXJzLFxuICAgIGRhdGE/OiBzdHJpbmcsXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgY2x1c3RlcjogYm9vbGVhbixcbiAgICBzdXBlcmNsdXN0ZXJPcHRpb25zPzogT2JqZWN0LFxuICAgIGdlb2pzb25WdE9wdGlvbnM/OiBPYmplY3QsXG4gICAgY2x1c3RlclByb3BlcnRpZXM/OiBPYmplY3Rcbn07XG5cbmV4cG9ydCB0eXBlIExvYWRHZW9KU09OID0gKHBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxPYmplY3Q+KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb0pTT05JbmRleCB7XG4gICAgZ2V0VGlsZSh6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKTogT2JqZWN0O1xuXG4gICAgLy8gc3VwZXJjbHVzdGVyIG1ldGhvZHNcbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShjbHVzdGVySWQ6IG51bWJlcik6IG51bWJlcjtcbiAgICBnZXRDaGlsZHJlbihjbHVzdGVySWQ6IG51bWJlcik6IEFycmF5PEdlb0pTT05GZWF0dXJlPjtcbiAgICBnZXRMZWF2ZXMoY2x1c3RlcklkOiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIG9mZnNldDogbnVtYmVyKTogQXJyYXk8R2VvSlNPTkZlYXR1cmU+O1xufVxuXG5mdW5jdGlvbiBsb2FkR2VvSlNPTlRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spIHtcbiAgICBjb25zdCBjYW5vbmljYWwgPSBwYXJhbXMudGlsZUlELmNhbm9uaWNhbDtcblxuICAgIGlmICghdGhpcy5fZ2VvSlNPTkluZGV4KSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBudWxsKTsgIC8vIHdlIGNvdWxkbid0IGxvYWQgdGhlIGZpbGVcbiAgICB9XG5cbiAgICBjb25zdCBnZW9KU09OVGlsZSA9IHRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkpO1xuICAgIGlmICghZ2VvSlNPTlRpbGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpOyAvLyBub3RoaW5nIGluIHRoZSBnaXZlbiB0aWxlXG4gICAgfVxuXG4gICAgY29uc3QgZ2VvanNvbldyYXBwZXIgPSBuZXcgR2VvSlNPTldyYXBwZXIoZ2VvSlNPTlRpbGUuZmVhdHVyZXMpO1xuXG4gICAgLy8gRW5jb2RlIHRoZSBnZW9qc29uLXZ0IHRpbGUgaW50byBiaW5hcnkgdmVjdG9yIHRpbGUgZm9ybS4gIFRoaXNcbiAgICAvLyBpcyBhIGNvbnZlbmllbmNlIHRoYXQgYWxsb3dzIGBGZWF0dXJlSW5kZXhgIHRvIG9wZXJhdGUgdGhlIHNhbWUgd2F5XG4gICAgLy8gYWNyb3NzIGBWZWN0b3JUaWxlU291cmNlYCBhbmQgYEdlb0pTT05Tb3VyY2VgIGRhdGEuXG4gICAgbGV0IHBiZiA9IHZ0cGJmKGdlb2pzb25XcmFwcGVyKTtcbiAgICBpZiAocGJmLmJ5dGVPZmZzZXQgIT09IDAgfHwgcGJmLmJ5dGVMZW5ndGggIT09IHBiZi5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IHdpdGggbm9kZSBCdWZmZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvcGJmL2lzc3Vlcy8zNSlcbiAgICAgICAgcGJmID0gbmV3IFVpbnQ4QXJyYXkocGJmKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHZlY3RvclRpbGU6IGdlb2pzb25XcmFwcGVyLFxuICAgICAgICByYXdEYXRhOiBwYmYuYnVmZmVyXG4gICAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFNvdXJjZVN0YXRlID1cbiAgICB8ICdJZGxlJyAgICAgICAgICAgIC8vIFNvdXJjZSBlbXB0eSBvciBkYXRhIGxvYWRlZFxuICAgIHwgJ0NvYWxlc2NpbmcnICAgICAgLy8gRGF0YSBmaW5pc2hlZCBsb2FkaW5nLCBidXQgZGlzY2FyZCAnbG9hZERhdGEnIG1lc3NhZ2VzIHVudGlsIHJlY2VpdmluZyAnY29hbGVzY2VkJ1xuICAgIHwgJ05lZWRzTG9hZERhdGEnOyAgLy8gJ2xvYWREYXRhJyByZWNlaXZlZCB3aGlsZSBjb2FsZXNjaW5nLCB0cmlnZ2VyIG9uZSBtb3JlICdsb2FkRGF0YScgb24gcmVjZWl2aW5nICdjb2FsZXNjZWQnXG5cbi8qKlxuICogVGhlIHtAbGluayBXb3JrZXJTb3VyY2V9IGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMge0BsaW5rIEdlb0pTT05Tb3VyY2V9LlxuICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSBlYXNpbHkgcmV1c2VkIHRvIHN1cHBvcnQgY3VzdG9tIHNvdXJjZSB0eXBlc1xuICogZm9yIGRhdGEgZm9ybWF0cyB0aGF0IGNhbiBiZSBwYXJzZWQvY29udmVydGVkIGludG8gYW4gaW4tbWVtb3J5IEdlb0pTT05cbiAqIHJlcHJlc2VudGF0aW9uLiAgVG8gZG8gc28sIGNyZWF0ZSBpdCB3aXRoXG4gKiBgbmV3IEdlb0pTT05Xb3JrZXJTb3VyY2UoYWN0b3IsIGxheWVySW5kZXgsIGN1c3RvbUxvYWRHZW9KU09ORnVuY3Rpb24pYC5cbiAqIEZvciBhIGZ1bGwgZXhhbXBsZSwgc2VlIFttYXBib3gtZ2wtdG9wb2pzb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9wbWVudHNlZWQvbWFwYm94LWdsLXRvcG9qc29uKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBHZW9KU09OV29ya2VyU291cmNlIGV4dGVuZHMgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSB7XG4gICAgbG9hZEdlb0pTT046IExvYWRHZW9KU09OO1xuICAgIF9zdGF0ZTogU291cmNlU3RhdGU7XG4gICAgX3BlbmRpbmdDYWxsYmFjazogQ2FsbGJhY2s8e1xuICAgICAgICByZXNvdXJjZVRpbWluZz86IHtbXzogc3RyaW5nXTogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz59LFxuICAgICAgICBhYmFuZG9uZWQ/OiBib29sZWFuIH0+O1xuICAgIF9wZW5kaW5nTG9hZERhdGFQYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycztcbiAgICBfZ2VvSlNPTkluZGV4OiBHZW9KU09OSW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBbbG9hZEdlb0pTT05dIE9wdGlvbmFsIG1ldGhvZCBmb3IgY3VzdG9tIGxvYWRpbmcvcGFyc2luZyBvZlxuICAgICAqIEdlb0pTT04gYmFzZWQgb24gcGFyYW1ldGVycyBwYXNzZWQgZnJvbSB0aGUgbWFpbi10aHJlYWQgU291cmNlLlxuICAgICAqIFNlZSB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkR2VvSlNPTn0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhY3RvcjogQWN0b3IsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBsb2FkR2VvSlNPTjogP0xvYWRHZW9KU09OKSB7XG4gICAgICAgIHN1cGVyKGFjdG9yLCBsYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXMsIGxvYWRHZW9KU09OVGlsZSk7XG4gICAgICAgIGlmIChsb2FkR2VvSlNPTikge1xuICAgICAgICAgICAgdGhpcy5sb2FkR2VvSlNPTiA9IGxvYWRHZW9KU09OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyAoaWYgYXBwcm9wcmlhdGUpLCBwYXJzZXMsIGFuZCBpbmRleCBnZW9qc29uIGRhdGEgaW50byB0aWxlcy4gVGhpc1xuICAgICAqIHByZXBhcmF0b3J5IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZFRpbGV9XG4gICAgICogY2FuIGNvcnJlY3RseSBzZXJ2ZSB1cCB0aWxlcy5cbiAgICAgKlxuICAgICAqIERlZmVycyB0byB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkR2VvSlNPTn0gZm9yIHRoZSBmZXRjaGluZy9wYXJzaW5nLFxuICAgICAqIGV4cGVjdGluZyBgY2FsbGJhY2soZXJyb3IsIGRhdGEpYCB0byBiZSBjYWxsZWQgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3IgYVxuICAgICAqIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFdoZW4gYGxvYWREYXRhYCByZXF1ZXN0cyBjb21lIGluIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHByb2Nlc3NlZCxcbiAgICAgKiB0aGV5IGFyZSBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSByZXF1ZXN0IHVzaW5nIHRoZSBsYXRlc3QgZGF0YS5cbiAgICAgKiBTZWUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjY29hbGVzY2V9XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkRGF0YShwYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycywgY2FsbGJhY2s6IENhbGxiYWNrPHtcbiAgICAgICAgcmVzb3VyY2VUaW1pbmc/OiB7W186IHN0cmluZ106IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+fSxcbiAgICAgICAgYWJhbmRvbmVkPzogYm9vbGVhbiB9Pikge1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSBmb3JlZ3JvdW5kIHRoZSBwcmV2aW91cyBjYWxsIGhhcyBiZWVuIGFiYW5kb25lZFxuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwsIHthYmFuZG9uZWQ6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zID0gcGFyYW1zO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAmJlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgIT09ICdJZGxlJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnTmVlZHNMb2FkRGF0YSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdDb2FsZXNjaW5nJztcbiAgICAgICAgICAgIHRoaXMuX2xvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbjogY2FsbGVkIGRpcmVjdGx5IGJ5IGBsb2FkRGF0YWBcbiAgICAgKiBvciBieSBgY29hbGVzY2VgIHVzaW5nIHN0b3JlZCBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIF9sb2FkRGF0YSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nQ2FsbGJhY2sgfHwgIXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcykge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuX3BlbmRpbmdDYWxsYmFjaztcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IHBlcmYgPSAocGFyYW1zICYmIHBhcmFtcy5yZXF1ZXN0ICYmIHBhcmFtcy5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykgP1xuICAgICAgICAgICAgbmV3IFJlcXVlc3RQZXJmb3JtYW5jZShwYXJhbXMucmVxdWVzdCkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLmxvYWRHZW9KU09OKHBhcmFtcywgKGVycjogP0Vycm9yLCBkYXRhOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV3aW5kKGRhdGEsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvSlNPTkluZGV4ID0gcGFyYW1zLmNsdXN0ZXIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN1cGVyY2x1c3RlcihnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHBhcmFtcykpLmxvYWQoZGF0YS5mZWF0dXJlcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvanNvbnZ0KGRhdGEsIHBhcmFtcy5nZW9qc29uVnRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmYuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGV2YWwgdGhlIHJlc3VsdCBvZiBnZXRFbnRyaWVzQnlOYW1lKCkgaGVyZSB2aWEgcGFyc2Uvc3RyaW5naWZ5XG4gICAgICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVRpbWluZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZVRpbWluZyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc291cmNlVGltaW5nW3BhcmFtcy5zb3VyY2VdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNvdXJjZVRpbWluZ0RhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGlsZSBwcm9jZXNzaW5nIGBsb2FkRGF0YWAsIHdlIGNvYWxlc2NlIGFsbCBmdXJ0aGVyXG4gICAgICogYGxvYWREYXRhYCBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIGNhbGwgdG8gX2xvYWREYXRhXG4gICAgICogdGhhdCB3aWxsIGhhcHBlbiBvbmNlIHdlJ3ZlIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlXG4gICAgICogZmlyc3QgbWVzc2FnZS4ge0BsaW5rIEdlb0pTT05Tb3VyY2UjX3VwZGF0ZVdvcmtlckRhdGF9XG4gICAgICogaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgdXMgdGhlIGBjb2FsZXNjZWAgbWVzc2FnZVxuICAgICAqIGF0IHRoZSB0aW1lIGl0IHJlY2VpdmVzIGEgcmVzcG9uc2UgZnJvbSBgbG9hZERhdGFgXG4gICAgICpcbiAgICAgKiAgICAgICAgICBTdGF0ZTogSWRsZVxuICAgICAqICAgICAgICAgIMOiwobCkSAgICAgICAgICB8XG4gICAgICogICAgICdjb2FsZXNjZScgICAnbG9hZERhdGEnXG4gICAgICogICAgICAgICAgfCAgICAgKHRyaWdnZXJzIGxvYWQpXG4gICAgICogICAgICAgICAgfCAgICAgICAgICDDosKGwpNcbiAgICAgKiAgICAgICAgU3RhdGU6IENvYWxlc2NpbmdcbiAgICAgKiAgICAgICAgICDDosKGwpEgICAgICAgICAgfFxuICAgICAqICAgKHRyaWdnZXJzIGxvYWQpICAgfFxuICAgICAqICAgICAnY29hbGVzY2UnICAgJ2xvYWREYXRhJ1xuICAgICAqICAgICAgICAgIHwgICAgICAgICAgw6LChsKTXG4gICAgICogICAgICAgIFN0YXRlOiBOZWVkc0xvYWREYXRhXG4gICAgICovXG4gICAgY29hbGVzY2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ0NvYWxlc2NpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdJZGxlJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ05lZWRzTG9hZERhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdDb2FsZXNjaW5nJztcbiAgICAgICAgICAgIHRoaXMuX2xvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZWxvYWRUaWxlfS5cbiAgICAqXG4gICAgKiBJZiB0aGUgdGlsZSBpcyBsb2FkZWQsIHVzZXMgdGhlIGltcGxlbWVudGF0aW9uIGluIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UuXG4gICAgKiBPdGhlcndpc2UsIHN1Y2ggYXMgYWZ0ZXIgYSBzZXREYXRhKCkgY2FsbCwgd2UgbG9hZCB0aGUgdGlsZSBmcmVzaC5cbiAgICAqXG4gICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgcmVsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcblxuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIucmVsb2FkVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2ggYW5kIHBhcnNlIEdlb0pTT04gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBwYXJhbXMuICBDYWxscyBgY2FsbGJhY2tgXG4gICAgICogd2l0aCBgKGVyciwgZGF0YSlgLCB3aGVyZSBgZGF0YWAgaXMgYSBwYXJzZWQgR2VvSlNPTiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBHZW9KU09OIGlzIGxvYWRlZCBhbmQgcGFyc2VkIGZyb20gYHBhcmFtcy51cmxgIGlmIGl0IGV4aXN0cywgb3IgZWxzZVxuICAgICAqIGV4cGVjdGVkIGFzIGEgbGl0ZXJhbCAoc3RyaW5nIG9yIG9iamVjdCkgYHBhcmFtcy5kYXRhYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gW3BhcmFtcy51cmxdIEEgVVJMIHRvIHRoZSByZW1vdGUgR2VvSlNPTiBkYXRhLlxuICAgICAqIEBwYXJhbSBbcGFyYW1zLmRhdGFdIExpdGVyYWwgR2VvSlNPTiBkYXRhLiBNdXN0IGJlIHByb3ZpZGVkIGlmIGBwYXJhbXMudXJsYCBpcyBub3QuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkR2VvSlNPTihwYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8T2JqZWN0Pikge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHNhbWUgb3JpZ2luIGlzc3VlcywgdXJscyBtdXN0IGVpdGhlciBpbmNsdWRlIGFuIGV4cGxpY2l0XG4gICAgICAgIC8vIG9yaWdpbiBvciBhYnNvbHV0ZSBwYXRoLlxuICAgICAgICAvLyBpZTogL2Zvby9iYXIuanNvbiBvciBodHRwOi8vZXhhbXBsZS5jb20vYmFyLmpzb25cbiAgICAgICAgLy8gYnV0IG5vdCAuLi9mb28vYmFyLmpzb25cbiAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0KSB7XG4gICAgICAgICAgICBnZXRKU09OKHBhcmFtcy5yZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgSlNPTi5wYXJzZShwYXJhbXMuZGF0YSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYElucHV0IGRhdGEgZ2l2ZW4gdG8gJyR7cGFyYW1zLnNvdXJjZX0nIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LmApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30sIGNhbGxiYWNrOiBDYWxsYmFjazxtaXhlZD4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gRG9uJ3QgbGVhayBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXM6IHtjbHVzdGVySWQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20ocGFyYW1zLmNsdXN0ZXJJZCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENsdXN0ZXJDaGlsZHJlbihwYXJhbXM6IHtjbHVzdGVySWQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2hpbGRyZW4ocGFyYW1zLmNsdXN0ZXJJZCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENsdXN0ZXJMZWF2ZXMocGFyYW1zOiB7Y2x1c3RlcklkOiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIG9mZnNldDogbnVtYmVyfSwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXMocGFyYW1zLmNsdXN0ZXJJZCwgcGFyYW1zLmxpbWl0LCBwYXJhbXMub2Zmc2V0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdXBlcmNsdXN0ZXJPcHRpb25zKHtzdXBlcmNsdXN0ZXJPcHRpb25zLCBjbHVzdGVyUHJvcGVydGllc30pIHtcbiAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzIHx8ICFzdXBlcmNsdXN0ZXJPcHRpb25zKSByZXR1cm4gc3VwZXJjbHVzdGVyT3B0aW9ucztcblxuICAgIGNvbnN0IG1hcEV4cHJlc3Npb25zID0ge307XG4gICAgY29uc3QgcmVkdWNlRXhwcmVzc2lvbnMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxzID0ge2FjY3VtdWxhdGVkOiBudWxsLCB6b29tOiAwfTtcbiAgICBjb25zdCBmZWF0dXJlID0ge3Byb3BlcnRpZXM6IG51bGx9O1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhjbHVzdGVyUHJvcGVydGllcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IFtvcGVyYXRvciwgbWFwRXhwcmVzc2lvbl0gPSBjbHVzdGVyUHJvcGVydGllc1trZXldO1xuXG4gICAgICAgIGNvbnN0IG1hcEV4cHJlc3Npb25QYXJzZWQgPSBjcmVhdGVFeHByZXNzaW9uKG1hcEV4cHJlc3Npb24pO1xuICAgICAgICBjb25zdCByZWR1Y2VFeHByZXNzaW9uUGFyc2VkID0gY3JlYXRlRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycgPyBbb3BlcmF0b3IsIFsnYWNjdW11bGF0ZWQnXSwgWydnZXQnLCBrZXldXSA6IG9wZXJhdG9yKTtcblxuICAgICAgICBhc3NlcnQobWFwRXhwcmVzc2lvblBhcnNlZC5yZXN1bHQgPT09ICdzdWNjZXNzJyk7XG4gICAgICAgIGFzc2VydChyZWR1Y2VFeHByZXNzaW9uUGFyc2VkLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKTtcblxuICAgICAgICBtYXBFeHByZXNzaW9uc1trZXldID0gbWFwRXhwcmVzc2lvblBhcnNlZC52YWx1ZTtcbiAgICAgICAgcmVkdWNlRXhwcmVzc2lvbnNba2V5XSA9IHJlZHVjZUV4cHJlc3Npb25QYXJzZWQudmFsdWU7XG4gICAgfVxuXG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5tYXAgPSAocG9pbnRQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IHBvaW50UHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBtYXBFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH07XG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucy5yZWR1Y2UgPSAoYWNjdW11bGF0ZWQsIGNsdXN0ZXJQcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGNsdXN0ZXJQcm9wZXJ0aWVzO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICBnbG9iYWxzLmFjY3VtdWxhdGVkID0gYWNjdW11bGF0ZWRba2V5XTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkW2tleV0gPSByZWR1Y2VFeHByZXNzaW9uc1trZXldLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzdXBlcmNsdXN0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9KU09OV29ya2VyU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuXG5pbXBvcnQgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCBWZWN0b3JUaWxlV29ya2VyU291cmNlIGZyb20gJy4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCBHZW9KU09OV29ya2VyU291cmNlIGZyb20gJy4vZ2VvanNvbl93b3JrZXJfc291cmNlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cGx1Z2luIGFzIGdsb2JhbFJUTFRleHRQbHVnaW59IGZyb20gJy4vcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCB7ZW5mb3JjZUNhY2hlU2l6ZUxpbWl0fSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFdvcmtlckRFTVRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZX0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7UGx1Z2luU3RhdGV9IGZyb20gJy4vcnRsX3RleHRfcGx1Z2luJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXIge1xuICAgIHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlO1xuICAgIGFjdG9yOiBBY3RvcjtcbiAgICBsYXllckluZGV4ZXM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllckluZGV4IH07XG4gICAgYXZhaWxhYmxlSW1hZ2VzOiB7W186IHN0cmluZ106IEFycmF5PHN0cmluZz4gfTtcbiAgICB3b3JrZXJTb3VyY2VUeXBlczoge1tfOiBzdHJpbmddOiBDbGFzczxXb3JrZXJTb3VyY2U+IH07XG4gICAgd29ya2VyU291cmNlczoge1tfOiBzdHJpbmddOiB7W186IHN0cmluZ106IHtbXzogc3RyaW5nXTogV29ya2VyU291cmNlIH0gfSB9O1xuICAgIGRlbVdvcmtlclNvdXJjZXM6IHtbXzogc3RyaW5nXToge1tfOiBzdHJpbmddOiBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIH0gfTtcbiAgICByZWZlcnJlcjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlKSB7XG4gICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7XG4gICAgICAgIHRoaXMuYWN0b3IgPSBuZXcgQWN0b3Ioc2VsZiwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5sYXllckluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSB7fTtcblxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZVR5cGVzID0ge1xuICAgICAgICAgICAgdmVjdG9yOiBWZWN0b3JUaWxlV29ya2VyU291cmNlLFxuICAgICAgICAgICAgZ2VvanNvbjogR2VvSlNPTldvcmtlclNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFttYXBJZF1bc291cmNlVHlwZV1bc291cmNlTmFtZV0gPT4gd29ya2VyIHNvdXJjZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLndvcmtlclNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlID0gKG5hbWU6IHN0cmluZywgV29ya2VyU291cmNlOiBDbGFzczxXb3JrZXJTb3VyY2U+KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCIke25hbWV9XCIgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tuYW1lXSA9IFdvcmtlclNvdXJjZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUaGlzIGlzIGludm9rZWQgYnkgdGhlIFJUTCB0ZXh0IHBsdWdpbiB3aGVuIHRoZSBkb3dubG9hZCB2aWEgdGhlIGBpbXBvcnRTY3JpcHRzYCBjYWxsIGhhcyBmaW5pc2hlZCwgYW5kIHRoZSBjb2RlIGhhcyBiZWVuIHBhcnNlZC5cbiAgICAgICAgdGhpcy5zZWxmLnJlZ2lzdGVyUlRMVGV4dFBsdWdpbiA9IChydGxUZXh0UGx1Z2luOiB7YXBwbHlBcmFiaWNTaGFwaW5nOiBGdW5jdGlvbiwgcHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0OiBGdW5jdGlvbiwgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0PzogRnVuY3Rpb259KSA9PiB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsnYXBwbHlBcmFiaWNTaGFwaW5nJ10gPSBydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZztcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ3Byb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCddID0gcnRsVGV4dFBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ7XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQnXSA9IHJ0bFRleHRQbHVnaW4ucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNldFJlZmVycmVyKG1hcElEOiBzdHJpbmcsIHJlZmVycmVyOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZWZlcnJlciA9IHJlZmVycmVyO1xuICAgIH1cblxuICAgIHNldEltYWdlcyhtYXBJZDogc3RyaW5nLCBpbWFnZXM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXNbbWFwSWRdID0gaW1hZ2VzO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHNldExheWVycyhtYXBJZDogc3RyaW5nLCBsYXllcnM6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKS5yZXBsYWNlKGxheWVycyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJzKG1hcElkOiBzdHJpbmcsIHBhcmFtczoge2xheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgcmVtb3ZlZElkczogQXJyYXk8c3RyaW5nPn0sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKS51cGRhdGUocGFyYW1zLmxheWVycywgcGFyYW1zLnJlbW92ZWRJZHMpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMgJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICB0aGlzLmdldFdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnR5cGUsIHBhcmFtcy5zb3VyY2UpLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGxvYWRERU1UaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJERU1UaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy5zb3VyY2UpLmxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkucmVsb2FkVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkuYWJvcnRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW1vdmVERU1UaWxlKG1hcElkOiBzdHJpbmcsIHBhcmFtczogVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy5zb3VyY2UpLnJlbW92ZVRpbGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZW1vdmVTb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7c291cmNlOiBzdHJpbmd9ICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy5zb3VyY2UpO1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSB8fFxuICAgICAgICAgICAgIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bcGFyYW1zLnR5cGVdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bcGFyYW1zLnR5cGVdW3BhcmFtcy5zb3VyY2VdO1xuICAgICAgICBkZWxldGUgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG5cbiAgICAgICAgaWYgKHdvcmtlci5yZW1vdmVTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd29ya2VyLnJlbW92ZVNvdXJjZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGEge0BsaW5rIFdvcmtlclNvdXJjZX0gc2NyaXB0IGF0IHBhcmFtcy51cmwuICBUaGUgc2NyaXB0IGlzIHJ1blxuICAgICAqICh1c2luZyBpbXBvcnRTY3JpcHRzKSB3aXRoIGByZWdpc3RlcldvcmtlclNvdXJjZWAgaW4gc2NvcGUsIHdoaWNoIGlzIGFcbiAgICAgKiBmdW5jdGlvbiB0YWtpbmcgYChuYW1lLCB3b3JrZXJTb3VyY2VPYmplY3QpYC5cbiAgICAgKiAgQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkV29ya2VyU291cmNlKG1hcDogc3RyaW5nLCBwYXJhbXM6IHsgdXJsOiBzdHJpbmcgfSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhwYXJhbXMudXJsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jUlRMUGx1Z2luU3RhdGUobWFwOiBzdHJpbmcsIHN0YXRlOiBQbHVnaW5TdGF0ZSwgY2FsbGJhY2s6IENhbGxiYWNrPGJvb2xlYW4+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luLnNldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblVSTCA9IGdsb2JhbFJUTFRleHRQbHVnaW4uZ2V0UGx1Z2luVVJMKCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc0xvYWRlZCgpICYmXG4gICAgICAgICAgICAgICAgIWdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKSAmJlxuICAgICAgICAgICAgICAgIHBsdWdpblVSTCAhPSBudWxsIC8vIE5vdCBwb3NzaWJsZSB3aGVuIGBpc0xvYWRlZGAgaXMgdHJ1ZSwgYnV0IGtlZXBzIGZsb3cgaGFwcHlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBsdWdpblVSTCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGUgPSBnbG9iYWxSVExUZXh0UGx1Z2luLmlzUGFyc2VkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBjb21wbGV0ZSA/IHVuZGVmaW5lZCA6IG5ldyBFcnJvcihgUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICR7cGx1Z2luVVJMfWApO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVJbWFnZXMobWFwSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5hdmFpbGFibGVJbWFnZXNbbWFwSWRdO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlSW1hZ2VzKSB7XG4gICAgICAgICAgICBhdmFpbGFibGVJbWFnZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdmFpbGFibGVJbWFnZXM7XG4gICAgfVxuXG4gICAgZ2V0TGF5ZXJJbmRleChtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBsYXllckluZGV4ZXMgPSB0aGlzLmxheWVySW5kZXhlc1ttYXBJZF07XG4gICAgICAgIGlmICghbGF5ZXJJbmRleGVzKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ZXMgPSB0aGlzLmxheWVySW5kZXhlc1ttYXBJZF0gPSBuZXcgU3R5bGVMYXllckluZGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVySW5kZXhlcztcbiAgICB9XG5cbiAgICBnZXRXb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF0pXG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdID0ge307XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV0gPSB7fTtcblxuICAgICAgICBpZiAoIXRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXSkge1xuICAgICAgICAgICAgLy8gdXNlIGEgd3JhcHBlZCBhY3RvciBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggYSB0YXJnZXQgbWFwSWQgcGFyYW1cbiAgICAgICAgICAgIC8vIHRvIGFueSBtZXNzYWdlcyBpbnZva2VkIGJ5IHRoZSBXb3JrZXJTb3VyY2VcbiAgICAgICAgICAgIGNvbnN0IGFjdG9yID0ge1xuICAgICAgICAgICAgICAgIHNlbmQ6ICh0eXBlLCBkYXRhLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdG9yLnNlbmQodHlwZSwgZGF0YSwgY2FsbGJhY2ssIG1hcElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdID0gbmV3ICh0aGlzLndvcmtlclNvdXJjZVR5cGVzW3R5cGVdOiBhbnkpKChhY3RvcjogYW55KSwgdGhpcy5nZXRMYXllckluZGV4KG1hcElkKSwgdGhpcy5nZXRBdmFpbGFibGVJbWFnZXMobWFwSWQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV07XG4gICAgfVxuXG4gICAgZ2V0REVNV29ya2VyU291cmNlKG1hcElkOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcblxuICAgICAgICBpZiAoIXRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXSkge1xuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdID0gbmV3IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV07XG4gICAgfVxuXG4gICAgZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KG1hcElkOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIpIHtcbiAgICAgICAgZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KGxpbWl0KTtcbiAgICB9XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpIHtcbiAgICBzZWxmLndvcmtlciA9IG5ldyBXb3JrZXIoc2VsZik7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gaXNTdXBwb3J0ZWQ7XG59IGVsc2UgaWYgKHdpbmRvdykge1xuICAgIHdpbmRvdy5tYXBib3hnbCA9IHdpbmRvdy5tYXBib3hnbCB8fCB7fTtcbiAgICB3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkID0gaXNTdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgTWFwYm94IEdMIEpTXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWZhbHNlXSBSZXR1cm4gYGZhbHNlYFxuICogICBpZiB0aGUgcGVyZm9ybWFuY2Ugb2YgTWFwYm94IEdMIEpTIHdvdWxkIGJlIGRyYW1hdGljYWxseSB3b3JzZSB0aGFuXG4gKiAgIGV4cGVjdGVkIChpLmUuIGEgc29mdHdhcmUgcmVuZGVyZXIgaXMgd291bGQgYmUgdXNlZClcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAgIGlzQnJvd3NlcigpICYmXG4gICAgICAgIGlzQXJyYXlTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0Z1bmN0aW9uU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNPYmplY3RTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0pTT05TdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc1dvcmtlclN1cHBvcnRlZCgpICYmXG4gICAgICAgIGlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSAmJlxuICAgICAgICBpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkgJiZcbiAgICAgICAgaXNXZWJHTFN1cHBvcnRlZENhY2hlZChvcHRpb25zICYmIG9wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdClcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgQXJyYXkucHJvdG90eXBlICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUubWFwICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIE9iamVjdC5rZXlzICYmXG4gICAgICAgIE9iamVjdC5jcmVhdGUgJiZcbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mICYmXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzICYmXG4gICAgICAgIE9iamVjdC5pc1NlYWxlZCAmJlxuICAgICAgICBPYmplY3QuaXNGcm96ZW4gJiZcbiAgICAgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAmJlxuICAgICAgICBPYmplY3Quc2VhbCAmJlxuICAgICAgICBPYmplY3QuZnJlZXplICYmXG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uc1xuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzSlNPTlN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ0pTT04nIGluIHdpbmRvdyAmJiAncGFyc2UnIGluIEpTT04gJiYgJ3N0cmluZ2lmeScgaW4gSlNPTjtcbn1cblxuZnVuY3Rpb24gaXNXb3JrZXJTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKCEoJ1dvcmtlcicgaW4gd2luZG93ICYmICdCbG9iJyBpbiB3aW5kb3cgJiYgJ1VSTCcgaW4gd2luZG93KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbJyddLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pO1xuICAgIHZhciB3b3JrZXJVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIHZhciBzdXBwb3J0ZWQ7XG4gICAgdmFyIHdvcmtlcjtcblxuICAgIHRyeSB7XG4gICAgICAgIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVVJMKTtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHdvcmtlclVSTCk7XG5cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuXG4vLyBJRTExIG9ubHkgc3VwcG9ydHMgYFVpbnQ4Q2xhbXBlZEFycmF5YCBhcyBvZiB2ZXJzaW9uXG4vLyBbS0IyOTI5NDM3XShodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9lbi11cy9rYi8yOTI5NDM3KVxuZnVuY3Rpb24gaXNVaW50OENsYW1wZWRBcnJheVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ1VpbnQ4Q2xhbXBlZEFycmF5JyBpbiB3aW5kb3c7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLXN1cHBvcnRlZC9pc3N1ZXMvMTlcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldztcbn1cblxudmFyIGlzV2ViR0xTdXBwb3J0ZWRDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZENhY2hlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG5cbiAgICBpZiAoaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdID0gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNXZWJHTFN1cHBvcnRlZENhY2hlW2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXRdO1xufVxuXG5pc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzID0ge1xuICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgYWxwaGE6IHRydWUsXG4gICAgc3RlbmNpbDogdHJ1ZSxcbiAgICBkZXB0aDogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG5cbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IE9iamVjdC5jcmVhdGUoaXNTdXBwb3J0ZWQud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7XG4gICAgYXR0cmlidXRlcy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDtcblxuICAgIGlmIChjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgnd2ViZ2wnLCBhdHRyaWJ1dGVzKSB8fFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuXG4gICAgfSBlbHNlIGlmIChjYW52YXMuc3VwcG9ydHNDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjYW52YXMuc3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMuc3VwcG9ydHNDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgYXR0cmlidXRlcylcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY29uc3QgRE9NID0ge307XG5leHBvcnQgZGVmYXVsdCBET007XG5cbkRPTS5jcmVhdGUgPSBmdW5jdGlvbiAodGFnTmFtZTogc3RyaW5nLCBjbGFzc05hbWU6ID9zdHJpbmcsIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIGVsLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICBpZiAoY29udGFpbmVyKSBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIHJldHVybiBlbDtcbn07XG5cbkRPTS5jcmVhdGVOUyA9IGZ1bmN0aW9uIChuYW1lc3BhY2VVUkk6IHN0cmluZywgdGFnTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdGFnTmFtZSk7XG4gICAgcmV0dXJuIGVsO1xufTtcblxuY29uc3QgZG9jU3R5bGUgPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xuXG5mdW5jdGlvbiB0ZXN0UHJvcChwcm9wcykge1xuICAgIGlmICghZG9jU3R5bGUpIHJldHVybiBwcm9wc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9wc1tpXSBpbiBkb2NTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wc1swXTtcbn1cblxuY29uc3Qgc2VsZWN0UHJvcCA9IHRlc3RQcm9wKFsndXNlclNlbGVjdCcsICdNb3pVc2VyU2VsZWN0JywgJ1dlYmtpdFVzZXJTZWxlY3QnLCAnbXNVc2VyU2VsZWN0J10pO1xubGV0IHVzZXJTZWxlY3Q7XG5cbkRPTS5kaXNhYmxlRHJhZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZG9jU3R5bGUgJiYgc2VsZWN0UHJvcCkge1xuICAgICAgICB1c2VyU2VsZWN0ID0gZG9jU3R5bGVbc2VsZWN0UHJvcF07XG4gICAgICAgIGRvY1N0eWxlW3NlbGVjdFByb3BdID0gJ25vbmUnO1xuICAgIH1cbn07XG5cbkRPTS5lbmFibGVEcmFnID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChkb2NTdHlsZSAmJiBzZWxlY3RQcm9wKSB7XG4gICAgICAgIGRvY1N0eWxlW3NlbGVjdFByb3BdID0gdXNlclNlbGVjdDtcbiAgICB9XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1Qcm9wID0gdGVzdFByb3AoWyd0cmFuc2Zvcm0nLCAnV2Via2l0VHJhbnNmb3JtJ10pO1xuXG5ET00uc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24oZWw6IEhUTUxFbGVtZW50LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzc3NTRcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgZWwuc3R5bGVbdHJhbnNmb3JtUHJvcF0gPSB2YWx1ZTtcbn07XG5cbi8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciB7cGFzc2l2ZTogZmFsc2V9IHN1cHBvcnQgaW4gYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXIuXG5sZXQgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuXG50cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgXCJwYXNzaXZlXCIsIHtcbiAgICAgICAgZ2V0KCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucywgb3B0aW9ucyk7XG59IGNhdGNoIChlcnIpIHtcbiAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG59XG5cbkRPTS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24odGFyZ2V0OiAqLCB0eXBlOiAqLCBjYWxsYmFjazogKiwgb3B0aW9uczoge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn0gPSB7fSkge1xuICAgIGlmICgncGFzc2l2ZScgaW4gb3B0aW9ucyAmJiBwYXNzaXZlU3VwcG9ydGVkKSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucy5jYXB0dXJlKTtcbiAgICB9XG59O1xuXG5ET00ucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHRhcmdldDogKiwgdHlwZTogKiwgY2FsbGJhY2s6ICosIG9wdGlvbnM6IHtwYXNzaXZlPzogYm9vbGVhbiwgY2FwdHVyZT86IGJvb2xlYW59ID0ge30pIHtcbiAgICBpZiAoJ3Bhc3NpdmUnIGluIG9wdGlvbnMgJiYgcGFzc2l2ZVN1cHBvcnRlZCkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMuY2FwdHVyZSk7XG4gICAgfVxufTtcblxuLy8gU3VwcHJlc3MgdGhlIG5leHQgY2xpY2ssIGJ1dCBvbmx5IGlmIGl0J3MgaW1tZWRpYXRlLlxuY29uc3Qgc3VwcHJlc3NDbGljazogTW91c2VFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbn07XG5cbkRPTS5zdXBwcmVzc0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdXBwcmVzc0NsaWNrLCB0cnVlKTtcbiAgICB9LCAwKTtcbn07XG5cbkRPTS5tb3VzZVBvcyA9IGZ1bmN0aW9uIChlbDogSFRNTEVsZW1lbnQsIGU6IE1vdXNlRXZlbnQgfCB3aW5kb3cuVG91Y2hFdmVudCB8IFRvdWNoKSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHQgPSB3aW5kb3cuVG91Y2hFdmVudCAmJiAoZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSA/IGUudG91Y2hlc1swXSA6IGU7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgdC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gZWwuY2xpZW50TGVmdCxcbiAgICAgICAgdC5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICApO1xufTtcblxuRE9NLnRvdWNoUG9zID0gZnVuY3Rpb24gKGVsOiBIVE1MRWxlbWVudCwgZTogVG91Y2hFdmVudCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgcG9pbnRzID0gW107XG4gICAgY29uc3QgdG91Y2hlcyA9IChlLnR5cGUgPT09ICd0b3VjaGVuZCcpID8gZS5jaGFuZ2VkVG91Y2hlcyA6IGUudG91Y2hlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcG9pbnRzLnB1c2gobmV3IFBvaW50KFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gZWwuY2xpZW50TGVmdCxcbiAgICAgICAgICAgIHRvdWNoZXNbaV0uY2xpZW50WSAtIHJlY3QudG9wIC0gZWwuY2xpZW50VG9wXG4gICAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuRE9NLm1vdXNlQnV0dG9uID0gZnVuY3Rpb24gKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBhc3NlcnQoZS50eXBlID09PSAnbW91c2Vkb3duJyB8fCBlLnR5cGUgPT09ICdtb3VzZXVwJyk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuSW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnICYmIGUuYnV0dG9uID09PSAyICYmIGUuY3RybEtleSAmJlxuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZignTUFDJykgPj0gMCkge1xuICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zMTMxOlxuICAgICAgICAvLyBGaXJlZm94IChkZXRlY3RlZCBieSBJbnN0YWxsVHJpZ2dlcikgb24gTWFjIGRldGVybWluZXMgZS5idXR0b24gPSAyIHdoZW5cbiAgICAgICAgLy8gdXNpbmcgQ29udHJvbCArIGxlZnQgY2xpY2tcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBlLmJ1dHRvbjtcbn07XG5cbkRPTS5yZW1vdmUgPSBmdW5jdGlvbihub2RlOiBIVE1MRWxlbWVudCkge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT04sIGdldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGJhc2VVUkw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfT4pOiBDYW5jZWxhYmxlIHtcbiAgICBsZXQganNvbjogYW55LCBpbWFnZSwgZXJyb3I7XG4gICAgY29uc3QgZm9ybWF0ID0gYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvID4gMSA/ICdAMngnIDogJyc7XG5cbiAgICBsZXQganNvblJlcXVlc3QgPSBnZXRKU09OKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3ByaXRlVVJMKGJhc2VVUkwsIGZvcm1hdCwgJy5qc29uJyksIFJlc291cmNlVHlwZS5TcHJpdGVKU09OKSwgKGVycjogP0Vycm9yLCBkYXRhOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgIGpzb25SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBqc29uID0gZGF0YTtcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGltYWdlUmVxdWVzdCA9IGdldEltYWdlKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3ByaXRlVVJMKGJhc2VVUkwsIGZvcm1hdCwgJy5wbmcnKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSwgKGVyciwgaW1nKSA9PiB7XG4gICAgICAgIGltYWdlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgaW1hZ2UgPSBpbWc7XG4gICAgICAgICAgICBtYXliZUNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1heWJlQ29tcGxldGUoKSB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGpzb24gJiYgaW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgeCwgeSwgc2RmLCBwaXhlbFJhdGlvLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9ID0ganNvbltpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9KTtcbiAgICAgICAgICAgICAgICBSR0JBSW1hZ2UuY29weShpbWFnZURhdGEsIGRhdGEsIHt4LCB5fSwge3g6IDAsIHk6IDB9LCB7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB7ZGF0YSwgcGl4ZWxSYXRpbywgc2RmLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsKCkge1xuICAgICAgICAgICAgaWYgKGpzb25SZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAganNvblJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltYWdlUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGltYWdlUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICBpbWFnZVJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2VEYXRhID0ge1xuICAgIGRhdGE6IFJHQkFJbWFnZSxcbiAgICB2ZXJzaW9uOiBudW1iZXIsXG4gICAgaGFzUmVuZGVyQ2FsbGJhY2s/OiBib29sZWFuLFxuICAgIHVzZXJJbWFnZT86IFN0eWxlSW1hZ2VJbnRlcmZhY2Vcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2VNZXRhZGF0YSA9IHtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgc2RmOiBib29sZWFuLFxuICAgIHN0cmV0Y2hYPzogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgc3RyZXRjaFk/OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBjb250ZW50PzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlSW1hZ2UgPSBTdHlsZUltYWdlRGF0YSAmIFN0eWxlSW1hZ2VNZXRhZGF0YTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZUludGVyZmFjZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSxcbiAgICByZW5kZXI/OiAoKSA9PiB2b2lkLFxuICAgIG9uQWRkPzogKG1hcDogTWFwLCBpZDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9uUmVtb3ZlPzogKCkgPT4gdm9pZFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICBjb25zdCB7dXNlckltYWdlfSA9IGltYWdlO1xuICAgIGlmICh1c2VySW1hZ2UgJiYgdXNlckltYWdlLnJlbmRlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gdXNlckltYWdlLnJlbmRlcigpO1xuICAgICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICAgICAgaW1hZ2UuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KHVzZXJJbWFnZS5kYXRhLmJ1ZmZlcikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIGltYWdlcy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogSW1hZ2VzIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBjYW4gYmUgcmVkcmF3biBmb3IgZXZlcnkgZnJhbWUuIFRoZXkgY2FuIGJlIHVzZWQgdG8gYW5pbWF0ZVxuICogaWNvbnMgYW5kIHBhdHRlcm5zIG9yIG1ha2UgdGhlbSByZXNwb25kIHRvIHVzZXIgaW5wdXQuIFN0eWxlIGltYWdlcyBjYW4gaW1wbGVtZW50IGFcbiAqIHtAbGluayBTdHlsZUltYWdlSW50ZXJmYWNlI3JlbmRlcn0gbWV0aG9kLiBUaGUgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSBmcmFtZSBhbmRcbiAqIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgaW1hZ2UuXG4gKlxuICogQGludGVyZmFjZSBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7VWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSBkYXRhXG4gKlxuICogQHNlZSBbQWRkIGFuIGFuaW1hdGVkIGljb24gdG8gdGhlIG1hcC5dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1hbmltYXRlZC8pXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmbGFzaGluZ1NxdWFyZSA9IHtcbiAqICAgICB3aWR0aDogNjQsXG4gKiAgICAgaGVpZ2h0OiA2NCxcbiAqICAgICBkYXRhOiBuZXcgVWludDhBcnJheSg2NCAqIDY0ICogNCksXG4gKlxuICogICAgIG9uQWRkOiBmdW5jdGlvbihtYXApIHtcbiAqICAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgLy8ga2VlcCByZXBhaW50aW5nIHdoaWxlIHRoZSBpY29uIGlzIG9uIHRoZSBtYXBcbiAqICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAqXG4gKiAgICAgICAgIC8vIGFsdGVybmF0ZSBiZXR3ZWVuIGJsYWNrIGFuZCB3aGl0ZSBiYXNlZCBvbiB0aGUgdGltZVxuICogICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSAlIDIgPT09IDAgID8gMjU1IDogMDtcbiAqXG4gKiAgICAgICAgIC8vIGNoZWNrIGlmIGltYWdlIG5lZWRzIHRvIGJlIGNoYW5nZWRcbiAqICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnByZXZpb3VzVmFsdWUpIHtcbiAqICAgICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICpcbiAqICAgICAgICAgICAgIHZhciBieXRlc1BlclBpeGVsID0gNDtcbiAqICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gKiAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSsrKSB7XG4gKiAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoeSAqIHRoaXMud2lkdGggKyB4KSAqIGJ5dGVzUGVyUGl4ZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAwXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDJdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAzXSA9IDI1NTtcbiAqICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICB9XG4gKlxuICogICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaW1hZ2UgY2hhbmdlZFxuICogICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKiAgfVxuICpcbiAqICBtYXAuYWRkSW1hZ2UoJ2ZsYXNoaW5nX3NxdWFyZScsIGZsYXNoaW5nU3F1YXJlKTtcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSBldmVyeSBmcmFtZSB3aGVyZSB0aGUgaWNvbiB3aWxsIGJlIHVzZWQuXG4gKiBUaGUgbWV0aG9kIGNhbiBvcHRpb25hbGx5IHVwZGF0ZSB0aGUgaW1hZ2UncyBgZGF0YWAgbWVtYmVyIHdpdGggYSBuZXcgaW1hZ2UuXG4gKlxuICogSWYgdGhlIG1ldGhvZCB1cGRhdGVzIHRoZSBpbWFnZSBpdCBtdXN0IHJldHVybiBgdHJ1ZWAgdG8gY29tbWl0IHRoZSBjaGFuZ2UuXG4gKiBJZiB0aGUgbWV0aG9kIHJldHVybnMgYGZhbHNlYCBvciBub3RoaW5nIHRoZSBpbWFnZSBpcyBhc3N1bWVkIHRvIG5vdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogSWYgdXBkYXRlcyBhcmUgaW5mcmVxdWVudCBpdCBtYXliZSBlYXNpZXIgdG8gdXNlIHtAbGluayBNYXAjdXBkYXRlSW1hZ2V9IHRvIHVwZGF0ZVxuICogdGhlIGltYWdlIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcmVuZGVyXG4gKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhpcyBtZXRob2QgdXBkYXRlZCB0aGUgaW1hZ2UuIGBmYWxzZWAgaWYgdGhlIGltYWdlIHdhcyBub3QgY2hhbmdlZC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIE1hcCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZW1vdmVkIGZyb20gdGhlIG1hcCB3aXRoIHtAbGluayBNYXAjcmVtb3ZlSW1hZ2V9LlxuICogVGhpcyBnaXZlcyB0aGUgaW1hZ2UgYSBjaGFuY2UgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFuZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtyZW5kZXJTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtCaW59IGZyb20gJ3BvdHBhY2snO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgUGF0dGVybiA9IHtcbiAgICBiaW46IEJpbixcbiAgICBwb3NpdGlvbjogSW1hZ2VQb3NpdGlvblxufTtcblxuLy8gV2hlbiBjb3BpZWQgaW50byB0aGUgYXRsYXMgdGV4dHVyZSwgaW1hZ2UgZGF0YSBpcyBwYWRkZWQgYnkgb25lIHBpeGVsIG9uIGVhY2ggc2lkZS4gSWNvblxuLy8gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBmdWxseSB0cmFuc3BhcmVudCBwaXhlbHMsIHdoaWxlIHBhdHRlcm4gaW1hZ2VzIGFyZSBwYWRkZWQgd2l0aCBhXG4vLyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhIHdyYXBwZWQgZnJvbSB0aGUgb3Bwb3NpdGUgc2lkZS4gSW4gYm90aCBjYXNlcywgdGhpcyBlbnN1cmVzIHRoZVxuLy8gY29ycmVjdCBiZWhhdmlvciBvZiBHTF9MSU5FQVIgdGV4dHVyZSBzYW1wbGluZyBtb2RlLlxuY29uc3QgcGFkZGluZyA9IDE7XG5cbi8qXG4gICAgSW1hZ2VNYW5hZ2VyIGRvZXMgdGhyZWUgdGhpbmdzOlxuXG4gICAgICAgIDEuIFRyYWNrcyByZXF1ZXN0cyBmb3IgaWNvbiBpbWFnZXMgZnJvbSB0aWxlIHdvcmtlcnMgYW5kIHNlbmRzIHJlc3BvbnNlcyB3aGVuIHRoZSByZXF1ZXN0cyBhcmUgZnVsZmlsbGVkLlxuICAgICAgICAyLiBCdWlsZHMgYSB0ZXh0dXJlIGF0bGFzIGZvciBwYXR0ZXJuIGltYWdlcy5cbiAgICAgICAgMy4gUmVyZW5kZXJzIHJlbmRlcmFibGUgaW1hZ2VzIG9uY2UgcGVyIGZyYW1lXG5cbiAgICBUaGVzZSBhcmUgZGlzcGFyYXRlIHJlc3BvbnNpYmlsaXRpZXMgYW5kIHNob3VsZCBldmVudHVhbGx5IGJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGNsYXNzZXMuIFdoZW4gd2UgaW1wbGVtZW50XG4gICAgZGF0YS1kcml2ZW4gc3VwcG9ydCBmb3IgYCotcGF0dGVybmAsIHdlJ2xsIGxpa2VseSB1c2UgcGVyLWJ1Y2tldCBwYXR0ZXJuIGF0bGFzZXMsIGFuZCB0aGF0IHdvdWxkIGJlIGEgZ29vZCB0aW1lXG4gICAgdG8gcmVmYWN0b3IgdGhpcy5cbiovXG5jbGFzcyBJbWFnZU1hbmFnZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpbWFnZXM6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgdXBkYXRlZEltYWdlczoge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICBjYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU6IHtbXzogc3RyaW5nXTogYm9vbGVhbn07XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHJlcXVlc3RvcnM6IEFycmF5PHtpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pn0+O1xuXG4gICAgcGF0dGVybnM6IHtbXzogc3RyaW5nXTogUGF0dGVybn07XG4gICAgYXRsYXNJbWFnZTogUkdCQUltYWdlO1xuICAgIGF0bGFzVGV4dHVyZTogP1RleHR1cmU7XG4gICAgZGlydHk6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzID0ge307XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGF0dGVybnMgPSB7fTtcbiAgICAgICAgdGhpcy5hdGxhc0ltYWdlID0gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IDEsIGhlaWdodDogMX0pO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkO1xuICAgIH1cblxuICAgIHNldExvYWRlZChsb2FkZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkID09PSBsb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xuXG4gICAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge2lkcywgY2FsbGJhY2t9IG9mIHRoaXMucmVxdWVzdG9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShpZHMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdG9ycyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoaWQ6IHN0cmluZyk6ID9TdHlsZUltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICB9XG5cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaW1hZ2VzW2lkXSk7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZShpZCwgaW1hZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlc1tpZF0gPSBpbWFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF92YWxpZGF0ZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlU3RyZXRjaChpbWFnZS5zdHJldGNoWCwgaW1hZ2UuZGF0YSAmJiBpbWFnZS5kYXRhLndpZHRoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwic3RyZXRjaFhcIiB2YWx1ZWApKSk7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVTdHJldGNoKGltYWdlLnN0cmV0Y2hZLCBpbWFnZS5kYXRhICYmIGltYWdlLmRhdGEuaGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwic3RyZXRjaFlcIiB2YWx1ZWApKSk7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVDb250ZW50KGltYWdlLmNvbnRlbnQsIGltYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgSW1hZ2UgXCIke2lkfVwiIGhhcyBpbnZhbGlkIFwiY29udGVudFwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZVN0cmV0Y2goc3RyZXRjaDogP0FycmF5PFtudW1iZXIsIG51bWJlcl0+IHwgdm9pZCwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghc3RyZXRjaCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCBsYXN0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHN0cmV0Y2gpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0WzBdIDwgbGFzdCB8fCBwYXJ0WzFdIDwgcGFydFswXSB8fCBzaXplIDwgcGFydFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgbGFzdCA9IHBhcnRbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlQ29udGVudChjb250ZW50OiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCB2b2lkLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoY29udGVudC5sZW5ndGggIT09IDQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMF0gPCAwIHx8IGltYWdlLmRhdGEud2lkdGggPCBjb250ZW50WzBdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzFdIDwgMCB8fCBpbWFnZS5kYXRhLmhlaWdodCA8IGNvbnRlbnRbMV0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMl0gPCAwIHx8IGltYWdlLmRhdGEud2lkdGggPCBjb250ZW50WzJdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzNdIDwgMCB8fCBpbWFnZS5kYXRhLmhlaWdodCA8IGNvbnRlbnRbM10pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMl0gPCBjb250ZW50WzBdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChjb250ZW50WzNdIDwgY29udGVudFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVJbWFnZShpZDogc3RyaW5nLCBpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgICAgICBjb25zdCBvbGRJbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgYXNzZXJ0KG9sZEltYWdlKTtcbiAgICAgICAgYXNzZXJ0KG9sZEltYWdlLmRhdGEud2lkdGggPT09IGltYWdlLmRhdGEud2lkdGgpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS5oZWlnaHQgPT09IGltYWdlLmRhdGEuaGVpZ2h0KTtcbiAgICAgICAgaW1hZ2UudmVyc2lvbiA9IG9sZEltYWdlLnZlcnNpb24gKyAxO1xuICAgICAgICB0aGlzLmltYWdlc1tpZF0gPSBpbWFnZTtcbiAgICAgICAgdGhpcy51cGRhdGVkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQodGhpcy5pbWFnZXNbaWRdKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBhdHRlcm5zW2lkXTtcblxuICAgICAgICBpZiAoaW1hZ2UudXNlckltYWdlICYmIGltYWdlLnVzZXJJbWFnZS5vblJlbW92ZSkge1xuICAgICAgICAgICAgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaXN0SW1hZ2VzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpO1xuICAgIH1cblxuICAgIGdldEltYWdlcyhpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICAvLyBJZiB0aGUgc3ByaXRlIGhhcyBiZWVuIGxvYWRlZCwgb3IgaWYgYWxsIHRoZSBpY29uIGRlcGVuZGVuY2llcyBhcmUgYWxyZWFkeSBwcmVzZW50XG4gICAgICAgIC8vIChpLmUuIGlmIHRoZXkndmUgYmVlbiBhZGRlZCB2aWEgcnVudGltZSBzdHlsaW5nKSwgdGhlbiBub3RpZnkgdGhlIHJlcXVlc3RvciBpbW1lZGlhdGVseS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkZWxheSBub3RpZmljYXRpb24gdW50aWwgdGhlIHNwcml0ZSBpcyBsb2FkZWQuIEF0IHRoYXQgcG9pbnQsIGlmIGFueSBvZiB0aGVcbiAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGFyZSBzdGlsbCB1bmF2YWlsYWJsZSwgd2UnbGwganVzdCBhc3N1bWUgdGhleSBhcmUgcGVybWFuZW50bHkgbWlzc2luZy5cbiAgICAgICAgbGV0IGhhc0FsbERlcGVuZGVuY2llcyA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRlZCgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZXNbaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbERlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0xvYWRlZCgpIHx8IGhhc0FsbERlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGlkcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkcywgY2FsbGJhY2t9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9ub3RpZnkoaWRzOiBBcnJheTxzdHJpbmc+LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfT4pIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdzdHlsZWltYWdlbWlzc2luZycsIHtpZH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGltYWdlIHNvIHRoYXQgb3VyIG93biBjb3B5IG9mIGl0cyBBcnJheUJ1ZmZlciBkb2Vzbid0IGdldCB0cmFuc2ZlcnJlZC5cbiAgICAgICAgICAgICAgICByZXNwb25zZVtpZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGltYWdlLmRhdGEuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICAgICAgcGl4ZWxSYXRpbzogaW1hZ2UucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgc2RmOiBpbWFnZS5zZGYsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGltYWdlLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hYOiBpbWFnZS5zdHJldGNoWCxcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaFk6IGltYWdlLnN0cmV0Y2hZLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBpbWFnZS5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBoYXNSZW5kZXJDYWxsYmFjazogQm9vbGVhbihpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLnJlbmRlcilcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgSW1hZ2UgXCIke2lkfVwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgdGhlIGltYWdlIHdpdGggbWFwLmFkZEltYWdlKCkgb3IgYSBcInNwcml0ZVwiIHByb3BlcnR5IGluIHlvdXIgc3R5bGUuIFlvdSBjYW4gcHJvdmlkZSBtaXNzaW5nIGltYWdlcyBieSBsaXN0ZW5pbmcgZm9yIHRoZSBcInN0eWxlaW1hZ2VtaXNzaW5nXCIgbWFwIGV2ZW50LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3R1ZmZcblxuICAgIGdldFBpeGVsU2l6ZSgpIHtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5hdGxhc0ltYWdlO1xuICAgICAgICByZXR1cm4ge3dpZHRoLCBoZWlnaHR9O1xuICAgIH1cblxuICAgIGdldFBhdHRlcm4oaWQ6IHN0cmluZyk6ID9JbWFnZVBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5nZXRJbWFnZShpZCk7XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdHRlcm4gJiYgcGF0dGVybi5wb3NpdGlvbi52ZXJzaW9uID09PSBpbWFnZS52ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybi5wb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgY29uc3QgdyA9IGltYWdlLmRhdGEud2lkdGggKyBwYWRkaW5nICogMjtcbiAgICAgICAgICAgIGNvbnN0IGggPSBpbWFnZS5kYXRhLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgY29uc3QgYmluID0ge3csIGgsIHg6IDAsIHk6IDB9O1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgSW1hZ2VQb3NpdGlvbihiaW4sIGltYWdlKTtcbiAgICAgICAgICAgIHRoaXMucGF0dGVybnNbaWRdID0ge2JpbiwgcG9zaXRpb259O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0dGVybi5wb3NpdGlvbi52ZXJzaW9uID0gaW1hZ2UudmVyc2lvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhdHRlcm5BdGxhcygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5zW2lkXS5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBpZiAoIXRoaXMuYXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuYXRsYXNJbWFnZSwgZ2wuUkdCQSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSk7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVBhdHRlcm5BdGxhcygpIHtcbiAgICAgICAgY29uc3QgYmlucyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGJpbnMucHVzaCh0aGlzLnBhdHRlcm5zW2lkXS5iaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcblxuICAgICAgICBjb25zdCBkc3QgPSB0aGlzLmF0bGFzSW1hZ2U7XG4gICAgICAgIGRzdC5yZXNpemUoe3dpZHRoOiB3IHx8IDEsIGhlaWdodDogaCB8fCAxfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCB7YmlufSA9IHRoaXMucGF0dGVybnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGJpbi54ICsgcGFkZGluZztcbiAgICAgICAgICAgIGNvbnN0IHkgPSBiaW4ueSArIHBhZGRpbmc7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSB0aGlzLmltYWdlc1tpZF0uZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBzcmMud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoID0gc3JjLmhlaWdodDtcblxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiAwfSwge3gsIHl9LCB7d2lkdGg6IHcsIGhlaWdodDogaH0pO1xuXG4gICAgICAgICAgICAvLyBBZGQgMSBwaXhlbCB3cmFwcGVkIHBhZGRpbmcgb24gZWFjaCBzaWRlIG9mIHRoZSBpbWFnZS5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogaCAtIDF9LCB7eCwgeTogeSAtIDF9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBUXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6ICAgICAwfSwge3gsIHk6IHkgKyBofSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gQlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiB3IC0gMSwgeTogMH0sIHt4OiB4IC0gMSwgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIExcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgICAgIHk6IDB9LCB7eDogeCArIHcsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBSXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBiZWdpbkZyYW1lKCkge1xuICAgICAgICB0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZSA9IHt9O1xuICAgIH1cblxuICAgIGRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzKGlkczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuXG4gICAgICAgICAgICAvLyB0aGUgY2FsbGJhY2sgZm9yIHRoZSBpbWFnZSB3YXMgYWxyZWFkeSBkaXNwYXRjaGVkIGZvciBhIGRpZmZlcmVudCBmcmFtZVxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW2lkXSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtpZF0gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgICAgIGFzc2VydChpbWFnZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSByZW5kZXJTdHlsZUltYWdlKGltYWdlKTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZU1hbmFnZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEFycmF5QnVmZmVyLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCBwYXJzZUdseXBoUEJGIGZyb20gJy4vcGFyc2VfZ2x5cGhfcGJmJztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4vc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGZvbnRzdGFjazogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFRlbXBsYXRlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0+KSB7XG4gICAgY29uc3QgYmVnaW4gPSByYW5nZSAqIDI1NjtcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIDI1NTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KFxuICAgICAgICByZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVHbHlwaHNVUkwodXJsVGVtcGxhdGUpXG4gICAgICAgICAgICAucmVwbGFjZSgne2ZvbnRzdGFja30nLCBmb250c3RhY2spXG4gICAgICAgICAgICAucmVwbGFjZSgne3JhbmdlfScsIGAke2JlZ2lufS0ke2VuZH1gKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlLkdseXBocyk7XG5cbiAgICBnZXRBcnJheUJ1ZmZlcihyZXF1ZXN0LCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9BcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdseXBoIG9mIHBhcnNlR2x5cGhQQkYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBnbHlwaHNbZ2x5cGguaWRdID0gZ2x5cGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGdseXBocyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUaW55U0RGO1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IFRpbnlTREY7XG5cbnZhciBJTkYgPSAxZTIwO1xuXG5mdW5jdGlvbiBUaW55U0RGKGZvbnRTaXplLCBidWZmZXIsIHJhZGl1cywgY3V0b2ZmLCBmb250RmFtaWx5LCBmb250V2VpZ2h0KSB7XG4gICAgdGhpcy5mb250U2l6ZSA9IGZvbnRTaXplIHx8IDI0O1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyID09PSB1bmRlZmluZWQgPyAzIDogYnVmZmVyO1xuICAgIHRoaXMuY3V0b2ZmID0gY3V0b2ZmIHx8IDAuMjU7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gZm9udEZhbWlseSB8fCAnc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250V2VpZ2h0ID0gZm9udFdlaWdodCB8fCAnbm9ybWFsJztcbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCA4O1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplID0gdGhpcy5mb250U2l6ZSArIHRoaXMuYnVmZmVyICogMjtcblxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmNhbnZhcy5oZWlnaHQgPSBzaXplO1xuXG4gICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHRoaXMuY3R4LmZvbnQgPSB0aGlzLmZvbnRXZWlnaHQgKyAnICcgKyB0aGlzLmZvbnRTaXplICsgJ3B4ICcgKyB0aGlzLmZvbnRGYW1pbHk7XG4gICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gJ2JsYWNrJztcblxuICAgIC8vIHRlbXBvcmFyeSBhcnJheXMgZm9yIHRoZSBkaXN0YW5jZSB0cmFuc2Zvcm1cbiAgICB0aGlzLmdyaWRPdXRlciA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSAqIHNpemUpO1xuICAgIHRoaXMuZ3JpZElubmVyID0gbmV3IEZsb2F0NjRBcnJheShzaXplICogc2l6ZSk7XG4gICAgdGhpcy5mID0gbmV3IEZsb2F0NjRBcnJheShzaXplKTtcbiAgICB0aGlzLmQgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUpO1xuICAgIHRoaXMueiA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSArIDEpO1xuICAgIHRoaXMudiA9IG5ldyBJbnQxNkFycmF5KHNpemUpO1xuXG4gICAgLy8gaGFjayBhcm91bmQgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODUyXG4gICAgdGhpcy5taWRkbGUgPSBNYXRoLnJvdW5kKChzaXplIC8gMikgKiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdHZWNrby8nKSA+PSAwID8gMS4yIDogMSkpO1xufVxuXG5UaW55U0RGLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKGNoYXIpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5zaXplLCB0aGlzLnNpemUpO1xuICAgIHRoaXMuY3R4LmZpbGxUZXh0KGNoYXIsIHRoaXMuYnVmZmVyLCB0aGlzLm1pZGRsZSk7XG5cbiAgICB2YXIgaW1nRGF0YSA9IHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLCAwLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSk7XG4gICAgdmFyIGFscGhhQ2hhbm5lbCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0aGlzLnNpemUgKiB0aGlzLnNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemUgKiB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB2YXIgYSA9IGltZ0RhdGEuZGF0YVtpICogNCArIDNdIC8gMjU1OyAvLyBhbHBoYSB2YWx1ZVxuICAgICAgICB0aGlzLmdyaWRPdXRlcltpXSA9IGEgPT09IDEgPyAwIDogYSA9PT0gMCA/IElORiA6IE1hdGgucG93KE1hdGgubWF4KDAsIDAuNSAtIGEpLCAyKTtcbiAgICAgICAgdGhpcy5ncmlkSW5uZXJbaV0gPSBhID09PSAxID8gSU5GIDogYSA9PT0gMCA/IDAgOiBNYXRoLnBvdyhNYXRoLm1heCgwLCBhIC0gMC41KSwgMik7XG4gICAgfVxuXG4gICAgZWR0KHRoaXMuZ3JpZE91dGVyLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSwgdGhpcy5mLCB0aGlzLmQsIHRoaXMudiwgdGhpcy56KTtcbiAgICBlZHQodGhpcy5ncmlkSW5uZXIsIHRoaXMuc2l6ZSwgdGhpcy5zaXplLCB0aGlzLmYsIHRoaXMuZCwgdGhpcy52LCB0aGlzLnopO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICAgIHZhciBkID0gdGhpcy5ncmlkT3V0ZXJbaV0gLSB0aGlzLmdyaWRJbm5lcltpXTtcbiAgICAgICAgYWxwaGFDaGFubmVsW2ldID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDI1NSAtIDI1NSAqIChkIC8gdGhpcy5yYWRpdXMgKyB0aGlzLmN1dG9mZikpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFscGhhQ2hhbm5lbDtcbn07XG5cbi8vIDJEIEV1Y2xpZGVhbiBkaXN0YW5jZSB0cmFuc2Zvcm0gYnkgRmVsemVuc3p3YWxiICYgSHV0dGVubG9jaGVyIGh0dHBzOi8vY3MuYnJvd24uZWR1L35wZmYvcGFwZXJzL2R0LWZpbmFsLnBkZlxuZnVuY3Rpb24gZWR0KGRhdGEsIHdpZHRoLCBoZWlnaHQsIGYsIGQsIHYsIHopIHtcbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgZlt5XSA9IGRhdGFbeSAqIHdpZHRoICsgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWR0MWQoZiwgZCwgdiwgeiwgaGVpZ2h0KTtcbiAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBkYXRhW3kgKiB3aWR0aCArIHhdID0gZFt5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGZbeF0gPSBkYXRhW3kgKiB3aWR0aCArIHhdO1xuICAgICAgICB9XG4gICAgICAgIGVkdDFkKGYsIGQsIHYsIHosIHdpZHRoKTtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGRhdGFbeSAqIHdpZHRoICsgeF0gPSBNYXRoLnNxcnQoZFt4XSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIDFEIHNxdWFyZWQgZGlzdGFuY2UgdHJhbnNmb3JtXG5mdW5jdGlvbiBlZHQxZChmLCBkLCB2LCB6LCBuKSB7XG4gICAgdlswXSA9IDA7XG4gICAgelswXSA9IC1JTkY7XG4gICAgelsxXSA9ICtJTkY7XG5cbiAgICBmb3IgKHZhciBxID0gMSwgayA9IDA7IHEgPCBuOyBxKyspIHtcbiAgICAgICAgdmFyIHMgPSAoKGZbcV0gKyBxICogcSkgLSAoZlt2W2tdXSArIHZba10gKiB2W2tdKSkgLyAoMiAqIHEgLSAyICogdltrXSk7XG4gICAgICAgIHdoaWxlIChzIDw9IHpba10pIHtcbiAgICAgICAgICAgIGstLTtcbiAgICAgICAgICAgIHMgPSAoKGZbcV0gKyBxICogcSkgLSAoZlt2W2tdXSArIHZba10gKiB2W2tdKSkgLyAoMiAqIHEgLSAyICogdltrXSk7XG4gICAgICAgIH1cbiAgICAgICAgaysrO1xuICAgICAgICB2W2tdID0gcTtcbiAgICAgICAgeltrXSA9IHM7XG4gICAgICAgIHpbayArIDFdID0gK0lORjtcbiAgICB9XG5cbiAgICBmb3IgKHEgPSAwLCBrID0gMDsgcSA8IG47IHErKykge1xuICAgICAgICB3aGlsZSAoeltrICsgMV0gPCBxKSBrKys7XG4gICAgICAgIGRbcV0gPSAocSAtIHZba10pICogKHEgLSB2W2tdKSArIGZbdltrXV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGxvYWRHbHlwaFJhbmdlIGZyb20gJy4uL3N0eWxlL2xvYWRfZ2x5cGhfcmFuZ2UnO1xuXG5pbXBvcnQgVGlueVNERiBmcm9tICdAbWFwYm94L3Rpbnktc2RmJztcbmltcG9ydCBpc0NoYXIgZnJvbSAnLi4vdXRpbC9pc19jaGFyX2luX3VuaWNvZGVfYmxvY2snO1xuaW1wb3J0IHthc3luY0FsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG50eXBlIEVudHJ5ID0ge1xuICAgIC8vIG51bGwgbWVhbnMgd2UndmUgcmVxdWVzdGVkIHRoZSByYW5nZSwgYnV0IHRoZSBnbHlwaCB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICBnbHlwaHM6IHtbaWQ6IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSxcbiAgICByZXF1ZXN0czoge1tyYW5nZTogbnVtYmVyXTogQXJyYXk8Q2FsbGJhY2s8e1tfOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0+Pn0sXG4gICAgdGlueVNERj86IFRpbnlTREZcbn07XG5cbmNsYXNzIEdseXBoTWFuYWdlciB7XG4gICAgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogP3N0cmluZztcbiAgICBlbnRyaWVzOiB7W186IHN0cmluZ106IEVudHJ5fTtcbiAgICB1cmw6ID9zdHJpbmc7XG5cbiAgICAvLyBleHBvc2VkIGFzIHN0YXRpY3MgdG8gZW5hYmxlIHN0dWJiaW5nIGluIHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgbG9hZEdseXBoUmFuZ2U6IHR5cGVvZiBsb2FkR2x5cGhSYW5nZTtcbiAgICBzdGF0aWMgVGlueVNERjogQ2xhc3M8VGlueVNERj47XG5cbiAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogP3N0cmluZykge1xuICAgICAgICB0aGlzLnJlcXVlc3RNYW5hZ2VyID0gcmVxdWVzdE1hbmFnZXI7XG4gICAgICAgIHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID0gbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICB0aGlzLmVudHJpZXMgPSB7fTtcbiAgICB9XG5cbiAgICBzZXRVUkwodXJsOiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgIH1cblxuICAgIGdldEdseXBocyhnbHlwaHM6IHtbc3RhY2s6IHN0cmluZ106IEFycmF5PG51bWJlcj59LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tzdGFjazogc3RyaW5nXToge1tpZDogbnVtYmVyXTogP1N0eWxlR2x5cGh9fT4pIHtcbiAgICAgICAgY29uc3QgYWxsID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ2x5cGhzW3N0YWNrXSkge1xuICAgICAgICAgICAgICAgIGFsbC5wdXNoKHtzdGFjaywgaWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jQWxsKGFsbCwgKHtzdGFjaywgaWR9LCBjYWxsYmFjazogQ2FsbGJhY2s8e3N0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIsIGdseXBoOiA/U3R5bGVHbHlwaH0+KSA9PiB7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmVudHJpZXNbc3RhY2tdO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5lbnRyaWVzW3N0YWNrXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHM6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGdseXBoID0gZW50cnkuZ2x5cGhzW2lkXTtcbiAgICAgICAgICAgIGlmIChnbHlwaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3N0YWNrLCBpZCwgZ2x5cGh9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdseXBoID0gdGhpcy5fdGlueVNERihlbnRyeSwgc3RhY2ssIGlkKTtcbiAgICAgICAgICAgIGlmIChnbHlwaCkge1xuICAgICAgICAgICAgICAgIGVudHJ5LmdseXBoc1tpZF0gPSBnbHlwaDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBNYXRoLmZsb29yKGlkIC8gMjU2KTtcbiAgICAgICAgICAgIGlmIChyYW5nZSAqIDI1NiA+IDY1NTM1KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gZW50cnkucmVxdWVzdHNbcmFuZ2VdO1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gZW50cnkucmVxdWVzdHNbcmFuZ2VdID0gW107XG4gICAgICAgICAgICAgICAgR2x5cGhNYW5hZ2VyLmxvYWRHbHlwaFJhbmdlKHN0YWNrLCByYW5nZSwgKHRoaXMudXJsOiBhbnkpLCB0aGlzLnJlcXVlc3RNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAoZXJyLCByZXNwb25zZTogP3tbXzogbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaCgraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5nbHlwaHNbK2lkXSA9IHJlc3BvbnNlWytpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNiIG9mIHJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZW50cnkucmVxdWVzdHNbcmFuZ2VdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVxdWVzdHMucHVzaCgoZXJyLCByZXN1bHQ6ID97W186IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaDogcmVzdWx0W2lkXSB8fCBudWxsfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnIsIGdseXBoczogP0FycmF5PHtzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyLCBnbHlwaDogP1N0eWxlR2x5cGh9PikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7c3RhY2ssIGlkLCBnbHlwaH0gb2YgZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb25lIHRoZSBnbHlwaCBzbyB0aGF0IG91ciBvd24gY29weSBvZiBpdHMgQXJyYXlCdWZmZXIgZG9lc24ndCBnZXQgdHJhbnNmZXJyZWQuXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHRbc3RhY2tdIHx8IChyZXN1bHRbc3RhY2tdID0ge30pKVtpZF0gPSBnbHlwaCAmJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2x5cGguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXA6IGdseXBoLmJpdG1hcC5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljczogZ2x5cGgubWV0cmljc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuICAgICAgICByZXR1cm4gISF0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSAmJlxuICAgICAgICAgICAgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnSGFuZ3VsIFN5bGxhYmxlcyddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnSGlyYWdhbmEnXShpZCkgfHxcbiAgICAgICAgICAgICAgICBpc0NoYXJbJ0thdGFrYW5hJ10oaWQpKTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuZXctY2FwICovXG4gICAgfVxuXG4gICAgX3RpbnlTREYoZW50cnk6IEVudHJ5LCBzdGFjazogc3RyaW5nLCBpZDogbnVtYmVyKTogP1N0eWxlR2x5cGgge1xuICAgICAgICBjb25zdCBmYW1pbHkgPSB0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW55U0RGID0gZW50cnkudGlueVNERjtcbiAgICAgICAgaWYgKCF0aW55U0RGKSB7XG4gICAgICAgICAgICBsZXQgZm9udFdlaWdodCA9ICc0MDAnO1xuICAgICAgICAgICAgaWYgKC9ib2xkL2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzkwMCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9tZWRpdW0vaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnNTAwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL2xpZ2h0L2kudGVzdChzdGFjaykpIHtcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gJzIwMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aW55U0RGID0gZW50cnkudGlueVNERiA9IG5ldyBHbHlwaE1hbmFnZXIuVGlueVNERigyNCwgMywgOCwgLjI1LCBmYW1pbHksIGZvbnRXZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYml0bWFwOiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IDMwLCBoZWlnaHQ6IDMwfSwgdGlueVNERi5kcmF3KFN0cmluZy5mcm9tQ2hhckNvZGUoaWQpKSksXG4gICAgICAgICAgICBtZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI0LFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjQsXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB0b3A6IC04LFxuICAgICAgICAgICAgICAgIGFkdmFuY2U6IDI0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5HbHlwaE1hbmFnZXIubG9hZEdseXBoUmFuZ2UgPSBsb2FkR2x5cGhSYW5nZTtcbkdseXBoTWFuYWdlci5UaW55U0RGID0gVGlueVNERjtcblxuZXhwb3J0IGRlZmF1bHQgR2x5cGhNYW5hZ2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge2VuZHNXaXRoLCBleHRlbmQsIHNwaGVyaWNhbFRvQ2FydGVzaWFufSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0eWxlLFxuICAgIHZhbGlkYXRlTGlnaHQsXG4gICAgZW1pdFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7U3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQge1Byb3BlcnRpZXMsIFRyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZCwgRGF0YUNvbnN0YW50UHJvcGVydHl9IGZyb20gJy4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVZhbHVlLFxuICAgIFRyYW5zaXRpb25QYXJhbWV0ZXJzXG59IGZyb20gJy4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtMaWdodFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIExpZ2h0UG9zaXRpb24gPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB6OiBudW1iZXJcbn07XG5cbmNsYXNzIExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSBpbXBsZW1lbnRzIFByb3BlcnR5PFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgTGlnaHRQb3NpdGlvbj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHN0eWxlU3BlYy5saWdodC5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgTGlnaHRQb3NpdGlvbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogTGlnaHRQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiBzcGhlcmljYWxUb0NhcnRlc2lhbih2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMpKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBMaWdodFBvc2l0aW9uLCBiOiBMaWdodFBvc2l0aW9uLCB0OiBudW1iZXIpOiBMaWdodFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgIHk6IGludGVycG9sYXRlKGEueSwgYi55LCB0KSxcbiAgICAgICAgICAgIHo6IGludGVycG9sYXRlKGEueiwgYi56LCB0KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbnR5cGUgUHJvcHMgPSB7fFxuICAgIFwiYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwicG9zaXRpb25cIjogTGlnaHRQb3NpdGlvblByb3BlcnR5LFxuICAgIFwiY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaW50ZW5zaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJhbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5hbmNob3IpLFxuICAgIFwicG9zaXRpb25cIjogbmV3IExpZ2h0UG9zaXRpb25Qcm9wZXJ0eSgpLFxuICAgIFwiY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5jb2xvciksXG4gICAgXCJpbnRlbnNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpLFxufSk7XG5cbmNvbnN0IFRSQU5TSVRJT05fU1VGRklYID0gJy10cmFuc2l0aW9uJztcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGxpZ2h0IHVzZWQgdG8gbGlnaHQgZXh0cnVkZWQgZmVhdHVyZXMuXG4gKi9cbmNsYXNzIExpZ2h0IGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX3RyYW5zaXRpb25hYmxlOiBUcmFuc2l0aW9uYWJsZTxQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmc6IFRyYW5zaXRpb25pbmc8UHJvcHM+O1xuICAgIHByb3BlcnRpZXM6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxpZ2h0T3B0aW9ucz86IExpZ2h0U3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZSA9IG5ldyBUcmFuc2l0aW9uYWJsZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgdGhpcy5zZXRMaWdodChsaWdodE9wdGlvbnMpO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nID0gdGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHNldExpZ2h0KGxpZ2h0PzogTGlnaHRTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVMaWdodCwgbGlnaHQsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbGlnaHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGlnaHRbbmFtZV07XG4gICAgICAgICAgICBpZiAoZW5kc1dpdGgobmFtZSwgVFJBTlNJVElPTl9TVUZGSVgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmcgPSB0aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZyk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGUodmFsaWRhdGU6IEZ1bmN0aW9uLCB2YWx1ZTogbWl4ZWQsIG9wdGlvbnM/OiB7dmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlLmNhbGwodmFsaWRhdGVTdHlsZSwgZXh0ZW5kKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI0MDdcbiAgICAgICAgICAgIHN0eWxlOiB7Z2x5cGhzOiB0cnVlLCBzcHJpdGU6IHRydWV9LFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQSBMaW5lQXRsYXMgbGV0cyB1cyByZXVzZSByZW5kZXJlZCBkYXNoZWQgbGluZXNcbiAqIGJ5IHdyaXRpbmcgbWFueSBvZiB0aGVtIHRvIGEgdGV4dHVyZSBhbmQgdGhlbiBmZXRjaGluZyB0aGVpciBwb3NpdGlvbnNcbiAqIHVzaW5nIC5nZXREYXNoLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTGluZUF0bGFzIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIG5leHRSb3c6IG51bWJlcjtcbiAgICBieXRlczogbnVtYmVyO1xuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgZGFzaEVudHJ5OiB7W186IHN0cmluZ106IGFueX07XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlO1xuXG4gICAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5uZXh0Um93ID0gMDtcblxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheSh0aGlzLndpZHRoICogdGhpcy5oZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuZGFzaEVudHJ5ID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG9yIGNyZWF0ZSBhIGRhc2ggbGluZSBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBkYXNoYXJyYXlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJvdW5kIHdoZXRoZXIgdG8gYWRkIGNpcmNsZSBjYXBzIGluIGJldHdlZW4gZGFzaCBzZWdtZW50c1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBvc2l0aW9uIG9mIGRhc2ggdGV4dHVyZSBpbiB7IHksIGhlaWdodCwgd2lkdGggfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0RGFzaChkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIHJvdW5kOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGRhc2hhcnJheS5qb2luKFwiLFwiKSArIFN0cmluZyhyb3VuZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhc2hFbnRyeVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hFbnRyeVtrZXldID0gdGhpcy5hZGREYXNoKGRhc2hhcnJheSwgcm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhc2hFbnRyeVtrZXldO1xuICAgIH1cblxuICAgIGdldERhc2hSYW5nZXMoZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCBsaW5lQXRsYXNXaWR0aDogbnVtYmVyLCBzdHJldGNoOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSWYgZGFzaGFycmF5IGhhcyBhbiBvZGQgbGVuZ3RoLCBib3RoIHRoZSBmaXJzdCBhbmQgbGFzdCBwYXJ0c1xuICAgICAgICAvLyBhcmUgZGFzaGVzIGFuZCBzaG91bGQgYmUgam9pbmVkIHNlYW1sZXNzbHkuXG4gICAgICAgIGNvbnN0IG9kZERhc2hBcnJheSA9IGRhc2hhcnJheS5sZW5ndGggJSAyID09PSAxO1xuXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuXG4gICAgICAgIGxldCBsZWZ0ID0gb2RkRGFzaEFycmF5ID8gLWRhc2hhcnJheVtkYXNoYXJyYXkubGVuZ3RoIC0gMV0gKiBzdHJldGNoIDogMDtcbiAgICAgICAgbGV0IHJpZ2h0ID0gZGFzaGFycmF5WzBdICogc3RyZXRjaDtcbiAgICAgICAgbGV0IGlzRGFzaCA9IHRydWU7XG5cbiAgICAgICAgcmFuZ2VzLnB1c2goe2xlZnQsIHJpZ2h0LCBpc0Rhc2gsIHplcm9MZW5ndGg6IGRhc2hhcnJheVswXSA9PT0gMH0pO1xuXG4gICAgICAgIGxldCBjdXJyZW50RGFzaExlbmd0aCA9IGRhc2hhcnJheVswXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXNoYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlzRGFzaCA9ICFpc0Rhc2g7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhc2hMZW5ndGggPSBkYXNoYXJyYXlbaV07XG4gICAgICAgICAgICBsZWZ0ID0gY3VycmVudERhc2hMZW5ndGggKiBzdHJldGNoO1xuICAgICAgICAgICAgY3VycmVudERhc2hMZW5ndGggKz0gZGFzaExlbmd0aDtcbiAgICAgICAgICAgIHJpZ2h0ID0gY3VycmVudERhc2hMZW5ndGggKiBzdHJldGNoO1xuXG4gICAgICAgICAgICByYW5nZXMucHVzaCh7bGVmdCwgcmlnaHQsIGlzRGFzaCwgemVyb0xlbmd0aDogZGFzaExlbmd0aCA9PT0gMH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICBhZGRSb3VuZERhc2gocmFuZ2VzOiBPYmplY3QsIHN0cmV0Y2g6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGhhbGZTdHJldGNoID0gc3RyZXRjaCAvIDI7XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IC1uOyB5IDw9IG47IHkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5uZXh0Um93ICsgbiArIHk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud2lkdGggKiByb3c7XG4gICAgICAgICAgICBsZXQgY3VyckluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCByYW5nZSA9IHJhbmdlc1tjdXJySW5kZXhdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMud2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh4IC8gcmFuZ2UucmlnaHQgPiAxKSB7IHJhbmdlID0gcmFuZ2VzWysrY3VyckluZGV4XTsgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdExlZnQgPSBNYXRoLmFicyh4IC0gcmFuZ2UubGVmdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdFJpZ2h0ID0gTWF0aC5hYnMoeCAtIHJhbmdlLnJpZ2h0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5EaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICAgICAgbGV0IHNpZ25lZERpc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdE1pZGRsZSA9ICB5IC8gbiAqIChoYWxmU3RyZXRjaCArIDEpO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Rhc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdEVkZ2UgPSBoYWxmU3RyZXRjaCAtIE1hdGguYWJzKGRpc3RNaWRkbGUpO1xuICAgICAgICAgICAgICAgICAgICBzaWduZWREaXN0YW5jZSA9IE1hdGguc3FydChtaW5EaXN0ICogbWluRGlzdCArIGRpc3RFZGdlICogZGlzdEVkZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZERpc3RhbmNlID0gaGFsZlN0cmV0Y2ggLSBNYXRoLnNxcnQobWluRGlzdCAqIG1pbkRpc3QgKyBkaXN0TWlkZGxlICogZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4ICsgeF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgMTI4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRSZWd1bGFyRGFzaChyYW5nZXM6IE9iamVjdCkge1xuXG4gICAgICAgIC8vIENvbGxhcHNlIGFueSB6ZXJvLWxlbmd0aCByYW5nZVxuICAgICAgICAvLyBDb2xsYXBzZSBuZWlnaGJvdXJpbmcgc2FtZS10eXBlIHBhcnRzIGludG8gYSBzaW5nbGUgcGFydFxuICAgICAgICBmb3IgKGxldCBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcmFuZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJhbmdlc1tpICsgMV07XG4gICAgICAgICAgICBpZiAocGFydC56ZXJvTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCAmJiBuZXh0LmlzRGFzaCA9PT0gcGFydC5pc0Rhc2gpIHtcbiAgICAgICAgICAgICAgICBuZXh0LmxlZnQgPSBwYXJ0LmxlZnQ7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbWJpbmUgdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzIGlmIHBvc3NpYmxlXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gcmFuZ2VzWzBdO1xuICAgICAgICBjb25zdCBsYXN0ID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGZpcnN0LmlzRGFzaCA9PT0gbGFzdC5pc0Rhc2gpIHtcbiAgICAgICAgICAgIGZpcnN0LmxlZnQgPSBsYXN0LmxlZnQgLSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgbGFzdC5yaWdodCA9IGZpcnN0LnJpZ2h0ICsgdGhpcy53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53aWR0aCAqIHRoaXMubmV4dFJvdztcbiAgICAgICAgbGV0IGN1cnJJbmRleCA9IDA7XG4gICAgICAgIGxldCByYW5nZSA9IHJhbmdlc1tjdXJySW5kZXhdO1xuXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBpZiAoeCAvIHJhbmdlLnJpZ2h0ID4gMSkge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VzWysrY3VyckluZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzdExlZnQgPSBNYXRoLmFicyh4IC0gcmFuZ2UubGVmdCk7XG4gICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmFuZ2UucmlnaHQpO1xuXG4gICAgICAgICAgICBjb25zdCBtaW5EaXN0ID0gTWF0aC5taW4oZGlzdExlZnQsIGRpc3RSaWdodCk7XG4gICAgICAgICAgICBjb25zdCBzaWduZWREaXN0YW5jZSA9IHJhbmdlLmlzRGFzaCA/IG1pbkRpc3QgOiAtbWluRGlzdDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhW2luZGV4ICsgeF0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHNpZ25lZERpc3RhbmNlICsgMTI4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREYXNoKGRhc2hhcnJheTogQXJyYXk8bnVtYmVyPiwgcm91bmQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbiA9IHJvdW5kID8gNyA6IDA7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IDIgKiBuICsgMTtcblxuICAgICAgICBpZiAodGhpcy5uZXh0Um93ICsgaGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdMaW5lQXRsYXMgb3V0IG9mIHNwYWNlJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykgeyBsZW5ndGggKz0gZGFzaGFycmF5W2ldOyB9XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3RyZXRjaCA9IHRoaXMud2lkdGggLyBsZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByYW5nZXMgPSB0aGlzLmdldERhc2hSYW5nZXMoZGFzaGFycmF5LCB0aGlzLndpZHRoLCBzdHJldGNoKTtcblxuICAgICAgICAgICAgaWYgKHJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSb3VuZERhc2gocmFuZ2VzLCBzdHJldGNoLCBuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSZWd1bGFyRGFzaChyYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGFzaEVudHJ5ID0ge1xuICAgICAgICAgICAgeTogKHRoaXMubmV4dFJvdyArIG4gKyAwLjUpIC8gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBoZWlnaHQ6IDIgKiBuIC8gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogbGVuZ3RoXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5uZXh0Um93ICs9IGhlaWdodDtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGRhc2hFbnRyeTtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBpZiAoIXRoaXMudGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5SRVBFQVQpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuQUxQSEEsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5BTFBIQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2wuQUxQSEEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVBdGxhcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dW5pcXVlSWQsIGFzeW5jQWxsfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IEFjdG9yIGZyb20gJy4vYWN0b3InO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBXb3JrZXJQb29sIGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG4vKipcbiAqIFJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIG1lc3NhZ2VzIGZyb20gYSB7QGxpbmsgU291cmNlfSB0byBhbiBhc3NvY2lhdGVkXG4gKiB7QGxpbmsgV29ya2VyU291cmNlfS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEaXNwYXRjaGVyIHtcbiAgICB3b3JrZXJQb29sOiBXb3JrZXJQb29sO1xuICAgIGFjdG9yczogQXJyYXk8QWN0b3I+O1xuICAgIGN1cnJlbnRBY3RvcjogbnVtYmVyO1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGluIHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgQWN0b3I6IENsYXNzPEFjdG9yPjtcblxuICAgIGNvbnN0cnVjdG9yKHdvcmtlclBvb2w6IFdvcmtlclBvb2wsIHBhcmVudDogYW55KSB7XG4gICAgICAgIHRoaXMud29ya2VyUG9vbCA9IHdvcmtlclBvb2w7XG4gICAgICAgIHRoaXMuYWN0b3JzID0gW107XG4gICAgICAgIHRoaXMuY3VycmVudEFjdG9yID0gMDtcbiAgICAgICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgICAgIGNvbnN0IHdvcmtlcnMgPSB0aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB3b3JrZXJzW2ldO1xuICAgICAgICAgICAgY29uc3QgYWN0b3IgPSBuZXcgRGlzcGF0Y2hlci5BY3Rvcih3b3JrZXIsIHBhcmVudCwgdGhpcy5pZCk7XG4gICAgICAgICAgICBhY3Rvci5uYW1lID0gYFdvcmtlciAke2l9YDtcbiAgICAgICAgICAgIHRoaXMuYWN0b3JzLnB1c2goYWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydCh0aGlzLmFjdG9ycy5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIFdvcmtlcnMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBicm9hZGNhc3QodHlwZTogc3RyaW5nLCBkYXRhOiBtaXhlZCwgY2I/OiBGdW5jdGlvbikge1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgYXN5bmNBbGwodGhpcy5hY3RvcnMsIChhY3RvciwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBkb25lKTtcbiAgICAgICAgfSwgY2IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjcXVpcmVzIGFuIGFjdG9yIHRvIGRpc3BhdGNoIG1lc3NhZ2VzIHRvLiBUaGUgYWN0b3JzIGFyZSBkaXN0cmlidXRlZCBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLlxuICAgICAqIEByZXR1cm5zIEFuIGFjdG9yIG9iamVjdCBiYWNrZWQgYnkgYSB3ZWIgd29ya2VyIGZvciBwcm9jZXNzaW5nIG1lc3NhZ2VzLlxuICAgICAqL1xuICAgIGdldEFjdG9yKCk6IEFjdG9yIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdG9yID0gKHRoaXMuY3VycmVudEFjdG9yICsgMSkgJSB0aGlzLmFjdG9ycy5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl07XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLmFjdG9ycy5mb3JFYWNoKChhY3RvcikgPT4geyBhY3Rvci5yZW1vdmUoKTsgfSk7XG4gICAgICAgIHRoaXMuYWN0b3JzID0gW107XG4gICAgICAgIHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpO1xuICAgIH1cbn1cblxuRGlzcGF0Y2hlci5BY3RvciA9IEFjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBEaXNwYXRjaGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwaWNrLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7Z2V0SlNPTiwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtUaWxlSlNPTn0gZnJvbSAnLi4vdHlwZXMvdGlsZWpzb24nO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zOiBhbnksIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlciwgY2FsbGJhY2s6IENhbGxiYWNrPFRpbGVKU09OPik6IENhbmNlbGFibGUge1xuICAgIGNvbnN0IGxvYWRlZCA9IGZ1bmN0aW9uKGVycjogP0Vycm9yLCB0aWxlSlNPTjogP09iamVjdCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aWxlSlNPTikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBwaWNrKFxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0IHNvdXJjZSBvcHRpb25zIHRha2UgcHJlY2VkZW5jZSBvdmVyIFRpbGVKU09OXG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRpbGVKU09OLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBbJ3RpbGVzJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdhdHRyaWJ1dGlvbicsICdtYXBib3hfbG9nbycsICdib3VuZHMnLCAnc2NoZW1lJywgJ3RpbGVTaXplJywgJ2VuY29kaW5nJ11cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aWxlSlNPTi52ZWN0b3JfbGF5ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVycyA9IHRpbGVKU09OLnZlY3Rvcl9sYXllcnM7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZlY3RvckxheWVySWRzID0gcmVzdWx0LnZlY3RvckxheWVycy5tYXAoKGxheWVyKSA9PiB7IHJldHVybiBsYXllci5pZDsgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC50aWxlcyA9IHJlcXVlc3RNYW5hZ2VyLmNhbm9uaWNhbGl6ZVRpbGVzZXQocmVzdWx0LCBvcHRpb25zLnVybCk7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgICByZXR1cm4gZ2V0SlNPTihyZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHJlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVNvdXJjZVVSTChvcHRpb25zLnVybCksIFJlc291cmNlVHlwZS5Tb3VyY2UpLCBsb2FkZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBicm93c2VyLmZyYW1lKCgpID0+IGxvYWRlZChudWxsLCBvcHRpb25zKSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHttZXJjYXRvclhmcm9tTG5nLCBtZXJjYXRvcllmcm9tTGF0fSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbmNsYXNzIFRpbGVCb3VuZHMge1xuICAgIGJvdW5kczogTG5nTGF0Qm91bmRzO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBtaW56b29tOiA/bnVtYmVyLCBtYXh6b29tOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyhib3VuZHMpKTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbWluem9vbSB8fCAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSBtYXh6b29tIHx8IDI0O1xuICAgIH1cblxuICAgIHZhbGlkYXRlQm91bmRzKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBib3VuZHMgcHJvcGVydHkgY29udGFpbnMgdmFsaWQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZXNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGJvdW5kcykgfHwgYm91bmRzLmxlbmd0aCAhPT0gNCkgcmV0dXJuIFstMTgwLCAtOTAsIDE4MCwgOTBdO1xuICAgICAgICByZXR1cm4gW01hdGgubWF4KC0xODAsIGJvdW5kc1swXSksIE1hdGgubWF4KC05MCwgYm91bmRzWzFdKSwgTWF0aC5taW4oMTgwLCBib3VuZHNbMl0pLCBNYXRoLm1pbig5MCwgYm91bmRzWzNdKV07XG4gICAgfVxuXG4gICAgY29udGFpbnModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3Qgd29ybGRTaXplID0gTWF0aC5wb3coMiwgdGlsZUlELnopO1xuICAgICAgICBjb25zdCBsZXZlbCA9IHtcbiAgICAgICAgICAgIG1pblg6IE1hdGguZmxvb3IobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRXZXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1pblk6IE1hdGguZmxvb3IobWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSAqIHdvcmxkU2l6ZSksXG4gICAgICAgICAgICBtYXhYOiBNYXRoLmNlaWwobWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRFYXN0KCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFk6IE1hdGguY2VpbChtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldFNvdXRoKCkpICogd29ybGRTaXplKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoaXQgPSB0aWxlSUQueCA+PSBsZXZlbC5taW5YICYmIHRpbGVJRC54IDwgbGV2ZWwubWF4WCAmJiB0aWxlSUQueSA+PSBsZXZlbC5taW5ZICYmIHRpbGVJRC55IDwgbGV2ZWwubWF4WTtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVCb3VuZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZCwgcGlja30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBsb2FkVGlsZUpTT04gZnJvbSAnLi9sb2FkX3RpbGVqc29uJztcbmltcG9ydCB7cG9zdFR1cm5zdGlsZUV2ZW50LCBwb3N0TWFwTG9hZEV2ZW50fSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgVGlsZUJvdW5kcyBmcm9tICcuL3RpbGVfYm91bmRzJztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7Y2FjaGVFbnRyeVBvc3NpYmx5QWRkZWR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1ZlY3RvclNvdXJjZVNwZWNpZmljYXRpb24sIFByb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBWZWN0b3JUaWxlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ3ZlY3Rvcic7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXI7XG4gICAgbWF4em9vbTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNjaGVtZTogc3RyaW5nO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcblxuICAgIF9vcHRpb25zOiBWZWN0b3JTb3VyY2VTcGVjaWZpY2F0aW9uO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcjtcbiAgICBtYXA6IE1hcDtcbiAgICBib3VuZHM6ID9bbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICB0aWxlczogQXJyYXk8c3RyaW5nPjtcbiAgICB0aWxlQm91bmRzOiBUaWxlQm91bmRzO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkOiBib29sZWFuO1xuICAgIGlzVGlsZUNsaXBwZWQ6IGJvb2xlYW47XG4gICAgX3RpbGVKU09OUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZlY3RvclNvdXJjZVNwZWNpZmljYXRpb24gJiB7Y29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFufSwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ3ZlY3Rvcic7XG4gICAgICAgIHRoaXMubWluem9vbSA9IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLnNjaGVtZSA9ICd4eXonO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyO1xuICAgICAgICB0aGlzLnJlcGFyc2VPdmVyc2NhbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1RpbGVDbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgZXh0ZW5kKHRoaXMsIHBpY2sob3B0aW9ucywgWyd1cmwnLCAnc2NoZW1lJywgJ3RpbGVTaXplJywgJ3Byb21vdGVJZCddKSk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe3R5cGU6ICd2ZWN0b3InfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgaWYgKHRoaXMudGlsZVNpemUgIT09IDUxMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcbiAgICAgICAgICAgICAgICBwb3N0VHVybnN0aWxlRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9nZXRNYXBJZCgpLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKTtcblxuICAgICAgICAgICAgICAgIC8vIGBjb250ZW50YCBpcyBpbmNsdWRlZCBoZXJlIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgU3R5bGUjX3VwZGF0ZVNvdXJjZXNgIGlzIGNhbGxlZFxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgVGlsZUpTT04gYXJyaXZlcy4gdGhpcyBtYWtlcyBzdXJlIHRoZSB0aWxlcyBuZWVkZWQgYXJlIGxvYWRlZCBvbmNlIFRpbGVKU09OIGFycml2ZXNcbiAgICAgICAgICAgICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNDM0NyNkaXNjdXNzaW9uX3IxMDQ0MTgwODhcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZDtcbiAgICB9XG5cbiAgICBoYXNUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGlsZUJvdW5kcyB8fCB0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModGlsZUlELmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fdGlsZUpTT05SZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwodGlsZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLCB0aGlzLnNjaGVtZSkpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5UaWxlKSxcbiAgICAgICAgICAgIHVpZDogdGlsZS51aWQsXG4gICAgICAgICAgICB0aWxlSUQ6IHRpbGUudGlsZUlELFxuICAgICAgICAgICAgem9vbTogdGlsZS50aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy50aWxlU2l6ZSAqIHRpbGUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLFxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMsXG4gICAgICAgICAgICBwcm9tb3RlSWQ6IHRoaXMucHJvbW90ZUlkXG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcy5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyA9IHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZztcblxuICAgICAgICBpZiAoIXRpbGUuYWN0b3IgfHwgdGlsZS5zdGF0ZSA9PT0gJ2V4cGlyZWQnKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QgPSB0aWxlLmFjdG9yLnNlbmQoJ2xvYWRUaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbGUuc3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgLy8gc2NoZWR1bGUgdGlsZSByZWxvYWRpbmcgYWZ0ZXIgaXQgaGFzIGJlZW4gbG9hZGVkXG4gICAgICAgICAgICB0aWxlLnJlbG9hZENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QgPSB0aWxlLmFjdG9yLnNlbmQoJ3JlbG9hZFRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVyciwgZGF0YSkge1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUucmVxdWVzdDtcblxuICAgICAgICAgICAgaWYgKHRpbGUuYWJvcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucmVzb3VyY2VUaW1pbmcpXG4gICAgICAgICAgICAgICAgdGlsZS5yZXNvdXJjZVRpbWluZyA9IGRhdGEucmVzb3VyY2VUaW1pbmc7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyAmJiBkYXRhKSB0aWxlLnNldEV4cGlyeURhdGEoZGF0YSk7XG4gICAgICAgICAgICB0aWxlLmxvYWRWZWN0b3JEYXRhKGRhdGEsIHRoaXMubWFwLnBhaW50ZXIpO1xuXG4gICAgICAgICAgICBjYWNoZUVudHJ5UG9zc2libHlBZGRlZCh0aGlzLmRpc3BhdGNoZXIpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgICAgaWYgKHRpbGUucmVsb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUaWxlKHRpbGUsIHRpbGUucmVsb2FkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHRpbGUucmVsb2FkQ2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJvcnRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKHRpbGUucmVxdWVzdCkge1xuICAgICAgICAgICAgdGlsZS5yZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUucmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGlsZS5hY3Rvcikge1xuICAgICAgICAgICAgdGlsZS5hY3Rvci5zZW5kKCdhYm9ydFRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuICAgICAgICBpZiAodGlsZS5hY3Rvcikge1xuICAgICAgICAgICAgdGlsZS5hY3Rvci5zZW5kKCdyZW1vdmVUaWxlJywge3VpZDogdGlsZS51aWQsIHR5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlY3RvclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZCwgcGlja30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtnZXRJbWFnZSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBsb2FkVGlsZUpTT04gZnJvbSAnLi9sb2FkX3RpbGVqc29uJztcbmltcG9ydCB7cG9zdFR1cm5zdGlsZUV2ZW50LCBwb3N0TWFwTG9hZEV2ZW50fSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgVGlsZUJvdW5kcyBmcm9tICcuL3RpbGVfYm91bmRzJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcblxuaW1wb3J0IHtjYWNoZUVudHJ5UG9zc2libHlBZGRlZH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgUmFzdGVyU291cmNlU3BlY2lmaWNhdGlvbixcbiAgICBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBSYXN0ZXJUaWxlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ3Jhc3RlcicgfCAncmFzdGVyLWRlbSc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtaW56b29tOiBudW1iZXI7XG4gICAgbWF4em9vbTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNjaGVtZTogc3RyaW5nO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG5cbiAgICBib3VuZHM6ID9bbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICB0aWxlQm91bmRzOiBUaWxlQm91bmRzO1xuICAgIHJvdW5kWm9vbTogYm9vbGVhbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHRpbGVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICBfb3B0aW9uczogUmFzdGVyU291cmNlU3BlY2lmaWNhdGlvbiB8IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb247XG4gICAgX3RpbGVKU09OUmVxdWVzdDogP0NhbmNlbGFibGU7XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uIHwgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRlZFBhcmVudChldmVudGVkUGFyZW50KTtcblxuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMucm91bmRab29tID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY2hlbWUgPSAneHl6JztcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7dHlwZTogJ3Jhc3Rlcid9LCBvcHRpb25zKTtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIHBpY2sob3B0aW9ucywgWyd1cmwnLCAnc2NoZW1lJywgJ3RpbGVTaXplJ10pKTtcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBsb2FkVGlsZUpTT04odGhpcy5fb3B0aW9ucywgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLCAoZXJyLCB0aWxlSlNPTikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aWxlSlNPTikge1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0aGlzLCB0aWxlSlNPTik7XG4gICAgICAgICAgICAgICAgaWYgKHRpbGVKU09OLmJvdW5kcykgdGhpcy50aWxlQm91bmRzID0gbmV3IFRpbGVCb3VuZHModGlsZUpTT04uYm91bmRzLCB0aGlzLm1pbnpvb20sIHRoaXMubWF4em9vbSk7XG5cbiAgICAgICAgICAgICAgICBwb3N0VHVybnN0aWxlRXZlbnQodGlsZUpTT04udGlsZXMpO1xuICAgICAgICAgICAgICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZUpTT04udGlsZXMsIHRoaXMubWFwLl9nZXRNYXBJZCgpLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKTtcblxuICAgICAgICAgICAgICAgIC8vIGBjb250ZW50YCBpcyBpbmNsdWRlZCBoZXJlIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgU3R5bGUjX3VwZGF0ZVNvdXJjZXNgIGlzIGNhbGxlZFxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgVGlsZUpTT04gYXJyaXZlcy4gdGhpcyBtYWtlcyBzdXJlIHRoZSB0aWxlcyBuZWVkZWQgYXJlIGxvYWRlZCBvbmNlIFRpbGVKU09OIGFycml2ZXNcbiAgICAgICAgICAgICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNDM0NyNkaXNjdXNzaW9uX3IxMDQ0MTgwODhcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZDtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aWxlSlNPTlJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMpO1xuICAgIH1cblxuICAgIGhhc1RpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50aWxlQm91bmRzIHx8IHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0aWxlSUQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwodGlsZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLCB0aGlzLnNjaGVtZSksIHRoaXMudGlsZVNpemUpO1xuICAgICAgICB0aWxlLnJlcXVlc3QgPSBnZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5UaWxlKSwgKGVyciwgaW1nKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICd1bmxvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzKSB0aWxlLnNldEV4cGlyeURhdGEoaW1nKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuZXhwaXJlcztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRoaXMubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoaW1nLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZS51cGRhdGUoaW1nLCB7dXNlTWlwbWFwOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgaW1nLCBnbC5SR0JBLCB7dXNlTWlwbWFwOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmYoZ2wuVEVYVFVSRV8yRCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIGNvbnRleHQuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcblxuICAgICAgICAgICAgICAgIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcik7XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWJvcnRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgaWYgKHRpbGUudGV4dHVyZSkgdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodGlsZS50ZXh0dXJlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJUaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtnZXRJbWFnZSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIGZyb20gJy4uL3V0aWwvb2Zmc2NyZWVuX2NhbnZhc19zdXBwb3J0ZWQnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IFJhc3RlclRpbGVTb3VyY2UgZnJvbSAnLi9yYXN0ZXJfdGlsZV9zb3VyY2UnO1xuLy8gZW5zdXJlIERFTURhdGEgaXMgcmVnaXN0ZXJlZCBmb3Igd29ya2VyIHRyYW5zZmVyIG9uIG1haW4gdGhyZWFkOlxuaW1wb3J0ICcuLi9kYXRhL2RlbV9kYXRhJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7UmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlckRFTVRpbGVTb3VyY2UgZXh0ZW5kcyBSYXN0ZXJUaWxlU291cmNlIGltcGxlbWVudHMgU291cmNlIHtcbiAgICBlbmNvZGluZzogXCJtYXBib3hcIiB8IFwidGVycmFyaXVtXCI7XG5cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKGlkLCBvcHRpb25zLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3Jhc3Rlci1kZW0nO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7dHlwZTogJ3Jhc3Rlci1kZW0nfSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nIHx8IFwibWFwYm94XCI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3Jhc3Rlci1kZW0nLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgdGlsZXM6IHRoaXMudGlsZXMsXG4gICAgICAgICAgICBib3VuZHM6IHRoaXMuYm91bmRzLFxuICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwodGlsZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLCB0aGlzLnNjaGVtZSksIHRoaXMudGlsZVNpemUpO1xuICAgICAgICB0aWxlLnJlcXVlc3QgPSBnZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5UaWxlKSwgaW1hZ2VMb2FkZWQuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGlsZS5uZWlnaGJvcmluZ1RpbGVzID0gdGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlLnRpbGVJRCk7XG4gICAgICAgIGZ1bmN0aW9uIGltYWdlTG9hZGVkKGVyciwgaW1nKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKHRpbGUuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcykgdGlsZS5zZXRFeHBpcnlEYXRhKGltZyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuY2FjaGVDb250cm9sO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmV4cGlyZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmZXIgPSB3aW5kb3cuSW1hZ2VCaXRtYXAgJiYgaW1nIGluc3RhbmNlb2Ygd2luZG93LkltYWdlQml0bWFwICYmIG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd0ltYWdlRGF0YSA9IHRyYW5zZmVyID8gaW1nIDogYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1nLCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVpZDogdGlsZS51aWQsXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkOiB0aWxlLnRpbGVJRCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXdJbWFnZURhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS5hY3RvciA9IHRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2xvYWRERU1UaWxlJywgcGFyYW1zLCBkb25lLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkZW0pIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZW0pIHtcbiAgICAgICAgICAgICAgICB0aWxlLmRlbSA9IGRlbTtcbiAgICAgICAgICAgICAgICB0aWxlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldE5laWdoYm9yaW5nVGlsZXModGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIGNhbm9uaWNhbC56KTtcblxuICAgICAgICBjb25zdCBweCA9IChjYW5vbmljYWwueCAtIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBweHcgPSBjYW5vbmljYWwueCA9PT0gMCA/IHRpbGVJRC53cmFwIC0gMSA6IHRpbGVJRC53cmFwO1xuICAgICAgICBjb25zdCBueCA9IChjYW5vbmljYWwueCArIDEgKyBkaW0pICUgZGltO1xuICAgICAgICBjb25zdCBueHcgPSBjYW5vbmljYWwueCArIDEgPT09IGRpbSA/IHRpbGVJRC53cmFwICsgMSA6IHRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IG5laWdoYm9yaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgLy8gYWRkIGFkamFjZW50IHRpbGVzXG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgbnh3LCBjYW5vbmljYWwueiwgbngsIGNhbm9uaWNhbC55KS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcblxuICAgICAgICAvLyBBZGQgdXBwZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgPiAwKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55IC0gMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgbG93ZXIgbmVpZ2hib3JpbmdUaWxlc1xuICAgICAgICBpZiAoY2Fub25pY2FsLnkgKyAxIDwgZGltKSB7XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgcHh3LCBjYW5vbmljYWwueiwgcHgsIGNhbm9uaWNhbC55ICsgMSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgICAgICBuZWlnaGJvcmluZ1RpbGVzW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRpbGVJRC5vdmVyc2NhbGVkWiwgdGlsZUlELndyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWlnaGJvcmluZ1RpbGVzO1xuICAgIH1cblxuICAgIHVubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLmRlbVRleHR1cmUpO1xuICAgICAgICBpZiAodGlsZS5mYm8pIHtcbiAgICAgICAgICAgIHRpbGUuZmJvLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLmZibztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGlsZS5kZW0pIGRlbGV0ZSB0aWxlLmRlbTtcbiAgICAgICAgZGVsZXRlIHRpbGUubmVpZ2hib3JpbmdUaWxlcztcblxuICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgaWYgKHRpbGUuYWN0b3IpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgncmVtb3ZlREVNVGlsZScsIHt1aWQ6IHRpbGUudWlkLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7UmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge0dlb0pTT04sIEdlb0pTT05GZWF0dXJlfSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuaW1wb3J0IHR5cGUge0dlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9uLCBQcm9tb3RlSWRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIHNvdXJjZSBjb250YWluaW5nIEdlb0pTT04uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy1nZW9qc29uKSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBvcHRpb25zLilcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICAgZGF0YTogJ2h0dHBzOi8vZDJhZDZiNHVyN3l2cHEuY2xvdWRmcm9udC5uZXQvbmF0dXJhbGVhcnRoLTMuMy4wL25lXzEwbV9wb3J0cy5nZW9qc29uJ1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnZ2VvanNvbicsXG4gKiAgICBkYXRhOiB7XG4gKiAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcbiAqICAgICAgICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxuICogICAgICAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICAtNzYuNTMwNjMyOTcyNzE3MjksXG4gKiAgICAgICAgICAgICAgICAgICAgMzkuMTgxNzQwNzc5OTQxMDhcbiAqICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgIH1dXG4gKiAgICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpLnNldERhdGEoe1xuICogICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICBcImZlYXR1cmVzXCI6IFt7XG4gKiAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gKiAgICAgICBcInByb3BlcnRpZXNcIjogeyBcIm5hbWVcIjogXCJOdWxsIElzbGFuZFwiIH0sXG4gKiAgICAgICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICAgICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogWyAwLCAwIF1cbiAqICAgICAgIH1cbiAqICAgfV1cbiAqIH0pO1xuICogQHNlZSBbRHJhdyBHZW9KU09OIHBvaW50c10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9nZW9qc29uLW1hcmtlcnMvKVxuICogQHNlZSBbQWRkIGEgR2VvSlNPTiBsaW5lXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbGluZS8pXG4gKiBAc2VlIFtDcmVhdGUgYSBoZWF0bWFwIGZyb20gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hlYXRtYXAvKVxuICogQHNlZSBbQ3JlYXRlIGFuZCBzdHlsZSBjbHVzdGVyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLylcbiAqL1xuY2xhc3MgR2VvSlNPTlNvdXJjZSBleHRlbmRzIEV2ZW50ZWQgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIHR5cGU6ICdnZW9qc29uJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGlvbjogc3RyaW5nO1xuICAgIHByb21vdGVJZDogP1Byb21vdGVJZFNwZWNpZmljYXRpb247XG5cbiAgICBpc1RpbGVDbGlwcGVkOiBib29sZWFuO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkOiBib29sZWFuO1xuICAgIF9kYXRhOiBHZW9KU09OIHwgc3RyaW5nO1xuICAgIF9vcHRpb25zOiBhbnk7XG4gICAgd29ya2VyT3B0aW9uczogYW55O1xuICAgIG1hcDogTWFwO1xuICAgIGFjdG9yOiBBY3RvcjtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgX3Jlc291cmNlVGltaW5nOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbiAgICBfcmVtb3ZlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogR2VvSlNPTlNvdXJjZVNwZWNpZmljYXRpb24gJiB7d29ya2VyT3B0aW9ucz86IGFueSwgY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFufSwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaWQgPSBpZDtcblxuICAgICAgICAvLyBgdHlwZWAgaXMgYSBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIGNvbnN0YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgM3JkXG4gICAgICAgIC8vIHBhcnRpZXMgdG8gdXNlIEdlb0pTT05Tb3VyY2UgdG8gYnVpbGQgdGhlaXIgb3duIHNvdXJjZSB0eXBlcy5cbiAgICAgICAgdGhpcy50eXBlID0gJ2dlb2pzb24nO1xuXG4gICAgICAgIHRoaXMubWluem9vbSA9IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDE4O1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyO1xuICAgICAgICB0aGlzLmlzVGlsZUNsaXBwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcGFyc2VPdmVyc2NhbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdG9yID0gZGlzcGF0Y2hlci5nZXRBY3RvcigpO1xuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IChvcHRpb25zLmRhdGE6IGFueSk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyA9IG9wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1heHpvb20gIT09IHVuZGVmaW5lZCkgdGhpcy5tYXh6b29tID0gb3B0aW9ucy5tYXh6b29tO1xuICAgICAgICBpZiAob3B0aW9ucy50eXBlKSB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgICAgIGlmIChvcHRpb25zLmF0dHJpYnV0aW9uKSB0aGlzLmF0dHJpYnV0aW9uID0gb3B0aW9ucy5hdHRyaWJ1dGlvbjtcbiAgICAgICAgdGhpcy5wcm9tb3RlSWQgPSBvcHRpb25zLnByb21vdGVJZDtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IEVYVEVOVCAvIHRoaXMudGlsZVNpemU7XG5cbiAgICAgICAgLy8gc2VudCB0byB0aGUgd29ya2VyLCBhbG9uZyB3aXRoIGB1cmw6IC4uLmAgb3IgYGRhdGE6IGxpdGVyYWwgZ2VvanNvbmAsXG4gICAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGxvYWQvcGFyc2UvaW5kZXggdGhlIGdlb2pzb24gZGF0YVxuICAgICAgICAvLyBleHRlbmRpbmcgd2l0aCBgb3B0aW9ucy53b3JrZXJPcHRpb25zYCBoZWxwcyB0byBtYWtlIGl0IGVhc3kgZm9yXG4gICAgICAgIC8vIHRoaXJkLXBhcnR5IHNvdXJjZXMgdG8gaGFjay9yZXVzZSBHZW9KU09OU291cmNlLlxuICAgICAgICB0aGlzLndvcmtlck9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3Rlcjogb3B0aW9ucy5jbHVzdGVyIHx8IGZhbHNlLFxuICAgICAgICAgICAgZ2VvanNvblZ0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcjogKG9wdGlvbnMuYnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJ1ZmZlciA6IDEyOCkgKiBzY2FsZSxcbiAgICAgICAgICAgICAgICB0b2xlcmFuY2U6IChvcHRpb25zLnRvbGVyYW5jZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50b2xlcmFuY2UgOiAwLjM3NSkgKiBzY2FsZSxcbiAgICAgICAgICAgICAgICBleHRlbnQ6IEVYVEVOVCxcbiAgICAgICAgICAgICAgICBtYXhab29tOiB0aGlzLm1heHpvb20sXG4gICAgICAgICAgICAgICAgbGluZU1ldHJpY3M6IG9wdGlvbnMubGluZU1ldHJpY3MgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVJZDogb3B0aW9ucy5nZW5lcmF0ZUlkIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VwZXJjbHVzdGVyT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG1heFpvb206IG9wdGlvbnMuY2x1c3Rlck1heFpvb20gIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG9wdGlvbnMuY2x1c3Rlck1heFpvb20sIHRoaXMubWF4em9vbSAtIDEpIDpcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMubWF4em9vbSAtIDEpLFxuICAgICAgICAgICAgICAgIGV4dGVudDogRVhURU5ULFxuICAgICAgICAgICAgICAgIHJhZGl1czogKG9wdGlvbnMuY2x1c3RlclJhZGl1cyB8fCA1MCkgKiBzY2FsZSxcbiAgICAgICAgICAgICAgICBsb2c6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlSWQ6IG9wdGlvbnMuZ2VuZXJhdGVJZCB8fCBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsdXN0ZXJQcm9wZXJ0aWVzOiBvcHRpb25zLmNsdXN0ZXJQcm9wZXJ0aWVzXG4gICAgICAgIH0sIG9wdGlvbnMud29ya2VyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhbHRob3VnaCBHZW9KU09OIHNvdXJjZXMgY29udGFpbiBubyBtZXRhZGF0YSwgd2UgZmlyZSB0aGlzIGV2ZW50IHRvIGxldCB0aGUgU291cmNlQ2FjaGVcbiAgICAgICAgICAgIC8vIGtub3cgaXRzIG9rIHRvIHN0YXJ0IHJlcXVlc3RpbmcgdGlsZXMuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgR2VvSlNPTiBkYXRhIGFuZCByZS1yZW5kZXJzIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IGRhdGEgQSBHZW9KU09OIGRhdGEgb2JqZWN0IG9yIGEgVVJMIHRvIG9uZS4gVGhlIGxhdHRlciBpcyBwcmVmZXJhYmxlIGluIHRoZSBjYXNlIG9mIGxhcmdlIEdlb0pTT04gZmlsZXMuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXREYXRhKGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YTogT2JqZWN0ID0ge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J307XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nICYmIHRoaXMuX3Jlc291cmNlVGltaW5nICYmICh0aGlzLl9yZXNvdXJjZVRpbWluZy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIGRhdGEucmVzb3VyY2VUaW1pbmcgPSB0aGlzLl9yZXNvdXJjZVRpbWluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIGRhdGEpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSB6b29tIGF0IHdoaWNoIHRoZSBnaXZlbiBjbHVzdGVyIGV4cGFuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgem9vbSB2YWx1ZSBpcyByZXRyaWV2ZWQgKGAoZXJyb3IsIHpvb20pID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8bnVtYmVyPikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20nLCB7Y2x1c3RlcklkLCBzb3VyY2U6IHRoaXMuaWR9LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBjbHVzdGVyZWQgc291cmNlcywgZmV0Y2hlcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGNsdXN0ZXIgb24gdGhlIG5leHQgem9vbSBsZXZlbCAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmVhdHVyZXMgYXJlIHJldHJpZXZlZCAoYChlcnJvciwgZmVhdHVyZXMpID0+IHsgLi4uIH1gKS5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIGdldENsdXN0ZXJDaGlsZHJlbihjbHVzdGVySWQ6IG51bWJlciwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKCdnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbicsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBvcmlnaW5hbCBwb2ludHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNsdXN0ZXIgKGFzIGFuIGFycmF5IG9mIEdlb0pTT04gZmVhdHVyZXMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsdXN0ZXJJZCBUaGUgdmFsdWUgb2YgdGhlIGNsdXN0ZXIncyBgY2x1c3Rlcl9pZGAgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGxpbWl0IFRoZSBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0byByZXR1cm4uXG4gICAgICogQHBhcmFtIG9mZnNldCBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHNraXAgKGUuZy4gZm9yIHBhZ2luYXRpb24pLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzJywge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3RlcklkLFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBXb3JrZXJTb3VyY2UncyBnZW9qc29uLmxvYWREYXRhIHRhcmdldCwgd2hpY2hcbiAgICAgKiBoYW5kbGVzIGxvYWRpbmcgdGhlIGdlb2pzb24gZGF0YSBhbmQgcHJlcGFyaW5nIHRvIHNlcnZlIGl0IHVwIGFzIHRpbGVzLFxuICAgICAqIHVzaW5nIGdlb2pzb24tdnQgb3Igc3VwZXJjbHVzdGVyIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIF91cGRhdGVXb3JrZXJEYXRhKGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy53b3JrZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGJyb3dzZXIucmVzb2x2ZVVSTChkYXRhKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSk7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0YXJnZXQge3RoaXMudHlwZX0ubG9hZERhdGEgcmF0aGVyIHRoYW4gbGl0ZXJhbGx5IGdlb2pzb24ubG9hZERhdGEsXG4gICAgICAgIC8vIHNvIHRoYXQgb3RoZXIgZ2VvanNvbi1saWtlIHNvdXJjZSB0eXBlcyBjYW4gZWFzaWx5IHJldXNlIHRoaXNcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0ubG9hZERhdGFgLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZW1vdmVkIHx8IChyZXN1bHQgJiYgcmVzdWx0LmFiYW5kb25lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nICYmIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXS5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIEFueSBgbG9hZERhdGFgIGNhbGxzIHRoYXQgcGlsZWQgdXAgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nXG4gICAgICAgICAgICAvLyB0aGlzIG9uZSB3aWxsIGdldCBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHdoZW4gdGhpc1xuICAgICAgICAgICAgLy8gJ2NvYWxlc2NlJyBtZXNzYWdlIGlzIHByb2Nlc3NlZC5cbiAgICAgICAgICAgIC8vIFdlIHdvdWxkIHNlbGYtc2VuZCBmcm9tIHRoZSB3b3JrZXIgaWYgd2UgaGFkIGFjY2VzcyB0byBpdHNcbiAgICAgICAgICAgIC8vIG1lc3NhZ2UgcXVldWUuIFdhaXRpbmcgaW5zdGVhZCBmb3IgdGhlICdjb2FsZXNjZScgdG8gcm91bmQtdHJpcFxuICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgZm9yZWdyb3VuZCBqdXN0IG1lYW5zIHdlJ3JlIHRocm90dGxpbmcgdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gdG8gcnVuIGF0IGEgbGl0dGxlIGxlc3MgdGhhbiBmdWxsLXRocm90dGxlLlxuICAgICAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0uY29hbGVzY2VgLCB7c291cmNlOiBvcHRpb25zLnNvdXJjZX0sIG51bGwpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gIXRpbGUuYWN0b3IgPyAnbG9hZFRpbGUnIDogJ3JlbG9hZFRpbGUnO1xuICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5hY3RvcjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMsXG4gICAgICAgICAgICBwcm9tb3RlSWQ6IHRoaXMucHJvbW90ZUlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGhpcy5hY3Rvci5zZW5kKG1lc3NhZ2UsIHBhcmFtcywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUucmVxdWVzdDtcbiAgICAgICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlciwgbWVzc2FnZSA9PT0gJ3JlbG9hZFRpbGUnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlU291cmNlJywge3R5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zLCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05Tb3VyY2U7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn0sXG4gICAge25hbWU6ICdhX3RleHR1cmVfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn1cbl0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtnZXRJbWFnZSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQge1Jhc3RlckJvdW5kc0FycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge0NhbnZhc1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4vY2FudmFzX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1xuICAgIEltYWdlU291cmNlU3BlY2lmaWNhdGlvbixcbiAgICBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgQ29vcmRpbmF0ZXMgPSBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV07XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIGFuIGltYWdlLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtaW1hZ2UpIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ2ltYWdlJyxcbiAqICAgIHVybDogJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vaW1hZ2VzL2Zvby5wbmcnLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBjb29yZGluYXRlc1xuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIC8vIHVwZGF0ZSB1cmwgYW5kIGNvb3JkaW5hdGVzIHNpbXVsdGFuZW91c2x5XG4gKiBteVNvdXJjZS51cGRhdGVJbWFnZSh7XG4gKiAgICB1cmw6ICdodHRwczovL3d3dy5tYXBib3guY29tL2ltYWdlcy9iYXIucG5nJyxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NDMzNTczNzIyODM5NCwgMzkuMTg1Nzk5MDcyMjk3NDhdLFxuICogICAgICAgIFstNzYuNTI4MDM2NTk0MzkwODcsIDM5LjE4MzgzNjQ4NDc1ODddLFxuICogICAgICAgIFstNzYuNTI5NTM4NjMxNDM5MiwgMzkuMTc2ODMzOTI1MDc2MDZdLFxuICogICAgICAgIFstNzYuNTQ1MjAyNzMyMDg2MTgsIDM5LjE3ODc2MzQ0MTA2NjQyXVxuICogICAgXVxuICogfSlcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhbiBpbWFnZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9pbWFnZS1vbi1hLW1hcC8pXG4gKi9cbmNsYXNzIEltYWdlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuXG4gICAgY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzO1xuICAgIHRpbGVzOiB7W186IHN0cmluZ106IFRpbGV9O1xuICAgIG9wdGlvbnM6IGFueTtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xuICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXA7XG4gICAgdGlsZUlEOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAgX2JvdW5kc0FycmF5OiBSYXN0ZXJCb3VuZHNBcnJheTtcbiAgICBib3VuZHNCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICBib3VuZHNTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBJbWFnZVNvdXJjZVNwZWNpZmljYXRpb24gfCBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24gfCBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IG9wdGlvbnMuY29vcmRpbmF0ZXM7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ2ltYWdlJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZChuZXdDb29yZGluYXRlcz86IENvb3JkaW5hdGVzLCBzdWNjZXNzQ2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG5cbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLm9wdGlvbnMudXJsO1xuXG4gICAgICAgIGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCAoZXJyLCBpbWFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb29yZGluYXRlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gbmV3Q29vcmRpbmF0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGltYWdlIFVSTCBhbmQsIG9wdGlvbmFsbHksIHRoZSBjb29yZGluYXRlcy4gVG8gYXZvaWQgaGF2aW5nIHRoZSBpbWFnZSBmbGFzaCBhZnRlciBjaGFuZ2luZyxcbiAgICAgKiBzZXQgdGhlIGByYXN0ZXItZmFkZS1kdXJhdGlvbmAgcGFpbnQgcHJvcGVydHkgb24gdGhlIHJhc3RlciBsYXllciB0byAwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVybF0gUmVxdWlyZWQgaW1hZ2UgVVJMLlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IFtvcHRpb25zLmNvb3JkaW5hdGVzXSBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgdXBkYXRlSW1hZ2Uob3B0aW9uczoge3VybDogc3RyaW5nLCBjb29yZGluYXRlcz86IENvb3JkaW5hdGVzfSkge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2UgfHwgIW9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMubG9hZChvcHRpb25zLmNvb3JkaW5hdGVzLCAoKSA9PiB7IHRoaXMudGV4dHVyZSA9IG51bGw7IH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZmluaXNoTG9hZGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGltYWdlJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLFxuICAgICAqICAgcmVwcmVzZW50ZWQgYXMgYXJyYXlzIG9mIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgbnVtYmVycywgd2hpY2ggZGVmaW5lIHRoZSBjb3JuZXJzIG9mIHRoZSBpbWFnZS5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZSBhbmQgcHJvY2VlZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXG4gICAgICogICBUaGV5IGRvIG5vdCBoYXZlIHRvIHJlcHJlc2VudCBhIHJlY3RhbmdsZS5cbiAgICAgKiBAcmV0dXJucyB7SW1hZ2VTb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBtZXJjYXRvciB0aWxlIGlzIHN1aXRhYmxlIGZvciByZW5kZXJpbmcgdGhlIHZpZGVvIGluXG4gICAgICAgIC8vIGFuZCBjcmVhdGUgYSBidWZmZXIgd2l0aCB0aGUgY29ybmVyIGNvb3JkaW5hdGVzLiBUaGVzZSBjb29yZGluYXRlc1xuICAgICAgICAvLyBtYXkgYmUgb3V0c2lkZSB0aGUgdGlsZSwgYmVjYXVzZSByYXN0ZXIgdGlsZXMgYXJlbid0IGNsaXBwZWQgd2hlbiByZW5kZXJpbmcuXG5cbiAgICAgICAgLy8gdHJhbnNmb3JtIHRoZSBnZW8gY29vcmRpbmF0ZXMgaW50byAoem9vbSAwKSB0aWxlIHNwYWNlIGNvb3JkaW5hdGVzXG4gICAgICAgIGNvbnN0IGNvcm5lckNvb3JkcyA9IGNvb3JkaW5hdGVzLm1hcChNZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRpbGUgd2UnbGwgdXNlIHRvIGhvbGQgdGhpcyBpbWFnZSdzXG4gICAgICAgIC8vIHJlbmRlciBkYXRhXG4gICAgICAgIHRoaXMudGlsZUlEID0gZ2V0Q29vcmRpbmF0ZXNDZW50ZXJUaWxlSUQoY29ybmVyQ29vcmRzKTtcblxuICAgICAgICAvLyBDb25zdHJhaW4gbWluL21heCB6b29tIHRvIG91ciB0aWxlJ3Mgem9vbSBsZXZlbCBpbiBvcmRlciB0byBmb3JjZVxuICAgICAgICAvLyBTb3VyY2VDYWNoZSB0byByZXF1ZXN0IHRoaXMgdGlsZSAobm8gbWF0dGVyIHdoYXQgdGhlIG1hcCdzIHpvb21cbiAgICAgICAgLy8gbGV2ZWwpXG4gICAgICAgIHRoaXMubWluem9vbSA9IHRoaXMubWF4em9vbSA9IHRoaXMudGlsZUlELno7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBjb3JuZXIgY29vcmRpbmF0ZXMgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBvdXJcbiAgICAgICAgLy8gdGlsZS5cbiAgICAgICAgY29uc3QgdGlsZUNvb3JkcyA9IGNvcm5lckNvb3Jkcy5tYXAoKGNvb3JkKSA9PiB0aGlzLnRpbGVJRC5nZXRUaWxlUG9pbnQoY29vcmQpLl9yb3VuZCgpKTtcblxuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheSA9IG5ldyBSYXN0ZXJCb3VuZHNBcnJheSgpO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzBdLngsIHRpbGVDb29yZHNbMF0ueSwgMCwgMCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMV0ueCwgdGlsZUNvb3Jkc1sxXS55LCBFWFRFTlQsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzNdLngsIHRpbGVDb29yZHNbM10ueSwgMCwgRVhURU5UKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1syXS54LCB0aWxlQ29vcmRzWzJdLnksIEVYVEVOVCwgRVhURU5UKTtcblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6J3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDAgfHwgIXRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuaW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHNpbmdsZSB0aWxlIC0tIHdob29zZSBjb29yZGluYXRlcyBhcmUgdGhpcy50aWxlSUQgLS0gdGhhdFxuICAgICAgICAvLyBjb3ZlcnMgdGhlIGltYWdlIHdlIHdhbnQgdG8gcmVuZGVyLiAgSWYgdGhhdCdzIHRoZSBvbmUgYmVpbmdcbiAgICAgICAgLy8gcmVxdWVzdGVkLCBzZXQgaXQgdXAgd2l0aCB0aGUgaW1hZ2U7IG90aGVyd2lzZSwgbWFyayB0aGUgdGlsZSBhc1xuICAgICAgICAvLyBgZXJyb3JlZGAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIG5vIGRhdGEgZm9yIGl0LlxuICAgICAgICAvLyBJZiB0aGUgd29ybGQgd3JhcHMsIHdlIG1heSBoYXZlIG11bHRpcGxlIFwid3JhcHBlZFwiIGNvcGllcyBvZiB0aGVcbiAgICAgICAgLy8gc2luZ2xlIHRpbGUuXG4gICAgICAgIGlmICh0aGlzLnRpbGVJRCAmJiB0aGlzLnRpbGVJRC5lcXVhbHModGlsZS50aWxlSUQuY2Fub25pY2FsKSkge1xuICAgICAgICAgICAgdGhpcy50aWxlc1tTdHJpbmcodGlsZS50aWxlSUQud3JhcCldID0gdGlsZTtcbiAgICAgICAgICAgIHRpbGUuYnVja2V0cyA9IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgICB1cmw6IHRoaXMub3B0aW9ucy51cmwsXG4gICAgICAgICAgICBjb29yZGluYXRlczogdGhpcy5jb29yZGluYXRlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIGNvb3JkaW5hdGVzLCBnZXQgdGhlaXIgY2VudGVyIGFzIGEgY29vcmRpbmF0ZS5cbiAqXG4gKiBAcmV0dXJucyBjZW50ZXJwb2ludFxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvb3JkczogQXJyYXk8TWVyY2F0b3JDb29yZGluYXRlPikge1xuICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBjb29yZC54KTtcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGNvb3JkLnkpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgY29vcmQueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBjb29yZC55KTtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGR5ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgZE1heCA9IE1hdGgubWF4KGR4LCBkeSk7XG4gICAgY29uc3Qgem9vbSA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoLU1hdGgubG9nKGRNYXgpIC8gTWF0aC5MTjIpKTtcbiAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHpvb20pO1xuXG4gICAgcmV0dXJuIG5ldyBDYW5vbmljYWxUaWxlSUQoXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgTWF0aC5mbG9vcigobWluWCArIG1heFgpIC8gMiAqIHRpbGVzQXRab29tKSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblkgKyBtYXhZKSAvIDIgKiB0aWxlc0F0Wm9vbSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VmlkZW8sIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4vaW1hZ2Vfc291cmNlJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQge0Vycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL3N0eWxlLXNwZWMvZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgdHlwZSB7VmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdmlkZW8uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy12aWRlbykgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAndmlkZW8nLFxuICogICAgdXJsOiBbXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLm1wNCcsXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLndlYm0nXG4gKiAgICBdLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZVxuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICogQHNlZSBbQWRkIGEgdmlkZW9dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdmlkZW8tb24tYS1tYXAvKVxuICovXG5jbGFzcyBWaWRlb1NvdXJjZSBleHRlbmRzIEltYWdlU291cmNlIHtcbiAgICBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgdXJsczogQXJyYXk8c3RyaW5nPjtcbiAgICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgICByb3VuZFpvb206IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG4gICAgICAgIHRoaXMucm91bmRab29tID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3ZpZGVvJztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICB0aGlzLnVybHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2Ygb3B0aW9ucy51cmxzKSB7XG4gICAgICAgICAgICB0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRWaWRlbyh0aGlzLnVybHMsIChlcnIsIHZpZGVvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvID0gdmlkZW87XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlby5sb29wID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHJlcGFpbnRpbmcgd2hlbiB2aWRlbyBzdGFydHMgcGxheWluZy4gaGFzVHJhbnNpdGlvbigpIHdpbGwgdGhlbiByZXR1cm5cbiAgICAgICAgICAgICAgICAvLyB0cnVlIHRvIHRyaWdnZXIgYWRkaXRpb25hbCBmcmFtZXMgYXMgbG9uZyBhcyB0aGUgdmlkZW9zIGNvbnRpbnVlcyBwbGF5aW5nLlxuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhdXNlcyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGF5cyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGxheSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwbGF5YmFjayB0byBhIHRpbWVzdGFtcCwgaW4gc2Vjb25kcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlZWsoc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICBjb25zdCBzZWVrYWJsZVJhbmdlID0gdGhpcy52aWRlby5zZWVrYWJsZTtcbiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgc2Vla2FibGVSYW5nZS5zdGFydCgwKSB8fCBzZWNvbmRzID4gc2Vla2FibGVSYW5nZS5lbmQoMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke3RoaXMuaWR9YCwgbnVsbCwgYFBsYXliYWNrIGZvciB0aGlzIHZpZGVvIGNhbiBiZSBzZXQgb25seSBiZXR3ZWVuIHRoZSAke3NlZWthYmxlUmFuZ2Uuc3RhcnQoMCl9IGFuZCAke3NlZWthYmxlUmFuZ2UuZW5kKDApfS1zZWNvbmQgbWFyay5gKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMudmlkZW8uY3VycmVudFRpbWUgPSBzZWNvbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgdmlkZW9gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTFZpZGVvRWxlbWVudH0gVGhlIEhUTUwgYHZpZGVvYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldFZpZGVvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5tYXApIHJldHVybjtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmlkZW8ncyBjb29yZGluYXRlcyBhbmQgcmUtcmVuZGVycyB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXRDb29yZGluYXRlc1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBWaWRlb1NvdXJjZVxuICAgICAqIEByZXR1cm5zIHtWaWRlb1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8IHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLnZpZGVvLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmlkZW8ucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLnZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgICAgdXJsczogdGhpcy51cmxzLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbyAmJiAhdGhpcy52aWRlby5wYXVzZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuZXhwb3J0IHR5cGUgQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiA9IHt8XG4gICAgXCJ0eXBlXCI6IFwiY2FudmFzXCIsXG4gICAgXCJjb29yZGluYXRlc1wiOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0sXG4gICAgXCJhbmltYXRlXCI/OiBib29sZWFuLFxuICAgIFwiY2FudmFzXCI6IHN0cmluZyB8IEhUTUxDYW52YXNFbGVtZW50XG58fTtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGNhbnZhcyBzb3VyY2UgdHlwZSB0byB0aGUgbWFwLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbnZhc1NvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFNvdXJjZSB0eXBlLiBNdXN0IGJlIGBcImNhbnZhc1wiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgQ2FudmFzIHNvdXJjZSBmcm9tIHdoaWNoIHRvIHJlYWQgcGl4ZWxzLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQsIG9yIHRoZSBgSFRNTENhbnZhc0VsZW1lbnRgIGl0c2VsZi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGRlbm90aW5nIHdoZXJlIHRvIHBsYWNlIHRoZSBjb3JuZXJzIG9mIHRoZSBjYW52YXMsIHNwZWNpZmllZCBpbiBgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdYCBwYWlycy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FuaW1hdGU9dHJ1ZV0gV2hldGhlciB0aGUgY2FudmFzIHNvdXJjZSBpcyBhbmltYXRlZC4gSWYgdGhlIGNhbnZhcyBpcyBzdGF0aWMgKGkuZS4gcGl4ZWxzIGRvIG5vdCBuZWVkIHRvIGJlIHJlLXJlYWQgb24gZXZlcnkgZnJhbWUpLCBgYW5pbWF0ZWAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKi9cblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwgY2FudmFzLiBTZWUge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnY2FudmFzJyxcbiAqICAgIGNhbnZhczogJ2lkT2ZNeUhUTUxDYW52YXMnLFxuICogICAgYW5pbWF0ZTogdHJ1ZSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqL1xuY2xhc3MgQ2FudmFzU291cmNlIGV4dGVuZHMgSW1hZ2VTb3VyY2Uge1xuICAgIG9wdGlvbnM6IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgYW5pbWF0ZTogYm9vbGVhbjtcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgcGxheTogKCkgPT4gdm9pZDtcbiAgICBwYXVzZTogKCkgPT4gdm9pZDtcbiAgICBfcGxheWluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgLy8gV2UgYnVpbGQgaW4gc29tZSB2YWxpZGF0aW9uIGhlcmUsIHNpbmNlIGNhbnZhcyBzb3VyY2VzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgc3R5bGUgc3BlYzpcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY29vcmRpbmF0ZXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5jb29yZGluYXRlcykgfHwgb3B0aW9ucy5jb29yZGluYXRlcy5sZW5ndGggIT09IDQgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLnNvbWUoYyA9PiAhQXJyYXkuaXNBcnJheShjKSB8fCBjLmxlbmd0aCAhPT0gMiB8fCBjLnNvbWUobCA9PiB0eXBlb2YgbCAhPT0gJ251bWJlcicpKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjb29yZGluYXRlc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hbmltYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ29wdGlvbmFsIFwiYW5pbWF0ZVwiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuY2FudmFzICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjYW52YXNcIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hbmltYXRlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGFuaW1hdGlvbi4gVGhlIGltYWdlIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIGNhbnZhcyB0byB0aGUgbWFwIG9uIGVhY2ggZnJhbWUuXG4gICAgICogQG1ldGhvZCBwbGF5XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgYW5pbWF0aW9uLiBUaGUgbWFwIHdpbGwgZGlzcGxheSBhIHN0YXRpYyBjb3B5IG9mIHRoZSBjYW52YXMgaW1hZ2UuXG4gICAgICogQG1ldGhvZCBwYXVzZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKi9cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gKHRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpID9cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzIDpcbiAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLicpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRlKSB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2FudmFzJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcy5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXMgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0NhbnZhc1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBsZXQgcmVzaXplID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgcmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkpIHJldHVybjtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIG5vdCBlbm91Z2ggZGF0YSBmb3IgY3VycmVudCBwb3NpdGlvblxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuY2FudmFzLCBnbC5SR0JBLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNpemUgfHwgdGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcywge3ByZW11bHRpcGx5OiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNvb3JkaW5hdGVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XG4gICAgfVxuXG4gICAgX2hhc0ludmFsaWREaW1lbnNpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgW3RoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHRdKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeCkgfHwgeCA8PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXNTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG4vKipcbiAqIFRoZSBgU291cmNlYCBpbnRlcmZhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNvdXJjZSB0eXBlLCBpbmNsdWRpbmcgXCJjb3JlXCIgdHlwZXMgKGB2ZWN0b3JgLCBgcmFzdGVyYCxcbiAqIGB2aWRlb2AsIGV0Yy4pIGFuZCBhbGwgY3VzdG9tLCB0aGlyZC1wYXJ0eSB0eXBlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuIE11c3Qgbm90IGJlIHVzZWQgYnkgYW55IGV4aXN0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFNvdXJjZSBvcHRpb25zLCBzcGVjaWZpYyB0byB0aGUgc291cmNlIHR5cGUgKGV4Y2VwdCBmb3IgYG9wdGlvbnMudHlwZWAsIHdoaWNoIGlzIGFsd2F5c1xuICogcmVxdWlyZWQpLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBUaGUgc291cmNlIHR5cGUsIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBgbmFtZWAgdXNlZCBpbiB7QGxpbmsgU3R5bGUjYWRkU291cmNlVHlwZX0uXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXIgQSB7QGxpbmsgRGlzcGF0Y2hlcn0gaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHdvcmtlcnMuXG4gKlxuICogQGZpcmVzIGRhdGEgd2l0aCBge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9YCB0byBpbmRpY2F0ZSB0aGF0IGFueSBuZWNlc3NhcnkgbWV0YWRhdGFcbiAqIGhhcyBiZWVuIGxvYWRlZCBzbyB0aGF0IGl0J3Mgb2theSB0byBjYWxsIGBsb2FkVGlsZWA7IGFuZCB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfWBcbiAqIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBkYXRhIGhhcyBjaGFuZ2VkLCBzbyB0aGF0IGFueSBjdXJyZW50IGNhY2hlcyBzaG91bGQgYmUgZmx1c2hlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuICBNdXN0IG1hdGNoIHRoZSBpZCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbnpvb21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXh6b29tXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVGlsZUNsaXBwZWQgYGZhbHNlYCBpZiB0aWxlcyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLCBgdHJ1ZWAgaWYgdGhleSBjYW5ub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGFyc2VPdmVyc2NhbGVkIGB0cnVlYCBpZiB0aWxlcyBzaG91bGQgYmUgc2VudCBiYWNrIHRvIHRoZSB3b3JrZXIgZm9yIGVhY2ggb3Zlcnpvb21lZCB6b29tXG4gKiBsZXZlbCwgYGZhbHNlYCBpZiBub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kWm9vbSBgdHJ1ZWAgaWYgem9vbSBsZXZlbHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBpbiB0aGUgc291cmNlIGRhdGEsIGBmYWxzZWBcbiAqIGlmIHRoZXkgYXJlIGZsb29yLWVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgICArdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyLFxuICAgIG1heHpvb206IG51bWJlcixcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uPzogc3RyaW5nLFxuXG4gICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICBpc1RpbGVDbGlwcGVkPzogYm9vbGVhbixcbiAgICBtYXBib3hfbG9nbz86IGJvb2xlYW4sXG4gICAgdGlsZUlEPzogQ2Fub25pY2FsVGlsZUlEO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICB2ZWN0b3JMYXllcklkcz86IEFycmF5PHN0cmluZz4sXG5cbiAgICBoYXNUcmFuc2l0aW9uKCk6IGJvb2xlYW47XG4gICAgbG9hZGVkKCk6IGJvb2xlYW47XG5cbiAgICBmaXJlKGV2ZW50OiBFdmVudCk6IG1peGVkO1xuXG4gICAgK29uQWRkPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZT86IChtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPik6IHZvaWQ7XG4gICAgK2hhc1RpbGU/OiAodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSA9PiBib29sZWFuO1xuICAgICthYm9ydFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuICAgICt1bmxvYWRUaWxlPzogKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gKHN0cmluZ2lmaWFibGUpIEpTIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvdXJjZS5cbiAgICAgKiBDcmVhdGluZyBhIHNvdXJjZSB1c2luZyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFzIHRoZSBgb3B0aW9uc2Agc2hvdWxkIHJlc3VsdCBpbiBhIFNvdXJjZSB0aGF0IGlzXG4gICAgICogZXF1aXZhbGVudCB0byB0aGlzIG9uZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpOiBPYmplY3Q7XG5cbiAgICArcHJlcGFyZT86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgU291cmNlU3RhdGljcyA9IHtcbiAgICAvKlxuICAgICAqIEFuIG9wdGlvbmFsIFVSTCB0byBhIHNjcmlwdCB3aGljaCwgd2hlbiBydW4gYnkgYSBXb3JrZXIsIHJlZ2lzdGVycyBhIHtAbGluayBXb3JrZXJTb3VyY2V9XG4gICAgICogaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgU291cmNlIHR5cGUgYnkgY2FsbGluZyBgc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZSh3b3JrZXJTb3VyY2U6IFdvcmtlclNvdXJjZSlgLlxuICAgICAqL1xuICAgIHdvcmtlclNvdXJjZVVSTD86IFVSTDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNsYXNzID0gQ2xhc3M8U291cmNlPiAmIFNvdXJjZVN0YXRpY3M7XG5cbmltcG9ydCB2ZWN0b3IgZnJvbSAnLi4vc291cmNlL3ZlY3Rvcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UnO1xuaW1wb3J0IHJhc3RlckRlbSBmcm9tICcuLi9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZSc7XG5pbXBvcnQgZ2VvanNvbiBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHZpZGVvIGZyb20gJy4uL3NvdXJjZS92aWRlb19zb3VyY2UnO1xuaW1wb3J0IGltYWdlIGZyb20gJy4uL3NvdXJjZS9pbWFnZV9zb3VyY2UnO1xuaW1wb3J0IGNhbnZhcyBmcm9tICcuLi9zb3VyY2UvY2FudmFzX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY29uc3Qgc291cmNlVHlwZXMgPSB7XG4gICAgdmVjdG9yLFxuICAgIHJhc3RlcixcbiAgICAncmFzdGVyLWRlbSc6IHJhc3RlckRlbSxcbiAgICBnZW9qc29uLFxuICAgIHZpZGVvLFxuICAgIGltYWdlLFxuICAgIGNhbnZhc1xufTtcblxuLypcbiAqIENyZWF0ZXMgYSB0aWxlZCBkYXRhIHNvdXJjZSBpbnN0YW5jZSBnaXZlbiBhbiBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgQSBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3QgY29tcGxpYW50IHdpdGhcbiAqIFtgbWFwYm94LWdsLXN0eWxlLXNwZWNgXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBvciwgZm9yIGEgdGhpcmQtcGFydHkgc291cmNlIHR5cGUsXG4gICogd2l0aCB0aGF0IHR5cGUncyByZXF1aXJlbWVudHMuXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXJcbiAqIEByZXR1cm5zIHtTb3VyY2V9XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBmdW5jdGlvbihpZDogc3RyaW5nLCBzcGVjaWZpY2F0aW9uOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IHNvdXJjZVR5cGVzW3NwZWNpZmljYXRpb24udHlwZV0oaWQsIChzcGVjaWZpY2F0aW9uOiBhbnkpLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgIGlmIChzb3VyY2UuaWQgIT09IGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICR7aWR9IGluc3RlYWQgb2YgJHtzb3VyY2UuaWR9YCk7XG4gICAgfVxuXG4gICAgYmluZEFsbChbJ2xvYWQnLCAnYWJvcnQnLCAndW5sb2FkJywgJ3NlcmlhbGl6ZScsICdwcmVwYXJlJ10sIHNvdXJjZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBzb3VyY2VUeXBlc1tuYW1lXTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgdHlwZTogQ2xhc3M8U291cmNlPikge1xuICAgIHNvdXJjZVR5cGVzW25hbWVdID0gdHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0b3Ige1xuICAgIHNlbmQodHlwZTogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGNhbGxiYWNrOiBDYWxsYmFjazxhbnk+KTogdm9pZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4vc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29sbGlzaW9uSW5kZXggZnJvbSAnLi4vc3ltYm9sL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7UmV0YWluZWRRdWVyeURhdGF9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG4vKlxuICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSB0aWxlIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGVzLlxuICovXG5mdW5jdGlvbiBnZXRQaXhlbFBvc01hdHJpeCh0cmFuc2Zvcm0sIHRpbGVJRCkge1xuICAgIGNvbnN0IHQgPSBtYXQ0LmlkZW50aXR5KFtdKTtcbiAgICBtYXQ0LnRyYW5zbGF0ZSh0LCB0LCBbMSwgMSwgMF0pO1xuICAgIG1hdDQuc2NhbGUodCwgdCwgW3RyYW5zZm9ybS53aWR0aCAqIDAuNSwgdHJhbnNmb3JtLmhlaWdodCAqIDAuNSwgMV0pO1xuICAgIHJldHVybiBtYXQ0Lm11bHRpcGx5KHQsIHQsIHRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlczNETGF5ZXIobGF5ZXJzPzogQXJyYXk8c3RyaW5nPiwgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sIHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICBpZiAobGF5ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gc3R5bGVMYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZUxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1trZXldO1xuICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSA9PT0gc291cmNlSUQgJiYgbGF5ZXIudHlwZSA9PT0gJ2ZpbGwtZXh0cnVzaW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tfOiBzdHJpbmddOiBPYmplY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLCBsYXllcnM6IEFycmF5PHN0cmluZz4sIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG5cbiAgICBjb25zdCBoYXMzRExheWVyID0gcXVlcnlJbmNsdWRlczNETGF5ZXIocGFyYW1zICYmIHBhcmFtcy5sYXllcnMsIHN0eWxlTGF5ZXJzLCBzb3VyY2VDYWNoZS5pZCk7XG4gICAgY29uc3QgbWF4UGl0Y2hTY2FsZUZhY3RvciA9IHRyYW5zZm9ybS5tYXhQaXRjaFNjYWxlRmFjdG9yKCk7XG4gICAgY29uc3QgdGlsZXNJbiA9IHNvdXJjZUNhY2hlLnRpbGVzSW4ocXVlcnlHZW9tZXRyeSwgbWF4UGl0Y2hTY2FsZUZhY3RvciwgaGFzM0RMYXllcik7XG5cbiAgICB0aWxlc0luLnNvcnQoc29ydFRpbGVzSW4pO1xuICAgIGNvbnN0IHJlbmRlcmVkRmVhdHVyZUxheWVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGlsZUluIG9mIHRpbGVzSW4pIHtcbiAgICAgICAgcmVuZGVyZWRGZWF0dXJlTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgd3JhcHBlZFRpbGVJRDogdGlsZUluLnRpbGVJRC53cmFwcGVkKCkua2V5LFxuICAgICAgICAgICAgcXVlcnlSZXN1bHRzOiB0aWxlSW4udGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZS5fc3RhdGUsXG4gICAgICAgICAgICAgICAgdGlsZUluLnF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLmNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLnNjYWxlLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBnZXRQaXhlbFBvc01hdHJpeChzb3VyY2VDYWNoZS50cmFuc2Zvcm0sIHRpbGVJbi50aWxlSUQpKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyhyZW5kZXJlZEZlYXR1cmVMYXllcnMpO1xuXG4gICAgLy8gTWVyZ2Ugc3RhdGUgZnJvbSBTb3VyY2VDYWNoZSBpbnRvIHRoZSByZXN1bHRzXG4gICAgZm9yIChjb25zdCBsYXllcklEIGluIHJlc3VsdCkge1xuICAgICAgICByZXN1bHRbbGF5ZXJJRF0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10sIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2UgPSBmZWF0dXJlLmxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuc291cmNlTGF5ZXIgPSBmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlbmRlcmVkU3ltYm9scyhzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uSW5kZXg6IENvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkUXVlcnlEYXRhOiB7W186IG51bWJlcl06IFJldGFpbmVkUXVlcnlEYXRhfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHJlbmRlcmVkU3ltYm9scyA9IGNvbGxpc2lvbkluZGV4LnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgIGNvbnN0IGJ1Y2tldFF1ZXJ5RGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgYnVja2V0SW5zdGFuY2VJZCBvZiBPYmplY3Qua2V5cyhyZW5kZXJlZFN5bWJvbHMpLm1hcChOdW1iZXIpKSB7XG4gICAgICAgIGJ1Y2tldFF1ZXJ5RGF0YS5wdXNoKHJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldEluc3RhbmNlSWRdKTtcbiAgICB9XG4gICAgYnVja2V0UXVlcnlEYXRhLnNvcnQoc29ydFRpbGVzSW4pO1xuXG4gICAgZm9yIChjb25zdCBxdWVyeURhdGEgb2YgYnVja2V0UXVlcnlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldFN5bWJvbHMgPSBxdWVyeURhdGEuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkU3ltYm9sc1txdWVyeURhdGEuYnVja2V0SW5zdGFuY2VJZF0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBxdWVyeURhdGEuYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgcXVlcnlEYXRhLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hdmFpbGFibGVJbWFnZXMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBidWNrZXRTeW1ib2xzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3ltYm9scyA9IGJ1Y2tldFN5bWJvbHNbbGF5ZXJJRF07XG4gICAgICAgICAgICBsYXllclN5bWJvbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRvcERvd25GZWF0dXJlQ29tcGFyYXRvciBmcm9tIEZlYXR1cmVJbmRleCwgYnV0IHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gbW9zdCByZWNlbnQgc29ydGluZyBvZiBmZWF0dXJlcyBmcm9tIGJ1Y2tldC5zb3J0RmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU29ydE9yZGVyID0gcXVlcnlEYXRhLmZlYXR1cmVTb3J0T3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVTb3J0T3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcXVlcnlSZW5kZXJlZFN5bWJvbHMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlJ2xsIHJldHVybiBmZWF0dXJlcyBpblxuICAgICAgICAgICAgICAgICAgICAvLyBcInRvcC10by1ib3R0b21cIiByZW5kZXJpbmcgb3JkZXIgKGFrYSBsYXN0LXRvLWZpcnN0KS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsbHkgdGhlcmUgY2FuIGJlIG11bHRpcGxlIHN5bWJvbCBpbnN0YW5jZXMgcGVyIGZlYXR1cmUsIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHNvcnQgZWFjaCBmZWF0dXJlIGJhc2VkIG9uIHRoZSBmaXJzdCBtYXRjaGluZyBzeW1ib2wgaW5zdGFuY2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEEgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRCID0gZmVhdHVyZVNvcnRPcmRlci5pbmRleE9mKGIuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEEgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChzb3J0ZWRCID49IDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ydGVkQiAtIHNvcnRlZEE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVja2V0IGhhc24ndCBiZWVuIHJlLXNvcnRlZCBiYXNlZCBvbiBhbmdsZSwgc28gdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXZlcnNlIG9mIHRoZSBvcmRlciB0aGUgZmVhdHVyZXMgYXBwZWFyZWQgaW4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmZlYXR1cmVJbmRleCAtIGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlIG9mIGxheWVyU3ltYm9scykge1xuICAgICAgICAgICAgICAgIHJlc3VsdEZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBzdGF0ZSBmcm9tIFNvdXJjZUNhY2hlIGludG8gdGhlIHJlc3VsdHNcbiAgICBmb3IgKGNvbnN0IGxheWVyTmFtZSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVyTmFtZV0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllck5hbWVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgdGlsZXMgPSBzb3VyY2VDYWNoZS5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBjb25zdCBkYXRhVGlsZXMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpXTtcbiAgICAgICAgY29uc3QgZGF0YUlEID0gdGlsZS50aWxlSUQuY2Fub25pY2FsLmtleTtcbiAgICAgICAgaWYgKCFkYXRhVGlsZXNbZGF0YUlEXSkge1xuICAgICAgICAgICAgZGF0YVRpbGVzW2RhdGFJRF0gPSB0cnVlO1xuICAgICAgICAgICAgdGlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUaWxlc0luKGEsIGIpIHtcbiAgICBjb25zdCBpZEEgPSBhLnRpbGVJRDtcbiAgICBjb25zdCBpZEIgPSBiLnRpbGVJRDtcbiAgICByZXR1cm4gKGlkQS5vdmVyc2NhbGVkWiAtIGlkQi5vdmVyc2NhbGVkWikgfHwgKGlkQS5jYW5vbmljYWwueSAtIGlkQi5jYW5vbmljYWwueSkgfHwgKGlkQS53cmFwIC0gaWRCLndyYXApIHx8IChpZEEuY2Fub25pY2FsLnggLSBpZEIuY2Fub25pY2FsLngpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyh0aWxlcykge1xuICAgIC8vIE1lcmdlIHJlc3VsdHMgZnJvbSBhbGwgdGlsZXMsIGJ1dCBpZiB0d28gdGlsZXMgc2hhcmUgdGhlIHNhbWVcbiAgICAvLyB3cmFwcGVkIElELCBkb24ndCBkdXBsaWNhdGUgZmVhdHVyZXMgYmV0d2VlbiB0aGUgdHdvIHRpbGVzXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3Qgd3JhcHBlZElETGF5ZXJNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHRpbGUgb2YgdGlsZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGlsZS5xdWVyeVJlc3VsdHM7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRJRCA9IHRpbGUud3JhcHBlZFRpbGVJRDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZElETGF5ZXJzID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSA9IHdyYXBwZWRJRExheWVyTWFwW3dyYXBwZWRJRF0gfHwge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBxdWVyeVJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVGZWF0dXJlcyA9IHF1ZXJ5UmVzdWx0c1tsYXllcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRJREZlYXR1cmVzID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RmVhdHVyZXMgPSByZXN1bHRbbGF5ZXJJRF0gPSByZXN1bHRbbGF5ZXJJRF0gfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbGVGZWF0dXJlIG9mIHRpbGVGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZElERmVhdHVyZXNbdGlsZUZlYXR1cmUuZmVhdHVyZUluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaCh0aWxlRmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQSBbbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zKVxuICogd2l0aCBoYXNoIGxvb2t1cCBtYWRlIHBvc3NpYmxlIGJ5IGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgaW4gcGFyYWxsZWwgdG9cbiAqIGFuIGFycmF5IG9mIGRpY3Rpb25hcnkgb2YgdmFsdWVzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZUNhY2hlIHtcbiAgICBtYXg6IG51bWJlcjtcbiAgICBkYXRhOiB7W2tleTogc3RyaW5nXTogQXJyYXk8eyB2YWx1ZTogVGlsZSwgdGltZW91dDogP1RpbWVvdXRJRH0+fTtcbiAgICBvcmRlcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBudW1iZXIgb2YgcGVybWl0dGVkIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVtb3ZlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGl0ZW1zIHdoZW4gdGhleSBleHBpcmVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgb25SZW1vdmU6IChlbGVtZW50OiBUaWxlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLm9uUmVtb3ZlID0gb25SZW1vdmU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZERhdGEgb2YgdGhpcy5kYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KHJlbW92ZWREYXRhLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIHRoaXMub3JkZXIgPSBbXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBrZXksIHZhbHVlIGNvbWJpbmF0aW9uIHRvIHRoZSBjYWNoZSwgdHJpbW1pbmcgaXRzIHNpemUgaWYgdGhpcyBwdXNoZXNcbiAgICAgKiBpdCBvdmVyIG1heCBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCBsb29rdXAga2V5IGZvciB0aGUgaXRlbVxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBhbnkgdmFsdWVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRhdGE6IFRpbGUsIGV4cGlyeVRpbWVvdXQ6IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGlsZUlELndyYXBwZWQoKS5rZXk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVdyYXBwZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogZGF0YSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFXcmFwcGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aWxlSUQsIGRhdGFXcmFwcGVyKTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhW2tleV0ucHVzaChkYXRhV3JhcHBlcik7XG4gICAgICAgIHRoaXMub3JkZXIucHVzaChrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBga2V5YCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGJlIGxvb2tlZC11cFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBjYWNoZSBoYXMgdGhpcyB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFzKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGlsZUlELndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgYW5kIHJlbW92ZSBkYXRhIGZyb20gY2FjaGUuXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIHJldHVybnMgYG51bGxgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGxvb2sgdXBcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIGRhdGEsIG9yIG51bGwgaWYgaXQgaXNuJ3QgZm91bmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEFuZFJlbW92ZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiA/VGlsZSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGlsZUlELndyYXBwZWQoKS5rZXkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0IGFuZCByZW1vdmUgdGhlIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gICAgICovXG4gICAgX2dldEFuZFJlbW92ZUJ5S2V5KGtleTogc3RyaW5nKTogP1RpbGUge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV0uc2hpZnQoKTtcbiAgICAgICAgaWYgKGRhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KGRhdGEudGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihrZXkpLCAxKTtcblxuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldCB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkICh3cmFwcGVkIHRpbGUpIGtleS5cbiAgICAgKi9cbiAgICBnZXRCeUtleShrZXk6IHN0cmluZyk6ID9UaWxlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbMF0udmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbnRyaWVzIHRoYXQgZG8gbm90IHBhc3MgYSBmaWx0ZXIgZnVuY3Rpb24uIFVzZWQgZm9yIHJlbW92aW5nXG4gICAgICogc3RhbGUgdGlsZXMgZnJvbSB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmaWx0ZXJGbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRpbGUgaXMgZmlsdGVyZWQuIElmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgdGlsZSB3aWxsIGJlIGZpbHRlcmVkIG91dC5cbiAgICAgKi9cbiAgICBmaWx0ZXIoZmlsdGVyRm46ICh0aWxlOiBUaWxlKSA9PiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJGbihlbnRyeS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHIudmFsdWUudGlsZUlELCByKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUNhY2hlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIEluZGV4QnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG4gICAgZHluYW1pY0RyYXc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gQm9vbGVhbihkeW5hbWljRHJhdyk7XG5cbiAgICAgICAgLy8gVGhlIGJvdW5kIGluZGV4IGJ1ZmZlciBpcyBwYXJ0IG9mIHZlcnRleCBhcnJheSBvYmplY3Qgc3RhdGUuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gbW9kaWZ5IHdoYXRldmVyIFZBTyBoYXBwZW5zIHRvIGJlIGN1cnJlbnRseSBib3VuZCwgc28gbWFrZSBzdXJlIHRoZSBkZWZhdWx0XG4gICAgICAgIC8vIHZlcnRleCBhcnJheSBwcm92aWRlZCBieSB0aGUgY29udGV4dCBpcyBib3VuZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBhc3NlcnQodGhpcy5keW5hbWljRHJhdyk7XG4gICAgICAgIC8vIFRoZSByaWdodCBWQU8gd2lsbCBnZXQgdGhpcyBidWZmZXIgcmUtYm91bmQgbGF0ZXIgaW4gVmVydGV4QXJyYXlPYmplY3QjYmluZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU2MjBcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluZGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgU3RydWN0QXJyYXksXG4gICAgU3RydWN0QXJyYXlNZW1iZXJcbn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4uL3JlbmRlci9wcm9ncmFtJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ30gQXR0cmlidXRlVHlwZVxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuICAgIEludDg6ICAgJ0JZVEUnLFxuICAgIFVpbnQ4OiAgJ1VOU0lHTkVEX0JZVEUnLFxuICAgIEludDE2OiAgJ1NIT1JUJyxcbiAgICBVaW50MTY6ICdVTlNJR05FRF9TSE9SVCcsXG4gICAgSW50MzI6ICAnSU5UJyxcbiAgICBVaW50MzI6ICdVTlNJR05FRF9JTlQnLFxuICAgIEZsb2F0MzI6ICdGTE9BVCdcbn07XG5cbi8qKlxuICogVGhlIGBWZXJ0ZXhCdWZmZXJgIGNsYXNzIHR1cm5zIGEgYFN0cnVjdEFycmF5YCBpbnRvIGEgV2ViR0wgYnVmZmVyLiBFYWNoIG1lbWJlciBvZiB0aGUgU3RydWN0QXJyYXknc1xuICogU3RydWN0IHR5cGUgaXMgY29udmVydGVkIHRvIGEgV2ViR0wgYXRyaWJ1dGUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0ZXhCdWZmZXIge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xuICAgIGR5bmFtaWNEcmF3OiA/Ym9vbGVhbjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZHluYW1pY0RyYXcgV2hldGhlciB0aGlzIGJ1ZmZlciB3aWxsIGJlIHJlcGVhdGVkbHkgdXBkYXRlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGFycmF5OiBTdHJ1Y3RBcnJheSwgYXR0cmlidXRlczogJFJlYWRPbmx5QXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuaXRlbVNpemUgPSBhcnJheS5ieXRlc1BlckVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHluYW1pY0RyYXcgPSBkeW5hbWljRHJhdztcblxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgYXJyYXkuYXJyYXlCdWZmZXIsIHRoaXMuZHluYW1pY0RyYXcgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNEcmF3KSB7XG4gICAgICAgICAgICBkZWxldGUgYXJyYXkuYXJyYXlCdWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGFzc2VydChhcnJheS5sZW5ndGggPT09IHRoaXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVuYWJsZUF0dHJpYnV0ZXMoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogUHJvZ3JhbTwqPikge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gdGhpcy5hdHRyaWJ1dGVzW2pdO1xuICAgICAgICAgICAgY29uc3QgYXR0cmliSW5kZXg6IG51bWJlciB8IHZvaWQgPSBwcm9ncmFtLmF0dHJpYnV0ZXNbbWVtYmVyLm5hbWVdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGF0dHJpYnV0ZSBwb2ludGVycyBpbiBhIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gZ2wgVGhlIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcHJvZ3JhbSBUaGUgYWN0aXZlIFdlYkdMIHByb2dyYW1cbiAgICAgKiBAcGFyYW0gdmVydGV4T2Zmc2V0IEluZGV4IG9mIHRoZSBzdGFydGluZyB2ZXJ0ZXggb2YgdGhlIHNlZ21lbnRcbiAgICAgKi9cbiAgICBzZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBQcm9ncmFtPCo+LCB2ZXJ0ZXhPZmZzZXQ6ID9udW1iZXIpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYkluZGV4OiBudW1iZXIgfCB2b2lkID0gcHJvZ3JhbS5hdHRyaWJ1dGVzW21lbWJlci5uYW1lXTtcblxuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIChnbDogYW55KVtBdHRyaWJ1dGVUeXBlW21lbWJlci50eXBlXV0sXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1TaXplLFxuICAgICAgICAgICAgICAgICAgICBtZW1iZXIub2Zmc2V0ICsgKHRoaXMuaXRlbVNpemUgKiAodmVydGV4T2Zmc2V0IHx8IDApKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBHTCBidWZmZXIgYm91bmQgdG8gdGhlIGdpdmVuIFdlYkdMIGNvbnRleHRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZXJ0ZXhCdWZmZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJsZW5kRnVuY1R5cGUsXG4gICAgQmxlbmRFcXVhdGlvblR5cGUsXG4gICAgQ29sb3JNYXNrVHlwZSxcbiAgICBEZXB0aFJhbmdlVHlwZSxcbiAgICBEZXB0aE1hc2tUeXBlLFxuICAgIFN0ZW5jaWxGdW5jVHlwZSxcbiAgICBTdGVuY2lsT3BUeXBlLFxuICAgIERlcHRoRnVuY1R5cGUsXG4gICAgVGV4dHVyZVVuaXRUeXBlLFxuICAgIFZpZXdwb3J0VHlwZSxcbiAgICBDdWxsRmFjZU1vZGVUeXBlLFxuICAgIEZyb250RmFjZVR5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlPFQ+IHtcbiAgICBjdXJyZW50OiBUO1xuICAgIGRlZmF1bHQ6IFQ7XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgZ2V0KCk6IFQ7XG4gICAgc2V0RGVmYXVsdCgpOiB2b2lkO1xuICAgIHNldCh2YWx1ZTogVCk6IHZvaWQ7XG59XG5cbmNsYXNzIEJhc2VWYWx1ZTxUPiBpbXBsZW1lbnRzIFZhbHVlPFQ+IHtcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIGN1cnJlbnQ6IFQ7XG4gICAgZGVmYXVsdDogVDtcbiAgICBkaXJ0eTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmRlZmF1bHQ7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIHNldCh2YWx1ZTogVCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gaW4gY2hpbGQgY2xhc3NlcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0OyAvLyBvdmVycmlkZW4gaW4gY2hpbGQgY2xhc3Nlc1xuICAgIH1cbiAgICBzZXREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLmRlZmF1bHQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyQ29sb3IgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3I+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cbiAgICBzZXQodjogQ29sb3IpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuciA9PT0gYy5yICYmIHYuZyA9PT0gYy5nICYmIHYuYiA9PT0gYy5iICYmIHYuYSA9PT0gYy5hICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJDb2xvcih2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJEZXB0aCBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhckRlcHRoKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJTdGVuY2lsIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyU3RlbmNpbCh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yTWFzayBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvck1hc2tUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvck1hc2tUeXBlIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmIHZbM10gPT09IGNbM10gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jb2xvck1hc2sodlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhNYXNrVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhNYXNrVHlwZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhNYXNrVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhNYXNrKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMHhGRjtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbE1hc2sodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFN0ZW5jaWxGdW5jVHlwZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jOiB0aGlzLmdsLkFMV0FZUyxcbiAgICAgICAgICAgIHJlZjogMCxcbiAgICAgICAgICAgIG1hc2s6IDB4RkZcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0KHY6IFN0ZW5jaWxGdW5jVHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5mdW5jID09PSBjLmZ1bmMgJiYgdi5yZWYgPT09IGMucmVmICYmIHYubWFzayA9PT0gYy5tYXNrICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbEZ1bmModi5mdW5jLCB2LnJlZiwgdi5tYXNrKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxPcCBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsT3BUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBTdGVuY2lsT3BUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gW2dsLktFRVAsIGdsLktFRVAsIGdsLktFRVBdO1xuICAgIH1cbiAgICBzZXQodjogU3RlbmNpbE9wVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5zdGVuY2lsT3AodlswXSwgdlsxXSwgdlsyXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aFJhbmdlIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoUmFuZ2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aFJhbmdlVHlwZSB7XG4gICAgICAgIHJldHVybiBbMCwgMV07XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhSYW5nZSh2WzBdLCB2WzFdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aEZ1bmNUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuTEVTUztcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoRnVuY1R5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoRnVuYyh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8QmxlbmRGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQmxlbmRGdW5jVHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFtnbC5PTkUsIGdsLlpFUk9dO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRGdW5jVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRGdW5jKHZbMF0sIHZbMV0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRDb2xvciBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvcj4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3Ige1xuICAgICAgICByZXR1cm4gQ29sb3IudHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIHNldCh2OiBDb2xvcikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5yID09PSBjLnIgJiYgdi5nID09PSBjLmcgJiYgdi5iID09PSBjLmIgJiYgdi5hID09PSBjLmEgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZENvbG9yKHYuciwgdi5nLCB2LmIsIHYuYSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEVxdWF0aW9uIGV4dGVuZHMgQmFzZVZhbHVlPEJsZW5kRXF1YXRpb25UeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBCbGVuZEVxdWF0aW9uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkZVTkNfQUREO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRFcXVhdGlvblR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kRXF1YXRpb24odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZVNpZGUgZXh0ZW5kcyBCYXNlVmFsdWU8Q3VsbEZhY2VNb2RlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQ3VsbEZhY2VNb2RlVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkJBQ0s7XG4gICAgfVxuICAgIHNldCh2OiBDdWxsRmFjZU1vZGVUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jdWxsRmFjZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZyb250RmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxGcm9udEZhY2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBGcm9udEZhY2VUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuQ0NXO1xuICAgIH1cbiAgICBzZXQodjogRnJvbnRGYWNlVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZnJvbnRGYWNlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xQcm9ncmFtPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFByb2dyYW0ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFByb2dyYW0pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnVzZVByb2dyYW0odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVUZXh0dXJlVW5pdCBleHRlbmRzIEJhc2VWYWx1ZTxUZXh0dXJlVW5pdFR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFRleHR1cmVVbml0VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLlRFWFRVUkUwO1xuICAgIH1cbiAgICBzZXQodjogVGV4dHVyZVVuaXRUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5hY3RpdmVUZXh0dXJlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlld3BvcnQgZXh0ZW5kcyBCYXNlVmFsdWU8Vmlld3BvcnRUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBWaWV3cG9ydFR5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtcbiAgICB9XG4gICAgc2V0KHY6IFZpZXdwb3J0VHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgdlszXSA9PT0gY1szXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZEZyYW1lYnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEZyYW1lYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEZyYW1lYnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRSZW5kZXJidWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMUmVuZGVyYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFJlbmRlcmJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVGV4dHVyZSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xUZXh0dXJlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFRleHR1cmUge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFRleHR1cmUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFZlcnRleEJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xCdWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xCdWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRFbGVtZW50QnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xCdWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTEJ1ZmZlcikge1xuICAgICAgICAvLyBBbHdheXMgcmViaW5kXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVmVydGV4QXJyYXlPRVMgZXh0ZW5kcyBCYXNlVmFsdWU8YW55PiB7XG4gICAgdmFvOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3Q7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbyB8fCB2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy52YW8uYmluZFZlcnRleEFycmF5T0VTKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGl4ZWxTdG9yZVVucGFjayBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiA0O1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfQUxJR05NRU5ULCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsICh2OiBhbnkpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tGbGlwWSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgKHY6IGFueSkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8VD4gZXh0ZW5kcyBCYXNlVmFsdWU8P1Q+IHtcbiAgICBwYXJlbnQ6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29udGV4dDogQ29udGV4dDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogV2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yQXR0YWNobWVudCBleHRlbmRzIEZyYW1lYnVmZmVyQXR0YWNobWVudDxXZWJHTFRleHR1cmU+IHtcbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xUZXh0dXJlKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHJlbmRlcmJ1ZmZlciB0byB0aGUgY29sb3JcbiAgICAgICAgLy8gYXR0YWNobWVudCBwb2ludCwgYnV0IHRodXMgZmFyIE1CR0wgb25seSB1c2VzIHRleHR1cmVzIGZvciBjb2xvclxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdiwgMCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aEF0dGFjaG1lbnQgZXh0ZW5kcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8V2ViR0xSZW5kZXJidWZmZXI+IHtcbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHRleHR1cmUgdG8gdGhlIGRlcHRoIGF0dGFjaG1lbnRcbiAgICAgICAgLy8gcG9pbnQsIGJ1dCB0aHVzIGZhciBNQkdMIG9ubHkgdXNlcyByZW5kZXJidWZmZXJzIGZvciBkZXB0aFxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7Q29sb3JBdHRhY2htZW50LCBEZXB0aEF0dGFjaG1lbnR9IGZyb20gJy4vdmFsdWUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5cbmNsYXNzIEZyYW1lYnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZnJhbWVidWZmZXI6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29sb3JBdHRhY2htZW50OiBDb2xvckF0dGFjaG1lbnQ7XG4gICAgZGVwdGhBdHRhY2htZW50OiBEZXB0aEF0dGFjaG1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaGFzRGVwdGg6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBmYm8gPSB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblxuICAgICAgICB0aGlzLmNvbG9yQXR0YWNobWVudCA9IG5ldyBDb2xvckF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgaWYgKGhhc0RlcHRoKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoQXR0YWNobWVudCA9IG5ldyBEZXB0aEF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcblxuICAgICAgICBjb25zdCB0ZXh0dXJlID0gdGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgIGlmICh0ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlcHRoQXR0YWNobWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyYnVmZmVyID0gdGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhbWVidWZmZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge0RlcHRoRnVuY1R5cGUsIERlcHRoTWFza1R5cGUsIERlcHRoUmFuZ2VUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQUxXQVlTID0gMHgwMjA3O1xuXG5jbGFzcyBEZXB0aE1vZGUge1xuICAgIGZ1bmM6IERlcHRoRnVuY1R5cGU7XG4gICAgbWFzazogRGVwdGhNYXNrVHlwZTtcbiAgICByYW5nZTogRGVwdGhSYW5nZVR5cGU7XG5cbiAgICAvLyBEZXB0aE1hc2sgZW51bXNcbiAgICBzdGF0aWMgUmVhZE9ubHk6IGJvb2xlYW47XG4gICAgc3RhdGljIFJlYWRXcml0ZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlcHRoRnVuYzogRGVwdGhGdW5jVHlwZSwgZGVwdGhNYXNrOiBEZXB0aE1hc2tUeXBlLCBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICB0aGlzLmZ1bmMgPSBkZXB0aEZ1bmM7XG4gICAgICAgIHRoaXMubWFzayA9IGRlcHRoTWFzaztcbiAgICAgICAgdGhpcy5yYW5nZSA9IGRlcHRoUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8RGVwdGhNb2RlPjtcbn1cblxuRGVwdGhNb2RlLlJlYWRPbmx5ID0gZmFsc2U7XG5EZXB0aE1vZGUuUmVhZFdyaXRlID0gdHJ1ZTtcblxuRGVwdGhNb2RlLmRpc2FibGVkID0gbmV3IERlcHRoTW9kZShBTFdBWVMsIERlcHRoTW9kZS5SZWFkT25seSwgWzAsIDFdKTtcblxuZXhwb3J0IGRlZmF1bHQgRGVwdGhNb2RlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtTdGVuY2lsT3BDb25zdGFudCwgU3RlbmNpbFRlc3R9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5jb25zdCBLRUVQID0gMHgxRTAwO1xuXG5jbGFzcyBTdGVuY2lsTW9kZSB7XG4gICAgdGVzdDogU3RlbmNpbFRlc3Q7XG4gICAgcmVmOiBudW1iZXI7XG4gICAgbWFzazogbnVtYmVyO1xuICAgIGZhaWw6IFN0ZW5jaWxPcENvbnN0YW50O1xuICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0ZXN0OiBTdGVuY2lsVGVzdCwgcmVmOiBudW1iZXIsIG1hc2s6IG51bWJlciwgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsXG4gICAgICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsIHBhc3M6IFN0ZW5jaWxPcENvbnN0YW50KSB7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLmZhaWwgPSBmYWlsO1xuICAgICAgICB0aGlzLmRlcHRoRmFpbCA9IGRlcHRoRmFpbDtcbiAgICAgICAgdGhpcy5wYXNzID0gcGFzcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxTdGVuY2lsTW9kZT47XG59XG5cblN0ZW5jaWxNb2RlLmRpc2FibGVkID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBBTFdBWVMsIG1hc2s6IDB9LCAwLCAwLCBLRUVQLCBLRUVQLCBLRUVQKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlbmNpbE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIHtCbGVuZEZ1bmNUeXBlLCBDb2xvck1hc2tUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgWkVSTyA9IDB4MDAwMDtcbmNvbnN0IE9ORSA9IDB4MDAwMTtcbmNvbnN0IE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDM7XG5cbmNsYXNzIENvbG9yTW9kZSB7XG4gICAgYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZTtcbiAgICBibGVuZENvbG9yOiBDb2xvcjtcbiAgICBtYXNrOiBDb2xvck1hc2tUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZSwgYmxlbmRDb2xvcjogQ29sb3IsIG1hc2s6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gYmxlbmRDb2xvcjtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB9XG5cbiAgICBzdGF0aWMgUmVwbGFjZTogQmxlbmRGdW5jVHlwZTtcblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIHVuYmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIGFscGhhQmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG59XG5cbkNvbG9yTW9kZS5SZXBsYWNlID0gW09ORSwgWkVST107XG5cbkNvbG9yTW9kZS5kaXNhYmxlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbkNvbG9yTW9kZS51bmJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKENvbG9yTW9kZS5SZXBsYWNlLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbkNvbG9yTW9kZS5hbHBoYUJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKFtPTkUsIE9ORV9NSU5VU19TUkNfQUxQSEFdLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JNb2RlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0N1bGxGYWNlTW9kZVR5cGUsIEZyb250RmFjZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBCQUNLID0gMHgwNDA1O1xuY29uc3QgQ0NXID0gMHgwOTAxO1xuXG5jbGFzcyBDdWxsRmFjZU1vZGUge1xuICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlVHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKGVuYWJsZTogYm9vbGVhbiwgbW9kZTogQ3VsbEZhY2VNb2RlVHlwZSwgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gZW5hYmxlO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLmZyb250RmFjZSA9IGZyb250RmFjZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xuICAgIHN0YXRpYyBiYWNrQ0NXOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPjtcbn1cblxuQ3VsbEZhY2VNb2RlLmRpc2FibGVkID0gbmV3IEN1bGxGYWNlTW9kZShmYWxzZSwgQkFDSywgQ0NXKTtcbkN1bGxGYWNlTW9kZS5iYWNrQ0NXID0gbmV3IEN1bGxGYWNlTW9kZSh0cnVlLCBCQUNLLCBDQ1cpO1xuXG5leHBvcnQgZGVmYXVsdCBDdWxsRmFjZU1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gJy4vaW5kZXhfYnVmZmVyJztcblxuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tICcuL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IEZyYW1lYnVmZmVyIGZyb20gJy4vZnJhbWVidWZmZXInO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4vc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlZXBFcXVhbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7Q2xlYXJDb2xvciwgQ2xlYXJEZXB0aCwgQ2xlYXJTdGVuY2lsLCBDb2xvck1hc2ssIERlcHRoTWFzaywgU3RlbmNpbE1hc2ssIFN0ZW5jaWxGdW5jLCBTdGVuY2lsT3AsIFN0ZW5jaWxUZXN0LCBEZXB0aFJhbmdlLCBEZXB0aFRlc3QsIERlcHRoRnVuYywgQmxlbmQsIEJsZW5kRnVuYywgQmxlbmRDb2xvciwgQmxlbmRFcXVhdGlvbiwgQ3VsbEZhY2UsIEN1bGxGYWNlU2lkZSwgRnJvbnRGYWNlLCBQcm9ncmFtLCBBY3RpdmVUZXh0dXJlVW5pdCwgVmlld3BvcnQsIEJpbmRGcmFtZWJ1ZmZlciwgQmluZFJlbmRlcmJ1ZmZlciwgQmluZFRleHR1cmUsIEJpbmRWZXJ0ZXhCdWZmZXIsIEJpbmRFbGVtZW50QnVmZmVyLCBCaW5kVmVydGV4QXJyYXlPRVMsIFBpeGVsU3RvcmVVbnBhY2ssIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLCBQaXhlbFN0b3JlVW5wYWNrRmxpcFl9IGZyb20gJy4vdmFsdWUnO1xuXG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgICBTdHJ1Y3RBcnJheSxcbiAgICBTdHJ1Y3RBcnJheU1lbWJlclxufSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG50eXBlIENsZWFyQXJncyA9IHtcbiAgICBjb2xvcj86IENvbG9yLFxuICAgIGRlcHRoPzogbnVtYmVyLFxuICAgIHN0ZW5jaWw/OiBudW1iZXJcbn07XG5cbmNsYXNzIENvbnRleHQge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgZXh0VmVydGV4QXJyYXlPYmplY3Q6IGFueTtcbiAgICBjdXJyZW50TnVtQXR0cmlidXRlczogP251bWJlcjtcblxuICAgIGNsZWFyQ29sb3I6IENsZWFyQ29sb3I7XG4gICAgY2xlYXJEZXB0aDogQ2xlYXJEZXB0aDtcbiAgICBjbGVhclN0ZW5jaWw6IENsZWFyU3RlbmNpbDtcbiAgICBjb2xvck1hc2s6IENvbG9yTWFzaztcbiAgICBkZXB0aE1hc2s6IERlcHRoTWFzaztcbiAgICBzdGVuY2lsTWFzazogU3RlbmNpbE1hc2s7XG4gICAgc3RlbmNpbEZ1bmM6IFN0ZW5jaWxGdW5jO1xuICAgIHN0ZW5jaWxPcDogU3RlbmNpbE9wO1xuICAgIHN0ZW5jaWxUZXN0OiBTdGVuY2lsVGVzdDtcbiAgICBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlO1xuICAgIGRlcHRoVGVzdDogRGVwdGhUZXN0O1xuICAgIGRlcHRoRnVuYzogRGVwdGhGdW5jO1xuICAgIGJsZW5kOiBCbGVuZDtcbiAgICBibGVuZEZ1bmM6IEJsZW5kRnVuYztcbiAgICBibGVuZENvbG9yOiBCbGVuZENvbG9yO1xuICAgIGJsZW5kRXF1YXRpb246IEJsZW5kRXF1YXRpb247XG4gICAgY3VsbEZhY2U6IEN1bGxGYWNlO1xuICAgIGN1bGxGYWNlU2lkZTogQ3VsbEZhY2VTaWRlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlO1xuICAgIHByb2dyYW06IFByb2dyYW07XG4gICAgYWN0aXZlVGV4dHVyZTogQWN0aXZlVGV4dHVyZVVuaXQ7XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICAgIGJpbmRGcmFtZWJ1ZmZlcjogQmluZEZyYW1lYnVmZmVyO1xuICAgIGJpbmRSZW5kZXJidWZmZXI6IEJpbmRSZW5kZXJidWZmZXI7XG4gICAgYmluZFRleHR1cmU6IEJpbmRUZXh0dXJlO1xuICAgIGJpbmRWZXJ0ZXhCdWZmZXI6IEJpbmRWZXJ0ZXhCdWZmZXI7XG4gICAgYmluZEVsZW1lbnRCdWZmZXI6IEJpbmRFbGVtZW50QnVmZmVyO1xuICAgIGJpbmRWZXJ0ZXhBcnJheU9FUzogQmluZFZlcnRleEFycmF5T0VTO1xuICAgIHBpeGVsU3RvcmVVbnBhY2s6IFBpeGVsU3RvcmVVbnBhY2s7XG4gICAgcGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE6IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhO1xuICAgIHBpeGVsU3RvcmVVbnBhY2tGbGlwWTogUGl4ZWxTdG9yZVVucGFja0ZsaXBZO1xuXG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOiBhbnk7XG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4OiBhbnk7XG4gICAgZXh0VGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFRpbWVyUXVlcnk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ID0gdGhpcy5nbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XG5cbiAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gbmV3IENsZWFyQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aCA9IG5ldyBDbGVhckRlcHRoKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCA9IG5ldyBDbGVhclN0ZW5jaWwodGhpcyk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrID0gbmV3IENvbG9yTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2sgPSBuZXcgRGVwdGhNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrID0gbmV3IFN0ZW5jaWxNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jID0gbmV3IFN0ZW5jaWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcCA9IG5ldyBTdGVuY2lsT3AodGhpcyk7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QgPSBuZXcgU3RlbmNpbFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZSA9IG5ldyBEZXB0aFJhbmdlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdCA9IG5ldyBEZXB0aFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jID0gbmV3IERlcHRoRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZCA9IG5ldyBCbGVuZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMgPSBuZXcgQmxlbmRGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBuZXcgQmxlbmRDb2xvcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gbmV3IEJsZW5kRXF1YXRpb24odGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2UgPSBuZXcgQ3VsbEZhY2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlID0gbmV3IEN1bGxGYWNlU2lkZSh0aGlzKTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UgPSBuZXcgRnJvbnRGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBuZXcgUHJvZ3JhbSh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlID0gbmV3IEFjdGl2ZVRleHR1cmVVbml0KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdwb3J0KHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlciA9IG5ldyBCaW5kRnJhbWVidWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlciA9IG5ldyBCaW5kUmVuZGVyYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlID0gbmV3IEJpbmRUZXh0dXJlKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIgPSBuZXcgQmluZFZlcnRleEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlciA9IG5ldyBCaW5kRWxlbWVudEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMgPSB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ICYmIG5ldyBCaW5kVmVydGV4QXJyYXlPRVModGhpcyk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFjayA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhID0gbmV3IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkodGhpcyk7XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMgPSAoXG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpIHx8XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7XG4gICAgICAgICAgICB0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCA9IGdsLmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQpIHtcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGltZXJRdWVyeSA9IGdsLmdldEV4dGVuc2lvbignRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Jyk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy51bmJpbmRWQU8oKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhckRlcHRoLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbG9yTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyYW0uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdwb3J0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVJbmRleEJ1ZmZlcihhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcih0aGlzLCBhcnJheSwgZHluYW1pY0RyYXcpO1xuICAgIH1cblxuICAgIGNyZWF0ZVZlcnRleEJ1ZmZlcihhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyKHRoaXMsIGFycmF5LCBhdHRyaWJ1dGVzLCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyYnVmZmVyKHN0b3JhZ2VGb3JtYXQ6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuXG4gICAgICAgIGNvbnN0IHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KHJibyk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBzdG9yYWdlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICByZXR1cm4gcmJvO1xuICAgIH1cblxuICAgIGNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBoYXNEZXB0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGhhc0RlcHRoKTtcbiAgICB9XG5cbiAgICBjbGVhcih7Y29sb3IsIGRlcHRofTogQ2xlYXJBcmdzKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgbGV0IG1hc2sgPSAwO1xuXG4gICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yLnNldChjb2xvcik7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBtYXNrIHw9IGdsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aGVyZSBjbGVhckRlcHRoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICAvLyB3aXRob3V0IHJlc2V0aW5nIHRoZSBkZXB0aFJhbmdlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM0MzdcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsIDFdKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhckRlcHRoLnNldChkZXB0aCk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgbm90ZSBpbiBQYWludGVyI2NsZWFyU3RlbmNpbDogaW1wbGVtZW50IHRoaXMgdGhlIGVhc3kgd2F5IG9uY2UgR1BVIGJ1Zy93b3JrYXJvdW5kIGlzIGZpeGVkIHVwc3RyZWFtXG4gICAgICAgIC8vIGlmICh0eXBlb2Ygc3RlbmNpbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gICAgIG1hc2sgfD0gZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclN0ZW5jaWwuc2V0KHN0ZW5jaWwpO1xuICAgICAgICAvLyAgICAgdGhpcy5zdGVuY2lsTWFzay5zZXQoMHhGRik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBnbC5jbGVhcihtYXNrKTtcbiAgICB9XG5cbiAgICBzZXRDdWxsRmFjZShjdWxsRmFjZU1vZGU6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+KSB7XG4gICAgICAgIGlmIChjdWxsRmFjZU1vZGUuZW5hYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXQoY3VsbEZhY2VNb2RlLm1vZGUpO1xuICAgICAgICAgICAgdGhpcy5mcm9udEZhY2Uuc2V0KGN1bGxGYWNlTW9kZS5mcm9udEZhY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVwdGhNb2RlKGRlcHRoTW9kZTogJFJlYWRPbmx5PERlcHRoTW9kZT4pIHtcbiAgICAgICAgaWYgKGRlcHRoTW9kZS5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhZGVwdGhNb2RlLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXQoZGVwdGhNb2RlLmZ1bmMpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KGRlcHRoTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoZGVwdGhNb2RlLnJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+KSB7XG4gICAgICAgIGlmIChzdGVuY2lsTW9kZS50ZXN0LmZ1bmMgPT09IHRoaXMuZ2wuQUxXQVlTICYmICFzdGVuY2lsTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KHN0ZW5jaWxNb2RlLm1hc2spO1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0KFtzdGVuY2lsTW9kZS5mYWlsLCBzdGVuY2lsTW9kZS5kZXB0aEZhaWwsIHN0ZW5jaWxNb2RlLnBhc3NdKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtcbiAgICAgICAgICAgICAgICBmdW5jOiBzdGVuY2lsTW9kZS50ZXN0LmZ1bmMsXG4gICAgICAgICAgICAgICAgcmVmOiBzdGVuY2lsTW9kZS5yZWYsXG4gICAgICAgICAgICAgICAgbWFzazogc3RlbmNpbE1vZGUudGVzdC5tYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbG9yTW9kZShjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+KSB7XG4gICAgICAgIGlmIChkZWVwRXF1YWwoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24sIENvbG9yTW9kZS5SZXBsYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXQoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5ibGVuZENvbG9yLnNldChjb2xvck1vZGUuYmxlbmRDb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoY29sb3JNb2RlLm1hc2spO1xuICAgIH1cblxuICAgIHVuYmluZFZBTygpIHtcbiAgICAgICAgLy8gVW5iaW5kaW5nIHRoZSBWQU8gcHJldmVudHMgb3RoZXIgdGhpbmdzIChjdXN0b20gbGF5ZXJzLCBuZXcgYnVmZmVyIGNyZWF0aW9uKSBmcm9tXG4gICAgICAgIC8vIHVuaW50ZW50aW9uYWxseSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZSBhcyBjcmVhdGVTb3VyY2V9IGZyb20gJy4vc291cmNlJztcblxuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVGlsZUNhY2hlIGZyb20gJy4vdGlsZV9jYWNoZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7a2V5c0RpZmZlcmVuY2UsIHZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuL3NvdXJjZV9zdGF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1RpbGVTdGF0ZX0gZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIGBTb3VyY2VDYWNoZWAgaXMgcmVzcG9uc2libGUgZm9yXG4gKlxuICogIC0gY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGZvcndhcmRpbmcgZXZlbnRzIGZyb20gYFNvdXJjZWBcbiAqICAtIGNhY2hpbmcgdGlsZXMgbG9hZGVkIGZyb20gYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGxvYWRpbmcgdGhlIHRpbGVzIG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICogIC0gdW5sb2FkaW5nIHRoZSBjYWNoZWQgdGlsZXMgbm90IG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNvdXJjZUNhY2hlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHN0eWxlOiBTdHlsZTtcblxuICAgIF9zb3VyY2U6IFNvdXJjZTtcbiAgICBfc291cmNlTG9hZGVkOiBib29sZWFuO1xuICAgIF9zb3VyY2VFcnJvcmVkOiBib29sZWFuO1xuICAgIF90aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfTtcbiAgICBfcHJldkxuZzogbnVtYmVyIHwgdm9pZDtcbiAgICBfY2FjaGU6IFRpbGVDYWNoZTtcbiAgICBfdGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX2NhY2hlVGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX21heFRpbGVDYWNoZVNpemU6ID9udW1iZXI7XG4gICAgX3BhdXNlZDogYm9vbGVhbjtcbiAgICBfc2hvdWxkUmVsb2FkT25SZXN1bWU6IGJvb2xlYW47XG4gICAgX2NvdmVyZWRUaWxlczoge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBfaXNJZFJlbmRlcmFibGU6IChpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICAgdXNlZDogYm9vbGVhbjtcbiAgICBfc3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZTtcbiAgICBfbG9hZGVkUGFyZW50VGlsZXM6IHtbXzogc3RyaW5nXTogP1RpbGV9O1xuXG4gICAgc3RhdGljIG1heFVuZGVyem9vbWluZzogbnVtYmVyO1xuICAgIHN0YXRpYyBtYXhPdmVyem9vbWluZzogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG5cbiAgICAgICAgdGhpcy5vbignZGF0YScsIChlKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLl9zb3VyY2VMb2FkZWQgc2lnbmlmaWVzIHRoYXQgdGhlIFRpbGVKU09OIGlzIGxvYWRlZCBpZiBhcHBsaWNhYmxlLlxuICAgICAgICAgICAgLy8gaWYgdGhlIHNvdXJjZSB0eXBlIGRvZXMgbm90IGNvbWUgd2l0aCBhIFRpbGVKU09OLCB0aGUgZmxhZyBzaWduaWZpZXMgdGhlXG4gICAgICAgICAgICAvLyBzb3VyY2UgZGF0YSBoYXMgbG9hZGVkIChpLmUgZ2VvanNvbiBoYXMgYmVlbiB0aWxlZCBvbiB0aGUgd29ya2VyIGFuZCBpcyByZWFkeSlcbiAgICAgICAgICAgIGlmIChlLmRhdGFUeXBlID09PSAnc291cmNlJyAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB0aGlzLl9zb3VyY2VMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBmb3Igc291cmNlcyB3aXRoIG11dGFibGUgZGF0YSwgdGhpcyBldmVudCBmaXJlcyB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGEgc291cmNlIGlzIGNoYW5nZWQuIChpLmUuIEdlb0pTT05Tb3VyY2Ujc2V0RGF0YSBhbmQgSW1hZ2VTb3VyY2Ujc2VyQ29vcmRpbmF0ZXMpXG4gICAgICAgICAgICBpZiAodGhpcy5fc291cmNlTG9hZGVkICYmICF0aGlzLl9wYXVzZWQgJiYgZS5kYXRhVHlwZSA9PT0gXCJzb3VyY2VcIiAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZUVycm9yZWQgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBjcmVhdGVTb3VyY2UoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVzID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IFRpbGVDYWNoZSgwLCB0aGlzLl91bmxvYWRUaWxlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl90aW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG4gICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFNvdXJjZUZlYXR1cmVTdGF0ZSgpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gbWFwID8gbWFwLl9tYXhUaWxlQ2FjaGVTaXplIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25BZGQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vbkFkZChtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vblJlbW92ZShtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgbm8gdGlsZSBkYXRhIGlzIHBlbmRpbmcsIHRpbGVzIHdpbGwgbm90IGNoYW5nZSB1bmxlc3NcbiAgICAgKiBhbiBhZGRpdGlvbmFsIEFQSSBjYWxsIGlzIHJlY2VpdmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlRXJyb3JlZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RdO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnICYmIHRpbGUuc3RhdGUgIT09ICdlcnJvcmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U291cmNlKCk6IFNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVzdW1lKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG91bGRSZWxvYWQpIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIF9sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0aWxlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX3VubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLnVubG9hZFRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIF9hYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmFib3J0VGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHRpbGUsICgpID0+IHt9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZShjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICAodGhpcy5fc291cmNlLnByZXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wcmVwYXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpXTtcbiAgICAgICAgICAgIHRpbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGlsZS5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRpbGUgaWRzIG9yZGVyZWQgd2l0aCB6LW9yZGVyLCBhbmQgY2FzdCB0byBudW1iZXJzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAodmFsdWVzKHRoaXMuX3RpbGVzKTogYW55KS5tYXAoKHRpbGU6IFRpbGUpID0+IHRpbGUudGlsZUlEKS5zb3J0KGNvbXBhcmVUaWxlSWQpLm1hcChpZCA9PiBpZC5rZXkpO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmFibGVzOiBBcnJheTxUaWxlPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoaWQsIHN5bWJvbExheWVyKSkgcmVuZGVyYWJsZXMucHVzaCh0aGlzLl90aWxlc1tpZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW1ib2xMYXllcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGVzLnNvcnQoKGFfOiBUaWxlLCBiXzogVGlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBhXy50aWxlSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGJfLnRpbGVJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVkQSA9IChuZXcgUG9pbnQoYS5jYW5vbmljYWwueCwgYS5jYW5vbmljYWwueSkpLl9yb3RhdGUodGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRCID0gKG5ldyBQb2ludChiLmNhbm9uaWNhbC54LCBiLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IHJvdGF0ZWRCLnkgLSByb3RhdGVkQS55IHx8IHJvdGF0ZWRCLnggLSByb3RhdGVkQS54O1xuICAgICAgICAgICAgfSkubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZXMubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQpLnNvcnQoY29tcGFyZVRpbGVJZCkubWFwKGlkID0+IGlkLmtleSk7XG4gICAgfVxuXG4gICAgaGFzUmVuZGVyYWJsZVBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50VGlsZSA9IHRoaXMuZmluZExvYWRlZFBhcmVudCh0aWxlSUQsIDApO1xuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRSZW5kZXJhYmxlKHBhcmVudFRpbGUudGlsZUlELmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9pc0lkUmVuZGVyYWJsZShpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbGVzW2lkXSAmJiB0aGlzLl90aWxlc1tpZF0uaGFzRGF0YSgpICYmXG4gICAgICAgICAgICAhdGhpcy5fY292ZXJlZFRpbGVzW2lkXSAmJiAoc3ltYm9sTGF5ZXIgfHwgIXRoaXMuX3RpbGVzW2lkXS5ob2xkaW5nRm9yRmFkZSgpKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlLnJlc2V0KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGlsZXNbaV0uc3RhdGUgIT09IFwiZXJyb3JlZFwiKSB0aGlzLl9yZWxvYWRUaWxlKGksICdyZWxvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9yZWxvYWRUaWxlKGlkOiBzdHJpbmcsIHN0YXRlOiBUaWxlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAvLyB0aGlzIHBvdGVudGlhbGx5IGRvZXMgbm90IGFkZHJlc3MgYWxsIHVuZGVybHlpbmdcbiAgICAgICAgLy8gaXNzdWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy80MjUyXG4gICAgICAgIC8vIC0gaGFyZCB0byB0ZWxsIHdpdGhvdXQgcmVwcm8gc3RlcHNcbiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcImxvYWRpbmdcIiB0aWxlcyBhbmQgXCJyZWxvYWRpbmdcIiBvciBcImV4cGlyZWRcIlxuICAgICAgICAvLyB0aWxlcyBpcyB0aGF0IFwicmVsb2FkaW5nXCIvXCJleHBpcmVkXCIgdGlsZXMgYXJlIFwicmVuZGVyYWJsZVwiLlxuICAgICAgICAvLyBUaGVyZWZvcmUsIGEgXCJsb2FkaW5nXCIgdGlsZSBjYW5ub3QgYmVjb21lIGEgXCJyZWxvYWRpbmdcIiB0aWxlIHdpdGhvdXRcbiAgICAgICAgLy8gZmlyc3QgYmVjb21pbmcgYSBcImxvYWRlZFwiIHRpbGUuXG4gICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCBpZCwgc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfdGlsZUxvYWRlZCh0aWxlOiBUaWxlLCBpZDogc3RyaW5nLCBwcmV2aW91c1N0YXRlOiBUaWxlU3RhdGUsIGVycjogP0Vycm9yKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICBpZiAoKGVycjogYW55KS5zdGF0dXMgIT09IDQwNCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyLCB7dGlsZX0pKTtcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIHBhcmVudC9jaGlsZHJlbiB0aWxlcyBpZiBhIHRpbGUgZG9lc24ndCBleGlzdCAoNDA0KVxuICAgICAgICAgICAgZWxzZSB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aWxlLnRpbWVBZGRlZCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSAnZXhwaXJlZCcpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoaWQsIHRpbGUpO1xuICAgICAgICBpZiAodGhpcy5nZXRTb3VyY2UoKS50eXBlID09PSAncmFzdGVyLWRlbScgJiYgdGlsZS5kZW0pIHRoaXMuX2JhY2tmaWxsREVNKHRpbGUpO1xuICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHRpbGUsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHRpbGUsIGNvb3JkOiB0aWxlLnRpbGVJRH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEZvciByYXN0ZXIgdGVycmFpbiBzb3VyY2UsIGJhY2tmaWxsIERFTSB0byBlbGltaW5hdGUgdmlzaWJsZSB0aWxlIGJvdW5kYXJpZXNcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBfYmFja2ZpbGxERU0odGlsZTogVGlsZSkge1xuICAgICAgICBjb25zdCByZW5kZXJhYmxlcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IHJlbmRlcmFibGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRpbGUubmVpZ2hib3JpbmdUaWxlcyAmJiB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9yZGVyVGlsZSA9IHRoaXMuZ2V0VGlsZUJ5SUQoYm9yZGVySWQpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSk7XG4gICAgICAgICAgICAgICAgZmlsbEJvcmRlcihib3JkZXJUaWxlLCB0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSkge1xuICAgICAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGR4ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnggLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnkgLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELmNhbm9uaWNhbC56KTtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcklkID0gYm9yZGVyVGlsZS50aWxlSUQua2V5O1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4KSA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGRlbHRhIGNvb3JkaW5hdGUgZm9yIHdvcmxkIHdyYXBhcm91bmQuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4ICsgZGltKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBkaW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkeCAtIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggLT0gZGltO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYm9yZGVyVGlsZS5kZW0gfHwgIXRpbGUuZGVtKSByZXR1cm47XG4gICAgICAgICAgICB0aWxlLmRlbS5iYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlLmRlbSwgZHgsIGR5KTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSlcbiAgICAgICAgICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdLmJhY2tmaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgVGlsZUlEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IFRpbGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0aWxlSUQua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyB0aWxlIGJ5IGlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlQnlJRChpZDogc3RyaW5nKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gc2V0IG9mIHRpbGVzLCByZXRhaW4gY2hpbGRyZW4gdGhhdCBhcmUgbG9hZGVkIGFuZCBoYXZlIGEgem9vbVxuICAgICAqIGJldHdlZW4gYHpvb21gIChleGNsdXNpdmUpIGFuZCBgbWF4Q292ZXJpbmdab29tYCAoaW5jbHVzaXZlKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JldGFpbkxvYWRlZENoaWxkcmVuKFxuICAgICAgICBpZGVhbFRpbGVzOiB7W186IGFueV06IE92ZXJzY2FsZWRUaWxlSUR9LFxuICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgIG1heENvdmVyaW5nWm9vbTogbnVtYmVyLFxuICAgICAgICByZXRhaW46IHtbXzogYW55XTogT3ZlcnNjYWxlZFRpbGVJRH1cbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY29uc2lkZXIgcmVuZGVyYWJsZSB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgIGlmIChyZXRhaW5baWRdIHx8XG4gICAgICAgICAgICAgICAgIXRpbGUuaGFzRGF0YSgpIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPD0gem9vbSB8fFxuICAgICAgICAgICAgICAgIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gbWF4Q292ZXJpbmdab29tXG4gICAgICAgICAgICApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggcGFyZW50cyBhbmQgcmV0YWluIHRoZSB0b3Btb3N0IGxvYWRlZCBvbmUgaWYgZm91bmRcbiAgICAgICAgICAgIGxldCB0b3Btb3N0TG9hZGVkSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIHdoaWxlICh0aWxlICYmIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSArIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJRCA9IHRpbGUudGlsZUlELnNjYWxlZFRvKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fdGlsZXNbcGFyZW50SUQua2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcG1vc3RMb2FkZWRJRCA9IHBhcmVudElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuY2VzdG9ycyBvZiB0aGUgdG9wbW9zdCBsb2FkZWQgY2hpbGQgdG8gc2VlIGlmIHRoZXJlJ3Mgb25lIHRoYXQgbmVlZGVkIGl0XG4gICAgICAgICAgICBsZXQgdGlsZUlEID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGVJRC5vdmVyc2NhbGVkWiA+IHpvb20pIHtcbiAgICAgICAgICAgICAgICB0aWxlSUQgPSB0aWxlSUQuc2NhbGVkVG8odGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWRlYWxUaWxlc1t0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHBhcmVudCB0aGF0IG5lZWRlZCBhIGxvYWRlZCBjaGlsZDsgcmV0YWluIHRoYXQgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW3RvcG1vc3RMb2FkZWRJRC5rZXldID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgbG9hZGVkIHBhcmVudCBvZiB0aGUgZ2l2ZW4gdGlsZSAodXAgdG8gbWluQ292ZXJpbmdab29tKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZmluZExvYWRlZFBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1pbkNvdmVyaW5nWm9vbTogbnVtYmVyKTogP1RpbGUge1xuICAgICAgICBpZiAodGlsZUlELmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50aWxlSUQub3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgeiA9IHRpbGVJRC5vdmVyc2NhbGVkWiAtIDE7IHogPj0gbWluQ292ZXJpbmdab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRpbGVJRCA9IHRpbGVJRC5zY2FsZWRUbyh6KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl9nZXRMb2FkZWRUaWxlKHBhcmVudFRpbGVJRCk7XG4gICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldExvYWRlZFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaWxlQ2FjaGUgaWdub3JlcyB3cmFwIGluIGxvb2t1cC5cbiAgICAgICAgY29uc3QgY2FjaGVkVGlsZSA9IHRoaXMuX2NhY2hlLmdldEJ5S2V5KHRpbGVJRC53cmFwcGVkKCkua2V5KTtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFRpbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgdGlsZSBjYWNoZSBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCdzIHNpemVcbiAgICAgKiBvciB0aGUgbWF4VGlsZUNhY2hlU2l6ZSBvcHRpb24gcGFzc2VkIGR1cmluZyBtYXAgY3JlYXRpb25cbiAgICAgKlxuICAgICAqIExhcmdlciB2aWV3cG9ydHMgdXNlIG1vcmUgdGlsZXMgYW5kIG5lZWQgbGFyZ2VyIGNhY2hlcy4gTGFyZ2VyIHZpZXdwb3J0c1xuICAgICAqIGFyZSBtb3JlIGxpa2VseSB0byBiZSBmb3VuZCBvbiBkZXZpY2VzIHdpdGggbW9yZSBtZW1vcnkgYW5kIG9uIHBhZ2VzIHdoZXJlXG4gICAgICogdGhlIG1hcCBpcyBtb3JlIGltcG9ydGFudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB3aWR0aEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLndpZHRoIC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGhlaWdodEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLmhlaWdodCAvIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSkgKyAxO1xuICAgICAgICBjb25zdCBhcHByb3hUaWxlc0luVmlldyA9IHdpZHRoSW5UaWxlcyAqIGhlaWdodEluVGlsZXM7XG4gICAgICAgIGNvbnN0IGNvbW1vblpvb21SYW5nZSA9IDU7XG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVudE1heFNpemUgPSBNYXRoLmZsb29yKGFwcHJveFRpbGVzSW5WaWV3ICogY29tbW9uWm9vbVJhbmdlKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID09PSAnbnVtYmVyJyA/IE1hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsIHZpZXdEZXBlbmRlbnRNYXhTaXplKSA6IHZpZXdEZXBlbmRlbnRNYXhTaXplO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlLnNldE1heFNpemUobWF4U2l6ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIHRoZSByZWd1bGFyIHoveC95IHZhbHVlcywgVGlsZUlEcyBoYXZlIGEgYHdyYXBgIHZhbHVlIHRoYXQgc3BlY2lmeVxuICAgICAgICAvLyB3aGljaCBjcHB5IG9mIHRoZSB3b3JsZCB0aGUgdGlsZSBiZWxvbmdzIHRvLiBGb3IgZXhhbXBsZSwgYXQgYGxuZzogMTBgIHlvdVxuICAgICAgICAvLyBtaWdodCByZW5kZXIgei94L3kvMCB3aGlsZSBhdCBgbG5nOiAzNzBgIHlvdSB3b3VsZCByZW5kZXIgei94L3kvMS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiBsbmcgdmFsdWVzIGdldCB3cmFwcGVkIChnb2luZyBmcm9tIGBsbmc6IDM3MGAgdG8gYGxvbmc6IDEwYCkgeW91IGV4cGVjdFxuICAgICAgICAvLyB0byBzZWUgdGhlIHNhbWUgdGhpbmcgb24gdGhlIHNjcmVlbiAoMzcwIGRlZ3JlZXMgYW5kIDEwIGRlZ3JlZXMgaXMgdGhlIHNhbWVcbiAgICAgICAgLy8gcGxhY2UgaW4gdGhlIHdvcmxkKSBidXQgYWxsIHRoZSBUaWxlSURzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0cmFuc2l0aW9uIHNlYW1sZXNzLCB3ZSBjYWxjdWxhdGUgdGhlIHJvdW5kZWQgZGlmZmVyZW5jZSBvZlxuICAgICAgICAvLyBcIndvcmxkc1wiIGJldHdlZW4gdGhlIGxhc3QgZnJhbWUgYW5kIHRoZSBjdXJyZW50IGZyYW1lLiBJZiB0aGUgbWFwIHBhbm5lZCBieVxuICAgICAgICAvLyBhIHdvcmxkLCB0aGVuIHdlIGNhbiBhc3NpZ24gYWxsIHRoZSB0aWxlcyBuZXcgVGlsZUlEcyB3aXRoIHVwZGF0ZWQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBhc3NpZ24gei94L3kvMSBhIG5ldyBpZDogei94L3kvMC4gSXQgaXMgdGhlIHNhbWUgdGlsZSwganVzdCByZW5kZXJlZFxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHJldXNlIHRoZSB0aWxlcyBhdCBtb3JlIGlkZWFsIGxvY2F0aW9ucyBhbmQgcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCBwcmV2TG5nID0gdGhpcy5fcHJldkxuZyA9PT0gdW5kZWZpbmVkID8gbG5nIDogdGhpcy5fcHJldkxuZztcbiAgICAgICAgY29uc3QgbG5nRGlmZmVyZW5jZSA9IGxuZyAtIHByZXZMbmc7XG4gICAgICAgIGNvbnN0IHdvcmxkRGlmZmVyZW5jZSA9IGxuZ0RpZmZlcmVuY2UgLyAzNjA7XG4gICAgICAgIGNvbnN0IHdyYXBEZWx0YSA9IE1hdGgucm91bmQod29ybGREaWZmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5fcHJldkxuZyA9IGxuZztcblxuICAgICAgICBpZiAod3JhcERlbHRhKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGUudGlsZUlELnVud3JhcFRvKHRpbGUudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUudGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGlsZXMgPSB0aWxlcztcblxuICAgICAgICAgICAgLy8gUmVzZXQgdGlsZSByZWxvYWQgdGltZXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihpZCwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRpbGVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGFuZCBhZGRzIG5ldyB0aWxlcyB0aGF0XG4gICAgICogYXJlIGluc2lkZSB0aGUgdmlld3BvcnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB1cGRhdGUodHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlTG9hZGVkIHx8IHRoaXMuX3BhdXNlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuXG4gICAgICAgIC8vIENvdmVyZWQgaXMgYSBsaXN0IG9mIHJldGFpbmVkIHRpbGVzIHdobydzIGFyZWFzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IG90aGVyLFxuICAgICAgICAvLyBiZXR0ZXIsIHJldGFpbmVkIHRpbGVzLiBUaGV5IGFyZSBub3QgZHJhd24gc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG5cbiAgICAgICAgbGV0IGlkZWFsVGlsZUlEcztcbiAgICAgICAgaWYgKCF0aGlzLnVzZWQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZS50aWxlSUQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRClcbiAgICAgICAgICAgICAgICAubWFwKCh1bndyYXBwZWQpID0+IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLndyYXAsIHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLmNhbm9uaWNhbC54LCB1bndyYXBwZWQuY2Fub25pY2FsLnkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHtcbiAgICAgICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy5fc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgICAgIG1pbnpvb206IHRoaXMuX3NvdXJjZS5taW56b29tLFxuICAgICAgICAgICAgICAgIG1heHpvb206IHRoaXMuX3NvdXJjZS5tYXh6b29tLFxuICAgICAgICAgICAgICAgIHJvdW5kWm9vbTogdGhpcy5fc291cmNlLnJvdW5kWm9vbSxcbiAgICAgICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZDogdGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5oYXNUaWxlKSB7XG4gICAgICAgICAgICAgICAgaWRlYWxUaWxlSURzID0gaWRlYWxUaWxlSURzLmZpbHRlcigoY29vcmQpID0+ICh0aGlzLl9zb3VyY2UuaGFzVGlsZTogYW55KShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBvdmVyem9vbWluZy91bmRlcnpvb21pbmcgYW1vdW50cy5cbiAgICAgICAgY29uc3Qgem9vbSA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh0aGlzLl9zb3VyY2UpO1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICAvLyBSZXRhaW4gaXMgYSBsaXN0IG9mIHRpbGVzIHRoYXQgd2Ugc2hvdWxkbid0IGRlbGV0ZSwgZXZlbiBpZiB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gdGhlIG1vc3QgaWRlYWwgdGlsZSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQuIFRoaXMgbWF5IGluY2x1ZGUgdGlsZXMgbGlrZVxuICAgICAgICAvLyBwYXJlbnQgb3IgY2hpbGQgdGlsZXMgdGhhdCBhcmUgKmFscmVhZHkqIGxvYWRlZC5cbiAgICAgICAgY29uc3QgcmV0YWluID0gdGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpZGVhbFRpbGVJRHMsIHpvb20pO1xuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRzRm9yRmFkaW5nOiB7W186IHN0cmluZ106IE92ZXJzY2FsZWRUaWxlSUR9ID0ge307XG4gICAgICAgICAgICBjb25zdCBmYWRpbmdUaWxlcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMocmV0YWluKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZUlEID0gcmV0YWluW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodGlsZUlELmtleSA9PT0gaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN0cnVjdCBhIGNhY2hlIG9mIGxvYWRlZCBwYXJlbnRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKToge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSB7XG4gICAgICAgIGNvbnN0IHJldGFpbjoge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSA9IHt9O1xuICAgICAgICBjb25zdCBjaGVja2VkOiB7W186IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICBjb25zdCBtaXNzaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fYWRkVGlsZSh0aWxlSUQpO1xuXG4gICAgICAgICAgICAvLyByZXRhaW4gdGhlIHRpbGUgZXZlbiBpZiBpdCdzIG5vdCBsb2FkZWQgYmVjYXVzZSBpdCdzIGFuIGlkZWFsIHRpbGUuXG4gICAgICAgICAgICByZXRhaW5bdGlsZUlELmtleV0gPSB0aWxlSUQ7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh6b29tIDwgdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBzYXZlIG1pc3NpbmcgdGlsZXMgdGhhdCBwb3RlbnRpYWxseSBoYXZlIGxvYWRlZCBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG1pc3NpbmdUaWxlc1t0aWxlSUQua2V5XSA9IHRpbGVJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldGFpbiBhbnkgbG9hZGVkIGNoaWxkcmVuIG9mIGlkZWFsIHRpbGVzIHVwIHRvIG1heENvdmVyaW5nWm9vbVxuICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihtaXNzaW5nVGlsZXMsIHpvb20sIG1heENvdmVyaW5nWm9vbSwgcmV0YWluKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiBpZGVhbFRpbGVJRHMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFRoZSB0aWxlIHdlIHJlcXVpcmUgaXMgbm90IHlldCBsb2FkZWQgb3IgZG9lcyBub3QgZXhpc3Q7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgY2hpbGRyZW4gdGhhdCBmdWxseSBjb3ZlciBpdC5cblxuICAgICAgICAgICAgaWYgKHpvb20gKyAxID4gdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBsb29raW5nIGZvciBhbiBvdmVyem9vbWVkIGNoaWxkIHRpbGUuXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb29yZCA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRUaWxlID0gdGhpcy5nZXRUaWxlKGNoaWxkQ29vcmQpO1xuICAgICAgICAgICAgICAgIGlmICghIWNoaWxkVGlsZSAmJiBjaGlsZFRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZENvb3JkLmtleV0gPSBjaGlsZENvb3JkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IG92ZXJ6b29tZWQgY2hpbGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFsbCA0IGltbWVkaWF0ZSBjaGlsZHJlbiBhcmUgbG9hZGVkIChpLmUuIHRoZSBtaXNzaW5nIGlkZWFsIHRpbGUgaXMgY292ZXJlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0YWluW2NoaWxkcmVuWzBdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzFdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzJdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzNdLmtleV0pIGNvbnRpbnVlOyAvLyB0aWxlIGlzIGNvdmVyZWQgYnkgY2hpbGRyZW5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBjaGlsZCB0aWxlcyB0aGF0IGVudGlyZWx5IGNvdmVyIHRoZSBpZGVhbCB0aWxlOyBsb29rIGZvciBwYXJlbnRzIG5vdy5cblxuICAgICAgICAgICAgLy8gQXMgd2UgYXNjZW5kIHVwIHRoZSB0aWxlIHB5cmFtaWQgb2YgdGhlIGlkZWFsIHRpbGUsIHdlIGNoZWNrIHdoZXRoZXIgdGhlIHBhcmVudFxuICAgICAgICAgICAgLy8gdGlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IHJlcXVlc3RlZCAoYW5kIGVycm9yZWQgYmVjYXVzZSB3ZSBvbmx5IGxvb3Agb3ZlciB0aWxlcyB3aXRoIG5vIGRhdGEpXG4gICAgICAgICAgICAvLyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZXF1ZXN0IGl0cyBwYXJlbnQuXG4gICAgICAgICAgICBsZXQgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgb3ZlcnNjYWxlZFogPSB0aWxlSUQub3ZlcnNjYWxlZFogLSAxOyBvdmVyc2NhbGVkWiA+PSBtaW5Db3ZlcmluZ1pvb207IC0tb3ZlcnNjYWxlZFopIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRpbGVJRC5zY2FsZWRUbyhvdmVyc2NhbGVkWik7XG5cbiAgICAgICAgICAgICAgICAvLyBCcmVhayBwYXJlbnQgdGlsZSBhc2NlbnQgaWYgdGhpcyByb3V0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNoZWNrZWQgYnkgYW5vdGhlciBjaGlsZC5cbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFtwYXJlbnRJZC5rZXldKSBicmVhaztcbiAgICAgICAgICAgICAgICBjaGVja2VkW3BhcmVudElkLmtleV0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuZ2V0VGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlICYmIHBhcmVudFdhc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fYWRkVGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltwYXJlbnRJZC5rZXldID0gcGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgdmFsdWVzLCBzaW5jZSB0aGV5J3JlIHRoZSBwYXJlbnQgb2YgdGhlIG5leHQgaXRlcmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwYXJlbnQgdGlsZSBhc2NlbnQgbG9vcC5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpKSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0YWluO1xuICAgIH1cblxuICAgIF91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGUoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgICAgICBsZXQgcGFyZW50VGlsZTogP1RpbGU7XG4gICAgICAgICAgICBsZXQgY3VycmVudElkID0gdGhpcy5fdGlsZXNbdGlsZUtleV0udGlsZUlEO1xuXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGxvYWRlZCBhbmNlc3RvciBieSB0cmF2ZXJzaW5nIHRoZSB0aWxlIHRyZWUgdG93YXJkcyB0aGUgcm9vdCBhbmRcbiAgICAgICAgICAgIC8vIGNhY2hpbmcgcmVzdWx0cyBhbG9uZyB0aGUgd2F5XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudElkLm92ZXJzY2FsZWRaID4gMCkge1xuXG4gICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQgZnJvbSBwcmV2aW91cyB0cmF2ZXJzYWxzP1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SWQua2V5IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFRpbGUgPSB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tjdXJyZW50SWQua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGN1cnJlbnRJZC5rZXkpO1xuXG4gICAgICAgICAgICAgICAgLy8gSXMgdGhlIHBhcmVudCBsb2FkZWQ/XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBjdXJyZW50SWQuc2NhbGVkVG8oY3VycmVudElkLm92ZXJzY2FsZWRaIC0gMSk7XG4gICAgICAgICAgICAgICAgcGFyZW50VGlsZSA9IHRoaXMuX2dldExvYWRlZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRUaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJZCA9IHBhcmVudElkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0IG9mIHRoaXMgdHJhdmVyc2FsIHRvIGFsbCBuZXdseSB2aXNpdGVkIHRpbGVzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNba2V5XSA9IHBhcmVudFRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSB0aWxlLCBnaXZlbiBpdHMgY29vcmRpbmF0ZSwgdG8gdGhlIHB5cmFtaWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSUQua2V5XTtcbiAgICAgICAgaWYgKHRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcblxuICAgICAgICB0aWxlID0gdGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKHRpbGVJRCk7XG4gICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHRpbGVJRCBiZWNhdXNlIHRoZSBjYWNoZWQgdGlsZSBjb3VsZCBoYXZlIGhhZCBhIGRpZmZlcmVudCB3cmFwIHZhbHVlXG4gICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUodGlsZSwgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1t0aWxlSUQua2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBCb29sZWFuKHRpbGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgdGlsZSA9IG5ldyBUaWxlKHRpbGVJRCwgdGhpcy5fc291cmNlLnRpbGVTaXplICogdGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCB0aWxlSUQua2V5LCB0aWxlLnN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbXBvc3NpYmxlLCBidXQgc2lsZW5jZSBmbG93LlxuICAgICAgICBpZiAoIXRpbGUpIHJldHVybiAobnVsbDogYW55KTtcblxuICAgICAgICB0aWxlLnVzZXMrKztcbiAgICAgICAgdGhpcy5fdGlsZXNbdGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICBpZiAoIWNhY2hlZCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHt0aWxlLCBjb29yZDogdGlsZS50aWxlSUQsIGRhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICByZXR1cm4gdGlsZTtcbiAgICB9XG5cbiAgICBfc2V0VGlsZVJlbG9hZFRpbWVyKGlkOiBzdHJpbmcsIHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBpcnlUaW1lb3V0ID0gdGlsZS5nZXRFeHBpcnlUaW1lb3V0KCk7XG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkVGlsZShpZCwgJ2V4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgdGlsZSwgZ2l2ZW4gaXRzIGlkLCBmcm9tIHRoZSBweXJhbWlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVtb3ZlVGlsZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICghdGlsZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aWxlLnVzZXMtLTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpZF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGUudXNlcyA+IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpICYmIHRpbGUuc3RhdGUgIT09ICdyZWxvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5hZGQodGlsZS50aWxlSUQsIHRpbGUsIHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydFRpbGUodGlsZSk7XG4gICAgICAgICAgICB0aGlzLl91bmxvYWRUaWxlKHRpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aWxlcyBmcm9tIHRoaXMgcHlyYW1pZFxuICAgICAqL1xuICAgIGNsZWFyVGlsZXMoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVUaWxlKGlkKTtcblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aHJvdWdoIG91ciBjdXJyZW50IHRpbGVzIGFuZCBhdHRlbXB0IHRvIGZpbmQgdGhlIHRpbGVzIHRoYXRcbiAgICAgKiBjb3ZlciB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSBwb2ludFF1ZXJ5R2VvbWV0cnkgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYm91bmRpbmcgcmVjdGFuZ2xlXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHJlc3VsdCBpdGVtcyBoYXZlIHt0aWxlLCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZfSwgd2hlcmUgbWluL21heCBib3VuZGluZyB2YWx1ZXMgYXJlIHRoZSBnaXZlbiBib3VuZHMgdHJhbnNmb3JtZWQgaW4gaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGlzIHRpbGUuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aWxlc0luKHBvaW50UXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBtYXhQaXRjaFNjYWxlRmFjdG9yOiBudW1iZXIsIGhhczNETGF5ZXI6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCB0aWxlUmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIHRpbGVSZXN1bHRzO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYVBvaW50UXVlcnlHZW9tZXRyeSA9IGhhczNETGF5ZXIgP1xuICAgICAgICAgICAgdHJhbnNmb3JtLmdldENhbWVyYVF1ZXJ5R2VvbWV0cnkocG9pbnRRdWVyeUdlb21ldHJ5KSA6XG4gICAgICAgICAgICBwb2ludFF1ZXJ5R2VvbWV0cnk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlHZW9tZXRyeSA9IHBvaW50UXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUocCkpO1xuICAgICAgICBjb25zdCBjYW1lcmFRdWVyeUdlb21ldHJ5ID0gY2FtZXJhUG9pbnRRdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4gdHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZShwKSk7XG5cbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRJZHMoKTtcblxuICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNhbWVyYVF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZHNbaV1dO1xuICAgICAgICAgICAgaWYgKHRpbGUuaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFRpbGVzIGhlbGQgZm9yIGZhZGluZyBhcmUgY292ZXJlZCBieSB0aWxlcyB0aGF0IGFyZSBjbG9zZXIgdG8gaWRlYWxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbGVJRCA9IHRpbGUudGlsZUlEO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFkZGluZyA9IG1heFBpdGNoU2NhbGVGYWN0b3IgKiB0aWxlLnF1ZXJ5UGFkZGluZyAqIEVYVEVOVCAvIHRpbGUudGlsZVNpemUgLyBzY2FsZTtcblxuICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQm91bmRzID0gW1xuICAgICAgICAgICAgICAgIHRpbGVJRC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShtaW5YLCBtaW5ZKSksXG4gICAgICAgICAgICAgICAgdGlsZUlELmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKG1heFgsIG1heFkpKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKHRpbGVTcGFjZUJvdW5kc1swXS54IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmIHRpbGVTcGFjZUJvdW5kc1swXS55IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgdGlsZVNwYWNlQm91bmRzWzFdLnggKyBxdWVyeVBhZGRpbmcgPj0gMCAmJiB0aWxlU3BhY2VCb3VuZHNbMV0ueSArIHF1ZXJ5UGFkZGluZyA+PSAwKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlU3BhY2VRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4gPSBxdWVyeUdlb21ldHJ5Lm1hcCgoYykgPT4gdGlsZUlELmdldFRpbGVQb2ludChjKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQ2FtZXJhUXVlcnlHZW9tZXRyeSA9IGNhbWVyYVF1ZXJ5R2VvbWV0cnkubWFwKChjKSA9PiB0aWxlSUQuZ2V0VGlsZVBvaW50KGMpKTtcblxuICAgICAgICAgICAgICAgIHRpbGVSZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgICAgICAgICB0aWxlSUQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZUNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZVJlc3VsdHM7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKHN5bWJvbExheWVyPzogYm9vbGVhbik6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5nZXRSZW5kZXJhYmxlSWRzKHN5bWJvbExheWVyKS5tYXAoKGlkKSA9PiB0aGlzLl90aWxlc1tpZF0udGlsZUlEKTtcbiAgICAgICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCA9IHRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChjb29yZC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRzO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS5mYWRlRW5kVGltZSAhPT0gdW5kZWZpbmVkICYmIHRpbGUuZmFkZUVuZFRpbWUgPj0gYnJvd3Nlci5ub3coKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgc3RhdGUgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZywgc3RhdGU6IE9iamVjdCkge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnVwZGF0ZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBrZXkgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ/OiBudW1iZXIgfCBzdHJpbmcsIGtleT86IHN0cmluZykge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZW50aXJlIHN0YXRlIG9iamVjdCBmb3IgYSBmZWF0dXJlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI/OiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNldCBvZiBrZXlzIHRoYXQgdGhlIHRpbGUgZGVwZW5kcyBvbi4gVGhpcyBhbGxvd3MgdGlsZXMgdG9cbiAgICAgKiBiZSByZWxvYWRlZCB3aGVuIHRoZWlyIGRlcGVuZGVuY2llcyBjaGFuZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXREZXBlbmRlbmNpZXModGlsZUtleTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlS2V5XTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUuc2V0RGVwZW5kZW5jaWVzKG5hbWVzcGFjZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgYWxsIHRpbGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBnaXZlbiBrZXlzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXMobmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPiwga2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGVwZW5kZW5jeShuYW1lc3BhY2VzLCBrZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFRpbGUoaWQsICdyZWxvYWRpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWNoZS5maWx0ZXIodGlsZSA9PiAhdGlsZS5oYXNEZXBlbmRlbmN5KG5hbWVzcGFjZXMsIGtleXMpKTtcbiAgICB9XG59XG5cblNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nID0gMTA7XG5Tb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgPSAzO1xuXG5mdW5jdGlvbiBjb21wYXJlVGlsZUlkKGE6IE92ZXJzY2FsZWRUaWxlSUQsIGI6IE92ZXJzY2FsZWRUaWxlSUQpOiBudW1iZXIge1xuICAgIC8vIERpZmZlcmVudCBjb3BpZXMgb2YgdGhlIHdvcmxkIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci5cbiAgICAvLyBXcmFwIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHVuc2lnbmVkIGRpc3RhbmNlcyBieSByZXNlcnZpbmcgb2RkIG51bWJlciBmb3IgY29waWVzXG4gICAgLy8gd2l0aCBuZWdhdGl2ZSB3cmFwIGFuZCBldmVuIG51bWJlcnMgZm9yIGNvcGllcyB3aXRoIHBvc2l0aXZlIHdyYXAuXG4gICAgY29uc3QgYVdyYXAgPSBNYXRoLmFicyhhLndyYXAgKiAyKSAtICsoYS53cmFwIDwgMCk7XG4gICAgY29uc3QgYldyYXAgPSBNYXRoLmFicyhiLndyYXAgKiAyKSAtICsoYi53cmFwIDwgMCk7XG4gICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IGJXcmFwIC0gYVdyYXAgfHwgYi5jYW5vbmljYWwueSAtIGEuY2Fub25pY2FsLnkgfHwgYi5jYW5vbmljYWwueCAtIGEuY2Fub25pY2FsLng7XG59XG5cbmZ1bmN0aW9uIGlzUmFzdGVyVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdyYXN0ZXInIHx8IHR5cGUgPT09ICdpbWFnZScgfHwgdHlwZSA9PT0gJ3ZpZGVvJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlQ2FjaGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3dpbmRvdyc7XG5pbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi4vLi4vJztcblxuaW1wb3J0IHR5cGUge1dvcmtlckludGVyZmFjZX0gZnJvbSAnLi4vd2ViX3dvcmtlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBXb3JrZXJJbnRlcmZhY2Uge1xuICAgIHJldHVybiAobmV3IHdpbmRvdy5Xb3JrZXIobWFwYm94Z2wud29ya2VyVXJsKTogYW55KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXZWJXb3JrZXIgZnJvbSAnLi93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuL2Jyb3dzZXInO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSB3b3JrZXIgcG9vbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlclBvb2wge1xuICAgIHN0YXRpYyB3b3JrZXJDb3VudDogbnVtYmVyO1xuXG4gICAgYWN0aXZlOiB7W186IG51bWJlcl06IGJvb2xlYW59O1xuICAgIHdvcmtlcnM6IEFycmF5PFdvcmtlckludGVyZmFjZT47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB7fTtcbiAgICB9XG5cbiAgICBhY3F1aXJlKG1hcElkOiBudW1iZXIpOiBBcnJheTxXb3JrZXJJbnRlcmZhY2U+IHtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlcnMpIHtcbiAgICAgICAgICAgIC8vIExhemlseSBsb29rIHVwIHRoZSB2YWx1ZSBvZiBtYXBib3hnbC53b3JrZXJDb3VudCBzbyB0aGF0XG4gICAgICAgICAgICAvLyBjbGllbnQgY29kZSBoYXMgaGFkIGEgY2hhbmNlIHRvIHNldCBpdC5cbiAgICAgICAgICAgIHRoaXMud29ya2VycyA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMud29ya2Vycy5sZW5ndGggPCBXb3JrZXJQb29sLndvcmtlckNvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZXJzLnB1c2gobmV3IFdlYldvcmtlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlW21hcElkXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtlcnMuc2xpY2UoKTtcbiAgICB9XG5cbiAgICByZWxlYXNlKG1hcElkOiBudW1iZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlW21hcElkXTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5mb3JFYWNoKCh3KSA9PiB7XG4gICAgICAgICAgICAgICAgdy50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy53b3JrZXJzID0gKG51bGw6IGFueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGF2YWlsYWJsZUxvZ2ljYWxQcm9jZXNzb3JzID0gTWF0aC5mbG9vcihicm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kgLyAyKTtcbldvcmtlclBvb2wud29ya2VyQ291bnQgPSBNYXRoLm1heChNYXRoLm1pbihhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycywgNiksIDEpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFdvcmtlclBvb2wgZnJvbSAnLi93b3JrZXJfcG9vbCc7XG5cbmxldCBnbG9iYWxXb3JrZXJQb29sO1xuXG4vKipcbiAqIENyZWF0ZXMgKGlmIG5lY2Vzc2FyeSkgYW5kIHJldHVybnMgdGhlIHNpbmdsZSwgZ2xvYmFsIFdvcmtlclBvb2wgaW5zdGFuY2VcbiAqIHRvIGJlIHNoYXJlZCBhY3Jvc3MgZWFjaCBNYXBcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdsb2JhbFdvcmtlclBvb2wgKCkge1xuICAgIGlmICghZ2xvYmFsV29ya2VyUG9vbCkge1xuICAgICAgICBnbG9iYWxXb3JrZXJQb29sID0gbmV3IFdvcmtlclBvb2woKTtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFdvcmtlclBvb2w7XG59XG4iLCJcbmltcG9ydCByZWZQcm9wZXJ0aWVzIGZyb20gJy4vdXRpbC9yZWZfcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIGRlcmVmKGxheWVyLCBwYXJlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBpbiBsYXllcikge1xuICAgICAgICBpZiAoayAhPT0gJ3JlZicpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IGxheWVyW2tdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmUHJvcGVydGllcy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGlmIChrIGluIHBhcmVudCkge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gcGFyZW50W2tdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZXJlZkxheWVycztcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBsYXllcnMsIHNvbWUgb2Ygd2hpY2ggbWF5IGNvbnRhaW4gYHJlZmAgcHJvcGVydGllc1xuICogd2hvc2UgdmFsdWUgaXMgdGhlIGBpZGAgb2YgYW5vdGhlciBwcm9wZXJ0eSwgcmV0dXJuIGEgbmV3IGFycmF5IHdoZXJlXG4gKiBzdWNoIGxheWVycyBoYXZlIGJlZW4gYXVnbWVudGVkIHdpdGggdGhlICd0eXBlJywgJ3NvdXJjZScsIGV0Yy4gcHJvcGVydGllc1xuICogZnJvbSB0aGUgcGFyZW50IGxheWVyLCBhbmQgdGhlIGByZWZgIHByb3BlcnR5IGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogVGhlIGlucHV0IGlzIG5vdCBtb2RpZmllZC4gVGhlIG91dHB1dCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIHBvcnRpb25zXG4gKiBvZiB0aGUgaW5wdXQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8TGF5ZXI+fSBsYXllcnNcbiAqIEByZXR1cm5zIHtBcnJheTxMYXllcj59XG4gKi9cbmZ1bmN0aW9uIGRlcmVmTGF5ZXJzKGxheWVycykge1xuICAgIGxheWVycyA9IGxheWVycy5zbGljZSgpO1xuXG4gICAgY29uc3QgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXBbbGF5ZXJzW2ldLmlkXSA9IGxheWVyc1tpXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoJ3JlZicgaW4gbGF5ZXJzW2ldKSB7XG4gICAgICAgICAgICBsYXllcnNbaV0gPSBkZXJlZihsYXllcnNbaV0sIG1hcFtsYXllcnNbaV0ucmVmXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xufVxuIiwiaW1wb3J0IGxhdGVzdCBmcm9tICcuL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbXB0eVN0eWxlKCkge1xuICAgIGNvbnN0IHN0eWxlID0ge307XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gbGF0ZXN0WyckdmVyc2lvbiddO1xuICAgIGZvciAoY29uc3Qgc3R5bGVLZXkgaW4gbGF0ZXN0Wyckcm9vdCddKSB7XG4gICAgICAgIGNvbnN0IHNwZWMgPSBsYXRlc3RbJyRyb290J11bc3R5bGVLZXldO1xuXG4gICAgICAgIGlmIChzcGVjLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAndmVyc2lvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZlcnNpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzcGVjLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVtzdHlsZUtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbn1cbiIsIlxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnLi91dGlsL2RlZXBfZXF1YWwnO1xuXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTdHlsZScsIGFyZ3M6IFtzdHlsZXNoZWV0XSB9XG4gICAgICovXG4gICAgc2V0U3R5bGU6ICdzZXRTdHlsZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZExheWVyJywgYXJnczogW2xheWVyLCAnYmVmb3JlTGF5ZXJJZCddIH1cbiAgICAgKi9cbiAgICBhZGRMYXllcjogJ2FkZExheWVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAncmVtb3ZlTGF5ZXInLCBhcmdzOiBbJ2xheWVySWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXI6ICdyZW1vdmVMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFBhaW50UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eTogJ3NldFBhaW50UHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXlvdXRQcm9wZXJ0eScsIGFyZ3M6IFsnbGF5ZXJJZCcsICdwcm9wJywgdmFsdWVdIH1cbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eTogJ3NldExheW91dFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0RmlsdGVyJywgYXJnczogWydsYXllcklkJywgZmlsdGVyXSB9XG4gICAgICovXG4gICAgc2V0RmlsdGVyOiAnc2V0RmlsdGVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnYWRkU291cmNlJywgYXJnczogWydzb3VyY2VJZCcsIHNvdXJjZV0gfVxuICAgICAqL1xuICAgIGFkZFNvdXJjZTogJ2FkZFNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZVNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlOiAncmVtb3ZlU291cmNlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLCBhcmdzOiBbJ3NvdXJjZUlkJywgZGF0YV0gfVxuICAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclpvb21SYW5nZScsIGFyZ3M6IFsnbGF5ZXJJZCcsIDAsIDIyXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2U6ICdzZXRMYXllclpvb21SYW5nZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExheWVyUHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJQcm9wZXJ0eTogJ3NldExheWVyUHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRDZW50ZXInLCBhcmdzOiBbW2xvbiwgbGF0XV0gfVxuICAgICAqL1xuICAgIHNldENlbnRlcjogJ3NldENlbnRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFpvb20nLCBhcmdzOiBbem9vbV0gfVxuICAgICAqL1xuICAgIHNldFpvb206ICdzZXRab29tJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0QmVhcmluZycsIGFyZ3M6IFtiZWFyaW5nXSB9XG4gICAgICovXG4gICAgc2V0QmVhcmluZzogJ3NldEJlYXJpbmcnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQaXRjaCcsIGFyZ3M6IFtwaXRjaF0gfVxuICAgICAqL1xuICAgIHNldFBpdGNoOiAnc2V0UGl0Y2gnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTcHJpdGUnLCBhcmdzOiBbJ3Nwcml0ZVVybCddIH1cbiAgICAgKi9cbiAgICBzZXRTcHJpdGU6ICdzZXRTcHJpdGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRHbHlwaHMnLCBhcmdzOiBbJ2dseXBoc1VybCddIH1cbiAgICAgKi9cbiAgICBzZXRHbHlwaHM6ICdzZXRHbHlwaHMnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRUcmFuc2l0aW9uJywgYXJnczogW3RyYW5zaXRpb25dIH1cbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uOiAnc2V0VHJhbnNpdGlvbicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExpZ2h0aW5nJywgYXJnczogW2xpZ2h0UHJvcGVydGllc10gfVxuICAgICAqL1xuICAgIHNldExpZ2h0OiAnc2V0TGlnaHQnXG5cbn07XG5cbmZ1bmN0aW9uIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKSB7XG4gICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5hZGRTb3VyY2UsIGFyZ3M6IFtzb3VyY2VJZCwgYWZ0ZXJbc291cmNlSWRdXX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlU291cmNlLCBhcmdzOiBbc291cmNlSWRdfSk7XG4gICAgc291cmNlc1JlbW92ZWRbc291cmNlSWRdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkge1xuICAgIGxldCBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBiZWZvcmVbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYmVmb3JlW3NvdXJjZUlkXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmIChwcm9wICE9PSAnZGF0YScgJiYgIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXVtwcm9wXSwgYWZ0ZXJbc291cmNlSWRdW3Byb3BdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcltzb3VyY2VJZF0pIHtcbiAgICAgICAgaWYgKCFhZnRlcltzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlmZlNvdXJjZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgc291cmNlSWQ7XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIHJlbW92ZVxuICAgIGZvciAoc291cmNlSWQgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIGFkZC91cGRhdGVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXSwgYWZ0ZXJbc291cmNlSWRdKSkge1xuICAgICAgICAgICAgaWYgKGJlZm9yZVtzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGFmdGVyW3NvdXJjZUlkXS50eXBlID09PSAnZ2VvanNvbicgJiYgY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdlb0pTT05Tb3VyY2VEYXRhLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXS5kYXRhXX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1cGRhdGUgY29tbWFuZCwgbXVzdCByZW1vdmUgdGhlbiBhZGRcbiAgICAgICAgICAgICAgICB1cGRhdGVTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIGxheWVySWQsIGtsYXNzLCBjb21tYW5kKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBiZWZvcmUpIHtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlW3Byb3BdLCBhZnRlcltwcm9wXSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQsIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlcltwcm9wXSwga2xhc3NdfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbHVja0lkKGxheWVyKSB7XG4gICAgcmV0dXJuIGxheWVyLmlkO1xufVxuZnVuY3Rpb24gaW5kZXhCeUlkKGdyb3VwLCBsYXllcikge1xuICAgIGdyb3VwW2xheWVyLmlkXSA9IGxheWVyO1xuICAgIHJldHVybiBncm91cDtcbn1cblxuZnVuY3Rpb24gZGlmZkxheWVycyhiZWZvcmUsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCBbXTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IFtdO1xuXG4gICAgLy8gb3JkZXIgb2YgbGF5ZXJzIGJ5IGlkXG4gICAgY29uc3QgYmVmb3JlT3JkZXIgPSBiZWZvcmUubWFwKHBsdWNrSWQpO1xuICAgIGNvbnN0IGFmdGVyT3JkZXIgPSBhZnRlci5tYXAocGx1Y2tJZCk7XG5cbiAgICAvLyBpbmRleCBvZiBsYXllciBieSBpZFxuICAgIGNvbnN0IGJlZm9yZUluZGV4ID0gYmVmb3JlLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gYWZ0ZXIucmVkdWNlKGluZGV4QnlJZCwge30pO1xuXG4gICAgLy8gdHJhY2sgb3JkZXIgb2YgbGF5ZXJzIGFzIGlmIHRoZXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICBjb25zdCB0cmFja2VyID0gYmVmb3JlT3JkZXIuc2xpY2UoKTtcblxuICAgIC8vIGxheWVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBkbyBub3QgbmVlZCB0byBiZSBkaWZmZWRcbiAgICBjb25zdCBjbGVhbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBsZXQgaSwgZCwgbGF5ZXJJZCwgYmVmb3JlTGF5ZXIsIGFmdGVyTGF5ZXIsIGluc2VydEJlZm9yZUxheWVySWQsIHByb3A7XG5cbiAgICAvLyByZW1vdmUgbGF5ZXJzXG4gICAgZm9yIChpID0gMCwgZCA9IDA7IGkgPCBiZWZvcmVPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYmVmb3JlT3JkZXJbaV07XG4gICAgICAgIGlmICghYWZ0ZXJJbmRleC5oYXNPd25Qcm9wZXJ0eShsYXllcklkKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmluZGV4T2YobGF5ZXJJZCwgZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZC9yZW9yZGVyIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyB3b3JrIGJhY2t3YXJkcyBhcyBpbnNlcnQgaXMgYmVmb3JlIGFuIGV4aXN0aW5nIGxheWVyXG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2FmdGVyT3JkZXIubGVuZ3RoIC0gMSAtIGldO1xuXG4gICAgICAgIGlmICh0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gMSAtIGldID09PSBsYXllcklkKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbGF5ZXIgYmVmb3JlIHdlIGluc2VydCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQsIHRyYWNrZXIubGVuZ3RoIC0gZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBsYXllciBhdCBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gaV07XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckluZGV4W2xheWVySWRdLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxlbmd0aCAtIGksIDAsIGxheWVySWQpO1xuICAgICAgICBjbGVhbltsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxheWVyc1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlck9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2ldO1xuICAgICAgICBiZWZvcmVMYXllciA9IGJlZm9yZUluZGV4W2xheWVySWRdO1xuICAgICAgICBhZnRlckxheWVyID0gYWZ0ZXJJbmRleFtsYXllcklkXTtcblxuICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBpZiBwcmV2aW91c2x5IGFkZGVkIChuZXcgb3IgbW92ZWQpXG4gICAgICAgIGlmIChjbGVhbltsYXllcklkXSB8fCBpc0VxdWFsKGJlZm9yZUxheWVyLCBhZnRlckxheWVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gSWYgc291cmNlLCBzb3VyY2UtbGF5ZXIsIG9yIHR5cGUgaGF2ZSBjaGFuZ2VzLCB0aGVuIHJlbW92ZSB0aGUgbGF5ZXJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCBiYWNrICdmcm9tIHNjcmF0Y2gnLlxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIuc291cmNlLCBhZnRlckxheWVyLnNvdXJjZSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXJbJ3NvdXJjZS1sYXllciddLCBhZnRlckxheWVyWydzb3VyY2UtbGF5ZXInXSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXIudHlwZSwgYWZ0ZXJMYXllci50eXBlKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICAvLyB3ZSBhZGQgdGhlIGxheWVyIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaXQgd2FzIGFscmVhZHkgaW4sIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBgdHJhY2tlcmBcbiAgICAgICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGFzdEluZGV4T2YobGF5ZXJJZCkgKyAxXTtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXlvdXQsIHBhaW50LCBmaWx0ZXIsIG1pbnpvb20sIG1heHpvb21cbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLmxheW91dCwgYWZ0ZXJMYXllci5sYXlvdXQsIGNvbW1hbmRzLCBsYXllcklkLCBudWxsLCBvcGVyYXRpb25zLnNldExheW91dFByb3BlcnR5KTtcbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLnBhaW50LCBhZnRlckxheWVyLnBhaW50LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRQYWludFByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLmZpbHRlciwgYWZ0ZXJMYXllci5maWx0ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEZpbHRlciwgYXJnczogW2xheWVySWQsIGFmdGVyTGF5ZXIuZmlsdGVyXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5taW56b29tLCBhZnRlckxheWVyLm1pbnpvb20pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLm1heHpvb20sIGFmdGVyTGF5ZXIubWF4em9vbSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJab29tUmFuZ2UsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLm1pbnpvb20sIGFmdGVyTGF5ZXIubWF4em9vbV19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgbGF5ZXIgcHJvcHMsIGluY2x1ZGluZyBwYWludC4qXG4gICAgICAgIGZvciAocHJvcCBpbiBiZWZvcmVMYXllcikge1xuICAgICAgICAgICAgaWYgKCFiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIGFmdGVyTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYWZ0ZXJMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRGlmZiB0d28gc3R5bGVzaGVldFxuICpcbiAqIENyZWF0ZXMgc2VtYW50aWNseSBhd2FyZSBkaWZmcyB0aGF0IGNhbiBlYXNpbHkgYmUgYXBwbGllZCBhdCBydW50aW1lLlxuICogT3BlcmF0aW9ucyBwcm9kdWNlZCBieSB0aGUgZGlmZiBjbG9zZWx5IHJlc2VtYmxlIHRoZSBtYXBib3gtZ2wtanMgQVBJLiBBbnlcbiAqIGVycm9yIGNyZWF0aW5nIHRoZSBkaWZmIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSAnc2V0U3R5bGUnIG9wZXJhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIGRpZmY6XG4gKiBbXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0Q29uc3RhbnQnLCBhcmdzOiBbJ0B3YXRlcicsICcjMDAwMEZGJ10gfSxcbiAqICAgICB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQtY29sb3InLCAnYmxhY2snXSB9XG4gKiBdXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW2JlZm9yZV0gc3R5bGVzaGVldCB0byBjb21wYXJlIGZyb21cbiAqIEBwYXJhbSB7Kn0gYWZ0ZXIgc3R5bGVzaGVldCB0byBjb21wYXJlIHRvXG4gKiBAcmV0dXJucyBBcnJheSBsaXN0IG9mIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gZGlmZlN0eWxlcyhiZWZvcmUsIGFmdGVyKSB7XG4gICAgaWYgKCFiZWZvcmUpIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcblxuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS52ZXJzaW9uLCBhZnRlci52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuY2VudGVyLCBhZnRlci5jZW50ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldENlbnRlciwgYXJnczogW2FmdGVyLmNlbnRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnpvb20sIGFmdGVyLnpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFpvb20sIGFyZ3M6IFthZnRlci56b29tXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuYmVhcmluZywgYWZ0ZXIuYmVhcmluZykpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0QmVhcmluZywgYXJnczogW2FmdGVyLmJlYXJpbmddfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5waXRjaCwgYWZ0ZXIucGl0Y2gpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFBpdGNoLCBhcmdzOiBbYWZ0ZXIucGl0Y2hdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5zcHJpdGUsIGFmdGVyLnNwcml0ZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3ByaXRlLCBhcmdzOiBbYWZ0ZXIuc3ByaXRlXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuZ2x5cGhzLCBhZnRlci5nbHlwaHMpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdseXBocywgYXJnczogW2FmdGVyLmdseXBoc119KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnRyYW5zaXRpb24sIGFmdGVyLnRyYW5zaXRpb24pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFRyYW5zaXRpb24sIGFyZ3M6IFthZnRlci50cmFuc2l0aW9uXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUubGlnaHQsIGFmdGVyLmxpZ2h0KSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRMaWdodCwgYXJnczogW2FmdGVyLmxpZ2h0XX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYHNvdXJjZXNgXG4gICAgICAgIC8vIElmIGEgc291cmNlIGlzIHRvIGJlIHJlbW92ZWQsIHdlIGFsc28tLWJlZm9yZSB0aGUgcmVtb3ZlU291cmNlXG4gICAgICAgIC8vIGNvbW1hbmQtLW5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3R5bGUgbGF5ZXJzIHRoYXQgZGVwZW5kIG9uIGl0LlxuICAgICAgICBjb25zdCBzb3VyY2VzUmVtb3ZlZCA9IHt9O1xuXG4gICAgICAgIC8vIEZpcnN0IGNvbGxlY3QgdGhlIHthZGQscmVtb3ZlfVNvdXJjZSBjb21tYW5kc1xuICAgICAgICBjb25zdCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzID0gW107XG4gICAgICAgIGRpZmZTb3VyY2VzKGJlZm9yZS5zb3VyY2VzLCBhZnRlci5zb3VyY2VzLCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG5cbiAgICAgICAgLy8gUHVzaCBhIHJlbW92ZUxheWVyIGNvbW1hbmQgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdGhhdCBkZXBlbmRzIG9uIGFcbiAgICAgICAgLy8gc291cmNlIHRoYXQncyBiZWluZyByZW1vdmVkLlxuICAgICAgICAvLyBBbHNvLCBleGNsdWRlIGFueSBzdWNoIGxheWVycyB0aGVtIGZyb20gdGhlIGlucHV0IHRvIGBkaWZmTGF5ZXJzYFxuICAgICAgICAvLyBiZWxvdywgc28gdGhhdCBkaWZmTGF5ZXJzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZSBgYWRkTGF5ZXJzYFxuICAgICAgICAvLyBjb21tYW5kXG4gICAgICAgIGNvbnN0IGJlZm9yZUxheWVycyA9IFtdO1xuICAgICAgICBpZiAoYmVmb3JlLmxheWVycykge1xuICAgICAgICAgICAgYmVmb3JlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzUmVtb3ZlZFtsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllci5pZF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVMYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5jb25jYXQocmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYGxheWVyc2BcbiAgICAgICAgZGlmZkxheWVycyhiZWZvcmVMYXllcnMsIGFmdGVyLmxheWVycywgY29tbWFuZHMpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2V0U3R5bGVcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOicsIGUpO1xuICAgICAgICBjb21tYW5kcyA9IFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlmZlN0eWxlcztcbmV4cG9ydCB7b3BlcmF0aW9uc307XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEdyaWRJbmRleCBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0ZXN0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAqIGNpcmNsZXMgYW5kIHJlY3RhbmdsZXMgaW4gYSAyZCBwbGFuZS5cbiAqIEl0IGlzIG9wdGltaXplZCBmb3IgcmFwaWQgaW5zZXJ0aW9uIGFuZCBxdWVyeWluZy5cbiAqIEdyaWRJbmRleCBzcGxpdHMgdGhlIHBsYW5lIGludG8gYSBzZXQgb2YgXCJjZWxsc1wiIGFuZCBrZWVwcyB0cmFja1xuICogb2Ygd2hpY2ggZ2VvbWV0cmllcyBpbnRlcnNlY3Qgd2l0aCBlYWNoIGNlbGwuIEF0IHF1ZXJ5IHRpbWUsXG4gKiBmdWxsIGdlb21ldHJ5IGNvbXBhcmlzb25zIGFyZSBvbmx5IGRvbmUgZm9yIGl0ZW1zIHRoYXQgc2hhcmVcbiAqIGF0IGxlYXN0IG9uZSBjZWxsLiBBcyBsb25nIGFzIHRoZSBnZW9tZXRyaWVzIGFyZSByZWxhdGl2ZWx5XG4gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBwbGFuZSwgdGhpcyBncmVhdGx5IHJlZHVjZXNcbiAqIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgbmVjZXNzYXJ5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdyaWRJbmRleCB7XG4gICAgY2lyY2xlS2V5czogQXJyYXk8YW55PjtcbiAgICBib3hLZXlzOiBBcnJheTxhbnk+O1xuICAgIGJveENlbGxzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjaXJjbGVDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgYmJveGVzOiBBcnJheTxudW1iZXI+O1xuICAgIGNpcmNsZXM6IEFycmF5PG51bWJlcj47XG4gICAgeENlbGxDb3VudDogbnVtYmVyO1xuICAgIHlDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHhTY2FsZTogbnVtYmVyO1xuICAgIHlTY2FsZTogbnVtYmVyO1xuICAgIGJveFVpZDogbnVtYmVyO1xuICAgIGNpcmNsZVVpZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGJveENlbGxzID0gdGhpcy5ib3hDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBjaXJjbGVDZWxscyA9IHRoaXMuY2lyY2xlQ2VsbHMgPSBbXTtcblxuICAgICAgICAvLyBNb3JlIGNlbGxzIC0+IGZld2VyIGdlb21ldHJpZXMgdG8gY2hlY2sgcGVyIGNlbGwsIGJ1dCBpdGVtcyB0ZW5kXG4gICAgICAgIC8vIHRvIGJlIHNwbGl0IGFjcm9zcyBtb3JlIGNlbGxzLlxuICAgICAgICAvLyBTd2VldCBzcG90IGFsbG93cyBtb3N0IHNtYWxsIGl0ZW1zIHRvIGZpdCBpbiBvbmUgY2VsbFxuICAgICAgICB0aGlzLnhDZWxsQ291bnQgPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsU2l6ZSk7XG4gICAgICAgIHRoaXMueUNlbGxDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyBjZWxsU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnhDZWxsQ291bnQgKiB0aGlzLnlDZWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgYm94Q2VsbHMucHVzaChbXSk7XG4gICAgICAgICAgICBjaXJjbGVDZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3hLZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgICAgIHRoaXMuY2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy54Q2VsbENvdW50IC8gd2lkdGg7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdGhpcy55Q2VsbENvdW50IC8gaGVpZ2h0O1xuICAgICAgICB0aGlzLmJveFVpZCA9IDA7XG4gICAgICAgIHRoaXMuY2lyY2xlVWlkID0gMDtcbiAgICB9XG5cbiAgICBrZXlzTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCArIHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGtleTogYW55LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRCb3hDZWxsLCB0aGlzLmJveFVpZCsrKTtcbiAgICAgICAgdGhpcy5ib3hLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2lyY2xlKGtleTogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGNpcmNsZSBpbnRvIGdyaWQgZm9yIGFsbCBjZWxscyBpbiB0aGUgY2lyY3Vtc2NyaWJpbmcgc3F1YXJlXG4gICAgICAgIC8vIEl0J3MgbW9yZSB0aGFuIG5lY2Vzc2FyeSAoYnkgYSBmYWN0b3Igb2YgNC9QSSksIGJ1dCBmYXN0IHRvIGluc2VydFxuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCB0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLCB0aGlzLmNpcmNsZVVpZCsrKTtcbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2goeCk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHkpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaChyYWRpdXMpO1xuICAgIH1cblxuICAgIF9pbnNlcnRCb3hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmJveENlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaXJjbGVDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikgIHtcbiAgICAgICAgdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGlmICh4MiA8IDAgfHwgeDEgPiB0aGlzLndpZHRoIHx8IHkyIDwgMCB8fCB5MSA+IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IGZhbHNlIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh4MSA8PSAwICYmIHkxIDw9IDAgJiYgdGhpcy53aWR0aCA8PSB4MiAmJiB0aGlzLmhlaWdodCA8PSB5Mikge1xuICAgICAgICAgICAgaWYgKGhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGJveFVpZCA9IDA7IGJveFVpZCA8IHRoaXMuYm94S2V5cy5sZW5ndGg7IGJveFVpZCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICB4MTogdGhpcy5iYm94ZXNbYm94VWlkICogNF0sXG4gICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHgyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgM11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNpcmNsZVVpZCA9IDA7IGNpcmNsZVVpZCA8IHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7IGNpcmNsZVVpZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogMyArIDJdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUgPyByZXN1bHQuZmlsdGVyKHByZWRpY2F0ZSkgOiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgaGl0VGVzdCxcbiAgICAgICAgICAgICAgICBzZWVuVWlkczoge2JveDoge30sIGNpcmNsZToge319XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IHJlc3VsdC5sZW5ndGggPiAwIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgY29uc3QgeDEgPSB4IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB4MiA9IHggKyByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkxID0geSAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgcmFkaXVzO1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm94IHF1ZXJ5IGVhcmx5IGV4aXRzIGlmIHRoZSBib3VuZGluZyBib3ggaXMgbGFyZ2VyIHRoYW4gdGhlIGdyaWQsIGJ1dCB3ZSBkb24ndCBkb1xuICAgICAgICAvLyB0aGUgZXF1aXZhbGVudCBjYWxjdWxhdGlvbiBmb3IgY2lyY2xlIHF1ZXJpZXMgYmVjYXVzZSBlYXJseSBleGl0IGlzIGxlc3MgbGlrZWx5XG4gICAgICAgIC8vIGFuZCB0aGUgY2FsY3VsYXRpb24gaXMgbW9yZSBleHBlbnNpdmVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICBjaXJjbGU6IHt4LCB5LCByYWRpdXN9LFxuICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLCByZXN1bHQsIHF1ZXJ5QXJncywgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBxdWVyeSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeSh4MSwgeTEsIHgyLCB5MiwgZmFsc2UsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdENpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5Q2lyY2xlKHgsIHksIHJhZGl1cywgdHJ1ZSwgcHJlZGljYXRlKTogYW55KTtcbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYmJveGVzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBiYm94ZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBiYm94ZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBiYm94ZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGNpcmNsZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2lyY2xlc1tvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBjaXJjbGVzW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNlbGxDaXJjbGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIHJlc3VsdDogYW55LCBxdWVyeUFyZ3M6IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IHF1ZXJ5QXJncy5jaXJjbGU7XG4gICAgICAgIGNvbnN0IHNlZW5VaWRzID0gcXVlcnlBcmdzLnNlZW5VaWRzO1xuICAgICAgICBjb25zdCBib3hDZWxsID0gdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoYm94Q2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJveFVpZCBvZiBib3hDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5ib3hbYm94VWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5ib3hbYm94VWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJveFVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHRoaXMuYm94S2V5c1tib3hVaWRdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZXNDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZvckVhY2hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGZuOiBhbnksIGFyZzE6IGFueSwgYXJnMj86IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGN4MSA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDEpO1xuICAgICAgICBjb25zdCBjeTEgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkxKTtcbiAgICAgICAgY29uc3QgY3gyID0gdGhpcy5fY29udmVydFRvWENlbGxDb29yZCh4Mik7XG4gICAgICAgIGNvbnN0IGN5MiA9IHRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoeTIpO1xuXG4gICAgICAgIGZvciAobGV0IHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0aGlzLnhDZWxsQ291bnQgKiB5ICsgeDtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBwcmVkaWNhdGUpKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29udmVydFRvWENlbGxDb29yZCh4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueENlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMueFNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jb252ZXJ0VG9ZQ2VsbENvb3JkKHk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy55Q2VsbENvdW50IC0gMSwgTWF0aC5mbG9vcih5ICogdGhpcy55U2NhbGUpKSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZXNDb2xsaWRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHIxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHIyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XG4gICAgICAgIGNvbnN0IGJvdGhSYWRpaSA9IHIxICsgcjI7XG4gICAgICAgIHJldHVybiAoYm90aFJhZGlpICogYm90aFJhZGlpKSA+IChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGNpcmNsZVg6IG51bWJlciwgY2lyY2xlWTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYWxmUmVjdFdpZHRoID0gKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjaXJjbGVYIC0gKHgxICsgaGFsZlJlY3RXaWR0aCkpO1xuICAgICAgICBpZiAoZGlzdFggPiAoaGFsZlJlY3RXaWR0aCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbGZSZWN0SGVpZ2h0ID0gKHkyIC0geTEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjaXJjbGVZIC0gKHkxICsgaGFsZlJlY3RIZWlnaHQpKTtcbiAgICAgICAgaWYgKGRpc3RZID4gKGhhbGZSZWN0SGVpZ2h0ICsgcmFkaXVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RYIDw9IGhhbGZSZWN0V2lkdGggfHwgZGlzdFkgPD0gaGFsZlJlY3RIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBkaXN0WCAtIGhhbGZSZWN0V2lkdGg7XG4gICAgICAgIGNvbnN0IGR5ID0gZGlzdFkgLSBoYWxmUmVjdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIChkeCAqIGR4ICsgZHkgKiBkeSA8PSAocmFkaXVzICogcmFkaXVzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7bWF0NCwgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5XG59IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vc3ltYm9sL3NoYXBpbmcnO1xuXG5leHBvcnQge3VwZGF0ZUxpbmVMYWJlbHMsIGhpZGVHbHlwaHMsIGdldExhYmVsUGxhbmVNYXRyaXgsIGdldEdsQ29vcmRNYXRyaXgsIHByb2plY3QsIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgsIHh5VHJhbnNmb3JtTWF0NH07XG5cbi8qXG4gKiAjIE92ZXJ2aWV3IG9mIGNvb3JkaW5hdGUgc3BhY2VzXG4gKlxuICogIyMgVGlsZSBjb29yZGluYXRlIHNwYWNlc1xuICogRWFjaCBsYWJlbCBoYXMgYW4gYW5jaG9yLiBTb21lIGxhYmVscyBoYXZlIGNvcnJlc3BvbmRpbmcgbGluZSBnZW9tZXRyaWVzLlxuICogVGhlIHBvaW50cyBmb3IgYm90aCBhbmNob3JzIGFuZCBsaW5lcyBhcmUgc3RvcmVkIGluIHRpbGUgdW5pdHMuIEVhY2ggdGlsZSBoYXMgaXQncyBvd25cbiAqIGNvb3JkaW5hdGUgc3BhY2UgZ29pbmcgZnJvbSAoMCwgMCkgYXQgdGhlIHRvcCBsZWZ0IHRvIChFWFRFTlQsIEVYVEVOVCkgYXQgdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBHTCBjb29yZGluYXRlIHNwYWNlXG4gKiBBdCB0aGUgZW5kIG9mIGV2ZXJ5dGhpbmcsIHRoZSB2ZXJ0ZXggc2hhZGVyIG5lZWRzIHRvIHByb2R1Y2UgYSBwb3NpdGlvbiBpbiBHTCBjb29yZGluYXRlIHNwYWNlLFxuICogd2hpY2ggaXMgKC0xLCAxKSBhdCB0aGUgdG9wIGxlZnQgYW5kICgxLCAtMSkgaW4gdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBNYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggdGlsZSBoYXMgYSBwaXhlbCBjb29yZGluYXRlIHNwYWNlLiBJdCdzIGp1c3QgdGhlIHRpbGUgdW5pdHMgc2NhbGVkIHNvIHRoYXQgb25lIHVuaXQgaXNcbiAqIHdoYXRldmVyIGNvdW50cyBhcyAxIHBpeGVsIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqXG4gKiAjIyBSb3RhdGVkIG1hcCBwaXhlbCBjb29yZGluYXRlIHNwYWNlc1xuICogTGlrZSB0aGUgYWJvdmUsIGJ1dCByb3RhdGVkIHNvIGF4aXMgb2YgdGhlIHNwYWNlIGFyZSBhbGlnbmVkIHdpdGggdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIHRpbGUuXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICpcbiAqICMjIFZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VcbiAqICgwLCAwKSBpcyBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGNhbnZhcyBhbmQgKHBpeGVsV2lkdGgsIHBpeGVsSGVpZ2h0KSBpcyBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICogb2YgdGhlIGNhbnZhcy4gVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKlxuICogIyBWZXJ0ZXggcHJvamVjdGlvblxuICogSXQgZ29lcyByb3VnaGx5IGxpa2UgdGhpczpcbiAqIDEuIHByb2plY3QgdGhlIGFuY2hvciBhbmQgbGluZSBmcm9tIHRpbGUgdW5pdHMgaW50byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAgICAgIC0gbWFwIHBpeGVsIHNwYWNlICAgICAgICAgICBwaXRjaC1hbGlnbm1lbnQ9bWFwICAgICAgICAgcm90YXRpb24tYWxpZ25tZW50PW1hcFxuICogICAgICAtIHJvdGF0ZWQgbWFwIHBpeGVsIHNwYWNlICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICogICAgICAtIHZpZXdwb3J0IHBpeGVsIHNwYWNlICAgICAgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0ICAgIHJvdGF0aW9uLWFsaWdubWVudD0qXG4gKiAyLiBpZiB0aGUgbGFiZWwgZm9sbG93cyBhIGxpbmUsIGZpbmQgdGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIHRoYXQgaXMgdGhlIGNvcnJlY3QgZGlzdGFuY2UgZnJvbSB0aGUgYW5jaG9yLlxuICogMy4gYWRkIHRoZSBnbHlwaCdzIGNvcm5lciBvZmZzZXQgdG8gdGhlIHBvaW50IGZyb20gc3RlcCAzXG4gKiA0LiBjb252ZXJ0IGZyb20gdGhlIGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRpbmF0ZXNcbiAqXG4gKiBGb3IgaG9yaXpvbnRhbCBsYWJlbHMgd2Ugd2FudCB0byBkbyBzdGVwIDEgaW4gdGhlIHNoYWRlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAobm8gY3B1IHdvcmspLlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVfbGFiZWxfcGxhbmVfbWF0cml4YCBpcyB1c2VkIGZvci5cbiAqIEZvciBsYWJlbHMgYWxpZ25lZCB3aXRoIGxpbmVzIHdlIGhhdmUgdG8gc3RlcHMgMSBhbmQgMiBvbiB0aGUgY3B1IHNpbmNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBsaW5lIGdlb21ldHJ5LlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVwZGF0ZUxpbmVMYWJlbHMoLi4uKWAgZG9lcy5cbiAqICAgICAgU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBvbiB0aGUgY3B1IHdlIGp1c3Qgc2V0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxuICpcbiAqIFN0ZXBzIDMgYW5kIDQgYXJlIGRvbmUgaW4gdGhlIHNoYWRlcnMgZm9yIGFsbCBsYWJlbHMuXG4gKi9cblxuLypcbiAqIFJldHVybnMgYSBtYXRyaXggZm9yIGNvbnZlcnRpbmcgZnJvbSB0aWxlIHVuaXRzIHRvIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDEgLyBwaXhlbHNUb1RpbGVVbml0cywgMV0pO1xuICAgICAgICBpZiAoIXJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWF0NC5tdWx0aXBseShtLCB0cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZSB0byBnbCBjb29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsQ29vcmRNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBjb25zdCBtID0gbWF0NC5jbG9uZShwb3NNYXRyaXgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFtwaXhlbHNUb1RpbGVVbml0cywgcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgLXRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5nbENvb3JkTWF0cml4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdChwb2ludDogUG9pbnQsIG1hdHJpeDogbWF0NCkge1xuICAgIGNvbnN0IHBvcyA9IFtwb2ludC54LCBwb2ludC55LCAwLCAxXTtcbiAgICB4eVRyYW5zZm9ybU1hdDQocG9zLCBwb3MsIG1hdHJpeCk7XG4gICAgY29uc3QgdyA9IHBvc1szXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogbmV3IFBvaW50KHBvc1swXSAvIHcsIHBvc1sxXSAvIHcpLFxuICAgICAgICBzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6IHdcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc1Zpc2libGUoYW5jaG9yUG9zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBjbGlwcGluZ0J1ZmZlcjogW251bWJlciwgbnVtYmVyXSkge1xuICAgIGNvbnN0IHggPSBhbmNob3JQb3NbMF0gLyBhbmNob3JQb3NbM107XG4gICAgY29uc3QgeSA9IGFuY2hvclBvc1sxXSAvIGFuY2hvclBvc1szXTtcbiAgICBjb25zdCBpblBhZGRlZFZpZXdwb3J0ID0gKFxuICAgICAgICB4ID49IC1jbGlwcGluZ0J1ZmZlclswXSAmJlxuICAgICAgICB4IDw9IGNsaXBwaW5nQnVmZmVyWzBdICYmXG4gICAgICAgIHkgPj0gLWNsaXBwaW5nQnVmZmVyWzFdICYmXG4gICAgICAgIHkgPD0gY2xpcHBpbmdCdWZmZXJbMV0pO1xuICAgIHJldHVybiBpblBhZGRlZFZpZXdwb3J0O1xufVxuXG4vKlxuICogIFVwZGF0ZSB0aGUgYGR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXJgIGZvciB0aGUgYnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgZ2x5cGggcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBtYXAgdmlldy5cbiAqICBUaGlzIGlzIG9ubHkgcnVuIG9uIGxhYmVscyB0aGF0IGFyZSBhbGlnbmVkIHdpdGggbGluZXMuIEhvcml6b250YWwgbGFiZWxzIGFyZSBoYW5kbGVkIGVudGlyZWx5IGluIHRoZSBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVMYWJlbHMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZXh0OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbENvb3JkTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBVcHJpZ2h0OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgIGNvbnN0IHBhcnRpYWxseUV2YWx1YXRlZFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuXG4gICAgY29uc3QgY2xpcHBpbmdCdWZmZXIgPSBbMjU2IC8gcGFpbnRlci53aWR0aCAqIDIgKyAxLCAyNTYgLyBwYWludGVyLmhlaWdodCAqIDIgKyAxXTtcblxuICAgIGNvbnN0IGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IGlzVGV4dCA/XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA6XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcblxuICAgIGNvbnN0IGxpbmVWZXJ0ZXhBcnJheSA9IGJ1Y2tldC5saW5lVmVydGV4QXJyYXk7XG4gICAgY29uc3QgcGxhY2VkU3ltYm9scyA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5IDogYnVja2V0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IHBhaW50ZXIudHJhbnNmb3JtLndpZHRoIC8gcGFpbnRlci50cmFuc2Zvcm0uaGVpZ2h0O1xuXG4gICAgbGV0IHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgLy8gRG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciB2ZXJ0aWNhbCBnbHlwaHMgdW5sZXNzIHRoZSBwcmV2aW91cyBzeW1ib2wgd2FzIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHdlIGRldGVybWluZWQgdGhhdCB2ZXJ0aWNhbCBnbHlwaHMgd2VyZSBuZWNlc3NhcnkuXG4gICAgICAgIC8vIEFsc28gZG9uJ3QgZG8gY2FsY3VsYXRpb25zIGZvciBzeW1ib2xzIHRoYXQgYXJlIGNvbGxpZGVkIGFuZCBmdWxseSBmYWRlZCBvdXRcbiAgICAgICAgaWYgKHN5bWJvbC5oaWRkZW4gfHwgc3ltYm9sLndyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCAmJiAhdXNlVmVydGljYWwpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF3a3dhcmQuLi4gYnV0IHdlJ3JlIGNvdW50aW5nIG9uIHRoZSBwYWlyZWQgXCJ2ZXJ0aWNhbFwiIHN5bWJvbCBjb21pbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRzIGhvcml6b250YWwgY291bnRlcnBhcnRcbiAgICAgICAgdXNlVmVydGljYWwgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBhbmNob3JQb3MgPSBbc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZLCAwLCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGFuY2hvclBvcywgYW5jaG9yUG9zLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgIC8vIERvbid0IGJvdGhlciBjYWxjdWxhdGluZyB0aGUgY29ycmVjdCBwb2ludCBmb3IgaW52aXNpYmxlIGxhYmVscy5cbiAgICAgICAgaWYgKCFpc1Zpc2libGUoYW5jaG9yUG9zLCBjbGlwcGluZ0J1ZmZlcikpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FtZXJhVG9BbmNob3JEaXN0YW5jZSA9IGFuY2hvclBvc1szXTtcbiAgICAgICAgY29uc3QgcGVyc3BlY3RpdmVSYXRpbyA9IDAuNSArIDAuNSAqIChjYW1lcmFUb0FuY2hvckRpc3RhbmNlIC8gcGFpbnRlci50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7XG5cbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoc2l6ZURhdGEsIHBhcnRpYWxseUV2YWx1YXRlZFNpemUsIHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHBpdGNoU2NhbGVkRm9udFNpemUgPSBwaXRjaFdpdGhNYXAgP1xuICAgICAgICAgICAgZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvIDpcbiAgICAgICAgICAgIGZvbnRTaXplIC8gcGVyc3BlY3RpdmVSYXRpbztcblxuICAgICAgICBjb25zdCB0aWxlQW5jaG9yUG9pbnQgPSBuZXcgUG9pbnQoc3ltYm9sLmFuY2hvclgsIHN5bWJvbC5hbmNob3JZKTtcbiAgICAgICAgY29uc3QgYW5jaG9yUG9pbnQgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgbGFiZWxQbGFuZU1hdHJpeCkucG9pbnQ7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb25DYWNoZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IHBsYWNlVW5mbGlwcGVkOiBhbnkgPSBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIHBpdGNoU2NhbGVkRm9udFNpemUsIGZhbHNlIC8qdW5mbGlwcGVkKi8sIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pO1xuXG4gICAgICAgIHVzZVZlcnRpY2FsID0gcGxhY2VVbmZsaXBwZWQudXNlVmVydGljYWw7XG5cbiAgICAgICAgaWYgKHBsYWNlVW5mbGlwcGVkLm5vdEVub3VnaFJvb20gfHwgdXNlVmVydGljYWwgfHxcbiAgICAgICAgICAgIChwbGFjZVVuZmxpcHBlZC5uZWVkc0ZsaXBwaW5nICYmXG4gICAgICAgICAgICAgcGxhY2VHbHlwaHNBbG9uZ0xpbmUoc3ltYm9sLCBwaXRjaFNjYWxlZEZvbnRTaXplLCB0cnVlIC8qZmxpcHBlZCovLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LFxuICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSwgbGluZVZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXksIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHByb2plY3Rpb25DYWNoZSwgYXNwZWN0UmF0aW8pLm5vdEVub3VnaFJvb20pKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGxhY2VGaXJzdEFuZExhc3RHbHlwaChmb250U2NhbGU6IG51bWJlciwgZ2x5cGhPZmZzZXRBcnJheTogR2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFg6IG51bWJlciwgbGluZU9mZnNldFk6IG51bWJlciwgZmxpcDogYm9vbGVhbiwgYW5jaG9yUG9pbnQ6IFBvaW50LCB0aWxlQW5jaG9yUG9pbnQ6IFBvaW50LCBzeW1ib2w6IGFueSwgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsIHByb2plY3Rpb25DYWNoZTogYW55LCByZXR1cm5UaWxlRGlzdGFuY2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICBjb25zdCBmaXJzdEdseXBoT2Zmc2V0ID0gZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpO1xuICAgIGNvbnN0IGxhc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEVuZEluZGV4IC0gMSk7XG5cbiAgICBjb25zdCBmaXJzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBmaXJzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSwgcmV0dXJuVGlsZURpc3RhbmNlKTtcbiAgICBpZiAoIWZpcnN0UGxhY2VkR2x5cGgpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGFzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBsYXN0R2x5cGhPZmZzZXQsIGxpbmVPZmZzZXRYLCBsaW5lT2Zmc2V0WSwgZmxpcCwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgc3ltYm9sLnNlZ21lbnQsXG4gICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCByZXR1cm5UaWxlRGlzdGFuY2UpO1xuICAgIGlmICghbGFzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7Zmlyc3Q6IGZpcnN0UGxhY2VkR2x5cGgsIGxhc3Q6IGxhc3RQbGFjZWRHbHlwaH07XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uod3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pIHtcbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIGNob29zaW5nIHdoZXRoZXIgdG8gZmxpcCwgY2hvb3NlIHdoZXRoZXIgdG8gcmVuZGVyIHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2x5cGhzIG9yIHRoZSBhbHRlcm5hdGVcbiAgICAgICAgLy8gdmVydGljYWwgZ2x5cGhzLiBXZSBjYW4ndCBqdXN0IGZpbHRlciBvdXQgdmVydGljYWwgZ2x5cGhzIGluIHRoZSBob3Jpem9udGFsIHJhbmdlIGJlY2F1c2UgdGhlIGhvcml6b250YWxcbiAgICAgICAgLy8gYW5kIHZlcnRpY2FsIHZlcnNpb25zIGNhbiBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBwcm9qZWN0aW9ucyB3aGljaCBjb3VsZCBsZWFkIHRvIGFuZ2xlcyB3aGVyZSBib3RoIG9yXG4gICAgICAgIC8vIG5laXRoZXIgc2hvd2VkLlxuICAgICAgICBjb25zdCByaXNlID0gTWF0aC5hYnMobGFzdFBvaW50LnkgLSBmaXJzdFBvaW50LnkpO1xuICAgICAgICBjb25zdCBydW4gPSBNYXRoLmFicyhsYXN0UG9pbnQueCAtIGZpcnN0UG9pbnQueCkgKiBhc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKHJpc2UgPiBydW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7dXNlVmVydGljYWw6IHRydWV9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCA/IGZpcnN0UG9pbnQueSA8IGxhc3RQb2ludC55IDogZmlyc3RQb2ludC54ID4gbGFzdFBvaW50LngpIHtcbiAgICAgICAgLy8gSW5jbHVkZXMgXCJob3Jpem9udGFsT25seVwiIGNhc2UgZm9yIGxhYmVscyB3aXRob3V0IHZlcnRpY2FsIGdseXBoc1xuICAgICAgICByZXR1cm4ge25lZWRzRmxpcHBpbmc6IHRydWV9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIGZvbnRTaXplLCBmbGlwLCBrZWVwVXByaWdodCwgcG9zTWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LCBnbENvb3JkTWF0cml4LCBnbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgY29uc3QgbGluZU9mZnNldFggPSBzeW1ib2wubGluZU9mZnNldFggKiBmb250U2NhbGU7XG4gICAgY29uc3QgbGluZU9mZnNldFkgPSBzeW1ib2wubGluZU9mZnNldFkgKiBmb250U2NhbGU7XG5cbiAgICBsZXQgcGxhY2VkR2x5cGhzO1xuICAgIGlmIChzeW1ib2wubnVtR2x5cGhzID4gMSkge1xuICAgICAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4O1xuICAgICAgICBjb25zdCBsaW5lRW5kSW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aDtcblxuICAgICAgICAvLyBQbGFjZSB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGdseXBoIGluIHRoZSBsYWJlbCBmaXJzdCwgc28gd2UgY2FuIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gdGhlIG92ZXJhbGwgb3JpZW50YXRpb24gb2YgdGhlIGxhYmVsIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBuZWVkcyB0byBiZSBmbGlwcGVkIGluIGtlZXBVcHJpZ2h0IG1vZGVcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwbGFjZUZpcnN0QW5kTGFzdEdseXBoKGZvbnRTY2FsZSwgZ2x5cGhPZmZzZXRBcnJheSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSk7XG4gICAgICAgIGlmICghZmlyc3RBbmRMYXN0R2x5cGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHByb2plY3QoZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmxhc3QucG9pbnQsIGdsQ29vcmRNYXRyaXgpLnBvaW50O1xuXG4gICAgICAgIGlmIChrZWVwVXByaWdodCAmJiAhZmxpcCkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25DaGFuZ2UgPSByZXF1aXJlc09yaWVudGF0aW9uQ2hhbmdlKHN5bWJvbC53cml0aW5nTW9kZSwgZmlyc3RQb2ludCwgbGFzdFBvaW50LCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwbGFjZWRHbHlwaHMgPSBbZmlyc3RBbmRMYXN0R2x5cGguZmlyc3RdO1xuICAgICAgICBmb3IgKGxldCBnbHlwaEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIDE7IGdseXBoSW5kZXggPCBnbHlwaEVuZEluZGV4IC0gMTsgZ2x5cGhJbmRleCsrKSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBmaXJzdCBhbmQgbGFzdCBnbHlwaCBmaXQgb24gdGhlIGxpbmUsIHdlJ3JlIHN1cmUgdGhhdCB0aGUgcmVzdCBvZiB0aGUgZ2x5cGhzIGNhbiBiZSBwbGFjZWRcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgIHBsYWNlZEdseXBocy5wdXNoKHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKGdseXBoSW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lRW5kSW5kZXgsIGxpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeCwgcHJvamVjdGlvbkNhY2hlLCBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICAgIHBsYWNlZEdseXBocy5wdXNoKGZpcnN0QW5kTGFzdEdseXBoLmxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgZ2x5cGggdG8gcGxhY2VcbiAgICAgICAgLy8gU28sIGRldGVybWluZSB3aGV0aGVyIHRvIGZsaXAgYmFzZWQgb24gcHJvamVjdGVkIGFuZ2xlIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXQncyBvblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgcG9zTWF0cml4KS5wb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVWZXJ0ZXhJbmRleCA9IChzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wuc2VnbWVudCArIDEpO1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgY29uc3QgdGlsZVNlZ21lbnRFbmQgPSBuZXcgUG9pbnQobGluZVZlcnRleEFycmF5LmdldHgodGlsZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkodGlsZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRWZXJ0ZXggPSBwcm9qZWN0KHRpbGVTZWdtZW50RW5kLCBwb3NNYXRyaXgpO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5jaG9yIHdpbGwgYmUgaW4gdGhlIHZpZXdwb3J0LCBidXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG1heSBiZVxuICAgICAgICAgICAgLy8gYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiB1c2UgYSBwb2ludCBhdCBhbnkgYXJiaXRyYXJ5IChjbG9zZXIpXG4gICAgICAgICAgICAvLyBwb2ludCBvbiB0aGUgc2VnbWVudC5cbiAgICAgICAgICAgIGNvbnN0IGIgPSAocHJvamVjdGVkVmVydGV4LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSA+IDApID9cbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRWZXJ0ZXgucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudCh0aWxlQW5jaG9yUG9pbnQsIHRpbGVTZWdtZW50RW5kLCBhLCAxLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZSA9IHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uoc3ltYm9sLndyaXRpbmdNb2RlLCBhLCBiLCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBjb25zdCBzaW5nbGVHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgc3ltYm9sLmxpbmVTdGFydEluZGV4LCBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFzaW5nbGVHbHlwaClcbiAgICAgICAgICAgIHJldHVybiB7bm90RW5vdWdoUm9vbTogdHJ1ZX07XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW3NpbmdsZUdseXBoXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoOiBhbnkgb2YgcGxhY2VkR2x5cGhzKSB7XG4gICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgZ2x5cGgucG9pbnQsIGdseXBoLmFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0VHJ1bmNhdGVkTGluZVNlZ21lbnQocHJldmlvdXNUaWxlUG9pbnQ6IFBvaW50LCBjdXJyZW50VGlsZVBvaW50OiBQb2ludCwgcHJldmlvdXNQcm9qZWN0ZWRQb2ludDogUG9pbnQsIG1pbmltdW1MZW5ndGg6IG51bWJlciwgcHJvamVjdGlvbk1hdHJpeDogbWF0NCkge1xuICAgIC8vIFdlIGFyZSBhc3N1bWluZyBcInByZXZpb3VzVGlsZVBvaW50XCIgd29uJ3QgcHJvamVjdCB0byBhIHBvaW50IHdpdGhpbiBvbmUgdW5pdCBvZiB0aGUgY2FtZXJhIHBsYW5lXG4gICAgLy8gSWYgaXQgZGlkLCB0aGF0IHdvdWxkIG1lYW4gb3VyIGxhYmVsIGV4dGVuZGVkIGFsbCB0aGUgd2F5IG91dCBmcm9tIHdpdGhpbiB0aGUgdmlld3BvcnQgdG8gYSAodmVyeSBkaXN0YW50KVxuICAgIC8vIHBvaW50IG5lYXIgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEuIFdlIHdvdWxkbid0IGJlIGFibGUgdG8gcmVuZGVyIHRoZSBsYWJlbCBhbnl3YXkgb25jZSBpdCBjcm9zc2VkIHRoZVxuICAgIC8vIHBsYW5lIG9mIHRoZSBjYW1lcmEuXG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFZlcnRleCA9IHByb2plY3QocHJldmlvdXNUaWxlUG9pbnQuYWRkKHByZXZpb3VzVGlsZVBvaW50LnN1YihjdXJyZW50VGlsZVBvaW50KS5fdW5pdCgpKSwgcHJvamVjdGlvbk1hdHJpeCkucG9pbnQ7XG4gICAgY29uc3QgcHJvamVjdGVkVW5pdFNlZ21lbnQgPSBwcmV2aW91c1Byb2plY3RlZFBvaW50LnN1Yihwcm9qZWN0ZWRVbml0VmVydGV4KTtcblxuICAgIHJldHVybiBwcmV2aW91c1Byb2plY3RlZFBvaW50LmFkZChwcm9qZWN0ZWRVbml0U2VnbWVudC5fbXVsdChtaW5pbXVtTGVuZ3RoIC8gcHJvamVjdGVkVW5pdFNlZ21lbnQubWFnKCkpKTtcbn1cblxuZnVuY3Rpb24gcGxhY2VHbHlwaEFsb25nTGluZShvZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRZOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50OiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yU2VnbWVudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25DYWNoZToge1tfOiBudW1iZXJdOiBQb2ludH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblRpbGVEaXN0YW5jZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgY29tYmluZWRPZmZzZXRYID0gZmxpcCA/XG4gICAgICAgIG9mZnNldFggLSBsaW5lT2Zmc2V0WCA6XG4gICAgICAgIG9mZnNldFggKyBsaW5lT2Zmc2V0WDtcblxuICAgIGxldCBkaXIgPSBjb21iaW5lZE9mZnNldFggPiAwID8gMSA6IC0xO1xuXG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoZmxpcCkge1xuICAgICAgICAvLyBUaGUgbGFiZWwgbmVlZHMgdG8gYmUgZmxpcHBlZCB0byBrZWVwIHRleHQgdXByaWdodC5cbiAgICAgICAgLy8gSXRlcmF0ZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uXG4gICAgICAgIGRpciAqPSAtMTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLlBJO1xuICAgIH1cblxuICAgIGlmIChkaXIgPCAwKSBhbmdsZSArPSBNYXRoLlBJO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGRpciA+IDAgP1xuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgOlxuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgKyAxO1xuXG4gICAgY29uc3QgaW5pdGlhbEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIGxldCBjdXJyZW50ID0gYW5jaG9yUG9pbnQ7XG4gICAgbGV0IHByZXYgPSBhbmNob3JQb2ludDtcbiAgICBsZXQgZGlzdGFuY2VUb1ByZXYgPSAwO1xuICAgIGxldCBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gMDtcbiAgICBjb25zdCBhYnNPZmZzZXRYID0gTWF0aC5hYnMoY29tYmluZWRPZmZzZXRYKTtcblxuICAgIHdoaWxlIChkaXN0YW5jZVRvUHJldiArIGN1cnJlbnRTZWdtZW50RGlzdGFuY2UgPD0gYWJzT2Zmc2V0WCkge1xuICAgICAgICBjdXJyZW50SW5kZXggKz0gZGlyO1xuXG4gICAgICAgIC8vIG9mZnNldCBkb2VzIG5vdCBmaXQgb24gdGhlIHByb2plY3RlZCBsaW5lXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBsaW5lU3RhcnRJbmRleCB8fCBjdXJyZW50SW5kZXggPj0gbGluZUVuZEluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcHJldiA9IGN1cnJlbnQ7XG5cbiAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmVydGV4ID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KGN1cnJlbnRJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHByb2plY3QoY3VycmVudFZlcnRleCwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbi5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdID0gcHJvamVjdGlvbi5wb2ludDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHZlcnRleCBpcyBiZWhpbmQgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEsIHNvIHdlIGNhbid0IHByb2plY3QgaXRcbiAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBjcmVhdGUgYSB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmUgdGhhdCdzIGZhciBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgZ2x5cGhcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCA9IGN1cnJlbnRJbmRleCAtIGRpcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1RpbGVQb2ludCA9IGRpc3RhbmNlVG9QcmV2ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50IDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkocHJldmlvdXNMaW5lVmVydGV4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBiZWNhdXNlIHRoZSBuZXcgdmVydGV4IG1pZ2h0IG5vdCBiZSBmYXIgZW5vdWdoIG91dCBmb3IgZnV0dXJlIGdseXBocyBvbiB0aGUgc2FtZSBzZWdtZW50XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludCwgY3VycmVudFZlcnRleCwgcHJldiwgYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2ICsgMSwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZVRvUHJldiArPSBjdXJyZW50U2VnbWVudERpc3RhbmNlO1xuICAgICAgICBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gcHJldi5kaXN0KGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBJbnRlcnBvbGF0ZSB0byBmaW5kIGl0LlxuICAgIGNvbnN0IHNlZ21lbnRJbnRlcnBvbGF0aW9uVCA9IChhYnNPZmZzZXRYIC0gZGlzdGFuY2VUb1ByZXYpIC8gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICBjb25zdCBwcmV2VG9DdXJyZW50ID0gY3VycmVudC5zdWIocHJldik7XG4gICAgY29uc3QgcCA9IHByZXZUb0N1cnJlbnQubXVsdChzZWdtZW50SW50ZXJwb2xhdGlvblQpLl9hZGQocHJldik7XG5cbiAgICAvLyBvZmZzZXQgdGhlIHBvaW50IGZyb20gdGhlIGxpbmUgdG8gdGV4dC1vZmZzZXQgYW5kIGljb24tb2Zmc2V0XG4gICAgcC5fYWRkKHByZXZUb0N1cnJlbnQuX3VuaXQoKS5fcGVycCgpLl9tdWx0KGxpbmVPZmZzZXRZICogZGlyKSk7XG5cbiAgICBjb25zdCBzZWdtZW50QW5nbGUgPSBhbmdsZSArIE1hdGguYXRhbjIoY3VycmVudC55IC0gcHJldi55LCBjdXJyZW50LnggLSBwcmV2LngpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHAsXG4gICAgICAgIGFuZ2xlOiBzZWdtZW50QW5nbGUsXG4gICAgICAgIHRpbGVEaXN0YW5jZTogcmV0dXJuVGlsZURpc3RhbmNlID9cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmV2VGlsZURpc3RhbmNlOiAoY3VycmVudEluZGV4IC0gZGlyKSA9PT0gaW5pdGlhbEluZGV4ID8gMCA6IGxpbmVWZXJ0ZXhBcnJheS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihjdXJyZW50SW5kZXggLSBkaXIpLFxuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZTogYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2XG4gICAgICAgICAgICB9IDogbnVsbFxuICAgIH07XG59XG5cbmNvbnN0IGhpZGRlbkdseXBoQXR0cmlidXRlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWy1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwXSk7XG5cbi8vIEhpZGUgdGhlbSBieSBtb3ZpbmcgdGhlbSBvZmZzY3JlZW4uIFdlIHN0aWxsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIGJ1ZmZlclxuLy8gYmVjYXVzZSB0aGUgZHluYW1pYyBidWZmZXIgaXMgcGFpcmVkIHdpdGggYSBzdGF0aWMgYnVmZmVyIHRoYXQgZG9lc24ndCBnZXQgdXBkYXRlZC5cbmZ1bmN0aW9uIGhpZGVHbHlwaHMobnVtOiBudW1iZXIsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTogU3ltYm9sRHluYW1pY0xheW91dEFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkucmVzaXplKG9mZnNldCArIDQpO1xuICAgICAgICAvLyBTaW5jZSBhbGwgaGlkZGVuIGdseXBocyBoYXZlIHRoZSBzYW1lIGF0dHJpYnV0ZXMsIHdlIGNhbiBidWlsZCB1cCB0aGUgYXJyYXkgZmFzdGVyIHdpdGggYSBzaW5nbGUgY2FsbCB0byBGbG9hdDMyQXJyYXkuc2V0XG4gICAgICAgIC8vIGZvciBlYWNoIHNldCBvZiBmb3VyIHZlcnRpY2VzLCBpbnN0ZWFkIG9mIGNhbGxpbmcgYWRkRHluYW1pY0F0dHJpYnV0ZXMgZm9yIGVhY2ggdmVydGV4LlxuICAgICAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZmxvYXQzMi5zZXQoaGlkZGVuR2x5cGhBdHRyaWJ1dGVzLCBvZmZzZXQgKiAzKTtcbiAgICB9XG59XG5cbi8vIEZvciBsaW5lIGxhYmVsIGxheW91dCwgd2UncmUgbm90IHVzaW5nIHogb3V0cHV0IGFuZCBvdXIgdyBpbnB1dCBpcyBhbHdheXMgMVxuLy8gVGhpcyBjdXN0b20gbWF0cml4IHRyYW5zZm9ybWF0aW9uIGlnbm9yZXMgdGhvc2UgY29tcG9uZW50cyB0byBtYWtlIHByb2plY3Rpb24gZmFzdGVyXG5mdW5jdGlvbiB4eVRyYW5zZm9ybU1hdDQob3V0OiB2ZWM0LCBhOiB2ZWM0LCBtOiBtYXQ0KSB7XG4gICAgY29uc3QgeCA9IGFbMF0sIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gICAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTVdO1xuICAgIHJldHVybiBvdXQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCAqIGFzIGludGVyc2VjdGlvblRlc3RzIGZyb20gJy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCBHcmlkIGZyb20gJy4vZ3JpZF9pbmRleCc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCAqIGFzIHByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuLy8gV2hlbiBhIHN5bWJvbCBjcm9zc2VzIHRoZSBlZGdlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIGluY2x1ZGVkIGluXG4vLyBjb2xsaXNpb24gZGV0ZWN0aW9uLCBpdCB3aWxsIGNhdXNlIGNoYW5nZXMgaW4gdGhlIHN5bWJvbHMgYXJvdW5kXG4vLyBpdC4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkgcGl4ZWxzIHRvIHBhZCB0aGUgZWRnZSBvZlxuLy8gdGhlIHZpZXdwb3J0IGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIHNvIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXNcbi8vIG9jY3VyIG9mZnNjcmVlbi4gTWFraW5nIHRoaXMgY29uc3RhbnQgZ3JlYXRlciBpbmNyZWFzZXMgbGFiZWxcbi8vIHN0YWJpbGl0eSwgYnV0IGl0J3MgZXhwZW5zaXZlLlxuY29uc3Qgdmlld3BvcnRQYWRkaW5nID0gMTAwO1xuXG4vKipcbiAqIEEgY29sbGlzaW9uIGluZGV4IHVzZWQgdG8gcHJldmVudCBzeW1ib2xzIGZyb20gb3ZlcmxhcHBpbmcuIEl0IGtlZXAgdHJhY2tzIG9mXG4gKiB3aGVyZSBwcmV2aW91cyBzeW1ib2xzIGhhdmUgYmVlbiBwbGFjZWQgYW5kIGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBuZXdcbiAqIHN5bWJvbCBvdmVybGFwcyB3aXRoIGFueSBwcmV2aW91c2x5IGFkZGVkIHN5bWJvbHMuXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdGVwcyB0byBpbnNlcnRpb246IGZpcnN0IHBsYWNlQ29sbGlzaW9uQm94L0NpcmNsZXMgY2hlY2tzIGlmXG4gKiB0aGVyZSdzIHJvb20gZm9yIGEgc3ltYm9sLCB0aGVuIGluc2VydENvbGxpc2lvbkJveC9DaXJjbGVzIGFjdHVhbGx5IHB1dHMgdGhlXG4gKiBzeW1ib2wgaW4gdGhlIGluZGV4LiBUaGUgdHdvIHN0ZXAgcHJvY2VzcyBhbGxvd3MgcGFpcmVkIHN5bWJvbHMgdG8gYmUgaW5zZXJ0ZWRcbiAqIHRvZ2V0aGVyIGV2ZW4gaWYgdGhleSBvdmVybGFwLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkluZGV4IHtcbiAgICBncmlkOiBHcmlkO1xuICAgIGlnbm9yZWRHcmlkOiBHcmlkO1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIHBpdGNoZmFjdG9yOiBudW1iZXI7XG4gICAgc2NyZWVuUmlnaHRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHNjcmVlbkJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZFJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBncmlkQm90dG9tQm91bmRhcnk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgZ3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSksXG4gICAgICAgIGlnbm9yZWRHcmlkOiBHcmlkID0gbmV3IEdyaWQodHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZywgdHJhbnNmb3JtLmhlaWdodCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIDI1KVxuICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmlnbm9yZWRHcmlkID0gaWdub3JlZEdyaWQ7XG4gICAgICAgIHRoaXMucGl0Y2hmYWN0b3IgPSBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSA9IHRyYW5zZm9ybS53aWR0aCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgIH1cblxuICAgIHBsYWNlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LCBhbGxvd092ZXJsYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8ocG9zTWF0cml4LCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRYLCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSB0ZXh0UGl4ZWxSYXRpbyAqIHByb2plY3RlZFBvaW50LnBlcnNwZWN0aXZlUmF0aW87XG4gICAgICAgIGNvbnN0IHRsWCA9IGNvbGxpc2lvbkJveC54MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueDtcbiAgICAgICAgY29uc3QgdGxZID0gY29sbGlzaW9uQm94LnkxICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC55O1xuICAgICAgICBjb25zdCBiclggPSBjb2xsaXNpb25Cb3gueDIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IGJyWSA9IGNvbGxpc2lvbkJveC55MiAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNJbnNpZGVHcmlkKHRsWCwgdGxZLCBiclgsIGJyWSkgfHxcbiAgICAgICAgICAgICghYWxsb3dPdmVybGFwICYmIHRoaXMuZ3JpZC5oaXRUZXN0KHRsWCwgdGxZLCBiclgsIGJyWSwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3g6IFtdLFxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm94OiBbdGxYLCB0bFksIGJyWCwgYnJZXSxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogdGhpcy5pc09mZnNjcmVlbih0bFgsIHRsWSwgYnJYLCBiclkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UodGlsZURpc3RhbmNlOiBhbnksIGxhc3RTZWdtZW50QW5nbGU6IG51bWJlciwgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlciwgY2FtZXJhVG9BbmNob3JEaXN0YW5jZTogbnVtYmVyLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcXVpY2sgYW5kIGRpcnR5IHNvbHV0aW9uIGZvciBjaG9zaW5nIHdoaWNoIGNvbGxpc2lvbiBjaXJjbGVzIHRvIHVzZSAoc2luY2UgY29sbGlzaW9uIGNpcmNsZXMgYXJlXG4gICAgICAgIC8vIGxhaWQgb3V0IGluIHRpbGUgdW5pdHMpLiBJZGVhbGx5LCBJIHRoaW5rIHdlIHNob3VsZCBnZW5lcmF0ZSBjb2xsaXNpb24gY2lyY2xlcyBvbiB0aGUgZmx5IGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG4gICAgICAgIC8vIGF0IHRoZSB0aW1lIHdlIGRvIGNvbGxpc2lvbiBkZXRlY3Rpb24uXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNTQ3NFxuXG4gICAgICAgIC8vIGluY2lkZW5jZVN0cmV0Y2ggaXMgdGhlIHJhdGlvIG9mIGhvdyBtdWNoIHkgc3BhY2UgYSBsYWJlbCB0YWtlcyB1cCBvbiBhIHRpbGUgd2hpbGUgZHJhd24gcGVycGVuZGljdWxhciB0byB0aGUgdmlld3BvcnQgdnNcbiAgICAgICAgLy8gIGhvdyBtdWNoIHNwYWNlIGl0IHdvdWxkIHRha2UgdXAgaWYgaXQgd2VyZSBkcmF3biBmbGF0IG9uIHRoZSB0aWxlXG4gICAgICAgIC8vIFVzaW5nIGxhdyBvZiBzaW5lcywgY2FtZXJhX3RvX2FuY2hvci9zaW4oZ3JvdW5kX2FuZ2xlKSA9IGNhbWVyYV90b19jZW50ZXIvc2luKGluY2lkZW5jZV9hbmdsZSlcbiAgICAgICAgLy8gSW5jaWRlbmNlIGFuZ2xlIDkwIC0+IGhlYWQgb24sIHNpbihpbmNpZGVuY2VfYW5nbGUpID0gMSwgbm8gc3RyZXRjaFxuICAgICAgICAvLyBJbmNpZGVuY2UgYW5nbGUgMSAtPiB2ZXJ5IG9ibGlxdWUsIHNpbihpbmNpZGVuY2VfYW5nbGUpID1+IDAsIGxvdHMgb2Ygc3RyZXRjaFxuICAgICAgICAvLyBncm91bmRfYW5nbGUgPSB1X3BpdGNoICsgUEkvMiAtPiBzaW4oZ3JvdW5kX2FuZ2xlKSA9IGNvcyh1X3BpdGNoKVxuICAgICAgICAvLyBpbmNpZGVuY2VTdHJldGNoID0gMSAvIHNpbihpbmNpZGVuY2VBbmdsZSlcblxuICAgICAgICBjb25zdCBpbmNpZGVuY2VTdHJldGNoID0gcGl0Y2hXaXRoTWFwID8gMSA6IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgLyB0aGlzLnBpdGNoZmFjdG9yO1xuICAgICAgICBjb25zdCBsYXN0U2VnbWVudFRpbGUgPSB0aWxlRGlzdGFuY2UubGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlICogcGl4ZWxzVG9UaWxlVW5pdHM7XG4gICAgICAgIHJldHVybiB0aWxlRGlzdGFuY2UucHJldlRpbGVEaXN0YW5jZSArXG4gICAgICAgICAgICBsYXN0U2VnbWVudFRpbGUgK1xuICAgICAgICAgICAgKGluY2lkZW5jZVN0cmV0Y2ggLSAxKSAqIGxhc3RTZWdtZW50VGlsZSAqIE1hdGguYWJzKE1hdGguc2luKGxhc3RTZWdtZW50QW5nbGUpKTtcbiAgICB9XG5cbiAgICBwbGFjZUNvbGxpc2lvbkNpcmNsZXMoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dPdmVybGFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkNpcmNsZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGNpcmNsZXM6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZEFuY2hvciA9IHRoaXMucHJvamVjdEFuY2hvcihwb3NNYXRyaXgsIHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGlvbkNhY2hlID0ge307XG4gICAgICAgIGNvbnN0IGZvbnRTY2FsZSA9IGZvbnRTaXplIC8gMjQ7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRYID0gc3ltYm9sLmxpbmVPZmZzZXRYICogZm9udFNpemU7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXRZID0gc3ltYm9sLmxpbmVPZmZzZXRZICogZm9udFNpemU7XG5cbiAgICAgICAgY29uc3QgdGlsZVVuaXRBbmNob3JQb2ludCA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICAvLyBwcm9qZWN0aW9uLnByb2plY3QgZ2VuZXJhdGVzIE5EQyBjb29yZGluYXRlcywgYXMgb3Bwb3NlZCB0byB0aGVcbiAgICAgICAgLy8gcGl4ZWwtYmFzZWQgZ3JpZCBjb29yZGluYXRlcyBnZW5lcmF0ZWQgYnkgdGhpcy5wcm9qZWN0UG9pbnRcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZUFuY2hvclBvaW50ID1cbiAgICAgICAgICAgIHByb2plY3Rpb24ucHJvamVjdCh0aWxlVW5pdEFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoXG4gICAgICAgICAgICBmb250U2NhbGUsXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgbGluZU9mZnNldFgsXG4gICAgICAgICAgICBsaW5lT2Zmc2V0WSxcbiAgICAgICAgICAgIC8qZmxpcCovIGZhbHNlLFxuICAgICAgICAgICAgbGFiZWxQbGFuZUFuY2hvclBvaW50LFxuICAgICAgICAgICAgdGlsZVVuaXRBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBwcm9qZWN0aW9uQ2FjaGUsXG4gICAgICAgICAgICAvKnJldHVybiB0aWxlIGRpc3RhbmNlKi8gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IGNvbGxpc2lvbkRldGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBpbkdyaWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGVudGlyZWx5T2Zmc2NyZWVuID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCB0aWxlVG9WaWV3cG9ydCA9IHByb2plY3RlZEFuY2hvci5wZXJzcGVjdGl2ZVJhdGlvICogdGV4dFBpeGVsUmF0aW87XG4gICAgICAgIC8vIHBpeGVsc1RvVGlsZVVuaXRzIGlzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIGxpbmUgZ2VvbWV0cnkgdG8gdGlsZSB1bml0c1xuICAgICAgICAvLyAuLi4gc28gd2UgY2FyZSBhYm91dCAnc2NhbGUnIGJ1dCBub3QgJ3BlcnNwZWN0aXZlUmF0aW8nXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gcGl4ZWxfdG9fdGlsZV91bml0c1xuICAgICAgICBjb25zdCBwaXhlbHNUb1RpbGVVbml0cyA9IDEgLyAodGV4dFBpeGVsUmF0aW8gKiBzY2FsZSk7XG5cbiAgICAgICAgbGV0IGZpcnN0VGlsZURpc3RhbmNlID0gMCwgbGFzdFRpbGVEaXN0YW5jZSA9IDA7XG4gICAgICAgIGlmIChmaXJzdEFuZExhc3RHbHlwaCkge1xuICAgICAgICAgICAgZmlyc3RUaWxlRGlzdGFuY2UgPSB0aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGguZmlyc3QuYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzLCBwcm9qZWN0ZWRBbmNob3IuY2FtZXJhRGlzdGFuY2UsIHBpdGNoV2l0aE1hcCk7XG4gICAgICAgICAgICBsYXN0VGlsZURpc3RhbmNlID0gdGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnRpbGVEaXN0YW5jZSwgZmlyc3RBbmRMYXN0R2x5cGgubGFzdC5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMsIHByb2plY3RlZEFuY2hvci5jYW1lcmFEaXN0YW5jZSwgcGl0Y2hXaXRoTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7IGsgKz0gNSkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yUG9pbnRYID0gY29sbGlzaW9uQ2lyY2xlc1trXTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvclBvaW50WSA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDFdO1xuICAgICAgICAgICAgY29uc3QgdGlsZVVuaXRSYWRpdXMgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXTtcbiAgICAgICAgICAgIGNvbnN0IGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA9IGNvbGxpc2lvbkNpcmNsZXNbayArIDNdO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEFuZExhc3RHbHlwaCB8fFxuICAgICAgICAgICAgICAgIChib3hTaWduZWREaXN0YW5jZUZyb21BbmNob3IgPCAtZmlyc3RUaWxlRGlzdGFuY2UpIHx8XG4gICAgICAgICAgICAgICAgKGJveFNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciA+IGxhc3RUaWxlRGlzdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGxhYmVsIGVpdGhlciBkb2Vzbid0IGZpdCBvbiBpdHMgbGluZSBvciB3ZVxuICAgICAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgY2lyY2xlIGJlY2F1c2UgdGhlIGxhYmVsXG4gICAgICAgICAgICAgICAgLy8gZG9lc24ndCBleHRlbmQgdGhpcyBmYXIuIEVpdGhlciB3YXksIG1hcmsgdGhlIGNpcmNsZSB1bnVzZWQuXG4gICAgICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdFBvaW50KHBvc01hdHJpeCwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFkpO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gdGlsZVVuaXRSYWRpdXMgKiB0aWxlVG9WaWV3cG9ydDtcblxuICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZUNpcmNsZVBsYWNlZCA9IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGlmIChhdExlYXN0T25lQ2lyY2xlUGxhY2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHggPSBwcm9qZWN0ZWRQb2ludC54IC0gcGxhY2VkQ29sbGlzaW9uQ2lyY2xlc1twbGFjZWRDb2xsaXNpb25DaXJjbGVzLmxlbmd0aCAtIDRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gcHJvamVjdGVkUG9pbnQueSAtIHBsYWNlZENvbGxpc2lvbkNpcmNsZXNbcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5sZW5ndGggLSAzXTtcbiAgICAgICAgICAgICAgICAvLyBUaGUgY2lyY2xlIGVkZ2VzIHRvdWNoIHdoZW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlaXIgY2VudGVycyBpcyAyeCB0aGUgcmFkaXVzXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGlzdGFuY2UgaXMgMXggdGhlIHJhZGl1cywgdGhleSdyZSBkb3VibGVkIHVwLCBhbmQgd2UgY291bGQgcmVtb3ZlXG4gICAgICAgICAgICAgICAgLy8gZXZlcnkgb3RoZXIgY2lyY2xlIHdoaWxlIGtlZXBpbmcgdGhlbSBhbGwgaW4gdG91Y2guXG4gICAgICAgICAgICAgICAgLy8gV2UgYWN0dWFsbHkgc3RhcnQgcmVtb3ZpbmcgY2lyY2xlcyB3aGVuIHRoZSBkaXN0YW5jZSBpcyDDosKIwpoyeCB0aGUgcmFkaXVzOlxuICAgICAgICAgICAgICAgIC8vICB0aGlubmluZyB0aGUgbnVtYmVyIG9mIGNpcmNsZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBpcyBhIG1ham9yIHBlcmZvcm1hbmNlIHdpbixcbiAgICAgICAgICAgICAgICAvLyAgYW5kIHRoZSBzbWFsbCBnYXBzIGludHJvZHVjZWQgZG9uJ3QgbWFrZSBhIHZlcnkgbm90aWNlYWJsZSBkaWZmZXJlbmNlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlZFRvb0RlbnNlbHkgPSByYWRpdXMgKiByYWRpdXMgKiAyID4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlZFRvb0RlbnNlbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXRMZWFzdE9uZU1vcmVDaXJjbGUgPSAoayArIDgpIDwgY29sbGlzaW9uQ2lyY2xlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdExlYXN0T25lTW9yZUNpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEJveERpc3RhbmNlVG9BbmNob3IgPSBjb2xsaXNpb25DaXJjbGVzW2sgKyA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPiAtZmlyc3RUaWxlRGlzdGFuY2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV4dEJveERpc3RhbmNlVG9BbmNob3IgPCBsYXN0VGlsZURpc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgc2lnbmlmaWNhbnRseSBvdmVybGFwcGluZyBjaXJjbGVzLCB1bmxlc3MgdGhpcyBpcyB0aGUgbGFzdCBvbmUgd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCBpdCBpbiBwbGFjZSBldmVuIGlmIGl0J3MgdGlnaHRseSBwYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb2xsaXNpb25DaXJjbGVVc2VkKGNvbGxpc2lvbkNpcmNsZXMsIGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbkJveEFycmF5SW5kZXggPSBrIC8gNTtcbiAgICAgICAgICAgIHBsYWNlZENvbGxpc2lvbkNpcmNsZXMucHVzaChwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkJveEFycmF5SW5kZXgpO1xuICAgICAgICAgICAgbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlcywgaywgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHgxID0gcHJvamVjdGVkUG9pbnQueCAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkxID0gcHJvamVjdGVkUG9pbnQueSAtIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHgyID0gcHJvamVjdGVkUG9pbnQueCArIHJhZGl1cztcbiAgICAgICAgICAgIGNvbnN0IHkyID0gcHJvamVjdGVkUG9pbnQueSArIHJhZGl1cztcbiAgICAgICAgICAgIGVudGlyZWx5T2Zmc2NyZWVuID0gZW50aXJlbHlPZmZzY3JlZW4gJiYgdGhpcy5pc09mZnNjcmVlbih4MSwgeTEsIHgyLCB5Mik7XG4gICAgICAgICAgICBpbkdyaWQgPSBpbkdyaWQgfHwgdGhpcy5pc0luc2lkZUdyaWQoeDEsIHkxLCB4MiwgeTIpO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93T3ZlcmxhcCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShwcm9qZWN0ZWRQb2ludC54LCBwcm9qZWN0ZWRQb2ludC55LCByYWRpdXMsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3dDb2xsaXNpb25DaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBlYXJseSBleGl0IGlmIHdlJ3JlIHNob3dpbmcgdGhlIGRlYnVnIGNpcmNsZXMgYmVjYXVzZSB3ZSBzdGlsbCB3YW50IHRvIGNhbGN1bGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2lyY2xlcyBhcmUgaW4gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25EZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2lyY2xlczogKGNvbGxpc2lvbkRldGVjdGVkIHx8ICFpbkdyaWQpID8gW10gOiBwbGFjZWRDb2xsaXNpb25DaXJjbGVzLFxuICAgICAgICAgICAgb2Zmc2NyZWVuOiBlbnRpcmVseU9mZnNjcmVlblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2UgdGhlIGdlb21ldHJpZXMgaW4gdGhlIENvbGxpc2lvbkluZGV4IGFyZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaGFwZSBvZlxuICAgICAqIHN5bWJvbHMgb24gdGhlIG1hcCwgd2UgdXNlIHRoZSBDb2xsaXNpb25JbmRleCB0byBsb29rIHVwIHRoZSBzeW1ib2wgcGFydCBvZlxuICAgICAqIGBxdWVyeVJlbmRlcmVkRmVhdHVyZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyh2aWV3cG9ydFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodmlld3BvcnRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMCB8fCAodGhpcy5ncmlkLmtleXNMZW5ndGgoKSA9PT0gMCAmJiB0aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gW107XG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB2aWV3cG9ydFF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgdmlld3BvcnRQYWRkaW5nLCBwb2ludC55ICsgdmlld3BvcnRQYWRkaW5nKTtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGdyaWRQb2ludC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBncmlkUG9pbnQueSk7XG4gICAgICAgICAgICBxdWVyeS5wdXNoKGdyaWRQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG1pblgsIG1pblksIG1heFgsIG1heFkpKTtcblxuICAgICAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5ID0gZmVhdHVyZS5rZXk7XG4gICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgc2VlbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcXVlcnkgaW50ZXJzZWN0cyB3aXRoIHRoZSBmZWF0dXJlIGJveFxuICAgICAgICAgICAgLy8gXCJDb2xsaXNpb24gQ2lyY2xlc1wiIGZvciBsaW5lIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBib3hlcyBoZXJlXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIGFjdHVhbCBjb2xsaXNpb24gdGFraW5nIHBsYWNlLCB0aGUgY2lyY2xlIHZzLiBzcXVhcmVcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyIGFzIG11Y2gsIGFuZCBib3ggZ2VvbWV0cnkgaXMgZWFzaWVyXG4gICAgICAgICAgICAvLyB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkxKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MiwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTIpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHF1ZXJ5LCBiYm94KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChmZWF0dXJlS2V5LmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IEFycmF5PG51bWJlcj4sIGlnbm9yZVBsYWNlbWVudDogYm9vbGVhbiwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLCBmZWF0dXJlSW5kZXg6IG51bWJlciwgY29sbGlzaW9uR3JvdXBJRDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBpZ25vcmVQbGFjZW1lbnQgPyB0aGlzLmlnbm9yZWRHcmlkIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHtidWNrZXRJbnN0YW5jZUlkLCBmZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwSUR9O1xuICAgICAgICBncmlkLmluc2VydChrZXksIGNvbGxpc2lvbkJveFswXSwgY29sbGlzaW9uQm94WzFdLCBjb2xsaXNpb25Cb3hbMl0sIGNvbGxpc2lvbkJveFszXSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25DaXJjbGVzOiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb2xsaXNpb25DaXJjbGVzLmxlbmd0aDsgayArPSA0KSB7XG4gICAgICAgICAgICBncmlkLmluc2VydENpcmNsZShrZXksIGNvbGxpc2lvbkNpcmNsZXNba10sIGNvbGxpc2lvbkNpcmNsZXNbayArIDFdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9qZWN0QW5jaG9yKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcnNwZWN0aXZlUmF0aW86IDAuNSArIDAuNSAqICh0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcFszXSksXG4gICAgICAgICAgICBjYW1lcmFEaXN0YW5jZTogcFszXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2plY3RQb2ludChwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKHBvc01hdHJpeDogbWF0NCwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IFt4LCB5LCAwLCAxXTtcbiAgICAgICAgcHJvamVjdGlvbi54eVRyYW5zZm9ybU1hdDQocCwgcCwgcG9zTWF0cml4KTtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBQb2ludChcbiAgICAgICAgICAgICgoKHBbMF0gLyBwWzNdICsgMSkgLyAyKSAqIHRoaXMudHJhbnNmb3JtLndpZHRoKSArIHZpZXdwb3J0UGFkZGluZyxcbiAgICAgICAgICAgICgoKC1wWzFdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS5oZWlnaHQpICsgdmlld3BvcnRQYWRkaW5nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb2ludDogYSxcbiAgICAgICAgICAgIC8vIFNlZSBwZXJzcGVjdGl2ZSByYXRpbyBjb21tZW50IGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgICAgICAgICAvLyBXZSdyZSBkb2luZyBjb2xsaXNpb24gZGV0ZWN0aW9uIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHNjYWxlIGRvd24gYm94ZXMgaW4gdGhlIGRpc3RhbmNlXG4gICAgICAgICAgICBwZXJzcGVjdGl2ZVJhdGlvOiAwLjUgKyAwLjUgKiAodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHBbM10pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNPZmZzY3JlZW4oeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPCB2aWV3cG9ydFBhZGRpbmcgfHwgeDEgPj0gdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5IHx8IHkyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHkxID4gdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeTtcbiAgICB9XG5cbiAgICBpc0luc2lkZUdyaWQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4geDIgPj0gMCAmJiB4MSA8IHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgJiYgeTIgPj0gMCAmJiB5MSA8IHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbGxpc2lvbkNpcmNsZVVzZWQoY29sbGlzaW9uQ2lyY2xlczogQXJyYXk8bnVtYmVyPiwgaW5kZXg6IG51bWJlciwgdXNlZDogYm9vbGVhbikge1xuICAgIGNvbGxpc2lvbkNpcmNsZXNbaW5kZXggKyA0XSA9IHVzZWQgPyAxIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBwaXhlbCB2YWx1ZSBhdCBhIHRoZSBnaXZlbiB6b29tIGxldmVsIHRvIHRpbGUgdW5pdHMuXG4gKlxuICogVGhlIHNoYWRlcnMgbW9zdGx5IGNhbGN1bGF0ZSBldmVyeXRoaW5nIGluIHRpbGUgdW5pdHMgc28gc3R5bGVcbiAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgdG8gdGlsZSB1bml0cyB1c2luZyB0aGlzLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGJ5IDMwIHBpeGVscyBhdCB6b29tIDYuNSB3aWxsIGJlIGFcbiAqIHRyYW5zbGF0aW9uIGJ5IHBpeGVsc1RvVGlsZVVuaXRzKDMwLCA2LjUpIHRpbGUgdW5pdHMuXG4gKlxuICogQHJldHVybnMgdmFsdWUgaW4gdGlsZSB1bml0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sIHBpeGVsVmFsdWU6IG51bWJlciwgejogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGl4ZWxWYWx1ZSAqIChFWFRFTlQgLyAodGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWikpKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xsaXNpb25JbmRleCBmcm9tICcuL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge2dldEFuY2hvckp1c3RpZmljYXRpb24sIGV2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge0NvbGxpc2lvbkFycmF5cywgU2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5LCBDb2xsaXNpb25WZXJ0ZXhBcnJheSwgU3ltYm9sSW5zdGFuY2V9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1RleHRBbmNob3J9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5cbmNsYXNzIE9wYWNpdHlTdGF0ZSB7XG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIHBsYWNlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9PcGFjaXR5U3RhdGUsIGluY3JlbWVudDogbnVtYmVyLCBwbGFjZWQ6IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICBpZiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBwcmV2U3RhdGUub3BhY2l0eSArIChwcmV2U3RhdGUucGxhY2VkID8gaW5jcmVtZW50IDogLWluY3JlbWVudCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eSA9IChza2lwRmFkZSAmJiBwbGFjZWQpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGFjZWQgPSBwbGFjZWQ7XG4gICAgfVxuICAgIGlzSGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGFjaXR5ID09PSAwICYmICF0aGlzLnBsYWNlZDtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50T3BhY2l0eVN0YXRlIHtcbiAgICB0ZXh0OiBPcGFjaXR5U3RhdGU7XG4gICAgaWNvbjogT3BhY2l0eVN0YXRlO1xuICAgIGNvbnN0cnVjdG9yKHByZXZTdGF0ZTogP0pvaW50T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkVGV4dDogYm9vbGVhbiwgcGxhY2VkSWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6ID9ib29sZWFuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLnRleHQgOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZFRleHQsIHNraXBGYWRlKTtcbiAgICAgICAgdGhpcy5pY29uID0gbmV3IE9wYWNpdHlTdGF0ZShwcmV2U3RhdGUgPyBwcmV2U3RhdGUuaWNvbiA6IG51bGwsIGluY3JlbWVudCwgcGxhY2VkSWNvbiwgc2tpcEZhZGUpO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpICYmIHRoaXMuaWNvbi5pc0hpZGRlbigpO1xuICAgIH1cbn1cblxuY2xhc3MgSm9pbnRQbGFjZW1lbnQge1xuICAgIHRleHQ6IGJvb2xlYW47XG4gICAgaWNvbjogYm9vbGVhbjtcbiAgICAvLyBza2lwRmFkZSA9IG91dHNpZGUgdmlld3BvcnQsIGJ1dCB3aXRoaW4gQ29sbGlzaW9uSW5kZXg6OnZpZXdwb3J0UGFkZGluZyBweCBvZiB0aGUgZWRnZVxuICAgIC8vIEJlY2F1c2UgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgb25zY3JlZW4geWV0LCB3ZSBjYW4gc2tpcCB0aGUgXCJmYWRlIGluXCIgYW5pbWF0aW9uLFxuICAgIC8vIGFuZCBpZiBhIHN1YnNlcXVlbnQgdmlld3BvcnQgY2hhbmdlIGJyaW5ncyB0aGVtIGludG8gdmlldywgdGhleSdsbCBiZSBmdWxseVxuICAgIC8vIHZpc2libGUgcmlnaHQgYXdheS5cbiAgICBza2lwRmFkZTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0OiBib29sZWFuLCBpY29uOiBib29sZWFuLCBza2lwRmFkZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLmljb24gPSBpY29uO1xuICAgICAgICB0aGlzLnNraXBGYWRlID0gc2tpcEZhZGU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmV0YWluZWRRdWVyeURhdGEge1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleDtcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXI7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogP0FycmF5PG51bWJlcj5cbiAgICBjb25zdHJ1Y3RvcihidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHRoaXMuYnVja2V0SW5zdGFuY2VJZCA9IGJ1Y2tldEluc3RhbmNlSWQ7XG4gICAgICAgIHRoaXMuZmVhdHVyZUluZGV4ID0gZmVhdHVyZUluZGV4O1xuICAgICAgICB0aGlzLnNvdXJjZUxheWVySW5kZXggPSBzb3VyY2VMYXllckluZGV4O1xuICAgICAgICB0aGlzLmJ1Y2tldEluZGV4ID0gYnVja2V0SW5kZXg7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgIH1cbn1cblxudHlwZSBDb2xsaXNpb25Hcm91cCA9IHsgSUQ6IG51bWJlciwgcHJlZGljYXRlPzogYW55IH07XG5cbmNsYXNzIENvbGxpc2lvbkdyb3VwcyB7XG4gICAgY29sbGlzaW9uR3JvdXBzOiB7W2dyb3VwTmFtZTogc3RyaW5nXTogQ29sbGlzaW9uR3JvdXB9O1xuICAgIG1heEdyb3VwSUQ6IG51bWJlcjtcbiAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMgPSBjcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMubWF4R3JvdXBJRCA9IDA7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzID0ge307XG4gICAgfVxuXG4gICAgZ2V0KHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVGhlIHByZWRpY2F0ZS9ncm91cElEIG1lY2hhbmlzbSBhbGxvd3MgZm9yIGFyYml0cmFyeSBncm91cGluZyxcbiAgICAgICAgLy8gYnV0IHRoZSBjdXJyZW50IGludGVyZmFjZSBkZWZpbmVzIG9uZSBzb3VyY2UgPT0gb25lIGdyb3VwIHdoZW5cbiAgICAgICAgLy8gY3Jvc3NTb3VyY2VDb2xsaXNpb25zID09IHRydWUuXG4gICAgICAgIGlmICghdGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb2xsaXNpb25Hcm91cHNbc291cmNlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwSUQgPSArK3RoaXMubWF4R3JvdXBJRDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIElEOiBuZXh0R3JvdXBJRCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmNvbGxpc2lvbkdyb3VwSUQgPT09IG5leHRHcm91cElEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge0lEOiAwLCBwcmVkaWNhdGU6IG51bGx9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KGFuY2hvcjogVGV4dEFuY2hvciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sIHRleHRCb3hTY2FsZTogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcik7XG4gICAgY29uc3Qgc2hpZnRYID0gLShob3Jpem9udGFsQWxpZ24gLSAwLjUpICogd2lkdGg7XG4gICAgY29uc3Qgc2hpZnRZID0gLSh2ZXJ0aWNhbEFsaWduIC0gMC41KSAqIGhlaWdodDtcbiAgICBjb25zdCBvZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgc2hpZnRYICsgb2Zmc2V0WzBdICogdGV4dEJveFNjYWxlLFxuICAgICAgICBzaGlmdFkgKyBvZmZzZXRbMV0gKiB0ZXh0Qm94U2NhbGVcbiAgICApO1xufVxuXG5mdW5jdGlvbiBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwOiBib29sZWFuLCBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHt4MSwgeDIsIHkxLCB5MiwgYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFl9ID0gY29sbGlzaW9uQm94O1xuICAgIGNvbnN0IHJvdGF0ZWRPZmZzZXQgPSBuZXcgUG9pbnQoc2hpZnRYLCBzaGlmdFkpO1xuICAgIGlmIChyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgIHJvdGF0ZWRPZmZzZXQuX3JvdGF0ZShwaXRjaFdpdGhNYXAgPyBhbmdsZSA6IC1hbmdsZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHgxOiB4MSArIHJvdGF0ZWRPZmZzZXQueCxcbiAgICAgICAgeTE6IHkxICsgcm90YXRlZE9mZnNldC55LFxuICAgICAgICB4MjogeDIgKyByb3RhdGVkT2Zmc2V0LngsXG4gICAgICAgIHkyOiB5MiArIHJvdGF0ZWRPZmZzZXQueSxcbiAgICAgICAgLy8gc3ltYm9sIGFuY2hvciBwb2ludCBzdGF5cyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRleHQtYW5jaG9yXG4gICAgICAgIGFuY2hvclBvaW50WCxcbiAgICAgICAgYW5jaG9yUG9pbnRZXG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVmFyaWFibGVPZmZzZXQgPSB7XG4gICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGFuY2hvcjogVGV4dEFuY2hvcixcbiAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcixcbiAgICBwcmV2QW5jaG9yPzogVGV4dEFuY2hvclxufTtcblxudHlwZSBUaWxlTGF5ZXJQYXJhbWV0ZXJzID0ge1xuICAgIGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgIGxheW91dDogYW55LFxuICAgIHBvc01hdHJpeDogbWF0NCxcbiAgICB0ZXh0TGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICBzY2FsZTogbnVtYmVyLFxuICAgIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgaG9sZGluZ0ZvckZhZGU6IGJvb2xlYW4sXG4gICAgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheSxcbiAgICBwYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZTogYW55LFxuICAgIGNvbGxpc2lvbkdyb3VwOiBhbnlcbn07XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldFBhcnQgPSB7XG4gICAgc29ydEtleT86IG51bWJlciB8IHZvaWQsXG4gICAgc3ltYm9sSW5zdGFuY2VTdGFydDogbnVtYmVyLFxuICAgIHN5bWJvbEluc3RhbmNlRW5kOiBudW1iZXIsXG4gICAgcGFyYW1ldGVyczogVGlsZUxheWVyUGFyYW1ldGVyc1xufTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NUaWxlSUQgPSBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCBjbGFzcyBQbGFjZW1lbnQge1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIGNvbGxpc2lvbkluZGV4OiBDb2xsaXNpb25JbmRleDtcbiAgICBwbGFjZW1lbnRzOiB7IFtfOiBDcm9zc1RpbGVJRF06IEpvaW50UGxhY2VtZW50IH07XG4gICAgb3BhY2l0aWVzOiB7IFtfOiBDcm9zc1RpbGVJRF06IEpvaW50T3BhY2l0eVN0YXRlIH07XG4gICAgdmFyaWFibGVPZmZzZXRzOiB7W186IENyb3NzVGlsZUlEXTogVmFyaWFibGVPZmZzZXQgfTtcbiAgICBwbGFjZWRPcmllbnRhdGlvbnM6IHtbXzogQ3Jvc3NUaWxlSURdOiBudW1iZXIgfTtcbiAgICBjb21taXRUaW1lOiBudW1iZXI7XG4gICAgcHJldlpvb21BZGp1c3RtZW50OiBudW1iZXI7XG4gICAgbGFzdFBsYWNlbWVudENoYW5nZVRpbWU6IG51bWJlcjtcbiAgICBzdGFsZTogYm9vbGVhbjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICByZXRhaW5lZFF1ZXJ5RGF0YToge1tfOiBudW1iZXJdOiBSZXRhaW5lZFF1ZXJ5RGF0YX07XG4gICAgY29sbGlzaW9uR3JvdXBzOiBDb2xsaXNpb25Hcm91cHM7XG4gICAgcHJldlBsYWNlbWVudDogP1BsYWNlbWVudDtcbiAgICB6b29tQXRMYXN0UmVjZW5jeUNoZWNrOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgZmFkZUR1cmF0aW9uOiBudW1iZXIsIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbiwgcHJldlBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybS5jbG9uZSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4ID0gbmV3IENvbGxpc2lvbkluZGV4KHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5wbGFjZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMub3BhY2l0aWVzID0ge307XG4gICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuc3RhbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21taXRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSBmYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSBuZXcgQ29sbGlzaW9uR3JvdXBzKGNyb3NzU291cmNlQ29sbGlzaW9ucyk7XG5cbiAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50ID0gcHJldlBsYWNlbWVudDtcbiAgICAgICAgaWYgKHByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHByZXZQbGFjZW1lbnQucHJldlBsYWNlbWVudCA9IHVuZGVmaW5lZDsgLy8gT25seSBob2xkIG9uIHRvIG9uZSBwbGFjZW1lbnQgYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRCdWNrZXRQYXJ0cyhyZXN1bHRzOiBBcnJheTxCdWNrZXRQYXJ0Piwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZTogVGlsZSwgc29ydEFjcm9zc1RpbGVzOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbEJ1Y2tldCA9ICgodGlsZS5nZXRCdWNrZXQoc3R5bGVMYXllcik6IGFueSk6IFN5bWJvbEJ1Y2tldCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVJbmRleCA9IHRpbGUubGF0ZXN0RmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldCB8fCAhYnVja2V0RmVhdHVyZUluZGV4IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25Cb3hBcnJheSA9IHRpbGUuY29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gc3ltYm9sQnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0aGlzLnRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB0ZXh0UGl4ZWxSYXRpbyA9IHRpbGUudGlsZVNpemUgLyBFWFRFTlQ7XG5cbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gdGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGUudGlsZUlELnRvVW53cmFwcGVkKCkpO1xuXG4gICAgICAgIGNvbnN0IHRleHRMYWJlbFBsYW5lTWF0cml4ID0gcHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0aGlzLnRyYW5zZm9ybS56b29tKSk7XG5cbiAgICAgICAgLy8gQXMgbG9uZyBhcyB0aGlzIHBsYWNlbWVudCBsaXZlcywgd2UgaGF2ZSB0byBob2xkIG9udG8gdGhpcyBidWNrZXQnc1xuICAgICAgICAvLyBtYXRjaGluZyBGZWF0dXJlSW5kZXgvZGF0YSBmb3IgcXVlcnlpbmcgcHVycG9zZXNcbiAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZF0gPSBuZXcgUmV0YWluZWRRdWVyeURhdGEoXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuYnVja2V0SW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LmluZGV4LFxuICAgICAgICAgICAgdGlsZS50aWxlSURcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgYnVja2V0OiBzeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICBsYXlvdXQsXG4gICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICB0ZXh0TGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdGV4dFBpeGVsUmF0aW8sXG4gICAgICAgICAgICBob2xkaW5nRm9yRmFkZTogdGlsZS5ob2xkaW5nRm9yRmFkZSgpLFxuICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICBwYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZTogc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHN5bWJvbEJ1Y2tldC50ZXh0U2l6ZURhdGEsIHRoaXMudHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAgICAgY29sbGlzaW9uR3JvdXA6IHRoaXMuY29sbGlzaW9uR3JvdXBzLmdldChzeW1ib2xCdWNrZXQuc291cmNlSUQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvcnRBY3Jvc3NUaWxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCByYW5nZSBvZiBzeW1ib2xCdWNrZXQuc29ydEtleVJhbmdlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzb3J0S2V5LCBzeW1ib2xJbnN0YW5jZVN0YXJ0LCBzeW1ib2xJbnN0YW5jZUVuZH0gPSByYW5nZTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe3NvcnRLZXksIHN5bWJvbEluc3RhbmNlU3RhcnQsIHN5bWJvbEluc3RhbmNlRW5kLCBwYXJhbWV0ZXJzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IDAsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VFbmQ6IHN5bWJvbEJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXR0ZW1wdEFuY2hvclBsYWNlbWVudChhbmNob3I6IFRleHRBbmNob3IsIHRleHRCb3g6IFNpbmdsZUNvbGxpc2lvbkJveCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGU6IG51bWJlciwgcm90YXRlV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgdGV4dFBpeGVsUmF0aW86IG51bWJlciwgcG9zTWF0cml4OiBtYXQ0LCBjb2xsaXNpb25Hcm91cDogQ29sbGlzaW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwOiBib29sZWFuLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBvcmllbnRhdGlvbjogbnVtYmVyLCBpY29uQm94OiA/U2luZ2xlQ29sbGlzaW9uQm94KTogP3sgc2hpZnQ6IFBvaW50LCBwbGFjZWRHbHlwaEJveGVzOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0gfSAge1xuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBbc3ltYm9sSW5zdGFuY2UudGV4dE9mZnNldDAsIHN5bWJvbEluc3RhbmNlLnRleHRPZmZzZXQxXTtcbiAgICAgICAgY29uc3Qgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlKTtcblxuICAgICAgICBjb25zdCBwbGFjZWRHbHlwaEJveGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICAgICAgdGV4dEJveCwgc2hpZnQueCwgc2hpZnQueSxcbiAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxcbiAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG5cbiAgICAgICAgaWYgKGljb25Cb3gpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlZEljb25Cb3hlcyA9IHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goXG4gICAgICAgICAgICAgICAgc2hpZnRWYXJpYWJsZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICAgICAgaWNvbkJveCwgc2hpZnQueCwgc2hpZnQueSxcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSksXG4gICAgICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCwgdGV4dFBpeGVsUmF0aW8sIHBvc01hdHJpeCwgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcbiAgICAgICAgICAgIGlmIChwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlZEdseXBoQm94ZXMuYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBwcmV2QW5jaG9yO1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBsYWJlbCB3YXMgcGxhY2VkIGluIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQsIHJlY29yZCB0aGUgYW5jaG9yIHBvc2l0aW9uXG4gICAgICAgICAgICAvLyB0byBhbGxvdyB1cyB0byBhbmltYXRlIHRoZSB0cmFuc2l0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2UGxhY2VtZW50ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0udGV4dCkge1xuICAgICAgICAgICAgICAgIHByZXZBbmNob3IgPSB0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXS5hbmNob3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0ge1xuICAgICAgICAgICAgICAgIHRleHRPZmZzZXQsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgcHJldkFuY2hvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgYW5jaG9yLCBzeW1ib2xJbnN0YW5jZSwgb3JpZW50YXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBvcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge3NoaWZ0LCBwbGFjZWRHbHlwaEJveGVzfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBsYWNlTGF5ZXJCdWNrZXRQYXJ0KGJ1Y2tldFBhcnQ6IE9iamVjdCwgc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9LCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBidWNrZXQsXG4gICAgICAgICAgICBsYXlvdXQsXG4gICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICB0ZXh0TGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdGV4dFBpeGVsUmF0aW8sXG4gICAgICAgICAgICBob2xkaW5nRm9yRmFkZSxcbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUsXG4gICAgICAgICAgICBjb2xsaXNpb25Hcm91cFxuICAgICAgICB9ID0gYnVja2V0UGFydC5wYXJhbWV0ZXJzO1xuXG4gICAgICAgIGNvbnN0IHRleHRPcHRpb25hbCA9IGxheW91dC5nZXQoJ3RleHQtb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgaWNvbk9wdGlvbmFsID0gbGF5b3V0LmdldCgnaWNvbi1vcHRpb25hbCcpO1xuICAgICAgICBjb25zdCB0ZXh0QWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IGljb25BbGxvd092ZXJsYXAgPSBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKTtcbiAgICAgICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgY29uc3Qgek9yZGVyQnlWaWV3cG9ydFkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtei1vcmRlcicpID09PSAndmlld3BvcnQteSc7XG5cbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBzaW1pbGFyIHRvIHRoZSBcImRlZmF1bHRPcGFjaXR5U3RhdGVcIiBsb2dpYyBiZWxvdyBpbiB1cGRhdGVCdWNrZXRPcGFjaXRpZXNcbiAgICAgICAgLy8gSWYgd2Uga25vdyBhIHN5bWJvbCBpcyBhbHdheXMgc3VwcG9zZWQgdG8gc2hvdywgZm9yY2UgaXQgdG8gYmUgbWFya2VkIHZpc2libGUgZXZlbiBpZlxuICAgICAgICAvLyBpdCB3YXNuJ3QgcGxhY2VkIGludG8gdGhlIGNvbGxpc2lvbiBpbmRleCAoYmVjYXVzZSBzb21lIG9yIGFsbCBvZiBpdCB3YXMgb3V0c2lkZSB0aGUgcmFuZ2VcbiAgICAgICAgLy8gb2YgdGhlIGNvbGxpc2lvbiBncmlkKS5cbiAgICAgICAgLy8gVGhlcmUgaXMgYSBzdWJ0bGUgZWRnZSBjYXNlIGhlcmUgd2UncmUgYWNjZXB0aW5nOlxuICAgICAgICAvLyAgU3ltYm9sIEEgaGFzIHRleHQtYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1hbGxvdy1vdmVybGFwOiB0cnVlLCBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgQSdzIGljb24gaXMgb3V0c2lkZSB0aGUgZ3JpZCwgc28gZG9lc24ndCBnZXQgcGxhY2VkXG4gICAgICAgIC8vICBBJ3MgdGV4dCB3b3VsZCBiZSBpbnNpZGUgZ3JpZCwgYnV0IGRvZXNuJ3QgZ2V0IHBsYWNlZCBiZWNhdXNlIG9mIGljb24tb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgIC8vICBXZSBzdGlsbCBzaG93IEEgYmVjYXVzZSBvZiB0aGUgYWxsb3ctb3ZlcmxhcCBzZXR0aW5ncy5cbiAgICAgICAgLy8gIFN5bWJvbCBCIGhhcyBhbGxvdy1vdmVybGFwOiBmYWxzZSwgYW5kIGdldHMgcGxhY2VkIHdoZXJlIEEncyB0ZXh0IHdvdWxkIGJlXG4gICAgICAgIC8vICBPbiBwYW5uaW5nIGluLCB0aGVyZSBpcyBhIHNob3J0IHBlcmlvZCB3aGVuIFN5bWJvbCBCIGFuZCBTeW1ib2wgQSB3aWxsIG92ZXJsYXBcbiAgICAgICAgLy8gIFRoaXMgaXMgdGhlIHJldmVyc2Ugb2Ygb3VyIG5vcm1hbCBwb2xpY3kgb2YgXCJmYWRlIGluIG9uIHBhblwiLCBidXQgc2hvdWxkIGxvb2sgbGlrZSBhbnkgb3RoZXJcbiAgICAgICAgLy8gIGNvbGxpc2lvbiBhbmQgaG9wZWZ1bGx5IG5vdCBiZSB0b28gbm90aWNlYWJsZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83MTcyXG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dUZXh0ID0gdGV4dEFsbG93T3ZlcmxhcCAmJiAoaWNvbkFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc0ljb25EYXRhKCkgfHwgaWNvbk9wdGlvbmFsKTtcbiAgICAgICAgY29uc3QgYWx3YXlzU2hvd0ljb24gPSBpY29uQWxsb3dPdmVybGFwICYmICh0ZXh0QWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzVGV4dERhdGEoKSB8fCB0ZXh0T3B0aW9uYWwpO1xuXG4gICAgICAgIGlmICghYnVja2V0LmNvbGxpc2lvbkFycmF5cyAmJiBjb2xsaXNpb25Cb3hBcnJheSkge1xuICAgICAgICAgICAgYnVja2V0LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGxhY2VTeW1ib2wgPSAoc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlLCBjb2xsaXNpb25BcnJheXM6IENvbGxpc2lvbkFycmF5cykgPT4ge1xuICAgICAgICAgICAgaWYgKHNlZW5Dcm9zc1RpbGVJRHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoaG9sZGluZ0ZvckZhZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFsbCBzeW1ib2xzIGZyb20gdGhpcyB0aWxlIGFzIFwibm90IHBsYWNlZFwiLCBidXQgZG9uJ3QgYWRkIHRvIHNlZW5Dcm9zc1RpbGVJRHMsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAgICAgICAgICAgICAvLyBrbm93IHlldCBpZiB3ZSBoYXZlIGEgZHVwbGljYXRlIGluIGEgcGFyZW50IHRpbGUgdGhhdCBfc2hvdWxkXyBiZSBwbGFjZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwbGFjZVRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwbGFjZUljb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBvZmZzY3JlZW4gPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gbnVsbDtcblxuICAgICAgICAgICAgbGV0IHBsYWNlZCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG4gICAgICAgICAgICBsZXQgcGxhY2VkVmVydGljYWxUZXh0ID0ge2JveDogbnVsbCwgb2Zmc2NyZWVuOiBudWxsfTtcblxuICAgICAgICAgICAgbGV0IHBsYWNlZEdseXBoQm94ZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEdseXBoQ2lyY2xlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcGxhY2VkSWNvbkJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB0ZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IGljb25GZWF0dXJlSW5kZXggPSAwO1xuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0ZXh0RmVhdHVyZUluZGV4ID0gY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudGV4dEJveDtcbiAgICAgICAgICAgIGlmICh0ZXh0Qm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQgPSAoaXNQbGFjZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzT3JpZW50YXRpb24gPSBXcml0aW5nTW9kZS5ob3Jpem9udGFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIWlzUGxhY2VkICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlBsYWNlZE9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzT3JpZW50YXRpb24gPSBwcmV2UGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgcHJldmlvdXNPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c09yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyA9IChwbGFjZUhvcml6b250YWxGbiwgcGxhY2VWZXJ0aWNhbEZuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGxhY2VtZW50TW9kZSBvZiBidWNrZXQud3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudE1vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlVmVydGljYWxGbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRWZXJ0aWNhbFRleHQgPSBwbGFjZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gcGxhY2VIb3Jpem9udGFsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlQm94ID0gKGNvbGxpc2lvblRleHRCb3gsIG9yaWVudGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRGZWF0dXJlID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25UZXh0Qm94LCB0ZXh0QWxsb3dPdmVybGFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VkRmVhdHVyZSAmJiBwbGFjZWRGZWF0dXJlLmJveCAmJiBwbGFjZWRGZWF0dXJlLmJveC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBvcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VIb3Jpem9udGFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHRleHRCb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHN5bWJvbEluc3RhbmNlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA+IDAgJiYgdmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHZlcnRpY2FsVGV4dEJveCwgV3JpdGluZ01vZGUudmVydGljYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0Rm9yUGxhY2VtZW50TW9kZXMocGxhY2VIb3Jpem9udGFsLCBwbGFjZVZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JzID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN5bWJvbCB3YXMgaW4gdGhlIGxhc3QgcGxhY2VtZW50LCBzaGlmdCB0aGUgcHJldmlvdXNseSB1c2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuY2hvciB0byB0aGUgZnJvbnQgb2YgdGhlIGFuY2hvciBsaXN0LCBvbmx5IGlmIHRoZSBwcmV2aW91cyBhbmNob3JcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgc3RpbGwgaW4gdGhlIGFuY2hvciBsaXN0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZQbGFjZW1lbnQgJiYgdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXRzID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9ycy5pbmRleE9mKHByZXZPZmZzZXRzLmFuY2hvcikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycyA9IGFuY2hvcnMuZmlsdGVyKGFuY2hvciA9PiBhbmNob3IgIT09IHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy51bnNoaWZ0KHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyA9IChjb2xsaXNpb25UZXh0Qm94LCBjb2xsaXNpb25JY29uQm94LCBvcmllbnRhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb2xsaXNpb25UZXh0Qm94LngyIC0gY29sbGlzaW9uVGV4dEJveC54MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbGxpc2lvblRleHRCb3gueTIgLSBjb2xsaXNpb25UZXh0Qm94LnkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEJveFNjYWxlID0gc3ltYm9sSW5zdGFuY2UudGV4dEJveFNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZUljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiAhaWNvbkFsbG93T3ZlcmxhcCA/IGNvbGxpc2lvbkljb25Cb3ggOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGxhY2VkQm94OiA/eyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9ICA9IHtib3g6IFtdLCBvZmZzY3JlZW46IGZhbHNlfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudEF0dGVtcHRzID0gdGV4dEFsbG93T3ZlcmxhcCA/IGFuY2hvcnMubGVuZ3RoICogMiA6IGFuY2hvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZW1lbnRBdHRlbXB0czsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yc1tpICUgYW5jaG9ycy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93T3ZlcmxhcCA9IChpID49IGFuY2hvcnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvciwgY29sbGlzaW9uVGV4dEJveCwgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlLCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwLCBhbGxvd092ZXJsYXAsIHN5bWJvbEluc3RhbmNlLCBidWNrZXQsIG9yaWVudGF0aW9uLCB2YXJpYWJsZUljb25Cb3gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRCb3ggPSByZXN1bHQucGxhY2VkR2x5cGhCb3hlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEJveCAmJiBwbGFjZWRCb3guYm94ICYmIHBsYWNlZEJveC5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSByZXN1bHQuc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEJveDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUhvcml6b250YWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModGV4dEJveCwgY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzUGxhY2VkID0gcGxhY2VkICYmIHBsYWNlZC5ib3ggJiYgcGxhY2VkLmJveC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXdhc1BsYWNlZCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyh2ZXJ0aWNhbFRleHRCb3gsIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VkLmJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZC5vZmZzY3JlZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQocGxhY2VkICYmIHBsYWNlZC5ib3gpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBnZXQgcGxhY2VkLCB3ZSBzdGlsbCBuZWVkIHRvIGNvcHkgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGxhc3QgcGxhY2VtZW50IGZvclxuICAgICAgICAgICAgICAgICAgICAvLyBmYWRlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFjZVRleHQgJiYgdGhpcy5wcmV2UGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0ID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHByZXZPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGxhY2VkR2x5cGhCb3hlcyA9IHBsYWNlZDtcbiAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3ggJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgb2Zmc2NyZWVuID0gcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDaXJjbGVzID0gY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO1xuICAgICAgICAgICAgaWYgKHRleHRDaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VkU3ltYm9sID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYnVja2V0LnRleHRTaXplRGF0YSwgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUsIHBsYWNlZFN5bWJvbCk7XG4gICAgICAgICAgICAgICAgcGxhY2VkR2x5cGhDaXJjbGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXModGV4dENpcmNsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZFN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5saW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRleHQtYWxsb3ctb3ZlcmxhcCBpcyBzZXQsIGZvcmNlIFwicGxhY2VkQ2lyY2xlc1wiIHRvIHRydWVcbiAgICAgICAgICAgICAgICAvLyBJbiB0aGVvcnkgdGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgY2lyY2xlIHBsYWNlZFxuICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSwgYnV0IGZvciBub3cgcXVpcmtzIGluIHRleHQtYW5jaG9yXG4gICAgICAgICAgICAgICAgLy8gYW5kIHRleHQtb2Zmc2V0IG1heSBwcmV2ZW50IHRoYXQgZnJvbSBiZWluZyB0cnVlLlxuICAgICAgICAgICAgICAgIHBsYWNlVGV4dCA9IHRleHRBbGxvd092ZXJsYXAgfHwgcGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBvZmZzY3JlZW4gJiYgcGxhY2VkR2x5cGhDaXJjbGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWNvbkZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSWNvbkZlYXR1cmUgPSBpY29uQm94ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiBzaGlmdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkJveDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goc2hpZnRlZEljb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWxUZXh0ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3ggJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveC5sZW5ndGggJiYgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCkge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZWRJY29uQm94ZXMgPSBwbGFjZUljb25GZWF0dXJlKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gpO1xuICAgICAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gcGxhY2VJY29uRmVhdHVyZShjb2xsaXNpb25BcnJheXMuaWNvbkJveCk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlZEljb25Cb3hlcy5ib3gubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuID0gb2Zmc2NyZWVuICYmIHBsYWNlZEljb25Cb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGljb25XaXRob3V0VGV4dCA9IHRleHRPcHRpb25hbCB8fFxuICAgICAgICAgICAgICAgIChzeW1ib2xJbnN0YW5jZS5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA9PT0gMCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpdGhvdXRJY29uID0gaWNvbk9wdGlvbmFsIHx8IHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcyA9PT0gMDtcblxuICAgICAgICAgICAgLy8gQ29tYmluZSB0aGUgc2NhbGVzIGZvciBpY29ucyBhbmQgdGV4dC5cbiAgICAgICAgICAgIGlmICghaWNvbldpdGhvdXRUZXh0ICYmICF0ZXh0V2l0aG91dEljb24pIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZVRleHQgPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWljb25XaXRob3V0VGV4dCkge1xuICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwbGFjZVRleHQgJiYgcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLmJveCkge1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZWRWZXJ0aWNhbFRleHQgJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveCAmJiB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocGxhY2VkR2x5cGhCb3hlcy5ib3gsIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEdseXBoQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB0ZXh0RmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGxhY2VJY29uICYmIHBsYWNlZEljb25Cb3hlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEljb25Cb3hlcy5ib3gsIGxheW91dC5nZXQoJ2ljb24taWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIGljb25GZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGFjZVRleHQgJiYgcGxhY2VkR2x5cGhDaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25DaXJjbGVzKHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzLCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB0ZXh0RmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzc2VydChzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCAhPT0gMCk7XG4gICAgICAgICAgICBhc3NlcnQoYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQgIT09IDApO1xuXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gbmV3IEpvaW50UGxhY2VtZW50KHBsYWNlVGV4dCB8fCBhbHdheXNTaG93VGV4dCwgcGxhY2VJY29uIHx8IGFsd2F5c1Nob3dJY29uLCBvZmZzY3JlZW4gfHwgYnVja2V0Lmp1c3RSZWxvYWRlZCk7XG4gICAgICAgICAgICBzZWVuQ3Jvc3NUaWxlSURzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHpPcmRlckJ5Vmlld3BvcnRZKSB7XG4gICAgICAgICAgICBhc3NlcnQoYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZVN0YXJ0ID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluZGV4ZXMgPSBidWNrZXQuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3ltYm9sSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluZGV4ID0gc3ltYm9sSW5kZXhlc1tpXTtcbiAgICAgICAgICAgICAgICBwbGFjZVN5bWJvbChidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChzeW1ib2xJbmRleCksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbc3ltYm9sSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBidWNrZXRQYXJ0LnN5bWJvbEluc3RhbmNlU3RhcnQ7IGkgPCBidWNrZXRQYXJ0LnN5bWJvbEluc3RhbmNlRW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwbGFjZVN5bWJvbChidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChpKSwgYnVja2V0LmNvbGxpc2lvbkFycmF5c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWNrZXQuanVzdFJlbG9hZGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBwbGFjZWRBbmNob3I6IFRleHRBbmNob3IsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgb3JpZW50YXRpb246IG51bWJlcikge1xuICAgICAgICBjb25zdCBqdXN0aWZpY2F0aW9ucyA9IHtcbiAgICAgICAgICAgIFwibGVmdFwiOiBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgXCJjZW50ZXJcIjogc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgXCJyaWdodFwiOiBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBhdXRvSW5kZXg7XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpIHtcbiAgICAgICAgICAgIGF1dG9JbmRleCA9IHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXV0b0luZGV4ID0ganVzdGlmaWNhdGlvbnNbZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihwbGFjZWRBbmNob3IpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBbXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleFxuICAgICAgICBdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luZGV4ID49IDAgJiYgaW5kZXggIT09IGF1dG9JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbXVsdGlwbGUganVzdGlmaWNhdGlvbnMgYW5kIHRoaXMgb25lIGlzbid0IGl0OiBzaGlmdCBvZmZzY3JlZW5cbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGluZGV4KS5jcm9zc1RpbGVJRCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGNob3NlbiBqdXN0aWZpY2F0aW9uIG9yIHRoZSBqdXN0aWZpY2F0aW9uIGlzIGhhcmR3aXJlZDogdXNlIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuY3Jvc3NUaWxlSUQgPSBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBvcmllbnRhdGlvbjogbnVtYmVyLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IChvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fCBvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHkpID8gb3JpZW50YXRpb24gOiAwO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbCA9IG9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCA/IG9yaWVudGF0aW9uIDogMDtcblxuICAgICAgICBjb25zdCBob3Jpem9udGFsSW5kZXhlcyA9IFtcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleFxuICAgICAgICBdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaG9yaXpvbnRhbEluZGV4ZXMpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkucGxhY2VkT3JpZW50YXRpb24gPSBob3Jpem9udGFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uID0gdmVydGljYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21taXQobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21taXRUaW1lID0gbm93O1xuICAgICAgICB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPSB0aGlzLnRyYW5zZm9ybS56b29tO1xuXG4gICAgICAgIGNvbnN0IHByZXZQbGFjZW1lbnQgPSB0aGlzLnByZXZQbGFjZW1lbnQ7XG4gICAgICAgIGxldCBwbGFjZW1lbnRDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcmV2Wm9vbUFkanVzdG1lbnQgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC56b29tQWRqdXN0bWVudCh0aGlzLnRyYW5zZm9ybS56b29tKSA6IDA7XG4gICAgICAgIGNvbnN0IGluY3JlbWVudCA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2Uobm93KSA6IDE7XG5cbiAgICAgICAgY29uc3QgcHJldk9wYWNpdGllcyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lm9wYWNpdGllcyA6IHt9O1xuICAgICAgICBjb25zdCBwcmV2T2Zmc2V0cyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0cyA6IHt9O1xuICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb25zID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQucGxhY2VkT3JpZW50YXRpb25zIDoge307XG5cbiAgICAgICAgLy8gYWRkIHRoZSBvcGFjaXRpZXMgZnJvbSB0aGUgY3VycmVudCBwbGFjZW1lbnQsIGFuZCBjb3B5IHRoZWlyIGN1cnJlbnQgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudFxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHRoaXMucGxhY2VtZW50cykge1xuICAgICAgICAgICAgY29uc3Qgam9pbnRQbGFjZW1lbnQgPSB0aGlzLnBsYWNlbWVudHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmIChwcmV2T3BhY2l0eSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShwcmV2T3BhY2l0eSwgaW5jcmVtZW50LCBqb2ludFBsYWNlbWVudC50ZXh0LCBqb2ludFBsYWNlbWVudC5pY29uKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fFxuICAgICAgICAgICAgICAgICAgICBqb2ludFBsYWNlbWVudC50ZXh0ICE9PSBwcmV2T3BhY2l0eS50ZXh0LnBsYWNlZCB8fFxuICAgICAgICAgICAgICAgICAgICBqb2ludFBsYWNlbWVudC5pY29uICE9PSBwcmV2T3BhY2l0eS5pY29uLnBsYWNlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKG51bGwsIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbiwgam9pbnRQbGFjZW1lbnQuc2tpcEZhZGUpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IGpvaW50UGxhY2VtZW50LnRleHQgfHwgam9pbnRQbGFjZW1lbnQuaWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvcHkgYW5kIHVwZGF0ZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgcGxhY2VtZW50IHRoYXQgYXJlbid0IGluIHRoZSBjdXJyZW50IHBsYWNlbWVudCBidXQgaGF2ZW4ndCBmaW5pc2hlZCBmYWRpbmdcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3BhY2l0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2T3BhY2l0eSA9IHByZXZPcGFjaXRpZXNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2ludE9wYWNpdHkgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWpvaW50T3BhY2l0eS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IGpvaW50T3BhY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHwgcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHwgcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9mZnNldHMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdICYmIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSAmJiAhdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tjcm9zc1RpbGVJRF0gPSBwcmV2T2Zmc2V0c1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPcmllbnRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdICYmIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSAmJiAhdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF0gPSBwcmV2T3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgaXMgdGhlIHRpbWUgb2YgdGhlIGxhc3QgY29tbWl0KCkgdGhhdFxuICAgICAgICAvLyByZXN1bHRlZCBpbiBhIHBsYWNlbWVudCBjaGFuZ2UgLS0gaW4gb3RoZXIgd29yZHMsIHRoZSBzdGFydCB0aW1lIG9mXG4gICAgICAgIC8vIHRoZSBsYXN0IHN5bWJvbCBmYWRlIGFuaW1hdGlvblxuICAgICAgICBhc3NlcnQoIXByZXZQbGFjZW1lbnQgfHwgcHJldlBsYWNlbWVudC5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHBsYWNlbWVudENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgPSBub3c7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgOiBub3c7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVMYXllck9wYWNpdGllcyhzdHlsZUxheWVyOiBTdHlsZUxheWVyLCB0aWxlczogQXJyYXk8VGlsZT4pIHtcbiAgICAgICAgY29uc3Qgc2VlbkNyb3NzVGlsZUlEcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGUgb2YgdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEJ1Y2tldCA9ICgodGlsZS5nZXRCdWNrZXQoc3R5bGVMYXllcik6IGFueSk6IFN5bWJvbEJ1Y2tldCk7XG4gICAgICAgICAgICBpZiAoc3ltYm9sQnVja2V0ICYmIHRpbGUubGF0ZXN0RmVhdHVyZUluZGV4ICYmIHN0eWxlTGF5ZXIuaWQgPT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKHN5bWJvbEJ1Y2tldCwgc2VlbkNyb3NzVGlsZUlEcywgdGlsZS5jb2xsaXNpb25Cb3hBcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVCdWNrZXRPcGFjaXRpZXMoYnVja2V0OiBTeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSwgY29sbGlzaW9uQm94QXJyYXk6ID9Db2xsaXNpb25Cb3hBcnJheSkge1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHREYXRhKCkpIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25EYXRhKCkpIGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIGlmIChidWNrZXQuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSkgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25DaXJjbGVEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZU9wYWNpdHlTdGF0ZSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCAwLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICBjb25zdCB0ZXh0QWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IGljb25BbGxvd092ZXJsYXAgPSBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuICAgICAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBoYXNJY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnO1xuICAgICAgICAvLyBJZiBhbGxvdy1vdmVybGFwIGlzIHRydWUsIHdlIGNhbiBzaG93IHN5bWJvbHMgYmVmb3JlIHBsYWNlbWVudCBydW5zIG9uIHRoZW1cbiAgICAgICAgLy8gQnV0IHdlIGhhdmUgdG8gd2FpdCBmb3IgcGxhY2VtZW50IGlmIHdlIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBhIHBhaXJlZCBpY29uL3RleHRcbiAgICAgICAgLy8gd2l0aCBhbGxvdy1vdmVybGFwOiBmYWxzZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83MDMyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwICYmIChpY29uQWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzSWNvbkRhdGEoKSB8fCBsYXlvdXQuZ2V0KCdpY29uLW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIGljb25BbGxvd092ZXJsYXAgJiYgKHRleHRBbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNUZXh0RGF0YSgpIHx8IGxheW91dC5nZXQoJ3RleHQtb3B0aW9uYWwnKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKCFidWNrZXQuY29sbGlzaW9uQXJyYXlzICYmIGNvbGxpc2lvbkJveEFycmF5ICYmICgoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc0ljb25Db2xsaXNpb25DaXJjbGVEYXRhKCkgfHxcbiAgICAgICAgICAgIGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGNvbGxpc2lvbkJveEFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZE9wYWNpdGllcyA9IChpY29uT3JUZXh0LCBudW1WZXJ0aWNlczogbnVtYmVyLCBvcGFjaXR5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmVydGljZXMgLyA0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBpY29uT3JUZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhvcGFjaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQocyk7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsXG4gICAgICAgICAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICAgICAgICAgIGNyb3NzVGlsZUlEXG4gICAgICAgICAgICB9ID0gc3ltYm9sSW5zdGFuY2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gc2VlbkNyb3NzVGlsZUlEc1tjcm9zc1RpbGVJRF07XG5cbiAgICAgICAgICAgIGxldCBvcGFjaXR5U3RhdGUgPSB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5U3RhdGUgPSBkdXBsaWNhdGVPcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFvcGFjaXR5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5U3RhdGUgPSBkZWZhdWx0T3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB0aGF0IGZ1dHVyZSBwbGFjZW1lbnRzIHVzZSBpdCBhcyBhIHN0YXJ0aW5nIHBvaW50XG4gICAgICAgICAgICAgICAgdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdID0gb3BhY2l0eVN0YXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuQ3Jvc3NUaWxlSURzW2Nyb3NzVGlsZUlEXSA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1RleHQgPSBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA+IDAgfHwgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID4gMDtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ljb24gPSBzeW1ib2xJbnN0YW5jZS5udW1JY29uVmVydGljZXMgPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBwbGFjZWRPcmllbnRhdGlvbiA9IHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxIaWRkZW4gPSBwbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWw7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEhpZGRlbiA9IHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsIHx8IHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS5ob3Jpem9udGFsT25seTtcblxuICAgICAgICAgICAgaWYgKGhhc1RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrZWRPcGFjaXR5ID0gcGFja09wYWNpdHkob3BhY2l0eVN0YXRlLnRleHQpO1xuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIHRleHQgZmFkZXMgaW4vb3V0IG9uIGNvbGxpc2lvbiB0aGUgc2FtZSB3YXkgYXMgY29ycmVzcG9uZGluZ1xuICAgICAgICAgICAgICAgIC8vIGhvcml6b250YWwgdGV4dC4gU3dpdGNoIGJldHdlZW4gdmVydGljYWwvaG9yaXpvbnRhbCBzaG91bGQgYmUgaW5zdGFudGFuZW91c1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPcGFjaXR5ID0gaG9yaXpvbnRhbEhpZGRlbiA/IFBBQ0tFRF9ISURERU5fT1BBQ0lUWSA6IHBhY2tlZE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgYWRkT3BhY2l0aWVzKGJ1Y2tldC50ZXh0LCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcywgaG9yaXpvbnRhbE9wYWNpdHkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsT3BhY2l0eSA9IHZlcnRpY2FsSGlkZGVuID8gUEFDS0VEX0hJRERFTl9PUEFDSVRZIDogcGFja2VkT3BhY2l0eTtcbiAgICAgICAgICAgICAgICBhZGRPcGFjaXRpZXMoYnVja2V0LnRleHQsIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcywgdmVydGljYWxPcGFjaXR5KTtcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgbGFiZWwgaXMgY29tcGxldGVseSBmYWRlZCwgbWFyayBpdCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY2FsY3VsYXRlXG4gICAgICAgICAgICAgICAgLy8gaXRzIHBvc2l0aW9uIGF0IHJlbmRlciB0aW1lLiBJZiB0aGlzIGxheWVyIGhhcyB2YXJpYWJsZSBwbGFjZW1lbnQsIHNoaWZ0IHRoZSB2YXJpb3VzXG4gICAgICAgICAgICAgICAgLy8gc3ltYm9sIGluc3RhbmNlcyBhcHByb3ByaWF0ZWx5IHNvIHRoYXQgc3ltYm9scyBmcm9tIGJ1Y2tldHMgdGhhdCBoYXZlIHlldCB0byBiZSBwbGFjZWRcbiAgICAgICAgICAgICAgICAvLyBvZmZzZXQgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xIaWRkZW4gPSBvcGFjaXR5U3RhdGUudGV4dC5pc0hpZGRlbigpO1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmhpZGRlbiA9IHN5bWJvbEhpZGRlbiB8fCBob3Jpem9udGFsSGlkZGVuID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkuaGlkZGVuID0gc3ltYm9sSGlkZGVuIHx8IHZlcnRpY2FsSGlkZGVuID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk9mZnNldCA9IHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgICAgICBpZiAocHJldk9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQsIHByZXZPZmZzZXQuYW5jaG9yLCBzeW1ib2xJbnN0YW5jZSwgcGxhY2VkT3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPcmllbnRhdGlvbiA9IHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgICAgICBpZiAocHJldk9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgJ2xlZnQnLCBzeW1ib2xJbnN0YW5jZSwgcHJldk9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgcHJldk9yaWVudGF0aW9uLCBzeW1ib2xJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzSWNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2tlZE9wYWNpdHkgPSBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGUuaWNvbik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1c2VIb3Jpem9udGFsID0gIShoYXNJY29uVGV4dEZpdCAmJiBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCAmJiBob3Jpem9udGFsSGlkZGVuKTtcblxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsT3BhY2l0eSA9IHVzZUhvcml6b250YWwgPyBwYWNrZWRPcGFjaXR5IDogUEFDS0VEX0hJRERFTl9PUEFDSVRZO1xuICAgICAgICAgICAgICAgICAgICBhZGRPcGFjaXRpZXMoYnVja2V0Lmljb24sIHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcywgaG9yaXpvbnRhbE9wYWNpdHkpO1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQoc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKG9wYWNpdHlTdGF0ZS5pY29uLmlzSGlkZGVuKCk6IGFueSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxPcGFjaXR5ID0gIXVzZUhvcml6b250YWwgPyBwYWNrZWRPcGFjaXR5IDogUEFDS0VEX0hJRERFTl9PUEFDSVRZO1xuICAgICAgICAgICAgICAgICAgICBhZGRPcGFjaXRpZXMoYnVja2V0Lmljb24sIHN5bWJvbEluc3RhbmNlLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLCB2ZXJ0aWNhbE9wYWNpdHkpO1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpLmhpZGRlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eVN0YXRlLmljb24uaXNIaWRkZW4oKTogYW55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSB8fCBidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkNpcmNsZURhdGEoKSB8fFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQ2lyY2xlRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0gYnVja2V0LmNvbGxpc2lvbkFycmF5c1tzXTtcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGlmdCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94IHx8IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgc2hvdyBlaXRoZXIgdGhlIGN1cnJlbnRseSBwbGFjZWQgcG9zaXRpb24gb3IgdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IHBsYWNlZCBwb3NpdGlvbiAoc28geW91IGNhbiB2aXN1YWxpemUgd2hhdCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtYWRlIHRoZSBzeW1ib2wgZGlzYXBwZWFyLCBhbmQgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ltYm9sIHRvIGNvbWUgYmFjaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KHZhcmlhYmxlT2Zmc2V0LmFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dEJveFNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ll9yb3RhdGUocGl0Y2hXaXRoTWFwID8gdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAtdGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gb2Zmc2V0IC0+IHRoaXMgc3ltYm9sIGhhc24ndCBiZWVuIHBsYWNlZCBzaW5jZSBjb21pbmcgb24tc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHNpbmdsZSBib3ggaXMgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwgYW5kIGFsbCBvZiB0aGVtIHdvdWxkIGJlIHRvbyBub2lzeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGNlbnRlciBib3gganVzdCB0byBzaG93IHNvbWV0aGluZydzIHRoZXJlLCBidXQgbWFyayBpdCBcIm5vdCB1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS50ZXh0LnBsYWNlZCwgIXVzZWQgfHwgaG9yaXpvbnRhbEhpZGRlbiwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsICF1c2VkIHx8IHZlcnRpY2FsSGlkZGVuLCBzaGlmdC54LCBzaGlmdC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSWNvblVzZWQgPSBCb29sZWFuKCF2ZXJ0aWNhbEhpZGRlbiAmJiBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUuaWNvbi5wbGFjZWQsIHZlcnRpY2FsSWNvblVzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC54IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLmljb24ucGxhY2VkLCAhdmVydGljYWxJY29uVXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnggOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueSA6IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dENpcmNsZXMgPSBjb2xsaXNpb25BcnJheXMudGV4dENpcmNsZXM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q2lyY2xlcyAmJiBidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZXh0Q2lyY2xlcy5sZW5ndGg7IGsgKz0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdFVzZWQgPSBpc0R1cGxpY2F0ZSB8fCB0ZXh0Q2lyY2xlc1trICsgNF0gPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0LnRleHRDb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS50ZXh0LnBsYWNlZCwgbm90VXNlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWNrZXQuc29ydEZlYXR1cmVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKTtcbiAgICAgICAgaWYgKHRoaXMucmV0YWluZWRRdWVyeURhdGFbYnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICB0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyID0gYnVja2V0LmZlYXR1cmVTb3J0T3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHREYXRhKCkgJiYgYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpICYmIGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSAmJiBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkgJiYgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQ2lyY2xlRGF0YSgpICYmIGJ1Y2tldC5pY29uQ29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzVGV4dENvbGxpc2lvbkNpcmNsZURhdGEoKSAmJiBidWNrZXQudGV4dENvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydChidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RoID09PSBidWNrZXQudGV4dC5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggLyA0KTtcbiAgICAgICAgYXNzZXJ0KGJ1Y2tldC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IGJ1Y2tldC5pY29uLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCAvIDQpO1xuICAgIH1cblxuICAgIHN5bWJvbEZhZGVDaGFuZ2Uobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUR1cmF0aW9uID09PSAwID9cbiAgICAgICAgICAgIDEgOlxuICAgICAgICAgICAgKChub3cgLSB0aGlzLmNvbW1pdFRpbWUpIC8gdGhpcy5mYWRlRHVyYXRpb24gKyB0aGlzLnByZXZab29tQWRqdXN0bWVudCk7XG4gICAgfVxuXG4gICAgem9vbUFkanVzdG1lbnQoem9vbTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFdoZW4gem9vbWluZyBvdXQgcXVpY2tseSwgbGFiZWxzIGNhbiBvdmVybGFwIGVhY2ggb3RoZXIuIFRoaXNcbiAgICAgICAgLy8gYWRqdXN0bWVudCBpcyB1c2VkIHRvIHJlZHVjZSB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBwbGFjZW1lbnQgY2FsY3VsYXRpb25zXG4gICAgICAgIC8vIGFuZCB0byByZWR1Y2UgdGhlIGZhZGUgZHVyYXRpb24gd2hlbiB6b29taW5nIG91dCBxdWlja2x5LiBEaXNjb3ZlcmluZyB0aGVcbiAgICAgICAgLy8gY29sbGlzaW9ucyBtb3JlIHF1aWNrbHkgYW5kIGZhZGluZyB0aGVtIG1vcmUgcXVpY2tseSByZWR1Y2VzIHRoZSB1bndhbnRlZCBlZmZlY3QuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodGhpcy50cmFuc2Zvcm0uem9vbSAtIHpvb20pIC8gMS41KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9ucyhub3c6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFsZSB8fFxuICAgICAgICAgICAgbm93IC0gdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA8IHRoaXMuZmFkZUR1cmF0aW9uO1xuICAgIH1cblxuICAgIHN0aWxsUmVjZW50KG5vdzogbnVtYmVyLCB6b29tOiBudW1iZXIpIHtcbiAgICAgICAgLy8gVGhlIGFkanVzdG1lbnQgbWFrZXMgcGxhY2VtZW50IG1vcmUgZnJlcXVlbnQgd2hlbiB6b29taW5nLlxuICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbiBhcHBsaWVzIHRoZSBhZGp1c3RtZW50IG9ubHkgYWZ0ZXIgdGhlIG1hcCBoYXNcbiAgICAgICAgLy8gc3RvcHBlZCB6b29taW5nLiBUaGlzIGF2b2lkcyBhZGRpbmcgZXh0cmEgamFuayB3aGlsZSB6b29taW5nLlxuICAgICAgICBjb25zdCBkdXJhdGlvbkFkanVzdG1lbnQgPSB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPT09IHpvb20gP1xuICAgICAgICAgICAgKDEgLSB0aGlzLnpvb21BZGp1c3RtZW50KHpvb20pKSA6XG4gICAgICAgICAgICAxO1xuICAgICAgICB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPSB6b29tO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1pdFRpbWUgKyB0aGlzLmZhZGVEdXJhdGlvbiAqIGR1cmF0aW9uQWRqdXN0bWVudCA+IG5vdztcbiAgICB9XG5cbiAgICBzZXRTdGFsZSgpIHtcbiAgICAgICAgdGhpcy5zdGFsZSA9IHRydWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXksIHBsYWNlZDogYm9vbGVhbiwgbm90VXNlZDogYm9vbGVhbiB8IG51bWJlciwgc2hpZnRYPzogbnVtYmVyLCBzaGlmdFk/OiBudW1iZXIpIHtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xufVxuXG4vLyBBbGwgZm91ciB2ZXJ0aWNlcyBmb3IgYSBnbHlwaCB3aWxsIGhhdmUgdGhlIHNhbWUgb3BhY2l0eSBzdGF0ZVxuLy8gU28gd2UgcGFjayB0aGUgb3BhY2l0eSBpbnRvIGEgdWludDgsIGFuZCB0aGVuIHJlcGVhdCBpdCBmb3VyIHRpbWVzXG4vLyB0byBtYWtlIGEgc2luZ2xlIHVpbnQzMiB0aGF0IHdlIGNhbiB1cGxvYWQgZm9yIGVhY2ggZ2x5cGggaW4gdGhlXG4vLyBsYWJlbC5cbmNvbnN0IHNoaWZ0MjUgPSBNYXRoLnBvdygyLCAyNSk7XG5jb25zdCBzaGlmdDI0ID0gTWF0aC5wb3coMiwgMjQpO1xuY29uc3Qgc2hpZnQxNyA9IE1hdGgucG93KDIsIDE3KTtcbmNvbnN0IHNoaWZ0MTYgPSBNYXRoLnBvdygyLCAxNik7XG5jb25zdCBzaGlmdDkgPSBNYXRoLnBvdygyLCA5KTtcbmNvbnN0IHNoaWZ0OCA9IE1hdGgucG93KDIsIDgpO1xuY29uc3Qgc2hpZnQxID0gTWF0aC5wb3coMiwgMSk7XG5mdW5jdGlvbiBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGU6IE9wYWNpdHlTdGF0ZSk6IG51bWJlciB7XG4gICAgaWYgKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ID09PSAwICYmICFvcGFjaXR5U3RhdGUucGxhY2VkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAob3BhY2l0eVN0YXRlLm9wYWNpdHkgPT09IDEgJiYgb3BhY2l0eVN0YXRlLnBsYWNlZCkge1xuICAgICAgICByZXR1cm4gNDI5NDk2NzI5NTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0Qml0ID0gb3BhY2l0eVN0YXRlLnBsYWNlZCA/IDEgOiAwO1xuICAgIGNvbnN0IG9wYWNpdHlCaXRzID0gTWF0aC5mbG9vcihvcGFjaXR5U3RhdGUub3BhY2l0eSAqIDEyNyk7XG4gICAgcmV0dXJuIG9wYWNpdHlCaXRzICogc2hpZnQyNSArIHRhcmdldEJpdCAqIHNoaWZ0MjQgK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MTcgKyB0YXJnZXRCaXQgKiBzaGlmdDE2ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDkgKyB0YXJnZXRCaXQgKiBzaGlmdDggK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MSArIHRhcmdldEJpdDtcbn1cblxuY29uc3QgUEFDS0VEX0hJRERFTl9PUEFDSVRZID0gMDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB7UGxhY2VtZW50fSBmcm9tICcuLi9zeW1ib2wvcGxhY2VtZW50JztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFydH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmNsYXNzIExheWVyUGxhY2VtZW50IHtcbiAgICBfc29ydEFjcm9zc1RpbGVzOiBib29sZWFuO1xuICAgIF9jdXJyZW50VGlsZUluZGV4OiBudW1iZXI7XG4gICAgX2N1cnJlbnRQYXJ0SW5kZXg6IG51bWJlcjtcbiAgICBfc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9O1xuICAgIF9idWNrZXRQYXJ0czogQXJyYXk8QnVja2V0UGFydD47XG5cbiAgICBjb25zdHJ1Y3RvcihzdHlsZUxheWVyOiBTeW1ib2xTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyA9IHN0eWxlTGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSAhPT0gJ3ZpZXdwb3J0LXknICYmXG4gICAgICAgICAgICBzdHlsZUxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1zb3J0LWtleScpLmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgdGhpcy5fYnVja2V0UGFydHMgPSBbXTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudCh0aWxlczogQXJyYXk8VGlsZT4sIHBsYWNlbWVudDogUGxhY2VtZW50LCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHNob3VsZFBhdXNlUGxhY2VtZW50OiAoKSA9PiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3QgYnVja2V0UGFydHMgPSB0aGlzLl9idWNrZXRQYXJ0cztcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFRpbGVJbmRleCA8IHRpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO1xuICAgICAgICAgICAgcGxhY2VtZW50LmdldEJ1Y2tldFBhcnRzKGJ1Y2tldFBhcnRzLCBzdHlsZUxheWVyLCB0aWxlLCB0aGlzLl9zb3J0QWNyb3NzVGlsZXMpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4Kys7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUGF1c2VQbGFjZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcykge1xuICAgICAgICAgICAgdGhpcy5fc29ydEFjcm9zc1RpbGVzID0gZmFsc2U7XG4gICAgICAgICAgICBidWNrZXRQYXJ0cy5zb3J0KChhLCBiKSA9PiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGFydEluZGV4IDwgYnVja2V0UGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXRQYXJ0ID0gYnVja2V0UGFydHNbdGhpcy5fY3VycmVudFBhcnRJbmRleF07XG4gICAgICAgICAgICBwbGFjZW1lbnQucGxhY2VMYXllckJ1Y2tldFBhcnQoYnVja2V0UGFydCwgdGhpcy5fc2VlbkNyb3NzVGlsZUlEcywgc2hvd0NvbGxpc2lvbkJveGVzKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCsrO1xuICAgICAgICAgICAgaWYgKHNob3VsZFBhdXNlUGxhY2VtZW50KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBQYXVzZWFibGVQbGFjZW1lbnQge1xuICAgIHBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIF9kb25lOiBib29sZWFuO1xuICAgIF9jdXJyZW50UGxhY2VtZW50SW5kZXg6IG51bWJlcjtcbiAgICBfZm9yY2VGdWxsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgX2luUHJvZ3Jlc3NMYXllcjogP0xheWVyUGxhY2VtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIG9yZGVyOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHByZXZQbGFjZW1lbnQ/OiBQbGFjZW1lbnQpIHtcblxuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IG5ldyBQbGFjZW1lbnQodHJhbnNmb3JtLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgcHJldlBsYWNlbWVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleCA9IG9yZGVyLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA9IGZvcmNlRnVsbFBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID0gc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudChvcmRlcjogQXJyYXk8c3RyaW5nPiwgbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LCBsYXllclRpbGVzOiB7W186IHN0cmluZ106IEFycmF5PFRpbGU+fSkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFBhdXNlUGxhY2VtZW50ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBicm93c2VyLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA/IGZhbHNlIDogZWxhcHNlZFRpbWUgPiAyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IG9yZGVyW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudFpvb20gPSB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlID09PSAnc3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICghbGF5ZXIubWluem9vbSB8fCBsYXllci5taW56b29tIDw9IHBsYWNlbWVudFpvb20pICYmXG4gICAgICAgICAgICAgICAgKCFsYXllci5tYXh6b29tIHx8IGxheWVyLm1heHpvb20gPiBwbGFjZW1lbnRab29tKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pblByb2dyZXNzTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5Qcm9ncmVzc0xheWVyID0gbmV3IExheWVyUGxhY2VtZW50KCgobGF5ZXI6IGFueSk6IFN5bWJvbFN0eWxlTGF5ZXIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVBsYWNlbWVudCA9IHRoaXMuX2luUHJvZ3Jlc3NMYXllci5jb250aW51ZVBsYWNlbWVudChsYXllclRpbGVzW2xheWVyLnNvdXJjZV0sIHRoaXMucGxhY2VtZW50LCB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMsIGxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGF1c2VQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmlzaCBwbGFjaW5nIGFsbCBsYXllcnMgd2l0aGluIDJtcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGNhbiBrZWVwIHJlbmRlcmluZyB3aXRoIGEgcGFydGlhbCBwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UnbGwgcmVzdW1lIGhlcmUgb24gdGhlIG5leHQgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGxhY2VtZW50LmNvbW1pdChub3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXVzZWFibGVQbGFjZW1lbnQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHtTeW1ib2xJbnN0YW5jZUFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1N5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuXG4vKlxuICAgIFRoZSBDcm9zc1RpbGVTeW1ib2xJbmRleCBnZW5lcmFsbHkgd29ya3Mgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuICAgIGEgY29uY2VwdHVhbCBcInVuaXF1ZSBzeW1ib2xcIiBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgdGV4dCBvZlxuICAgIHRoZSBsYWJlbCBjb21iaW5lZCB3aXRoIHRoZSBhbmNob3IgcG9pbnQuIFRoZSBnb2FsIGlzIHRvIGFzc2lnblxuICAgIHRoZXNlIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sc1wiIGEgc2hhcmVkIGNyb3NzVGlsZUlEIHRoYXQgY2FuIGJlXG4gICAgdXNlZCBieSBQbGFjZW1lbnQgdG8ga2VlcCBmYWRpbmcgb3BhY2l0eSBzdGF0ZXMgY29uc2lzdGVudCBhbmQgdG9cbiAgICBkZWR1cGxpY2F0ZSBsYWJlbHMuXG5cbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggaW5kZXhlcyBhbGwgdGhlIGN1cnJlbnQgc3ltYm9sIGluc3RhbmNlcyBhbmRcbiAgICB0aGVpciBjcm9zc1RpbGVJRHMuIFdoZW4gYSBzeW1ib2wgYnVja2V0IGdldHMgYWRkZWQgb3IgdXBkYXRlZCwgdGhlXG4gICAgaW5kZXggYXNzaWducyBhIGNyb3NzVGlsZUlEIHRvIGVhY2ggb2YgaXQncyBzeW1ib2wgaW5zdGFuY2VzIGJ5IGVpdGhlclxuICAgIG1hdGNoaW5nIGl0IHdpdGggYW4gZXhpc3RpbmcgaWQgb3IgYXNzaWduaW5nIGEgbmV3IG9uZS5cbiovXG5cbi8vIFJvdW5kIGFuY2hvciBwb3NpdGlvbnMgdG8gcm91Z2hseSA0IHBpeGVsIGdyaWRcbmNvbnN0IHJvdW5kaW5nRmFjdG9yID0gNTEyIC8gRVhURU5UIC8gMjtcblxuY2xhc3MgVGlsZUxheWVySW5kZXgge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBpbmRleGVkU3ltYm9sSW5zdGFuY2VzOiB7W186IG51bWJlcl06IEFycmF5PHtcbiAgICAgICAgY3Jvc3NUaWxlSUQ6IG51bWJlcixcbiAgICAgICAgY29vcmQ6IHtcbiAgICAgICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgICAgIHk6IG51bWJlclxuICAgICAgICB9XG4gICAgfT59O1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcyA9IHt9O1xuICAgICAgICB0aGlzLmJ1Y2tldEluc3RhbmNlSWQgPSBidWNrZXRJbnN0YW5jZUlkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzeW1ib2xJbnN0YW5jZS5rZXk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgdGlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBzeW1ib2wgaW5zdGFuY2VzIHdpdGggdGhlIHNhbWUga2V5XG4gICAgICAgICAgICAvLyBTdG9yZSBlYWNoIG9uZSBhbG9uZyB3aXRoIGl0cyBjb29yZGluYXRlc1xuICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSUQ6IHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlELFxuICAgICAgICAgICAgICAgIGNvb3JkOiB0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlLCB0aWxlSUQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnRzIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgaW5wdXQgc3ltYm9sIGluc3RhbmNlIGludG8gY29vcmRpbmF0ZXMgdGhhdCBiZSBjYW4gY29tcGFyZWRcbiAgICAvLyBhZ2FpbnN0IG90aGVyIHN5bWJvbHMgaW4gdGhpcyBpbmRleC4gQ29vcmRpbmF0ZXMgYXJlOlxuICAgIC8vICgxKSB3b3JsZC1iYXNlZCAoc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgc291cmNlIHRpbGUgaXMgaXJyZWxldmFudClcbiAgICAvLyAoMikgY29udmVydGVkIHRvIHRoZSB6LXNjYWxlIG9mIHRoaXMgVGlsZUxheWVySW5kZXhcbiAgICAvLyAoMykgZG93bi1zYW1wbGVkIGJ5IFwicm91bmRpbmdGYWN0b3JcIiBmcm9tIHRpbGUgY29vcmRpbmF0ZSBwcmVjaXNpb24gaW4gb3JkZXIgdG8gYmVcbiAgICAvLyAgICAgbW9yZSB0b2xlcmFudCBvZiBzbWFsbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRpbGVzLlxuICAgIGdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY2hpbGRUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSBjaGlsZFRpbGVJRC5jYW5vbmljYWwueiAtIHRoaXMudGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICBjb25zdCBzY2FsZSA9IHJvdW5kaW5nRmFjdG9yIC8gTWF0aC5wb3coMiwgekRpZmZlcmVuY2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5mbG9vcigoY2hpbGRUaWxlSUQuY2Fub25pY2FsLnggKiBFWFRFTlQgKyBzeW1ib2xJbnN0YW5jZS5hbmNob3JYKSAqIHNjYWxlKSxcbiAgICAgICAgICAgIHk6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC55ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgKiBzY2FsZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmaW5kTWF0Y2hlcyhzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXksIG5ld1RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgem9vbUNyb3NzVGlsZUlEczoge1tjcm9zc1RpbGVJRDogbnVtYmVyXTogYm9vbGVhbn0pIHtcbiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gdGhpcy50aWxlSUQuY2Fub25pY2FsLnogPCBuZXdUaWxlSUQuY2Fub25pY2FsLnogPyAxIDogTWF0aC5wb3coMiwgdGhpcy50aWxlSUQuY2Fub25pY2FsLnogLSBuZXdUaWxlSUQuY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIG1hdGNoLCBza2lwXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZWRJbnN0YW5jZXMgPSB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbc3ltYm9sSW5zdGFuY2Uua2V5XTtcbiAgICAgICAgICAgIGlmICghaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN5bWJvbCB3aXRoIHRoaXMga2V5IGluIHRoaXMgYnVja2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxlZFN5bWJvbENvb3JkID0gdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgbmV3VGlsZUlEKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0aGlzVGlsZVN5bWJvbCBvZiBpbmRleGVkSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGFueSBzeW1ib2wgd2l0aCB0aGUgc2FtZSBrZXlzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gMVxuICAgICAgICAgICAgICAgIC8vIGdyaWQgdW5pdC4gKHdpdGggYSA0cHggZ3JpZCwgdGhpcyBjb3ZlcnMgYSAxMnB4IGJ5IDEycHggYXJlYSlcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueCAtIHNjYWxlZFN5bWJvbENvb3JkLngpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyh0aGlzVGlsZVN5bWJvbC5jb29yZC55IC0gc2NhbGVkU3ltYm9sQ29vcmQueSkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICAgICAgICAgICF6b29tQ3Jvc3NUaWxlSURzW3RoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmNlIHdlJ3ZlIG1hcmtlZCBvdXJzZWx2ZXMgZHVwbGljYXRlIGFnYWluc3QgdGhpcyBwYXJlbnQgc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBsZXQgYW55IG90aGVyIHN5bWJvbHMgYXQgdGhlIHNhbWUgem9vbSBsZXZlbCBkdXBsaWNhdGUgYWdhaW5zdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBwYXJlbnQgKHNlZSBpc3N1ZSAjNTk5MylcbiAgICAgICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IHRoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZUlEcyB7XG4gICAgbWF4Q3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXhDcm9zc1RpbGVJRCA9IDA7XG4gICAgfVxuICAgIGdlbmVyYXRlKCkge1xuICAgICAgICByZXR1cm4gKyt0aGlzLm1heENyb3NzVGlsZUlEO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCB7XG4gICAgaW5kZXhlczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W3RpbGVJZDogc3RyaW5nIHwgbnVtYmVyXTogVGlsZUxheWVySW5kZXh9fTtcbiAgICB1c2VkQ3Jvc3NUaWxlSURzOiB7W3pvb206IHN0cmluZyB8IG51bWJlcl06IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59fTtcbiAgICBsbmc6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzID0ge307XG4gICAgICAgIHRoaXMubG5nID0gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvbWV0aW1lcyB3aGVuIGEgdXNlciBwYW5zIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIHRoZSBsb25naXR1ZGUgdmFsdWUgZ2V0cyB3cmFwcGVkLlxuICAgICAqIFRvIHByZXZlbnQgbGFiZWxzIGZyb20gZmxhc2hpbmcgb3V0IGFuZCBpbiB3ZSBhZGp1c3QgdGhlIHRpbGVJRCB2YWx1ZXMgaW4gdGhlIGluZGV4ZXNcbiAgICAgKiBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIG5ldyB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBoYW5kbGVXcmFwSnVtcChsbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cmFwRGVsdGEgPSBNYXRoLnJvdW5kKChsbmcgLSB0aGlzLmxuZykgLyAzNjApO1xuICAgICAgICBpZiAod3JhcERlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHpvb20gaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Wm9vbUluZGV4ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB0aWxlSUQncyB3cmFwIGFuZCBhZGQgaXQgdG8gYSBuZXcgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB6b29tSW5kZXhlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpbmRleC50aWxlSUQgPSBpbmRleC50aWxlSUQudW53cmFwVG8oaW5kZXgudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICBuZXdab29tSW5kZXhbaW5kZXgudGlsZUlELmtleV0gPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3pvb21dID0gbmV3Wm9vbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gbG5nO1xuICAgIH1cblxuICAgIGFkZEJ1Y2tldCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcykge1xuICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl0gJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0uYnVja2V0SW5zdGFuY2VJZCA9PT1cbiAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgcmVwbGFjaW5nIHRoaXMgYnVja2V0IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvbGQgYnVja2V0J3MgXCJ1c2VkIGNyb3NzVGlsZUlEc1wiIG5vdyBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBidWNrZXQgY2FuIGNsYWltIHRoZW0uXG4gICAgICAgICAgICAgICAgLy8gVGhlIG9sZCBpbmRleCBlbnRyaWVzIHRoZW1zZWx2ZXMgc3RpY2sgYXJvdW5kIHVudGlsXG4gICAgICAgICAgICAgICAgLy8gJ3JlbW92ZVN0YWxlQnVja2V0cycgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdGlsZUlELm92ZXJzY2FsZWRaXSkge1xuICAgICAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6b29tQ3Jvc3NUaWxlSURzID0gdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl07XG5cbiAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICBpZiAoTnVtYmVyKHpvb20pID4gdGlsZUlELm92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEluZGV4ID0gem9vbUluZGV4ZXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleC50aWxlSUQuaXNDaGlsZE9mKHRpbGVJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5kZXguZmluZE1hdGNoZXMoYnVja2V0LnN5bWJvbEluc3RhbmNlcywgdGlsZUlELCB6b29tQ3Jvc3NUaWxlSURzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29vcmQgPSB0aWxlSUQuc2NhbGVkVG8oTnVtYmVyKHpvb20pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHpvb21JbmRleGVzW3BhcmVudENvb3JkLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCkge1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBkaWQgbm90IG1hdGNoIGFueSBrbm93biBzeW1ib2wsIGFzc2lnbiBhIG5ldyBpZFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gY3Jvc3NUaWxlSURzLmdlbmVyYXRlKCk7XG4gICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0gPSBuZXcgVGlsZUxheWVySW5kZXgodGlsZUlELCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHpvb206IHN0cmluZyB8IG51bWJlciwgcmVtb3ZlZEJ1Y2tldDogVGlsZUxheWVySW5kZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVtb3ZlZEJ1Y2tldC5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEluc3RhbmNlIG9mIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1soa2V5OiBhbnkpXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbem9vbV1bc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhbGVCdWNrZXRzKGN1cnJlbnRJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSkge1xuICAgICAgICBsZXQgdGlsZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgeiBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SURzW3pvb21JbmRleGVzW3RpbGVLZXldLmJ1Y2tldEluc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHosIHpvb21JbmRleGVzW3RpbGVLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHpvb21JbmRleGVzW3RpbGVLZXldO1xuICAgICAgICAgICAgICAgICAgICB0aWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlsZXNDaGFuZ2VkO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sSW5kZXgge1xuICAgIGxheWVySW5kZXhlczoge1tsYXllcklkOiBzdHJpbmddOiBDcm9zc1RpbGVTeW1ib2xMYXllckluZGV4fTtcbiAgICBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcztcbiAgICBtYXhCdWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgYnVja2V0c0luQ3VycmVudFBsYWNlbWVudDoge1tfOiBudW1iZXJdOiBib29sZWFufTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxheWVySW5kZXhlcyA9IHt9O1xuICAgICAgICB0aGlzLmNyb3NzVGlsZUlEcyA9IG5ldyBDcm9zc1RpbGVJRHMoKTtcbiAgICAgICAgdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkID0gMDtcbiAgICAgICAgdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50ID0ge307XG4gICAgfVxuXG4gICAgYWRkTGF5ZXIoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+LCBsbmc6IG51bWJlcikge1xuICAgICAgICBsZXQgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ID0gdGhpcy5sYXllckluZGV4ZXNbc3R5bGVMYXllci5pZF0gPSBuZXcgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCdWNrZXRJRHMgPSB7fTtcblxuICAgICAgICBsYXllckluZGV4LmhhbmRsZVdyYXBKdW1wKGxuZyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgc3R5bGVMYXllci5pZCAhPT0gc3ltYm9sQnVja2V0LmxheWVySWRzWzBdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQgPSArK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxheWVySW5kZXguYWRkQnVja2V0KHRpbGUudGlsZUlELCBzeW1ib2xCdWNrZXQsIHRoaXMuY3Jvc3NUaWxlSURzKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRCdWNrZXRJRHNbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXllckluZGV4LnJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50QnVja2V0SURzKSkge1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHBydW5lVW51c2VkTGF5ZXJzKHVzZWRMYXllcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdXNlZExheWVyTWFwID0ge307XG4gICAgICAgIHVzZWRMYXllcnMuZm9yRWFjaCgodXNlZExheWVyKSA9PiB7XG4gICAgICAgICAgICB1c2VkTGF5ZXJNYXBbdXNlZExheWVyXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5sYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICghdXNlZExheWVyTWFwW2xheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW2xheWVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGxvYWRTcHJpdGUgZnJvbSAnLi9sb2FkX3Nwcml0ZSc7XG5pbXBvcnQgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCBHbHlwaE1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vbGlnaHQnO1xuaW1wb3J0IExpbmVBdGxhcyBmcm9tICcuLi9yZW5kZXIvbGluZV9hdGxhcyc7XG5pbXBvcnQge3BpY2ssIGNsb25lLCBleHRlbmQsIGRlZXBFcXVhbCwgZmlsdGVyT2JqZWN0LCBtYXBPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2dldEpTT04sIGdldFJlZmVycmVyLCBtYWtlUmVxdWVzdCwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtpc01hcGJveFVSTH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQge3ZhbGlkYXRlU3R5bGUsIGVtaXRWYWxpZGF0aW9uRXJyb3JzIGFzIF9lbWl0VmFsaWRhdGlvbkVycm9yc30gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQge1xuICAgIGdldFR5cGUgYXMgZ2V0U291cmNlVHlwZSxcbiAgICBzZXRUeXBlIGFzIHNldFNvdXJjZVR5cGUsXG4gICAgdHlwZSBTb3VyY2VDbGFzc1xufSBmcm9tICcuLi9zb3VyY2Uvc291cmNlJztcbmltcG9ydCB7cXVlcnlSZW5kZXJlZEZlYXR1cmVzLCBxdWVyeVJlbmRlcmVkU3ltYm9scywgcXVlcnlTb3VyY2VGZWF0dXJlc30gZnJvbSAnLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzJztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBHZW9KU09OU291cmNlIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgZ2V0V29ya2VyUG9vbCBmcm9tICcuLi91dGlsL2dsb2JhbF93b3JrZXJfcG9vbCc7XG5pbXBvcnQgZGVyZWYgZnJvbSAnLi4vc3R5bGUtc3BlYy9kZXJlZic7XG5pbXBvcnQgZW1wdHlTdHlsZSBmcm9tICcuLi9zdHlsZS1zcGVjL2VtcHR5JztcbmltcG9ydCBkaWZmU3R5bGVzLCB7b3BlcmF0aW9ucyBhcyBkaWZmT3BlcmF0aW9uc30gZnJvbSAnLi4vc3R5bGUtc3BlYy9kaWZmJztcbmltcG9ydCB7XG4gICAgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSxcbiAgICBldmVudGVkIGFzIHJ0bFRleHRQbHVnaW5FdmVudGVkLFxuICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnRcbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgUGF1c2VhYmxlUGxhY2VtZW50IGZyb20gJy4vcGF1c2VhYmxlX3BsYWNlbWVudCc7XG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IENyb3NzVGlsZVN5bWJvbEluZGV4IGZyb20gJy4uL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleCc7XG5pbXBvcnQge3ZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG4vLyBXZSdyZSBza2lwcGluZyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoIHRoZSBgc291cmNlLmNhbnZhc2AgaWRlbnRpZmllciBpbiBvcmRlclxuLy8gdG8gY29udGludWUgdG8gYWxsb3cgY2FudmFzIHNvdXJjZXMgdG8gYmUgYWRkZWQgYXQgcnVudGltZS91cGRhdGVkIGluXG4vLyBzbWFydCBzZXRTdHlsZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNjQyNCk6XG5jb25zdCBlbWl0VmFsaWRhdGlvbkVycm9ycyA9IChldmVudGVkOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pID0+XG4gICAgX2VtaXRWYWxpZGF0aW9uRXJyb3JzKGV2ZW50ZWQsIGVycm9ycyAmJiBlcnJvcnMuZmlsdGVyKGVycm9yID0+IGVycm9yLmlkZW50aWZpZXIgIT09ICdzb3VyY2UuY2FudmFzJykpO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnMsIFJlc3BvbnNlQ2FsbGJhY2t9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICBTdHlsZVNwZWNpZmljYXRpb24sXG4gICAgTGlnaHRTcGVjaWZpY2F0aW9uLFxuICAgIFNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuY29uc3Qgc3VwcG9ydGVkRGlmZk9wZXJhdGlvbnMgPSBwaWNrKGRpZmZPcGVyYXRpb25zLCBbXG4gICAgJ2FkZExheWVyJyxcbiAgICAncmVtb3ZlTGF5ZXInLFxuICAgICdzZXRQYWludFByb3BlcnR5JyxcbiAgICAnc2V0TGF5b3V0UHJvcGVydHknLFxuICAgICdzZXRGaWx0ZXInLFxuICAgICdhZGRTb3VyY2UnLFxuICAgICdyZW1vdmVTb3VyY2UnLFxuICAgICdzZXRMYXllclpvb21SYW5nZScsXG4gICAgJ3NldExpZ2h0JyxcbiAgICAnc2V0VHJhbnNpdGlvbicsXG4gICAgJ3NldEdlb0pTT05Tb3VyY2VEYXRhJ1xuICAgIC8vICdzZXRHbHlwaHMnLFxuICAgIC8vICdzZXRTcHJpdGUnLFxuXSk7XG5cbmNvbnN0IGlnbm9yZWREaWZmT3BlcmF0aW9ucyA9IHBpY2soZGlmZk9wZXJhdGlvbnMsIFtcbiAgICAnc2V0Q2VudGVyJyxcbiAgICAnc2V0Wm9vbScsXG4gICAgJ3NldEJlYXJpbmcnLFxuICAgICdzZXRQaXRjaCdcbl0pO1xuXG5jb25zdCBlbXB0eSA9IGVtcHR5U3R5bGUoKTtcblxuZXhwb3J0IHR5cGUgU3R5bGVPcHRpb25zID0ge1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbixcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlU2V0dGVyT3B0aW9ucyA9IHtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW5cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0eWxlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgbWFwOiBNYXA7XG4gICAgc3R5bGVzaGVldDogU3R5bGVTcGVjaWZpY2F0aW9uO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXI7XG4gICAgZ2x5cGhNYW5hZ2VyOiBHbHlwaE1hbmFnZXI7XG4gICAgbGluZUF0bGFzOiBMaW5lQXRsYXM7XG4gICAgbGlnaHQ6IExpZ2h0O1xuXG4gICAgX3JlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9zcHJpdGVSZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9O1xuICAgIF9zZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IE9iamVjdH07XG4gICAgX29yZGVyOiBBcnJheTxzdHJpbmc+O1xuICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX07XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX3J0bFRleHRQbHVnaW5DYWxsYmFjazogRnVuY3Rpb247XG4gICAgX2NoYW5nZWQ6IGJvb2xlYW47XG4gICAgX3VwZGF0ZWRTb3VyY2VzOiB7W186IHN0cmluZ106ICdjbGVhcicgfCAncmVsb2FkJ307XG4gICAgX3VwZGF0ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3JlbW92ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn07XG4gICAgX2NoYW5nZWRJbWFnZXM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3VwZGF0ZWRQYWludFByb3BzOiB7W2xheWVyOiBzdHJpbmddOiB0cnVlfTtcbiAgICBfbGF5ZXJPcmRlckNoYW5nZWQ6IGJvb2xlYW47XG4gICAgX2F2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBwYXVzZWFibGVQbGFjZW1lbnQ6IFBhdXNlYWJsZVBsYWNlbWVudDtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICB6OiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGJ5IHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgZ2V0U291cmNlVHlwZTogdHlwZW9mIGdldFNvdXJjZVR5cGU7XG4gICAgc3RhdGljIHNldFNvdXJjZVR5cGU6IHR5cGVvZiBzZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlOiB0eXBlb2YgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZTtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiBTdHlsZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcihnZXRXb3JrZXJQb29sKCksIHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBuZXcgR2x5cGhNYW5hZ2VyKG1hcC5fcmVxdWVzdE1hbmFnZXIsIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KTtcbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBuZXcgTGluZUF0bGFzKDI1NiwgNTEyKTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMuX29yZGVyICA9IFtdO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyA9IHt9O1xuICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSBbXTtcblxuICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRSZWZlcnJlcicsIGdldFJlZmVycmVyKCkpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2sgPSBTdHlsZS5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luU3RhdHVzOiBldmVudC5wbHVnaW5TdGF0dXMsXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMOiBldmVudC5wbHVnaW5VUkxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzeW5jUlRMUGx1Z2luU3RhdGUnLCBzdGF0ZSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb21wbGV0ZSA9IHJlc3VsdHMuZXZlcnkoKGVsZW0pID0+IGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gc2VsZi5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7IC8vIFNob3VsZCBiZSBhIG5vLW9wIGlmIHRoZSBwbHVnaW4gbG9hZHMgYmVmb3JlIGFueSB0aWxlcyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVR5cGUgIT09ICdzb3VyY2UnIHx8IGV2ZW50LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2V2ZW50LnNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS52ZWN0b3JMYXllcklkcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5zb3VyY2UgPT09IHNvdXJjZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRVUkwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgICAgICBhY2Nlc3NUb2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSA6ICFpc01hcGJveFVSTCh1cmwpO1xuXG4gICAgICAgIHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTCh1cmwsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU3R5bGUpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZ2V0SlNPTihyZXF1ZXN0LCAoZXJyb3I6ID9FcnJvciwganNvbjogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkSlNPTihqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSBicm93c2VyLmZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZChqc29uLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRFbXB0eSgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuX2xvYWQoZW1wdHksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfbG9hZChqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIHZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKGpzb24pKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0ganNvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24uc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGpzb24uc291cmNlc1tpZF0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc29uLnNwcml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFNwcml0ZShqc29uLnNwcml0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoanNvbi5nbHlwaHMpO1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGRlcmVmKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO1xuXG4gICAgICAgIHRoaXMuX29yZGVyID0gbGF5ZXJzLm1hcCgobGF5ZXIpID0+IGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLl9sYXllcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllcik7XG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkOiBsYXllci5pZH19KTtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyc1tsYXllci5pZF0gPSBsYXllcjtcbiAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbbGF5ZXIuaWRdID0gbGF5ZXIuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnc2V0TGF5ZXJzJywgdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKSk7XG5cbiAgICAgICAgdGhpcy5saWdodCA9IG5ldyBMaWdodCh0aGlzLnN0eWxlc2hlZXQubGlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlLmxvYWQnKSk7XG4gICAgfVxuXG4gICAgX2xvYWRTcHJpdGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IGxvYWRTcHJpdGUodXJsLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIGltYWdlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2VzW2lkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRJbWFnZXMnLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICBpZiAoIXNvdXJjZUNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGxheWVyLnNvdXJjZUxheWVyO1xuICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSAnZ2VvanNvbicgfHwgKHNvdXJjZS52ZWN0b3JMYXllcklkcyAmJiBzb3VyY2UudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihzb3VyY2VMYXllcikgPT09IC0xKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU291cmNlIGxheWVyIFwiJHtzb3VyY2VMYXllcn1cIiBgICtcbiAgICAgICAgICAgICAgICBgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJHtzb3VyY2UuaWR9XCIgYCArXG4gICAgICAgICAgICAgICAgYGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIiR7bGF5ZXIuaWR9XCJgXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpXG4gICAgICAgICAgICBpZiAoIXRoaXMuc291cmNlQ2FjaGVzW2lkXS5sb2FkZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9zZXJpYWxpemVMYXllcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMYXllcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnMucHVzaChsYXllci5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRMYXllcnM7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpZ2h0ICYmIHRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NoZWNrTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBxdWV1ZWQgc3R5bGUgdXBkYXRlcyBpbiBhIGJhdGNoIGFuZCByZWNhbGN1bGF0ZSB6b29tLWRlcGVuZGVudCBwYWludCBwcm9wZXJ0aWVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdXBkYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fY2hhbmdlZDtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoIHx8IHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHVwZGF0ZWRJZHMsIHJlbW92ZWRJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl91cGRhdGVkU291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYWN0aW9uID09PSAncmVsb2FkJyB8fCBhY3Rpb24gPT09ICdjbGVhcicpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjbGVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJTb3VyY2UoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXllcnNbaWRdLnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlSWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXS51c2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5fb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuXG4gICAgICAgICAgICBsYXllci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKCFsYXllci5pc0hpZGRlbihwYXJhbWV0ZXJzLnpvb20pICYmIGxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0udXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLnogPSBwYXJhbWV0ZXJzLnpvb207XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qXG4gICAgICogQXBwbHkgYW55IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIF91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRJbWFnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jaGFuZ2VkSW1hZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZWRJbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tuYW1lXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbJ2ljb25zJywgJ3BhdHRlcm5zJ10sIGNoYW5nZWRJbWFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEltYWdlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzOiBBcnJheTxzdHJpbmc+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3VwZGF0ZUxheWVycycsIHtcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHVwZGF0ZWRJZHMpLFxuICAgICAgICAgICAgcmVtb3ZlZElkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzZXRVcGRhdGVzKCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMgPSB7fTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgc3R5bGUncyBzdGF0ZSB0byBtYXRjaCB0aGUgZ2l2ZW4gc3R5bGUgSlNPTiwgcGVyZm9ybWluZyBvbmx5XG4gICAgICogdGhlIG5lY2Vzc2FyeSBtdXRhdGlvbnMuXG4gICAgICpcbiAgICAgKiBNYXkgdGhyb3cgYW4gRXJyb3IgKCdVbmltcGxlbWVudGVkOiBNRVRIT0QnKSBpZiB0aGUgbWFwYm94LWdsLXN0eWxlLXNwZWNcbiAgICAgKiBkaWZmIGFsZ29yaXRobSBwcm9kdWNlcyBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYW55IGNoYW5nZXMgd2VyZSBtYWRlOyBmYWxzZSBvdGhlcndpc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldFN0YXRlKG5leHRTdGF0ZTogU3R5bGVTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlU3R5bGUobmV4dFN0YXRlKSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBuZXh0U3RhdGUgPSBjbG9uZShuZXh0U3RhdGUpO1xuICAgICAgICBuZXh0U3RhdGUubGF5ZXJzID0gZGVyZWYobmV4dFN0YXRlLmxheWVycyk7XG5cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRpZmZTdHlsZXModGhpcy5zZXJpYWxpemUoKSwgbmV4dFN0YXRlKVxuICAgICAgICAgICAgLmZpbHRlcihvcCA9PiAhKG9wLmNvbW1hbmQgaW4gaWdub3JlZERpZmZPcGVyYXRpb25zKSk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmltcGxlbWVudGVkT3BzID0gY2hhbmdlcy5maWx0ZXIob3AgPT4gIShvcC5jb21tYW5kIGluIHN1cHBvcnRlZERpZmZPcGVyYXRpb25zKSk7XG4gICAgICAgIGlmICh1bmltcGxlbWVudGVkT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogJHt1bmltcGxlbWVudGVkT3BzLm1hcChvcCA9PiBvcC5jb21tYW5kKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgIGlmIChvcC5jb21tYW5kID09PSAnc2V0VHJhbnNpdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBgdHJhbnNpdGlvbmAgaXMgYWx3YXlzIHJlYWQgZGlyZWN0bHkgb2ZmIG9mXG4gICAgICAgICAgICAgICAgLy8gYHRoaXMuc3R5bGVzaGVldGAsIHdoaWNoIHdlIHVwZGF0ZSBiZWxvd1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh0aGlzOiBhbnkpW29wLmNvbW1hbmRdLmFwcGx5KHRoaXMsIG9wLmFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0eWxlc2hlZXQgPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SW1hZ2UoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgfVxuXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEltYWdlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ05vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGlkKTtcbiAgICAgICAgdGhpcy5fYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKTtcbiAgICB9XG5cbiAgICBhZGRTb3VyY2UoaWQ6IHN0cmluZywgc291cmNlOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzb3VyY2UudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdHlwZSBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQsIGJ1dCB0aGUgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgd2VyZSBnaXZlbjogJHtPYmplY3Qua2V5cyhzb3VyY2UpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVpbHRJbnMgPSBbJ3ZlY3RvcicsICdyYXN0ZXInLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddO1xuICAgICAgICBjb25zdCBzaG91bGRWYWxpZGF0ZSA9IGJ1aWx0SW5zLmluZGV4T2Yoc291cmNlLnR5cGUpID49IDA7XG4gICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLnNvdXJjZSwgYHNvdXJjZXMuJHtpZH1gLCBzb3VyY2UsIG51bGwsIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMubWFwICYmIHRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpIChzb3VyY2U6IGFueSkuY29sbGVjdFJlc291cmNlVGltaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gPSBuZXcgU291cmNlQ2FjaGUoaWQsIHNvdXJjZSwgdGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgc291cmNlQ2FjaGUuc3R5bGUgPSB0aGlzO1xuICAgICAgICBzb3VyY2VDYWNoZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsICgpID0+ICh7XG4gICAgICAgICAgICBpc1NvdXJjZUxvYWRlZDogdGhpcy5sb2FkZWQoKSxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlQ2FjaGUuc2VyaWFsaXplKCksXG4gICAgICAgICAgICBzb3VyY2VJZDogaWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNvdXJjZUNhY2hlLm9uQWRkKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgc291cmNlIGZyb20gdGhpcyBzdHlsZXNoZWV0LCBnaXZlbiBpdHMgaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlXG4gICAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIHNvdXJjZSBpcyBmb3VuZCB3aXRoIHRoZSBnaXZlbiBJRFxuICAgICAqIEByZXR1cm5zIHtNYXB9IFRoZSB7QGxpbmsgTWFwfSBvYmplY3QuXG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sYXllcnNbbGF5ZXJJZF0uc291cmNlID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBTb3VyY2UgXCIke2lkfVwiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJHtsYXllcklkfVwiIGlzIHVzaW5nIGl0LmApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgc291cmNlQ2FjaGUuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7c291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YScsIGRhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VJZDogaWR9KSk7XG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIHNvdXJjZUNhY2hlLmNsZWFyVGlsZXMoKTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUub25SZW1vdmUpIHNvdXJjZUNhY2hlLm9uUmVtb3ZlKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXQgdGhlIGRhdGEgb2YgYSBHZW9KU09OIHNvdXJjZSwgZ2l2ZW4gaXRzIGlkLlxuICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2VcbiAgICAqIEBwYXJhbSB7R2VvSlNPTnxzdHJpbmd9IGRhdGEgR2VvSlNPTiBzb3VyY2VcbiAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhKGlkOiBzdHJpbmcsIGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBhc3NlcnQodGhpcy5zb3VyY2VDYWNoZXNbaWRdICE9PSB1bmRlZmluZWQsICdUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIGNvbnN0IGdlb2pzb25Tb3VyY2U6IEdlb0pTT05Tb3VyY2UgPSAodGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpOiBhbnkpO1xuICAgICAgICBhc3NlcnQoZ2VvanNvblNvdXJjZS50eXBlID09PSAnZ2VvanNvbicpO1xuXG4gICAgICAgIGdlb2pzb25Tb3VyY2Uuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc291cmNlIGJ5IGlkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgZGVzaXJlZCBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gJiYgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGxheWVyIHRvIHRoZSBtYXAgc3R5bGUuIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyT2JqZWN0IFRoZSBzdHlsZSBsYXllciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVdIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCBiZWZvcmVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBTdHlsZSBzZXR0ZXIgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBUaGUge0BsaW5rIE1hcH0gb2JqZWN0LlxuICAgICAqL1xuICAgIGFkZExheWVyKGxheWVyT2JqZWN0OiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgYmVmb3JlPzogc3RyaW5nLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGlkID0gbGF5ZXJPYmplY3QuaWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0TGF5ZXIoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcGApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGF5ZXI7XG4gICAgICAgIGlmIChsYXllck9iamVjdC50eXBlID09PSAnY3VzdG9tJykge1xuXG4gICAgICAgICAgICBpZiAoZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGxheWVyT2JqZWN0KSkpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXllck9iamVjdC5zb3VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGxheWVyT2JqZWN0LnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSBjbG9uZShsYXllck9iamVjdCk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSAoZXh0ZW5kKGxheWVyT2JqZWN0LCB7c291cmNlOiBpZH0pOiBhbnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGlzIGxheWVyIGlzIG5vdCBpbiB0aGUgc3R5bGUubGF5ZXJzIGFycmF5LCBzbyB3ZSBwYXNzIGFuIGltcG9zc2libGUgYXJyYXkgaW5kZXhcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmxheWVyLFxuICAgICAgICAgICAgICAgIGBsYXllcnMuJHtpZH1gLCBsYXllck9iamVjdCwge2FycmF5SW5kZXg6IC0xfSwgb3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuXG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkfX0pO1xuICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVyc1tsYXllci5pZF0gPSBsYXllci5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYmVmb3JlID8gdGhpcy5fb3JkZXIuaW5kZXhPZihiZWZvcmUpIDogdGhpcy5fb3JkZXIubGVuZ3RoO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7YmVmb3JlfVwiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDAsIGlkKTtcbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcblxuICAgICAgICBpZiAodGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gJiYgbGF5ZXIuc291cmNlICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAvLyBJZiwgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIHdlIGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoaXMgbGF5ZXJcbiAgICAgICAgICAgIC8vIGFuZCB3ZSBhcmUgbm93IHJlLWFkZGluZyBpdCB3aXRoIGEgZGlmZmVyZW50IGB0eXBlYCwgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gbmVlZCB0byBjbGVhciAocmF0aGVyIHRoYW4ganVzdCByZWxvYWQpIHRoZSB1bmRlcnlsaW5nIHNvdXJjZSdzXG4gICAgICAgICAgICAvLyB0aWxlcy4gIE90aGVyd2lzZSwgdGlsZXMgbWFya2VkICdyZWxvYWRpbmcnIHdpbGwgaGF2ZSBidWNrZXRzIC9cbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgdGhhdCBhcmUgc2V0IHVwIGZvciB0aGUgX3ByZXZpb3VzXyB2ZXJzaW9uIG9mIHRoaXNcbiAgICAgICAgICAgIC8vIGxheWVyLCBjYXVzaW5nLCBlLmcuOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM2MzNcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChyZW1vdmVkLnR5cGUgIT09IGxheWVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ2NsZWFyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyLm9uQWRkKSB7XG4gICAgICAgICAgICBsYXllci5vbkFkZCh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAgSUQgb2YgdGhlIGxheWVyIHRvIG1vdmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZV0gSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IGJlZm9yZVxuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09PSBiZWZvcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBiZWZvcmUgPyB0aGlzLl9vcmRlci5pbmRleE9mKGJlZm9yZSkgOiB0aGlzLl9vcmRlci5sZW5ndGg7XG4gICAgICAgIGlmIChiZWZvcmUgJiYgbmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtiZWZvcmV9XCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UobmV3SW5kZXgsIDAsIGlkKTtcblxuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBmcm9tIHRoZSBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKi9cbiAgICByZW1vdmVMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gPSBsYXllcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbaWRdO1xuXG4gICAgICAgIGlmIChsYXllci5vblJlbW92ZSkge1xuICAgICAgICAgICAgbGF5ZXIub25SZW1vdmUodGhpcy5tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdHlsZSBsYXllciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYGlkYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkIG9mIHRoZSBkZXNpcmVkIGxheWVyXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IGEgbGF5ZXIsIGlmIG9uZSB3aXRoIHRoZSBnaXZlbiBgaWRgIGV4aXN0c1xuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgYSBzcGVjaWZpYyBsYXllciBpcyBwcmVzZW50IHdpdGhpbiB0aGUgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZCBvZiB0aGUgZGVzaXJlZCBsYXllclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgcHJlc2VudFxuICAgICAqL1xuICAgIGhhc0xheWVyKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkIGluIHRoaXMuX2xheWVycztcbiAgICB9XG5cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gPT09IG1pbnpvb20gJiYgbGF5ZXIubWF4em9vbSA9PT0gbWF4em9vbSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChtaW56b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1pbnpvb20gPSBtaW56b29tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXh6b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1heHpvb20gPSBtYXh6b29tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nLCBmaWx0ZXI6ID9GaWx0ZXJTcGVjaWZpY2F0aW9uLCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZmlsdGVyLCBmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllci5maWx0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsIGBsYXllcnMuJHtsYXllci5pZH0uZmlsdGVyYCwgZmlsdGVyLCBudWxsLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5ZXIuZmlsdGVyID0gY2xvbmUoZmlsdGVyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxheWVyJ3MgZmlsdGVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgbGF5ZXIncyBmaWx0ZXIsIGlmIGFueVxuICAgICAqL1xuICAgIGdldEZpbHRlcihsYXllcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLmdldExheWVyKGxheWVyKS5maWx0ZXIpO1xuICAgIH1cblxuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBsYXllci5zZXRMYXlvdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsYXlvdXQgcHJvcGVydHkncyB2YWx1ZSBmcm9tIGEgZ2l2ZW4gbGF5ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5nZXRQYWludFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXF1aXJlc1JlbGF5b3V0ID0gbGF5ZXIuc2V0UGFpbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChyZXF1aXJlc1JlbGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbbGF5ZXJJZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExheWVyKGxheWVyKS5nZXRQYWludFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnZ2VvanNvbicgJiYgc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZSAnJHtzb3VyY2VJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgPyB0YXJnZXQuc291cmNlTGF5ZXIgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICYmICh0eXBlb2YgdGFyZ2V0LmlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdGFyZ2V0LmlkICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBrZXkpO1xuICAgIH1cblxuICAgIGdldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXIsIHRhcmdldC5pZCk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7ZHVyYXRpb246IDMwMCwgZGVsYXk6IDB9LCB0aGlzLnN0eWxlc2hlZXQgJiYgdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlck9iamVjdCh7XG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc3R5bGVzaGVldC5uYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGxpZ2h0OiB0aGlzLnN0eWxlc2hlZXQubGlnaHQsXG4gICAgICAgICAgICBjZW50ZXI6IHRoaXMuc3R5bGVzaGVldC5jZW50ZXIsXG4gICAgICAgICAgICB6b29tOiB0aGlzLnN0eWxlc2hlZXQuem9vbSxcbiAgICAgICAgICAgIGJlYXJpbmc6IHRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2g6IHRoaXMuc3R5bGVzaGVldC5waXRjaCxcbiAgICAgICAgICAgIHNwcml0ZTogdGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxcbiAgICAgICAgICAgIGdseXBoczogdGhpcy5zdHlsZXNoZWV0LmdseXBocyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLFxuICAgICAgICAgICAgc291cmNlczogbWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLCAoc291cmNlKSA9PiBzb3VyY2Uuc2VyaWFsaXplKCkpLFxuICAgICAgICAgICAgbGF5ZXJzOiB0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpXG4gICAgICAgIH0sICh2YWx1ZSkgPT4geyByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZDsgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxheWVyKGxheWVyOiBTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZWRMYXllcnNbbGF5ZXIuaWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSAmJlxuICAgICAgICAgICAgLy9Ta2lwIGZvciByYXN0ZXIgbGF5ZXJzIChodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzg2NSlcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0uZ2V0U291cmNlKCkudHlwZSAhPT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZVJlc3VsdHM6IEFycmF5PGFueT4pIHtcbiAgICAgICAgLy8gRmVhdHVyZSBvcmRlciBpcyBjb21wbGljYXRlZC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDJEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBsYXllciBvcmRlci5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDNEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBkZXB0aC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gYSBmZWF0dXJlIGluIGEgMkQgbGF5ZXIgYW5kIGEgM0QgbGF5ZXIgaXMgdHJpY2t5OlxuICAgICAgICAvLyAgICAgIE1vc3Qgb2Z0ZW4gbGF5ZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgZmVhdHVyZSBvcmRlciBpbiB0aGlzIGNhc2UuIElmXG4gICAgICAgIC8vICAgICAgYSBsaW5lIGxheWVyIGlzIGFib3ZlIGEgZXh0cnVzaW9uIGxheWVyIHRoZSBsaW5lIGZlYXR1cmUgd2lsbCBiZSByZW5kZXJlZFxuICAgICAgICAvLyAgICAgIGFib3ZlIHRoZSBleHRydXNpb24uIElmIHRoZSBsaW5lIGxheWVyIGlzIGJlbG93IHRoZSBleHRydXNpb24gbGF5ZXIsXG4gICAgICAgIC8vICAgICAgaXQgd2lsbCBiZSByZW5kZXJlZCBiZWxvdyBpdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGVyZSBpcyBhIHdlaXJkIGNhc2UgdGhvdWdoLlxuICAgICAgICAvLyAgICAgIFlvdSBoYXZlIGxheWVycyBpbiB0aGlzIG9yZGVyOiBleHRydXNpb25fbGF5ZXJfYSwgbGluZV9sYXllciwgZXh0cnVzaW9uX2xheWVyX2JcbiAgICAgICAgLy8gICAgICBFYWNoIGxheWVyIGhhcyBhIGZlYXR1cmUgdGhhdCBvdmVybGFwcyB0aGUgb3RoZXIgZmVhdHVyZXMuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2EgaXMgY2xvc2VyIHRoYW4gdGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2Igc28gaXQgaXMgcmVuZGVyZWQgYWJvdmUuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gbGluZV9sYXllciBpcyByZW5kZXJlZCBhYm92ZSBleHRydXNpb25fbGF5ZXJfYS5cbiAgICAgICAgLy8gICAgICBUaGlzIG1lYW5zIHRoYXQgdGhhdCB0aGUgbGluZV9sYXllciBmZWF0dXJlIGlzIGFib3ZlIHRoZSBleHRydXNpb25fbGF5ZXJfYiBmZWF0dXJlIGRlc3BpdGVcbiAgICAgICAgLy8gICAgICBpdCBiZWluZyBpbiBhbiBlYXJsaWVyIGxheWVyLlxuXG4gICAgICAgIGNvbnN0IGlzTGF5ZXIzRCA9IGxheWVySWQgPT4gdGhpcy5fbGF5ZXJzW2xheWVySWRdLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbic7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IHt9O1xuICAgICAgICBjb25zdCBmZWF0dXJlczNEID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuICAgICAgICAgICAgaWYgKGlzTGF5ZXIzRChsYXllcklkKSkge1xuICAgICAgICAgICAgICAgIGxheWVySW5kZXhbbGF5ZXJJZF0gPSBsO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc291cmNlUmVzdWx0IG9mIHNvdXJjZVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXJGZWF0dXJlcyA9IHNvdXJjZVJlc3VsdFtsYXllcklkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZVdyYXBwZXIgb2YgbGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucHVzaChmZWF0dXJlV3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmZWF0dXJlczNELnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiLmludGVyc2VjdGlvblogLSBhLmludGVyc2VjdGlvblo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXllcjNEKGxheWVySWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGFsbCAzRCBmZWF0dXJlcyB0aGF0IGFyZSBpbiBvciBhYm92ZSB0aGUgY3VycmVudCBsYXllclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZWF0dXJlczNELmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvcG1vc3QzRCA9IGZlYXR1cmVzM0RbaV0uZmVhdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVySW5kZXhbdG9wbW9zdDNELmxheWVyLmlkXSA8IGwpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHRvcG1vc3QzRCk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZVJlc3VsdCBvZiBzb3VyY2VSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyRmVhdHVyZXMgPSBzb3VyY2VSZXN1bHRbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmVXcmFwcGVyIG9mIGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmVXcmFwcGVyLmZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIH1cblxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhxdWVyeUdlb21ldHJ5OiBhbnksIHBhcmFtczogYW55LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlcicsIHBhcmFtcy5maWx0ZXIsIG51bGwsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zLmxheWVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LicpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHBhcmFtcy5sYXllcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbGF5ZXIgaXMgbm90IGluIHRoZSBzdHlsZS5sYXllcnMgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5gKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluY2x1ZGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBwYXJhbXMuYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5fYXZhaWxhYmxlSW1hZ2VzO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGF5ZXJzICYmICFpbmNsdWRlZFNvdXJjZXNbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgcGxhY2VtZW50IGhhcyBydW4sIHF1ZXJ5IGFnYWluc3QgaXRzIENvbGxpc2lvbkluZGV4XG4gICAgICAgICAgICAvLyBmb3Igc3ltYm9sIHJlc3VsdHMsIGFuZCB0cmVhdCBpdCBhcyBhbiBleHRyYSBzb3VyY2UgdG8gbWVyZ2VcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlEOiBzdHJpbmcsIHBhcmFtczogP3tzb3VyY2VMYXllcjogP3N0cmluZywgZmlsdGVyOiA/QXJyYXk8YW55PiwgdmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXInLCBwYXJhbXMuZmlsdGVyLCBudWxsLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSURdO1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUgPyBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlLCBwYXJhbXMpIDogW107XG4gICAgfVxuXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IFNvdXJjZUNsYXNzLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgaWYgKFN0eWxlLmdldFNvdXJjZVR5cGUobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEEgc291cmNlIHR5cGUgY2FsbGVkIFwiJHtuYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0eWxlLnNldFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFTb3VyY2VUeXBlLndvcmtlclNvdXJjZVVSTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnbG9hZFdvcmtlclNvdXJjZScsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB1cmw6IFNvdXJjZVR5cGUud29ya2VyU291cmNlVVJMXG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodE9wdGlvbnM6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsaWdodCA9IHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICAgICAgbGV0IF91cGRhdGUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHRPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChsaWdodE9wdGlvbnNba2V5XSwgbGlnaHRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIV91cGRhdGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgbm93OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgIGRlbGF5OiAwXG4gICAgICAgICAgICB9LCB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbilcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxpZ2h0LnNldExpZ2h0KGxpZ2h0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBWYWxpZGF0b3IsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wczogYW55LCBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuc2VyaWFsaXplKCksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9LCBwcm9wcykpKTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zcHJpdGVSZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcnRsVGV4dFBsdWdpbkV2ZW50ZWQub2ZmKCdwbHVnaW5TdGF0ZUNoYW5nZScsIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayk7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyOiBTdHlsZUxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uY2xlYXJUaWxlcygpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgX2NsZWFyU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmNsZWFyVGlsZXMoKTtcbiAgICB9XG5cbiAgICBfcmVsb2FkU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlc3VtZSgpO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVNvdXJjZXModHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnVwZGF0ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlUGxhY2VtZW50KHRyYW5zZm9ybTogVHJhbnNmb3JtLCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIGZhZGVEdXJhdGlvbjogbnVtYmVyLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgcGxhY2VtZW50Q29tbWl0dGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgIT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc3R5bGVMYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdID0gc291cmNlQ2FjaGUuZ2V0UmVuZGVyYWJsZUlkcyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIudGlsZUlELm92ZXJzY2FsZWRaIC0gYS50aWxlSUQub3ZlcnNjYWxlZFopIHx8IChhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1Y2tldHNDaGFuZ2VkID0gdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihzdHlsZUxheWVyLCBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSwgdHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBzeW1ib2xCdWNrZXRzQ2hhbmdlZCB8fCBsYXllckJ1Y2tldHNDaGFuZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO1xuXG4gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgY2hhbmdlcyBvdXIgXCJpbiBwcm9ncmVzc1wiIGxheWVyIGFuZCB0aWxlIGluZGljZXMgcmVxdWlyZXMgdXNcbiAgICAgICAgLy8gdG8gc3RhcnQgb3Zlci4gV2hlbiB3ZSBzdGFydCBvdmVyLCB3ZSBkbyBhIGZ1bGwgcGxhY2VtZW50IGluc3RlYWQgb2YgaW5jcmVtZW50YWxcbiAgICAgICAgLy8gdG8gcHJldmVudCBzdGFydmF0aW9uLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc3RhcnQgcGxhY2VtZW50IHRvIGtlZXAgbGF5ZXIgaW5kaWNlcyBpbiBzeW5jLlxuICAgICAgICAvLyBBbHNvIGZvcmNlIGZ1bGwgcGxhY2VtZW50IHdoZW4gZmFkZUR1cmF0aW9uID09PSAwIHRvIGVuc3VyZSB0aGF0IG5ld2x5IGxvYWRlZFxuICAgICAgICAvLyB0aWxlcyB3aWxsIGZ1bGx5IGRpc3BsYXkgc3ltYm9scyBpbiB0aGVpciBmaXJzdCBmcmFtZVxuICAgICAgICBmb3JjZUZ1bGxQbGFjZW1lbnQgPSBmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgfHwgZmFkZUR1cmF0aW9uID09PSAwO1xuXG4gICAgICAgIGlmIChmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50IHx8ICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSAmJiAhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYnJvd3Nlci5ub3coKSwgdHJhbnNmb3JtLnpvb20pKSkge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgPSBuZXcgUGF1c2VhYmxlUGxhY2VtZW50KHRyYW5zZm9ybSwgdGhpcy5fb3JkZXIsIGZvcmNlRnVsbFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgLy8gdGhlIGxhc3QgcGxhY2VtZW50IGZpbmlzaGVkIHJ1bm5pbmcsIGJ1dCB0aGUgbmV4dCBvbmUgaGFzbsOiwoDCmXRcbiAgICAgICAgICAgIC8vIHN0YXJ0ZWQgeWV0IGJlY2F1c2Ugb2YgdGhlIGBzdGlsbFJlY2VudGAgY2hlY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIC8vIGFib3ZlLCBzbyBtYXJrIGl0IHN0YWxlIHRvIGVuc3VyZSB0aGF0IHdlIHJlcXVlc3QgYW5vdGhlclxuICAgICAgICAgICAgLy8gcmVuZGVyIGZyYW1lXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsIHRoaXMuX2xheWVycywgbGF5ZXJUaWxlcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50ID0gdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KGJyb3dzZXIubm93KCkpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBwbGFjZW1lbnQgZ2V0cyBzcGxpdCBvdmVyIG11bHRpcGxlIGZyYW1lcyBpdCBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Y2tldHMgd2VyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkgd2VyZSBjaGFuZ2VkIGFuZCBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBwbGFjZW1lbnQgaXMgYWxyZWFkeSBzdGFsZSB3aGlsZSBpdCBpcyBpbiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudENvbW1pdHRlZCB8fCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZHNSZW5kZXIgaXMgZmFsc2Ugd2hlbiB3ZSBoYXZlIGp1c3QgZmluaXNoZWQgYSBwbGFjZW1lbnQgdGhhdCBkaWRuJ3QgY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIGFueSBzeW1ib2xzXG4gICAgICAgIGNvbnN0IG5lZWRzUmVyZW5kZXIgPSAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkgfHwgdGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYnJvd3Nlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBuZWVkc1JlcmVuZGVyO1xuICAgIH1cblxuICAgIF9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbGJhY2tzIGZyb20gd2ViIHdvcmtlcnNcblxuICAgIGdldEltYWdlcyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtpY29uczogQXJyYXk8c3RyaW5nPiwgc291cmNlOiBzdHJpbmcsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKHBhcmFtcy5pY29ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIC8vIEFwcGx5IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzIGJlZm9yZSBzZXR0aW5nIHRoZSB0aWxlJ3MgZGVwZW5kZW5jaWVzIHNvIHRoYXQgdGhlIHRpbGVcbiAgICAgICAgLy8gaXMgbm90IHJlbG9hZGVkIHVuZWNlc3NhcmlseS4gV2l0aG91dCB0aGlzIGZvcmNlZCB1cGRhdGUgdGhlIHJlbG9hZCBjb3VsZCBoYXBwZW4gaW4gY2FzZXNcbiAgICAgICAgLy8gbGlrZSB0aGlzIG9uZTpcbiAgICAgICAgLy8gLSBpY29ucyBjb250YWlucyBcIm15LWltYWdlXCJcbiAgICAgICAgLy8gLSBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKC4uLikgdHJpZ2dlcnMgYG9uc3R5bGVpbWFnZW1pc3NpbmdgXG4gICAgICAgIC8vIC0gdGhlIHVzZXIgYWRkcyBcIm15LWltYWdlXCIgd2l0aGluIHRoZSBjYWxsYmFja1xuICAgICAgICAvLyAtIGFkZEltYWdlIGFkZHMgXCJteS1pbWFnZVwiIHRvIHRoaXMuX2NoYW5nZWRJbWFnZXNcbiAgICAgICAgLy8gLSB0aGUgbmV4dCBmcmFtZSB0cmlnZ2VycyBhIHJlbG9hZCBvZiB0aGlzIHRpbGUgZXZlbiB0aG91Z2ggaXQgYWxyZWFkeSBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSkge1xuICAgICAgICAgICAgc291cmNlQ2FjaGUuc2V0RGVwZW5kZW5jaWVzKHBhcmFtcy50aWxlSUQua2V5LCBwYXJhbXMudHlwZSwgcGFyYW1zLmljb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdseXBocyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzdGFja3M6IHtbXzogc3RyaW5nXTogQXJyYXk8bnVtYmVyPn19LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhwYXJhbXMuc3RhY2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0UmVzb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxufVxuXG5TdHlsZS5nZXRTb3VyY2VUeXBlID0gZ2V0U291cmNlVHlwZTtcblN0eWxlLnNldFNvdXJjZVR5cGUgPSBzZXRTb3VyY2VUeXBlO1xuU3R5bGUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSA9IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIHR5cGU6ICdJbnQxNicsIGNvbXBvbmVudHM6IDJ9XG5dKTtcbiIsIlxuLy8gRGlzYWJsZSBGbG93IGFubm90YXRpb25zIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBpbXBvcnRpbmcgR0xTTCBmaWxlc1xuLyogZXNsaW50LWRpc2FibGUgZmxvd3R5cGUvcmVxdWlyZS12YWxpZC1maWxlLWFubm90YXRpb24gKi9cblxuaW1wb3J0IHByZWx1ZGVGcmFnIGZyb20gJy4vX3ByZWx1ZGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgcHJlbHVkZVZlcnQgZnJvbSAnLi9fcHJlbHVkZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZEZyYWcgZnJvbSAnLi9iYWNrZ3JvdW5kLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRWZXJ0IGZyb20gJy4vYmFja2dyb3VuZC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFBhdHRlcm5GcmFnIGZyb20gJy4vYmFja2dyb3VuZF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRQYXR0ZXJuVmVydCBmcm9tICcuL2JhY2tncm91bmRfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY2lyY2xlRnJhZyBmcm9tICcuL2NpcmNsZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjaXJjbGVWZXJ0IGZyb20gJy4vY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tGcmFnIGZyb20gJy4vY2xpcHBpbmdfbWFzay5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tWZXJ0IGZyb20gJy4vY2xpcHBpbmdfbWFzay52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcEZyYWcgZnJvbSAnLi9oZWF0bWFwLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBWZXJ0IGZyb20gJy4vaGVhdG1hcC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFRleHR1cmVGcmFnIGZyb20gJy4vaGVhdG1hcF90ZXh0dXJlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBUZXh0dXJlVmVydCBmcm9tICcuL2hlYXRtYXBfdGV4dHVyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94RnJhZyBmcm9tICcuL2NvbGxpc2lvbl9ib3guZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94VmVydCBmcm9tICcuL2NvbGxpc2lvbl9ib3gudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZUZyYWcgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZVZlcnQgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBkZWJ1Z0ZyYWcgZnJvbSAnLi9kZWJ1Zy5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBkZWJ1Z1ZlcnQgZnJvbSAnLi9kZWJ1Zy52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEZyYWcgZnJvbSAnLi9maWxsLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxWZXJ0IGZyb20gJy4vZmlsbC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVGcmFnIGZyb20gJy4vZmlsbF9vdXRsaW5lLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lVmVydCBmcm9tICcuL2ZpbGxfb3V0bGluZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVQYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfb3V0bGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX291dGxpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbFBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxQYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVByZXBhcmVGcmFnIGZyb20gJy4vaGlsbHNoYWRlX3ByZXBhcmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlUHJlcGFyZVZlcnQgZnJvbSAnLi9oaWxsc2hhZGVfcHJlcGFyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlRnJhZyBmcm9tICcuL2hpbGxzaGFkZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVWZXJ0IGZyb20gJy4vaGlsbHNoYWRlLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lRnJhZyBmcm9tICcuL2xpbmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVZlcnQgZnJvbSAnLi9saW5lLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRGcmFnIGZyb20gJy4vbGluZV9ncmFkaWVudC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRWZXJ0IGZyb20gJy4vbGluZV9ncmFkaWVudC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVBhdHRlcm5GcmFnIGZyb20gJy4vbGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVQYXR0ZXJuVmVydCBmcm9tICcuL2xpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVNERkZyYWcgZnJvbSAnLi9saW5lX3NkZi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lU0RGVmVydCBmcm9tICcuL2xpbmVfc2RmLnZlcnRleC5nbHNsJztcbmltcG9ydCByYXN0ZXJGcmFnIGZyb20gJy4vcmFzdGVyLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHJhc3RlclZlcnQgZnJvbSAnLi9yYXN0ZXIudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbEljb25GcmFnIGZyb20gJy4vc3ltYm9sX2ljb24uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sSWNvblZlcnQgZnJvbSAnLi9zeW1ib2xfaWNvbi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGRnJhZyBmcm9tICcuL3N5bWJvbF9zZGYuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGVmVydCBmcm9tICcuL3N5bWJvbF9zZGYudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uRnJhZyBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uVmVydCBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLnZlcnRleC5nbHNsJztcblxuZXhwb3J0IGNvbnN0IHByZWx1ZGUgPSBjb21waWxlKHByZWx1ZGVGcmFnLCBwcmVsdWRlVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZCA9IGNvbXBpbGUoYmFja2dyb3VuZEZyYWcsIGJhY2tncm91bmRWZXJ0KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kUGF0dGVybiA9IGNvbXBpbGUoYmFja2dyb3VuZFBhdHRlcm5GcmFnLCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGNpcmNsZSA9IGNvbXBpbGUoY2lyY2xlRnJhZywgY2lyY2xlVmVydCk7XG5leHBvcnQgY29uc3QgY2xpcHBpbmdNYXNrID0gY29tcGlsZShjbGlwcGluZ01hc2tGcmFnLCBjbGlwcGluZ01hc2tWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwID0gY29tcGlsZShoZWF0bWFwRnJhZywgaGVhdG1hcFZlcnQpO1xuZXhwb3J0IGNvbnN0IGhlYXRtYXBUZXh0dXJlID0gY29tcGlsZShoZWF0bWFwVGV4dHVyZUZyYWcsIGhlYXRtYXBUZXh0dXJlVmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94ID0gY29tcGlsZShjb2xsaXNpb25Cb3hGcmFnLCBjb2xsaXNpb25Cb3hWZXJ0KTtcbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGUgPSBjb21waWxlKGNvbGxpc2lvbkNpcmNsZUZyYWcsIGNvbGxpc2lvbkNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGRlYnVnID0gY29tcGlsZShkZWJ1Z0ZyYWcsIGRlYnVnVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbCA9IGNvbXBpbGUoZmlsbEZyYWcsIGZpbGxWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZSA9IGNvbXBpbGUoZmlsbE91dGxpbmVGcmFnLCBmaWxsT3V0bGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxPdXRsaW5lUGF0dGVybiA9IGNvbXBpbGUoZmlsbE91dGxpbmVQYXR0ZXJuRnJhZywgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbFBhdHRlcm4gPSBjb21waWxlKGZpbGxQYXR0ZXJuRnJhZywgZmlsbFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uID0gY29tcGlsZShmaWxsRXh0cnVzaW9uRnJhZywgZmlsbEV4dHJ1c2lvblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuID0gY29tcGlsZShmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcsIGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlUHJlcGFyZSA9IGNvbXBpbGUoaGlsbHNoYWRlUHJlcGFyZUZyYWcsIGhpbGxzaGFkZVByZXBhcmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBoaWxsc2hhZGUgPSBjb21waWxlKGhpbGxzaGFkZUZyYWcsIGhpbGxzaGFkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmUgPSBjb21waWxlKGxpbmVGcmFnLCBsaW5lVmVydCk7XG5leHBvcnQgY29uc3QgbGluZUdyYWRpZW50ID0gY29tcGlsZShsaW5lR3JhZGllbnRGcmFnLCBsaW5lR3JhZGllbnRWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lUGF0dGVybiA9IGNvbXBpbGUobGluZVBhdHRlcm5GcmFnLCBsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVTREYgPSBjb21waWxlKGxpbmVTREZGcmFnLCBsaW5lU0RGVmVydCk7XG5leHBvcnQgY29uc3QgcmFzdGVyID0gY29tcGlsZShyYXN0ZXJGcmFnLCByYXN0ZXJWZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xJY29uID0gY29tcGlsZShzeW1ib2xJY29uRnJhZywgc3ltYm9sSWNvblZlcnQpO1xuZXhwb3J0IGNvbnN0IHN5bWJvbFNERiA9IGNvbXBpbGUoc3ltYm9sU0RGRnJhZywgc3ltYm9sU0RGVmVydCk7XG5leHBvcnQgY29uc3Qgc3ltYm9sVGV4dEFuZEljb24gPSBjb21waWxlKHN5bWJvbFRleHRBbmRJY29uRnJhZywgc3ltYm9sVGV4dEFuZEljb25WZXJ0KTtcblxuLy8gRXhwYW5kICNwcmFnbWFzIHRvICNpZmRlZnMuXG5cbmZ1bmN0aW9uIGNvbXBpbGUoZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZSkge1xuICAgIGNvbnN0IHJlID0gLyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nO1xuXG4gICAgY29uc3QgZnJhZ21lbnRQcmFnbWFzID0ge307XG5cbiAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50U291cmNlLnJlcGxhY2UocmUsIChtYXRjaCwgb3BlcmF0aW9uLCBwcmVjaXNpb24sIHR5cGUsIG5hbWUpID0+IHtcbiAgICAgICAgZnJhZ21lbnRQcmFnbWFzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICByZXR1cm4gYFxuI2lmZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNvdXJjZS5yZXBsYWNlKHJlLCAobWF0Y2gsIG9wZXJhdGlvbiwgcHJlY2lzaW9uLCB0eXBlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJUeXBlID0gdHlwZSA9PT0gJ2Zsb2F0JyA/ICd2ZWMyJyA6ICd2ZWM0JztcbiAgICAgICAgY29uc3QgdW5wYWNrVHlwZSA9IG5hbWUubWF0Y2goL2NvbG9yLykgPyAnY29sb3InIDogYXR0clR5cGU7XG5cbiAgICAgICAgaWYgKGZyYWdtZW50UHJhZ21hc1tuYW1lXSkge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7bmFtZX0gPSB1bnBhY2tfbWl4XyR7dW5wYWNrVHlwZX0oYV8ke25hbWV9LCB1XyR7bmFtZX1fdCk7XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAqL3tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVucGFja19taXhfJHt1bnBhY2tUeXBlfShhXyR7bmFtZX0sIHVfJHtuYW1lfV90KTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZX07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5jbGFzcyBWZXJ0ZXhBcnJheU9iamVjdCB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBib3VuZFByb2dyYW06ID9Qcm9ncmFtPCo+O1xuICAgIGJvdW5kTGF5b3V0VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIGJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuICAgIGJvdW5kSW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcjtcbiAgICBib3VuZFZlcnRleE9mZnNldDogP251bWJlcjtcbiAgICBib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgYm91bmREeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB2YW86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmFvID0gbnVsbDtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICBpbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyLFxuICAgICAgICAgdmVydGV4T2Zmc2V0OiA/bnVtYmVyLFxuICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgICBsZXQgcGFpbnRCdWZmZXJzRGlmZmVyID0gdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGggIT09IHBhaW50VmVydGV4QnVmZmVycy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyAhcGFpbnRCdWZmZXJzRGlmZmVyICYmIGkgPCBwYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2ldICE9PSBwYWludFZlcnRleEJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgICAgICBwYWludEJ1ZmZlcnNEaWZmZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNGcmVzaEJpbmRSZXF1aXJlZCA9IChcbiAgICAgICAgICAgICF0aGlzLnZhbyB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gIT09IHByb2dyYW0gfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgIT09IGxheW91dFZlcnRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgcGFpbnRCdWZmZXJzRGlmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgIT09IGluZGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ICE9PSB2ZXJ0ZXhPZmZzZXQgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyICE9PSBkeW5hbWljVmVydGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIgIT09IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0IHx8IGlzRnJlc2hCaW5kUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZnJlc2hCaW5kKHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgcGFpbnRWZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgdmVydGV4T2Zmc2V0LCBkeW5hbWljVmVydGV4QnVmZmVyLCBkeW5hbWljVmVydGV4QnVmZmVyMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pO1xuXG4gICAgICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbiB1cGRhdGVkLiBSZWJpbmQgdG8gdXBsb2FkIGRhdGEuXG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleEJ1ZmZlciAmJiBpbmRleEJ1ZmZlci5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuYmluZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlc2hCaW5kKHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICAgICAgIGluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgIHZlcnRleE9mZnNldDogP251bWJlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgbGV0IG51bVByZXZBdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBudW1OZXh0QXR0cmlidXRlcyA9IHByb2dyYW0ubnVtQXR0cmlidXRlcztcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbykgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyk7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhcmd1bWVudHMgc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoZW0gd2hlbiB0aGUgdmFvIGlzIGJvdW5kIGFnYWluXG4gICAgICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyID0gbGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycyA9IHBhaW50VmVydGV4QnVmZmVycztcbiAgICAgICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCA9IHZlcnRleE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyID0gZHluYW1pY1ZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiA9IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgfHwgMDtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBhbGwgYXR0cmlidXRlcyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmFtIHRoYXQgYXJlbid0IHVzZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcHJvZ3JhbS4gTm90ZTogYXR0cmlidXRlIGluZGljZXMgYXJlICpub3QqIHByb2dyYW0gc3BlY2lmaWMhXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbnVtTmV4dEF0dHJpYnV0ZXM7IGkgPCBudW1QcmV2QXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gV2ViR0wgYnJlYWtzIGlmIHlvdSBkaXNhYmxlIGF0dHJpYnV0ZSAwLlxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAzMDUyMzFcbiAgICAgICAgICAgICAgICBhc3NlcnQoaSAhPT0gMCk7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleEJ1ZmZlciBvZiBwYWludFZlcnRleEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIGZvciAoY29uc3QgdmVydGV4QnVmZmVyIG9mIHBhaW50VmVydGV4QnVmZmVycykge1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5iaW5kKCk7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgPSBudW1OZXh0QXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy52YW8pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlcnRleEFycmF5T2JqZWN0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwcmVsdWRlfSBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5pbXBvcnQgdHlwZSBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IHR5cGUgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCB0eXBlIENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCB0eXBlIEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybUJpbmRpbmdzLCBVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7QmluZGVyVW5pZm9ybX0gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgdHlwZSBEcmF3TW9kZSA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnVFJJQU5HTEVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORV9TVFJJUCc+O1xuXG5jbGFzcyBQcm9ncmFtPFVzOiBVbmlmb3JtQmluZGluZ3M+IHtcbiAgICBwcm9ncmFtOiBXZWJHTFByb2dyYW07XG4gICAgYXR0cmlidXRlczoge1tfOiBzdHJpbmddOiBudW1iZXJ9O1xuICAgIG51bUF0dHJpYnV0ZXM6IG51bWJlcjtcbiAgICBmaXhlZFVuaWZvcm1zOiBVcztcbiAgICBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT47XG4gICAgZmFpbGVkVG9DcmVhdGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHNvdXJjZToge2ZyYWdtZW50U291cmNlOiBzdHJpbmcsIHZlcnRleFNvdXJjZTogc3RyaW5nfSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiA/UHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgZml4ZWRVbmlmb3JtczogKENvbnRleHQsIFVuaWZvcm1Mb2NhdGlvbnMpID0+IFVzLFxuICAgICAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBjb25zdCBkZWZpbmVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZGVmaW5lcygpIDogW107XG4gICAgICAgIGlmIChzaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGRlZmluZXMucHVzaCgnI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsIHNvdXJjZS5mcmFnbWVudFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUudmVydGV4U291cmNlLCBzb3VyY2UudmVydGV4U291cmNlKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgaWYgKGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRUb0NyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcblxuICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIGlmIChnbC5pc0NvbnRleHRMb3N0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkVG9DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSwgKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgYmluZCBsYXlvdXQgYXR0cmlidXRlcyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpclxuICAgICAgICAvLyBQcm9ncmFtSW50ZXJmYWNlIHNvIHRoYXQgd2UgZG9uJ3QgZHluYW1pY2FsbHkgbGluayBhbiB1bnVzZWRcbiAgICAgICAgLy8gYXR0cmlidXRlIGF0IHBvc2l0aW9uIDAsIHdoaWNoIGNhbiBjYXVzZSByZW5kZXJpbmcgdG8gZmFpbCBmb3IgYW5cbiAgICAgICAgLy8gZW50aXJlIGxheWVyIChzZWUgIzQ2MDcsICM0NzI4KVxuICAgICAgICBjb25zdCBsYXlvdXRBdHRyaWJ1dGVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24ubGF5b3V0QXR0cmlidXRlcyA6IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGksIGxheW91dEF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSwgKGdsLmdldFByb2dyYW1JbmZvTG9nKHRoaXMucHJvZ3JhbSk6IGFueSkpO1xuXG4gICAgICAgIHRoaXMubnVtQXR0cmlidXRlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHVuaWZvcm1Mb2NhdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1Vbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVuaWZvcm1zOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbnNbdW5pZm9ybS5uYW1lXSA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHVuaWZvcm0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXMgPSBmaXhlZFVuaWZvcm1zKGNvbnRleHQsIHVuaWZvcm1Mb2NhdGlvbnMpO1xuICAgICAgICB0aGlzLmJpbmRlclVuaWZvcm1zID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0VW5pZm9ybXMoY29udGV4dCwgdW5pZm9ybUxvY2F0aW9ucykgOiBbXTtcbiAgICB9XG5cbiAgICBkcmF3KGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBkcmF3TW9kZTogRHJhd01vZGUsXG4gICAgICAgICBkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+LFxuICAgICAgICAgc3RlbmNpbE1vZGU6ICRSZWFkT25seTxTdGVuY2lsTW9kZT4sXG4gICAgICAgICBjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+LFxuICAgICAgICAgY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPixcbiAgICAgICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8VXM+LFxuICAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgICAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICAgICAgIGN1cnJlbnRQcm9wZXJ0aWVzOiBhbnksXG4gICAgICAgICB6b29tOiA/bnVtYmVyLFxuICAgICAgICAgY29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLmZhaWxlZFRvQ3JlYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29udGV4dC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDdWxsRmFjZShjdWxsRmFjZU1vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLmZpeGVkVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRVbmlmb3Jtc1tuYW1lXS5zZXQodW5pZm9ybVZhbHVlc1tuYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zZXRVbmlmb3Jtcyhjb250ZXh0LCB0aGlzLmJpbmRlclVuaWZvcm1zLCBjdXJyZW50UHJvcGVydGllcywge3pvb206ICh6b29tOiBhbnkpfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltaXRpdmVTaXplID0ge1xuICAgICAgICAgICAgW2dsLkxJTkVTXTogMixcbiAgICAgICAgICAgIFtnbC5UUklBTkdMRVNdOiAzLFxuICAgICAgICAgICAgW2dsLkxJTkVfU1RSSVBdOiAxXG4gICAgICAgIH1bZHJhd01vZGVdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cy5nZXQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFvcyA9IHNlZ21lbnQudmFvcyB8fCAoc2VnbWVudC52YW9zID0ge30pO1xuICAgICAgICAgICAgY29uc3QgdmFvOiBWZXJ0ZXhBcnJheU9iamVjdCA9IHZhb3NbbGF5ZXJJRF0gfHwgKHZhb3NbbGF5ZXJJRF0gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoKSk7XG5cbiAgICAgICAgICAgIHZhby5iaW5kKFxuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCkgOiBbXSxcbiAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleE9mZnNldCxcbiAgICAgICAgICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZHJhd01vZGUsXG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKiBwcmltaXRpdmVTaXplLFxuICAgICAgICAgICAgICAgIGdsLlVOU0lHTkVEX1NIT1JULFxuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlT2Zmc2V0ICogcHJpbWl0aXZlU2l6ZSAqIDIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2Zcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxudHlwZSBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmXG58fTtcblxuZnVuY3Rpb24gcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLCBwYWludGVyOiBQYWludGVyLFxuICAgICAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcblxuICAgIGNvbnN0IHRpbGVSYXRpbyA9IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV90ZXhzaXplJzogdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLFxuICAgICAgICAndV9zY2FsZSc6IFt0aWxlUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAvLyBzcGxpdCB0aGUgcGl4ZWwgY29vcmQgaW50byB0d28gcGFpcnMgb2YgMTYgYml0IG51bWJlcnMuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2YgcHJlY2lzaW9uLlxuICAgICAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFtwaXhlbFggPj4gMTYsIHBpeGVsWSA+PiAxNl0sXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogW3BpeGVsWCAmIDB4RkZGRiwgcGl4ZWxZICYgMHhGRkZGXVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycywgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn1cbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcbiAgICBjb25zdCBpbWFnZVBvc0EgPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaW1hZ2VQb3NCID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICBhc3NlcnQoaW1hZ2VQb3NBICYmIGltYWdlUG9zQik7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmJyLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2InOiAoaW1hZ2VQb3NCOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2InOiAoaW1hZ2VQb3NCOiBhbnkpLmJyLFxuICAgICAgICAndV90ZXhzaXplJzogW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgICAndV9taXgnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgJ3VfcGF0dGVybl9zaXplX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmRpc3BsYXlTaXplLFxuICAgICAgICAndV9wYXR0ZXJuX3NpemVfYic6IChpbWFnZVBvc0I6IGFueSkuZGlzcGxheVNpemUsXG4gICAgICAgICd1X3NjYWxlX2EnOiBjcm9zc2ZhZGUuZnJvbVNjYWxlLFxuICAgICAgICAndV9zY2FsZV9iJzogY3Jvc3NmYWRlLnRvU2NhbGUsXG4gICAgICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSxcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBpeGVsIGNvb3JkIGludG8gdHdvIHBhaXJzIG9mIDE2IGJpdCBudW1iZXJzLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbi5cbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBbcGl4ZWxYID4+IDE2LCBwaXhlbFkgPj4gMTZdLFxuICAgICAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFtwaXhlbFggJiAweEZGRkYsIHBpeGVsWSAmIDB4RkZGRl1cbiAgICB9O1xufVxuZXhwb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzLCBwYXR0ZXJuVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB7bWF0MywgdmVjM30gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9saWdodHBvcyc6IFVuaWZvcm0zZixcbiAgICAndV9saWdodGludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9saWdodGNvbG9yJzogVW5pZm9ybTNmLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xpZ2h0cG9zJzogVW5pZm9ybTNmLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2xpZ2h0Y29sb3InOiBVbmlmb3JtM2YsXG4gICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGlnaHRwb3MnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0cG9zKSxcbiAgICAndV9saWdodGludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRpbnRlbnNpdHkpLFxuICAgICd1X2xpZ2h0Y29sb3InOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0Y29sb3IpLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV92ZXJ0aWNhbF9ncmFkaWVudCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xpZ2h0cG9zJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodHBvcyksXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0aW50ZW5zaXR5KSxcbiAgICAndV9saWdodGNvbG9yJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGNvbG9yKSxcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdmVydGljYWxfZ3JhZGllbnQpLFxuICAgICd1X2hlaWdodF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2hlaWdodF9mYWN0b3IpLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXNcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbGlnaHQgPSBwYWludGVyLnN0eWxlLmxpZ2h0O1xuICAgIGNvbnN0IF9scCA9IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdwb3NpdGlvbicpO1xuICAgIGNvbnN0IGxpZ2h0UG9zID0gW19scC54LCBfbHAueSwgX2xwLnpdO1xuICAgIGNvbnN0IGxpZ2h0TWF0ID0gbWF0My5jcmVhdGUoKTtcbiAgICBpZiAobGlnaHQucHJvcGVydGllcy5nZXQoJ2FuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIG1hdDMuZnJvbVJvdGF0aW9uKGxpZ2h0TWF0LCAtcGFpbnRlci50cmFuc2Zvcm0uYW5nbGUpO1xuICAgIH1cbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDMobGlnaHRQb3MsIGxpZ2h0UG9zLCBsaWdodE1hdCk7XG5cbiAgICBjb25zdCBsaWdodENvbG9yID0gbGlnaHQucHJvcGVydGllcy5nZXQoJ2NvbG9yJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2xpZ2h0cG9zJzogbGlnaHRQb3MsXG4gICAgICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbGlnaHQucHJvcGVydGllcy5nZXQoJ2ludGVuc2l0eScpLFxuICAgICAgICAndV9saWdodGNvbG9yJzogW2xpZ2h0Q29sb3IuciwgbGlnaHRDb2xvci5nLCBsaWdodENvbG9yLmJdLFxuICAgICAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6ICtzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LFxuICAgICAgICAndV9vcGFjaXR5Jzogb3BhY2l0eVxuICAgIH07XG59O1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQoZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KSxcbiAgICAgICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICAgICAge1xuICAgICAgICAgICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IC1NYXRoLnBvdygyLCBjb29yZC5vdmVyc2NhbGVkWikgLyB0aWxlLnRpbGVTaXplIC8gOFxuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1zLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBGaWxsVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsT3V0bGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcblxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbE91dGxpbmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKVxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBmaWxsVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8RmlsbFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXhcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKVxuKTtcblxuY29uc3QgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSksXG4gICAge1xuICAgICAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmV4cG9ydCB0eXBlIENpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTJmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfd2l0aF9tYXApLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGNpcmNsZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgbGV0IHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgZXh0cnVkZVNjYWxlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgcGl0Y2hXaXRoTWFwID0gdHJ1ZTtcbiAgICAgICAgZXh0cnVkZVNjYWxlID0gW3BpeGVsUmF0aW8sIHBpeGVsUmF0aW9dO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBpdGNoV2l0aE1hcCA9IGZhbHNlO1xuICAgICAgICBleHRydWRlU2NhbGUgPSB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiArKGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnKSxcbiAgICAgICAgJ3VfbWF0cml4JzogcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJykpLFxuICAgICAgICAndV9waXRjaF93aXRoX21hcCc6ICsocGl0Y2hXaXRoTWFwKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogZXh0cnVkZVNjYWxlXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7Y2lyY2xlVW5pZm9ybXMsIGNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogVW5pZm9ybTFmLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGNvbGxpc2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IENvbGxpc2lvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMpLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2V4dHJ1ZGVfc2NhbGUpLFxuICAgICd1X292ZXJzY2FsZV9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X292ZXJzY2FsZV9mYWN0b3IpXG59KTtcblxuY29uc3QgY29sbGlzaW9uVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPENvbGxpc2lvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0cmFuc2Zvcm0uem9vbSk7XG4gICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCBvdmVyc2NhbGVGYWN0b3IgPSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3VfcGl4ZWxzX3RvX3RpbGVfdW5pdHMnOiBwaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogW3RyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0gLyAocGl4ZWxSYXRpbyAqIHNjYWxlKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0gLyAocGl4ZWxSYXRpbyAqIHNjYWxlKV0sXG4gICAgICAgICd1X292ZXJzY2FsZV9mYWN0b3InOiBvdmVyc2NhbGVGYWN0b3JcbiAgICB9O1xufTtcblxuZXhwb3J0IHtjb2xsaXNpb25Vbmlmb3JtcywgY29sbGlzaW9uVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGYsXG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5leHBvcnQgdHlwZSBEZWJ1Z1VuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY29sb3InOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X292ZXJsYXknOiBVbmlmb3JtMWksXG4gICAgJ3Vfb3ZlcmxheV9zY2FsZSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGRlYnVnVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRGVidWdVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jb2xvcic6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3IpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9vdmVybGF5JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9vdmVybGF5KSxcbiAgICAndV9vdmVybGF5X3NjYWxlJzogIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcmxheV9zY2FsZSksXG59KTtcblxuY29uc3QgZGVidWdVbmlmb3JtVmFsdWVzID0gKG1hdHJpeDogRmxvYXQzMkFycmF5LCBjb2xvcjogQ29sb3IsIHNjYWxlUmF0aW86IG51bWJlciA9IDEpOiBVbmlmb3JtVmFsdWVzPERlYnVnVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9jb2xvcic6IGNvbG9yLFxuICAgICd1X292ZXJsYXknOiAwLFxuICAgICd1X292ZXJsYXlfc2NhbGUnOiBzY2FsZVJhdGlvXG59KTtcblxuZXhwb3J0IHtkZWJ1Z1VuaWZvcm1zLCBkZWJ1Z1VuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtVbmlmb3JtTWF0cml4NGZ9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgQ2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjbGlwcGluZ01hc2tVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDbGlwcGluZ01hc2tVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzID0gKG1hdHJpeDogRmxvYXQzMkFycmF5KTogVW5pZm9ybVZhbHVlczxDbGlwcGluZ01hc2tVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4XG59KTtcblxuZXhwb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtcywgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCB0eXBlIEhlYXRtYXBVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZlxufH07XG5cbmV4cG9ydCB0eXBlIEhlYXRtYXBUZXh0dXJlVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfd29ybGQnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfY29sb3JfcmFtcCc6IFVuaWZvcm0xaSxcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgaGVhdG1hcFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhlYXRtYXBVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9leHRydWRlX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9leHRydWRlX3NjYWxlKSxcbiAgICAndV9pbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ludGVuc2l0eSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgaGVhdG1hcFRleHR1cmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfY29sb3JfcmFtcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3JfcmFtcCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBoZWF0bWFwVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0aWxlOiBUaWxlLFxuICAgIHpvb206IG51bWJlcixcbiAgICBpbnRlbnNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIZWF0bWFwVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9leHRydWRlX3NjYWxlJzogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgem9vbSksXG4gICAgJ3VfaW50ZW5zaXR5JzogaW50ZW5zaXR5XG59KTtcblxuY29uc3QgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbGF5ZXI6IEhlYXRtYXBTdHlsZUxheWVyLFxuICAgIHRleHR1cmVVbml0OiBudW1iZXIsXG4gICAgY29sb3JSYW1wVW5pdDogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEhlYXRtYXBUZXh0dXJlVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICBtYXQ0Lm9ydGhvKG1hdHJpeCwgMCwgcGFpbnRlci53aWR0aCwgcGFpbnRlci5oZWlnaHQsIDAsIDAsIDEpO1xuXG4gICAgY29uc3QgZ2wgPSBwYWludGVyLmNvbnRleHQuZ2w7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X3dvcmxkJzogW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0sXG4gICAgICAgICd1X2ltYWdlJzogdGV4dHVyZVVuaXQsXG4gICAgICAgICd1X2NvbG9yX3JhbXAnOiBjb2xvclJhbXBVbml0LFxuICAgICAgICAndV9vcGFjaXR5JzogbGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKVxuICAgIH07XG59O1xuXG5leHBvcnQge1xuICAgIGhlYXRtYXBVbmlmb3JtcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1zLFxuICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzLFxuICAgIGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmLFxuICAgIFVuaWZvcm00ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi8uLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uLy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgSGlsbHNoYWRlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oaWxsc2hhZGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgREVNRGF0YSBmcm9tICcuLi8uLi9kYXRhL2RlbV9kYXRhJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCB0eXBlIEhpbGxzaGFkZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2xhdHJhbmdlJzogVW5pZm9ybTJmLFxuICAgICd1X2xpZ2h0JzogVW5pZm9ybTJmLFxuICAgICd1X3NoYWRvdyc6IFVuaWZvcm1Db2xvcixcbiAgICAndV9oaWdobGlnaHQnOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfYWNjZW50JzogVW5pZm9ybUNvbG9yXG58fTtcblxuZXhwb3J0IHR5cGUgSGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2RpbWVuc2lvbic6IFVuaWZvcm0yZixcbiAgICAndV96b29tJzogVW5pZm9ybTFmLFxuICAgICd1X21heHpvb20nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5wYWNrJzogVW5pZm9ybTRmXG58fTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGlsbHNoYWRlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfbGF0cmFuZ2UnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhdHJhbmdlKSxcbiAgICAndV9saWdodCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHQpLFxuICAgICd1X3NoYWRvdyc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfc2hhZG93KSxcbiAgICAndV9oaWdobGlnaHQnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2hpZ2hsaWdodCksXG4gICAgJ3VfYWNjZW50JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9hY2NlbnQpXG59KTtcblxuY29uc3QgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV9kaW1lbnNpb24nOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RpbWVuc2lvbiksXG4gICAgJ3Vfem9vbSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfem9vbSksXG4gICAgJ3VfbWF4em9vbSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF4em9vbSksXG4gICAgJ3VfdW5wYWNrJzogbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbnMudV91bnBhY2spXG59KTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IEhpbGxzaGFkZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGlsbHNoYWRlVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3Qgc2hhZG93ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiKTtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCIpO1xuICAgIGNvbnN0IGFjY2VudCA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIik7XG5cbiAgICBsZXQgYXppbXV0aGFsID0gbGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbicpICogKE1hdGguUEkgLyAxODApO1xuICAgIC8vIG1vZGlmeSBhemltdXRoYWwgYW5nbGUgYnkgbWFwIHJvdGF0aW9uIGlmIGxpZ2h0IGlzIGFuY2hvcmVkIGF0IHRoZSB2aWV3cG9ydFxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2hpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yJykgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgYXppbXV0aGFsIC09IHBhaW50ZXIudHJhbnNmb3JtLmFuZ2xlO1xuICAgIH1cbiAgICBjb25zdCBhbGlnbiA9ICFwYWludGVyLm9wdGlvbnMubW92aW5nO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IHBhaW50ZXIudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh0aWxlLnRpbGVJRC50b1Vud3JhcHBlZCgpLCBhbGlnbiksXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfbGF0cmFuZ2UnOiBnZXRUaWxlTGF0UmFuZ2UocGFpbnRlciwgdGlsZS50aWxlSUQpLFxuICAgICAgICAndV9saWdodCc6IFtsYXllci5wYWludC5nZXQoJ2hpbGxzaGFkZS1leGFnZ2VyYXRpb24nKSwgYXppbXV0aGFsXSxcbiAgICAgICAgJ3Vfc2hhZG93Jzogc2hhZG93LFxuICAgICAgICAndV9oaWdobGlnaHQnOiBoaWdobGlnaHQsXG4gICAgICAgICd1X2FjY2VudCc6IGFjY2VudFxuICAgIH07XG59O1xuXG5jb25zdCBoaWxsc2hhZGVVbmlmb3JtUHJlcGFyZVZhbHVlcyA9IChcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRlbTogREVNRGF0YSwgbWF4em9vbTogbnVtYmVyXG4pOiBVbmlmb3JtVmFsdWVzPEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGU+ID0+IHtcblxuICAgIGNvbnN0IHN0cmlkZSA9IGRlbS5zdHJpZGU7XG4gICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAvLyBGbGlwIHJlbmRlcmluZyBhdCB5IGF4aXMuXG4gICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIEVYVEVOVCwgLUVYVEVOVCwgMCwgMCwgMSk7XG4gICAgbWF0NC50cmFuc2xhdGUobWF0cml4LCBtYXRyaXgsIFswLCAtRVhURU5ULCAwXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2ltYWdlJzogMSxcbiAgICAgICAgJ3VfZGltZW5zaW9uJzogW3N0cmlkZSwgc3RyaWRlXSxcbiAgICAgICAgJ3Vfem9vbSc6IHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgJ3VfbWF4em9vbSc6IG1heHpvb20sXG4gICAgICAgICd1X3VucGFjayc6IGRlbS5nZXRVbnBhY2tWZWN0b3IoKVxuICAgIH07XG59O1xuXG5mdW5jdGlvbiBnZXRUaWxlTGF0UmFuZ2UocGFpbnRlcjogUGFpbnRlciwgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgLy8gZm9yIHNjYWxpbmcgdGhlIG1hZ25pdHVkZSBvZiBhIHBvaW50cyBzbG9wZSBieSBpdHMgbGF0aXR1ZGVcbiAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHRpbGVJRC5jYW5vbmljYWwueik7XG4gICAgY29uc3QgeSA9IHRpbGVJRC5jYW5vbmljYWwueTtcbiAgICByZXR1cm4gW1xuICAgICAgICBuZXcgTWVyY2F0b3JDb29yZGluYXRlKDAsIHkgLyB0aWxlc0F0Wm9vbSkudG9MbmdMYXQoKS5sYXQsXG4gICAgICAgIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoMCwgKHkgKyAxKSAvIHRpbGVzQXRab29tKS50b0xuZ0xhdCgpLmxhdF07XG59XG5cbmV4cG9ydCB7XG4gICAgaGlsbHNoYWRlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5leHBvcnQgdHlwZSBMaW5lVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZlxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZVNERlVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybnNjYWxlX2InOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2RmZ2FtbWEnOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4X3lfYSc6IFVuaWZvcm0xZixcbiAgICAndV90ZXhfeV9iJzogVW5pZm9ybTFmLFxuICAgICd1X21peCc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGxpbmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKVxufSk7XG5cbmNvbnN0IGxpbmVHcmFkaWVudFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKVxufSk7XG5cbmNvbnN0IGxpbmVQYXR0ZXJuVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3Vfc2NhbGUnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlKSxcbiAgICAndV9mYWRlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlKVxufSk7XG5cbmNvbnN0IGxpbmVTREZVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lU0RGVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5pdHNfdG9fcGl4ZWxzKSxcbiAgICAndV9wYXR0ZXJuc2NhbGVfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybnNjYWxlX2EpLFxuICAgICd1X3BhdHRlcm5zY2FsZV9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuc2NhbGVfYiksXG4gICAgJ3Vfc2RmZ2FtbWEnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NkZmdhbW1hKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleF95X2EnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleF95X2EpLFxuICAgICd1X3RleF95X2InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleF95X2IpLFxuICAgICd1X21peCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWl4KVxufSk7XG5cbmNvbnN0IGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSxcbiAgICAgICAgJ3VfcmF0aW8nOiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFtcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLFxuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV1cbiAgICAgICAgXVxuICAgIH07XG59O1xuXG5jb25zdCBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8TGluZUdyYWRpZW50VW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgcmV0dXJuIGV4dGVuZChsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciksIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwXG4gICAgfSk7XG59O1xuXG5jb25zdCBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnNcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCB0aWxlWm9vbVJhdGlvID0gY2FsY3VsYXRlVGlsZVJhdGlvKHRpbGUsIHRyYW5zZm9ybSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxcbiAgICAgICAgLy8gY2FtZXJhIHpvb20gcmF0aW9cbiAgICAgICAgJ3VfcmF0aW8nOiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3Vfc2NhbGUnOiBbdGlsZVpvb21SYXRpbywgY3Jvc3NmYWRlLmZyb21TY2FsZSwgY3Jvc3NmYWRlLnRvU2NhbGVdLFxuICAgICAgICAndV9mYWRlJzogY3Jvc3NmYWRlLnQsXG4gICAgICAgICd1X3VuaXRzX3RvX3BpeGVscyc6IFtcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLFxuICAgICAgICAgICAgMSAvIHRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV1cbiAgICAgICAgXVxuICAgIH07XG59O1xuXG5jb25zdCBsaW5lU0RGVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyLFxuICAgIGRhc2hhcnJheTogQ3Jvc3NGYWRlZDxBcnJheTxudW1iZXI+PixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnNcbik6IFVuaWZvcm1WYWx1ZXM8TGluZVNERlVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuICAgIGNvbnN0IGxpbmVBdGxhcyA9IHBhaW50ZXIubGluZUF0bGFzO1xuICAgIGNvbnN0IHRpbGVSYXRpbyA9IGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlLCB0cmFuc2Zvcm0pO1xuXG4gICAgY29uc3Qgcm91bmQgPSBsYXllci5sYXlvdXQuZ2V0KCdsaW5lLWNhcCcpID09PSAncm91bmQnO1xuXG4gICAgY29uc3QgcG9zQSA9IGxpbmVBdGxhcy5nZXREYXNoKGRhc2hhcnJheS5mcm9tLCByb3VuZCk7XG4gICAgY29uc3QgcG9zQiA9IGxpbmVBdGxhcy5nZXREYXNoKGRhc2hhcnJheS50bywgcm91bmQpO1xuXG4gICAgY29uc3Qgd2lkdGhBID0gcG9zQS53aWR0aCAqIGNyb3NzZmFkZS5mcm9tU2NhbGU7XG4gICAgY29uc3Qgd2lkdGhCID0gcG9zQi53aWR0aCAqIGNyb3NzZmFkZS50b1NjYWxlO1xuXG4gICAgcmV0dXJuIGV4dGVuZChsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciksIHtcbiAgICAgICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBbdGlsZVJhdGlvIC8gd2lkdGhBLCAtcG9zQS5oZWlnaHQgLyAyXSxcbiAgICAgICAgJ3VfcGF0dGVybnNjYWxlX2InOiBbdGlsZVJhdGlvIC8gd2lkdGhCLCAtcG9zQi5oZWlnaHQgLyAyXSxcbiAgICAgICAgJ3Vfc2RmZ2FtbWEnOiBsaW5lQXRsYXMud2lkdGggLyAoTWF0aC5taW4od2lkdGhBLCB3aWR0aEIpICogMjU2ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvKSAvIDIsXG4gICAgICAgICd1X2ltYWdlJzogMCxcbiAgICAgICAgJ3VfdGV4X3lfYSc6IHBvc0EueSxcbiAgICAgICAgJ3VfdGV4X3lfYic6IHBvc0IueSxcbiAgICAgICAgJ3VfbWl4JzogY3Jvc3NmYWRlLnRcbiAgICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlOiBUaWxlLCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgIHJldHVybiAxIC8gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgdHJhbnNmb3JtLnRpbGVab29tKTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlTWF0cml4KHBhaW50ZXIsIHRpbGUsIGxheWVyKSB7XG4gICAgcmV0dXJuIHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KFxuICAgICAgICB0aWxlLnRpbGVJRC5wb3NNYXRyaXgsXG4gICAgICAgIHRpbGUsXG4gICAgICAgIGxheWVyLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSxcbiAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZS1hbmNob3InKVxuICAgICk7XG59XG5cbmV4cG9ydCB7XG4gICAgbGluZVVuaWZvcm1zLFxuICAgIGxpbmVHcmFkaWVudFVuaWZvcm1zLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgbGluZVNERlVuaWZvcm1zLFxuICAgIGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVHcmFkaWVudFVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVTREZVbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFJhc3RlclN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IHR5cGUgUmFzdGVyVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfdGxfcGFyZW50JzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IFVuaWZvcm0xZixcbiAgICAndV9idWZmZXJfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV90JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWYsXG4gICAgJ3VfaW1hZ2UwJzogVW5pZm9ybTFpLFxuICAgICd1X2ltYWdlMSc6IFVuaWZvcm0xaSxcbiAgICAndV9icmlnaHRuZXNzX2xvdyc6IFVuaWZvcm0xZixcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBVbmlmb3JtMWYsXG4gICAgJ3VfY29udHJhc3RfZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IFVuaWZvcm0zZlxufH07XG5cbmNvbnN0IHJhc3RlclVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFJhc3RlclVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV90bF9wYXJlbnQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RsX3BhcmVudCksXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZV9wYXJlbnQpLFxuICAgICd1X2J1ZmZlcl9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnVmZmVyX3NjYWxlKSxcbiAgICAndV9mYWRlX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfdCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSksXG4gICAgJ3VfaW1hZ2UwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZTApLFxuICAgICd1X2ltYWdlMSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UxKSxcbiAgICAndV9icmlnaHRuZXNzX2xvdyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnJpZ2h0bmVzc19sb3cpLFxuICAgICd1X2JyaWdodG5lc3NfaGlnaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYnJpZ2h0bmVzc19oaWdoKSxcbiAgICAndV9zYXR1cmF0aW9uX2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2F0dXJhdGlvbl9mYWN0b3IpLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY29udHJhc3RfZmFjdG9yKSxcbiAgICAndV9zcGluX3dlaWdodHMnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NwaW5fd2VpZ2h0cylcbn0pO1xuXG5jb25zdCByYXN0ZXJVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHBhcmVudFRMOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHBhcmVudFNjYWxlQnk6IG51bWJlcixcbiAgICBmYWRlOiB7bWl4OiBudW1iZXIsIG9wYWNpdHk6IG51bWJlcn0sXG4gICAgbGF5ZXI6IFJhc3RlclN0eWxlTGF5ZXJcbik6IFVuaWZvcm1WYWx1ZXM8UmFzdGVyVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV90bF9wYXJlbnQnOiBwYXJlbnRUTCxcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBwYXJlbnRTY2FsZUJ5LFxuICAgICd1X2J1ZmZlcl9zY2FsZSc6IDEsXG4gICAgJ3VfZmFkZV90JzogZmFkZS5taXgsXG4gICAgJ3Vfb3BhY2l0eSc6IGZhZGUub3BhY2l0eSAqIGxheWVyLnBhaW50LmdldCgncmFzdGVyLW9wYWNpdHknKSxcbiAgICAndV9pbWFnZTAnOiAwLFxuICAgICd1X2ltYWdlMSc6IDEsXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1icmlnaHRuZXNzLW1pbicpLFxuICAgICd1X2JyaWdodG5lc3NfaGlnaCc6IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWJyaWdodG5lc3MtbWF4JyksXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBzYXR1cmF0aW9uRmFjdG9yKGxheWVyLnBhaW50LmdldCgncmFzdGVyLXNhdHVyYXRpb24nKSksXG4gICAgJ3VfY29udHJhc3RfZmFjdG9yJzogY29udHJhc3RGYWN0b3IobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItY29udHJhc3QnKSksXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogc3BpbldlaWdodHMobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItaHVlLXJvdGF0ZScpKVxufSk7XG5cbmZ1bmN0aW9uIHNwaW5XZWlnaHRzKGFuZ2xlKSB7XG4gICAgYW5nbGUgKj0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgKDIgKiBjICsgMSkgLyAzLFxuICAgICAgICAoLU1hdGguc3FydCgzKSAqIHMgLSBjICsgMSkgLyAzLFxuICAgICAgICAoTWF0aC5zcXJ0KDMpICogcyAtIGMgKyAxKSAvIDNcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBjb250cmFzdEZhY3Rvcihjb250cmFzdCkge1xuICAgIHJldHVybiBjb250cmFzdCA+IDAgP1xuICAgICAgICAxIC8gKDEgLSBjb250cmFzdCkgOlxuICAgICAgICAxICsgY29udHJhc3Q7XG59XG5cbmZ1bmN0aW9uIHNhdHVyYXRpb25GYWN0b3Ioc2F0dXJhdGlvbikge1xuICAgIHJldHVybiBzYXR1cmF0aW9uID4gMCA/XG4gICAgICAgIDEgLSAxIC8gKDEuMDAxIC0gc2F0dXJhdGlvbikgOlxuICAgICAgICAtc2F0dXJhdGlvbjtcbn1cblxuZXhwb3J0IHtyYXN0ZXJVbmlmb3JtcywgcmFzdGVyVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJY29uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHR1cmUnOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xTREZVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2l6ZV90JzogVW5pZm9ybTFmLFxuICAgICd1X3NpemUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9waXRjaCc6IFVuaWZvcm0xZixcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogVW5pZm9ybTFpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9mYWRlX2NoYW5nZSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pc190ZXh0JzogVW5pZm9ybTFpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4dHVyZSc6IFVuaWZvcm0xaSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfaXNfaGFsbyc6IFVuaWZvcm0xaVxufH07XG5cbmV4cG9ydCB0eXBlIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemVfaWNvbic6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleHR1cmVfaWNvbic6IFVuaWZvcm0xaSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfaXNfaGFsbyc6IFVuaWZvcm0xaVxufH07XG5cbmNvbnN0IHN5bWJvbEljb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBTeW1ib2xJY29uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX3pvb21fY29uc3RhbnQpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSxcbiAgICAndV9zaXplX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemVfdCksXG4gICAgJ3Vfc2l6ZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZSksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3VfcGl0Y2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoKSxcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9yb3RhdGVfc3ltYm9sKSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2FzcGVjdF9yYXRpbyksXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfY2hhbmdlKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9sYWJlbF9wbGFuZV9tYXRyaXgpLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfY29vcmRfbWF0cml4KSxcbiAgICAndV9pc190ZXh0JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc190ZXh0KSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2hfd2l0aF9tYXApLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpXG59KTtcblxuY29uc3Qgc3ltYm9sU0RGVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogU3ltYm9sU0RGVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX3pvb21fY29uc3RhbnQpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSxcbiAgICAndV9zaXplX3QnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemVfdCksXG4gICAgJ3Vfc2l6ZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZSksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3VfcGl0Y2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoKSxcbiAgICAndV9yb3RhdGVfc3ltYm9sJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9yb3RhdGVfc3ltYm9sKSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2FzcGVjdF9yYXRpbyksXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGVfY2hhbmdlKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9sYWJlbF9wbGFuZV9tYXRyaXgpLFxuICAgICd1X2Nvb3JkX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfY29vcmRfbWF0cml4KSxcbiAgICAndV9pc190ZXh0JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc190ZXh0KSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2hfd2l0aF9tYXApLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpLFxuICAgICd1X2dhbW1hX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9nYW1tYV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2lzX2hhbG8nOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX2hhbG8pXG59KTtcblxuY29uc3Qgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXhzaXplX2ljb24nOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemVfaWNvbiksXG4gICAgJ3VfdGV4dHVyZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZSksXG4gICAgJ3VfdGV4dHVyZV9pY29uJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlX2ljb24pLFxuICAgICd1X2dhbW1hX3NjYWxlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9nYW1tYV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2lzX2hhbG8nOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX2hhbG8pXG59KTtcblxuY29uc3Qgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xJY29uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiArKGZ1bmN0aW9uVHlwZSA9PT0gJ2NvbnN0YW50JyB8fCBmdW5jdGlvblR5cGUgPT09ICdzb3VyY2UnKSxcbiAgICAgICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogKyhmdW5jdGlvblR5cGUgPT09ICdjb25zdGFudCcgfHwgZnVuY3Rpb25UeXBlID09PSAnY2FtZXJhJyksXG4gICAgICAgICd1X3NpemVfdCc6IHNpemUgPyBzaXplLnVTaXplVCA6IDAsXG4gICAgICAgICd1X3NpemUnOiBzaXplID8gc2l6ZS51U2l6ZSA6IDAsXG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3VfcGl0Y2gnOiB0cmFuc2Zvcm0ucGl0Y2ggLyAzNjAgKiAyICogTWF0aC5QSSxcbiAgICAgICAgJ3Vfcm90YXRlX3N5bWJvbCc6ICtyb3RhdGVJblNoYWRlcixcbiAgICAgICAgJ3VfYXNwZWN0X3JhdGlvJzogdHJhbnNmb3JtLndpZHRoIC8gdHJhbnNmb3JtLmhlaWdodCxcbiAgICAgICAgJ3VfZmFkZV9jaGFuZ2UnOiBwYWludGVyLm9wdGlvbnMuZmFkZUR1cmF0aW9uID8gcGFpbnRlci5zeW1ib2xGYWRlQ2hhbmdlIDogMSxcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAndV9jb29yZF9tYXRyaXgnOiBnbENvb3JkTWF0cml4LFxuICAgICAgICAndV9pc190ZXh0JzogK2lzVGV4dCxcbiAgICAgICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiArcGl0Y2hXaXRoTWFwLFxuICAgICAgICAndV90ZXhzaXplJzogdGV4U2l6ZSxcbiAgICAgICAgJ3VfdGV4dHVyZSc6IDBcbiAgICB9O1xufTtcblxuY29uc3Qgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcyA9IChcbiAgICBmdW5jdGlvblR5cGU6IHN0cmluZyxcbiAgICBzaXplOiA/e3VTaXplVDogbnVtYmVyLCB1U2l6ZTogbnVtYmVyfSxcbiAgICByb3RhdGVJblNoYWRlcjogYm9vbGVhbixcbiAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgZ2xDb29yZE1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGlzVGV4dDogYm9vbGVhbixcbiAgICB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGlzSGFsbzogYm9vbGVhblxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xTREZVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiBleHRlbmQoc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMoZnVuY3Rpb25UeXBlLCBzaXplLFxuICAgICAgICByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgIGdsQ29vcmRNYXRyaXgsIGlzVGV4dCwgdGV4U2l6ZSksIHtcbiAgICAgICAgJ3VfZ2FtbWFfc2NhbGUnOiAocGl0Y2hXaXRoTWFwID8gTWF0aC5jb3ModHJhbnNmb3JtLl9waXRjaCkgKiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSA6IDEpLFxuICAgICAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICd1X2lzX2hhbG8nOiAraXNIYWxvXG4gICAgfSk7XG59O1xuXG5jb25zdCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICB0ZXhTaXplU0RGOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHRleFNpemVJY29uOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPFN5bWJvbEljb25Vbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICByZXR1cm4gZXh0ZW5kKHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoZnVuY3Rpb25UeXBlLCBzaXplLFxuICAgICAgICByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgIGdsQ29vcmRNYXRyaXgsIHRydWUsIHRleFNpemVTREYsIHRydWUpLCB7XG4gICAgICAgICd1X3RleHNpemVfaWNvbic6IHRleFNpemVJY29uLFxuICAgICAgICAndV90ZXh0dXJlX2ljb24nOiAxXG4gICAgfSk7XG59O1xuXG5leHBvcnQge3N5bWJvbEljb25Vbmlmb3Jtcywgc3ltYm9sU0RGVW5pZm9ybXMsIHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzLCBzeW1ib2xTREZVbmlmb3JtVmFsdWVzLCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXMsIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIEJhY2tncm91bmRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yXG58fTtcblxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGJhY2tncm91bmRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2NvbG9yJzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9jb2xvcilcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3RsX2EpLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9icl9hKSxcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fdGxfYiksXG4gICAgJ3VfcGF0dGVybl9icl9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX2JyX2IpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X21peCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbWl4KSxcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9zaXplX2EpLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3NpemVfYiksXG4gICAgJ3Vfc2NhbGVfYSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYSksXG4gICAgJ3Vfc2NhbGVfYic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfYiksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90aWxlX3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBvcGFjaXR5OiBudW1iZXIsXG4gICAgY29sb3I6IENvbG9yXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRVbmlmb3Jtc1R5cGU+ID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICd1X29wYWNpdHknOiBvcGFjaXR5LFxuICAgICd1X2NvbG9yJzogY29sb3Jcbn0pO1xuXG5jb25zdCBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sXG4gICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiBleHRlbmQoXG4gICAgYmdQYXR0ZXJuVW5pZm9ybVZhbHVlcyhpbWFnZSwgY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IG9wYWNpdHlcbiAgICB9XG4pO1xuXG5leHBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZmlsbEV4dHJ1c2lvblVuaWZvcm1zLCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtmaWxsVW5pZm9ybXMsIGZpbGxQYXR0ZXJuVW5pZm9ybXMsIGZpbGxPdXRsaW5lVW5pZm9ybXMsIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zfSBmcm9tICcuL2ZpbGxfcHJvZ3JhbSc7XG5pbXBvcnQge2NpcmNsZVVuaWZvcm1zfSBmcm9tICcuL2NpcmNsZV9wcm9ncmFtJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybXN9IGZyb20gJy4vY29sbGlzaW9uX3Byb2dyYW0nO1xuaW1wb3J0IHtkZWJ1Z1VuaWZvcm1zfSBmcm9tICcuL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3Jtc30gZnJvbSAnLi9jbGlwcGluZ19tYXNrX3Byb2dyYW0nO1xuaW1wb3J0IHtoZWF0bWFwVW5pZm9ybXMsIGhlYXRtYXBUZXh0dXJlVW5pZm9ybXN9IGZyb20gJy4vaGVhdG1hcF9wcm9ncmFtJztcbmltcG9ydCB7aGlsbHNoYWRlVW5pZm9ybXMsIGhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc30gZnJvbSAnLi9oaWxsc2hhZGVfcHJvZ3JhbSc7XG5pbXBvcnQge2xpbmVVbmlmb3JtcywgbGluZUdyYWRpZW50VW5pZm9ybXMsIGxpbmVQYXR0ZXJuVW5pZm9ybXMsIGxpbmVTREZVbmlmb3Jtc30gZnJvbSAnLi9saW5lX3Byb2dyYW0nO1xuaW1wb3J0IHtyYXN0ZXJVbmlmb3Jtc30gZnJvbSAnLi9yYXN0ZXJfcHJvZ3JhbSc7XG5pbXBvcnQge3N5bWJvbEljb25Vbmlmb3Jtcywgc3ltYm9sU0RGVW5pZm9ybXMsIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXN9IGZyb20gJy4vc3ltYm9sX3Byb2dyYW0nO1xuaW1wb3J0IHtiYWNrZ3JvdW5kVW5pZm9ybXMsIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXN9IGZyb20gJy4vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuZXhwb3J0IGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IHtcbiAgICBmaWxsRXh0cnVzaW9uOiBmaWxsRXh0cnVzaW9uVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm46IGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbDogZmlsbFVuaWZvcm1zLFxuICAgIGZpbGxQYXR0ZXJuOiBmaWxsUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lOiBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVybjogZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgY2lyY2xlOiBjaXJjbGVVbmlmb3JtcyxcbiAgICBjb2xsaXNpb25Cb3g6IGNvbGxpc2lvblVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkNpcmNsZTogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgZGVidWc6IGRlYnVnVW5pZm9ybXMsXG4gICAgY2xpcHBpbmdNYXNrOiBjbGlwcGluZ01hc2tVbmlmb3JtcyxcbiAgICBoZWF0bWFwOiBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmU6IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMsXG4gICAgaGlsbHNoYWRlOiBoaWxsc2hhZGVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVQcmVwYXJlOiBoaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXMsXG4gICAgbGluZTogbGluZVVuaWZvcm1zLFxuICAgIGxpbmVHcmFkaWVudDogbGluZUdyYWRpZW50VW5pZm9ybXMsXG4gICAgbGluZVBhdHRlcm46IGxpbmVQYXR0ZXJuVW5pZm9ybXMsXG4gICAgbGluZVNERjogbGluZVNERlVuaWZvcm1zLFxuICAgIHJhc3RlcjogcmFzdGVyVW5pZm9ybXMsXG4gICAgc3ltYm9sSWNvbjogc3ltYm9sSWNvblVuaWZvcm1zLFxuICAgIHN5bWJvbFNERjogc3ltYm9sU0RGVW5pZm9ybXMsXG4gICAgc3ltYm9sVGV4dEFuZEljb246IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZDogYmFja2dyb3VuZFVuaWZvcm1zLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuOiBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7Y29sbGlzaW9uVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NvbGxpc2lvbkRlYnVnO1xuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCBkcmF3Q2lyY2xlczogYm9vbGVhbixcbiAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sIHRyYW5zbGF0ZUFuY2hvcjogJ21hcCcgfCAndmlld3BvcnQnLCBpc1RleHQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBwcm9ncmFtID0gZHJhd0NpcmNsZXMgPyBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkNpcmNsZScpIDogcGFpbnRlci51c2VQcm9ncmFtKCdjb2xsaXNpb25Cb3gnKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP1N5bWJvbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IGRyYXdDaXJjbGVzID8gKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQ2lyY2xlIDogYnVja2V0Lmljb25Db2xsaXNpb25DaXJjbGUpIDogKGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94IDogYnVja2V0Lmljb25Db2xsaXNpb25Cb3gpO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcG9zTWF0cml4ID0gY29vcmQucG9zTWF0cml4O1xuICAgICAgICBpZiAodHJhbnNsYXRlWzBdICE9PSAwIHx8IHRyYW5zbGF0ZVsxXSAhPT0gMCkge1xuICAgICAgICAgICAgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGRyYXdDaXJjbGVzID8gZ2wuVFJJQU5HTEVTIDogZ2wuTElORVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksXG4gICAgICAgICAgICBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aWxlKSxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWZmZXJzLmxheW91dFZlcnRleEJ1ZmZlciwgYnVmZmVycy5pbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIGJ1ZmZlcnMuc2VnbWVudHMsIG51bGwsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIG51bGwsIG51bGwsXG4gICAgICAgICAgICBidWZmZXJzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgZHJhd0NvbGxpc2lvbkRlYnVnR2VvbWV0cnkocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGZhbHNlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgaXNUZXh0KTtcbiAgICBkcmF3Q29sbGlzaW9uRGVidWdHZW9tZXRyeShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsIGlzVGV4dCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgZHJhd0NvbGxpc2lvbkRlYnVnIGZyb20gJy4vZHJhd19jb2xsaXNpb25fZGVidWcnO1xuXG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgKiBhcyBzeW1ib2xQcm9qZWN0aW9uIGZyb20gJy4uL3N5bWJvbC9wcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmNvbnN0IGlkZW50aXR5TWF0NCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHtnZXRBbmNob3JBbGlnbm1lbnQsIFdyaXRpbmdNb2RlfSBmcm9tICcuLi9zeW1ib2wvc2hhcGluZyc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4uL3N5bWJvbC9vbmVfZW0nO1xuaW1wb3J0IHtldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX2xheW91dCc7XG5cbmltcG9ydCB7XG4gICAgc3ltYm9sSWNvblVuaWZvcm1WYWx1ZXMsXG4gICAgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcyxcbiAgICBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQsIHtTeW1ib2xCdWZmZXJzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7U3ltYm9sU0RGVW5pZm9ybXNUeXBlfSBmcm9tICcuLi9yZW5kZXIvcHJvZ3JhbS9zeW1ib2xfcHJvZ3JhbSc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NUaWxlSUQsIFZhcmlhYmxlT2Zmc2V0fSBmcm9tICcuLi9zeW1ib2wvcGxhY2VtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd1N5bWJvbHM7XG5cbnR5cGUgU3ltYm9sVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yLFxuICAgIHNvcnRLZXk6IG51bWJlcixcbiAgICBzdGF0ZToge1xuICAgICAgICBwcm9ncmFtOiBhbnksXG4gICAgICAgIGJ1ZmZlcnM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgIHVuaWZvcm1WYWx1ZXM6IGFueSxcbiAgICAgICAgYXRsYXNUZXh0dXJlOiBUZXh0dXJlLFxuICAgICAgICBhdGxhc1RleHR1cmVJY29uOiBUZXh0dXJlIHwgbnVsbCxcbiAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uOiBhbnksXG4gICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb246IGFueSxcbiAgICAgICAgaXNTREY6IGJvb2xlYW4sXG4gICAgICAgIGhhc0hhbG86IGJvb2xlYW5cbiAgICB9XG59O1xuXG5mdW5jdGlvbiBkcmF3U3ltYm9scyhwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+LCB2YXJpYWJsZU9mZnNldHM6IHtbXzogQ3Jvc3NUaWxlSURdOiBWYXJpYWJsZU9mZnNldH0pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICAvLyBEaXNhYmxlIHRoZSBzdGVuY2lsIHRlc3Qgc28gdGhhdCBsYWJlbHMgYXJlbid0IGNsaXBwZWQgdG8gdGlsZSBib3VuZGFyaWVzLlxuICAgIGNvbnN0IHN0ZW5jaWxNb2RlID0gU3RlbmNpbE1vZGUuZGlzYWJsZWQ7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG4gICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgLy9Db21wdXRlIHZhcmlhYmxlLW9mZnNldHMgYmVmb3JlIHBhaW50aW5nIHNpbmNlIGljb25zIGFuZCB0ZXh0IGRhdGEgcG9zaXRpb25pbmdcbiAgICAvL2RlcGVuZCBvbiBlYWNoIG90aGVyIGluIHRoaXMgY2FzZS5cbiAgICBpZiAodmFyaWFibGVQbGFjZW1lbnQpIHtcbiAgICAgICAgdXBkYXRlVmFyaWFibGVBbmNob3JzKGNvb3JkcywgcGFpbnRlciwgbGF5ZXIsIHNvdXJjZUNhY2hlLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICB2YXJpYWJsZU9mZnNldHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdpY29uLW9wYWNpdHknKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGZhbHNlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1rZWVwLXVwcmlnaHQnKSxcbiAgICAgICAgICAgIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LW9wYWNpdHknKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIHRydWUsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LWtlZXAtdXByaWdodCcpLFxuICAgICAgICAgICAgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VDYWNoZS5tYXAuc2hvd0NvbGxpc2lvbkJveGVzKSB7XG4gICAgICAgIGRyYXdDb2xsaXNpb25EZWJ1ZyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCd0ZXh0LXRyYW5zbGF0ZS1hbmNob3InKSwgdHJ1ZSk7XG4gICAgICAgIGRyYXdDb2xsaXNpb25EZWJ1ZyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdpY29uLXRyYW5zbGF0ZS1hbmNob3InKSwgZmFsc2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlVmFyaWFibGVSZW5kZXJTaGlmdChhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSwgcmVuZGVyVGV4dFNpemUpOiBQb2ludCB7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQoYW5jaG9yKTtcbiAgICBjb25zdCBzaGlmdFggPSAtKGhvcml6b250YWxBbGlnbiAtIDAuNSkgKiB3aWR0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAtKHZlcnRpY2FsQWxpZ24gLSAwLjUpICogaGVpZ2h0O1xuICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gZXZhbHVhdGVWYXJpYWJsZU9mZnNldChhbmNob3IsIHRleHRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgUG9pbnQoXG4gICAgICAgIChzaGlmdFggLyB0ZXh0Qm94U2NhbGUgKyB2YXJpYWJsZU9mZnNldFswXSkgKiByZW5kZXJUZXh0U2l6ZSxcbiAgICAgICAgKHNoaWZ0WSAvIHRleHRCb3hTY2FsZSArIHZhcmlhYmxlT2Zmc2V0WzFdKSAqIHJlbmRlclRleHRTaXplXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFyaWFibGVBbmNob3JzKGNvb3JkcywgcGFpbnRlciwgbGF5ZXIsIHNvdXJjZUNhY2hlLCByb3RhdGlvbkFsaWdubWVudCwgcGl0Y2hBbGlnbm1lbnQsIHZhcmlhYmxlT2Zmc2V0cykge1xuICAgIGNvbnN0IHRyID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3Qgcm90YXRlV2l0aE1hcCA9IHJvdGF0aW9uQWxpZ25tZW50ID09PSAnbWFwJztcbiAgICBjb25zdCBwaXRjaFdpdGhNYXAgPSBwaXRjaEFsaWdubWVudCA9PT0gJ21hcCc7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogU3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQgfHwgIWJ1Y2tldC50ZXh0IHx8ICFidWNrZXQudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHNpemVEYXRhID0gYnVja2V0LnRleHRTaXplRGF0YTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgdHIuem9vbSk7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxUb1RpbGVTY2FsZSA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcGl4ZWxUb1RpbGVTY2FsZSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVRleHRGaXRJY29uID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZScgJiYgIGJ1Y2tldC5oYXNJY29uRGF0YSgpO1xuXG4gICAgICAgIGlmIChzaXplKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlU2NhbGUgPSBNYXRoLnBvdygyLCB0ci56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICAgICAgdXBkYXRlVmFyaWFibGVBbmNob3JzRm9yQnVja2V0KGJ1Y2tldCwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB2YXJpYWJsZU9mZnNldHMsIHN5bWJvbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIsIGxhYmVsUGxhbmVNYXRyaXgsIGNvb3JkLnBvc01hdHJpeCwgdGlsZVNjYWxlLCBzaXplLCB1cGRhdGVUZXh0Rml0SWNvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZhcmlhYmxlQW5jaG9yc0ZvckJ1Y2tldChidWNrZXQsIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdmFyaWFibGVPZmZzZXRzLCBzeW1ib2xTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSwgbGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4LCB0aWxlU2NhbGUsIHNpemUsIHVwZGF0ZVRleHRGaXRJY29uKSB7XG4gICAgY29uc3QgcGxhY2VkU3ltYm9scyA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5O1xuICAgIGNvbnN0IGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkgPSBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7XG4gICAgY29uc3QgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSA9IGJ1Y2tldC5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBwbGFjZWRUZXh0U2hpZnRzID0ge307XG5cbiAgICBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5LmNsZWFyKCk7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwbGFjZWRTeW1ib2xzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbDogYW55ID0gcGxhY2VkU3ltYm9scy5nZXQocyk7XG4gICAgICAgIGNvbnN0IHNraXBPcmllbnRhdGlvbiA9IGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFzeW1ib2wucGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gKCFzeW1ib2wuaGlkZGVuICYmIHN5bWJvbC5jcm9zc1RpbGVJRCAmJiAhc2tpcE9yaWVudGF0aW9uKSA/IHZhcmlhYmxlT2Zmc2V0c1tzeW1ib2wuY3Jvc3NUaWxlSURdIDogbnVsbDtcblxuICAgICAgICBpZiAoIXZhcmlhYmxlT2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBUaGVzZSBzeW1ib2xzIGFyZSBmcm9tIGEganVzdGlmaWNhdGlvbiB0aGF0IGlzIG5vdCBiZWluZyB1c2VkLCBvciBhIGxhYmVsIHRoYXQgd2Fzbid0IHBsYWNlZFxuICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgZXh0cmEgbWF0aCB0byBmaWd1cmUgb3V0IHdoYXQgaW5jcmVtZW50YWwgc2hpZnQgdG8gYXBwbHkuXG4gICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLmhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgY29uc3QgdGlsZUFuY2hvciA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkQW5jaG9yID0gc3ltYm9sUHJvamVjdGlvbi5wcm9qZWN0KHRpbGVBbmNob3IsIHBpdGNoV2l0aE1hcCA/IHBvc01hdHJpeCA6IGxhYmVsUGxhbmVNYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgcGVyc3BlY3RpdmVSYXRpbyA9IDAuNSArIDAuNSAqICh0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHByb2plY3RlZEFuY2hvci5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEpO1xuICAgICAgICAgICAgbGV0IHJlbmRlclRleHRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGJ1Y2tldC50ZXh0U2l6ZURhdGEsIHNpemUsIHN5bWJvbCkgKiBwZXJzcGVjdGl2ZVJhdGlvIC8gT05FX0VNO1xuICAgICAgICAgICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICAgICAgICAgIC8vIEdvIGZyb20gc2l6ZSBpbiBwaXhlbHMgdG8gZXF1aXZhbGVudCBzaXplIGluIHRpbGUgdW5pdHNcbiAgICAgICAgICAgICAgICByZW5kZXJUZXh0U2l6ZSAqPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gLyB0aWxlU2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBhbmNob3IsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZX0gPSB2YXJpYWJsZU9mZnNldDtcblxuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZVJlbmRlclNoaWZ0KFxuICAgICAgICAgICAgICAgIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlLCByZW5kZXJUZXh0U2l6ZSk7XG5cbiAgICAgICAgICAgIC8vIFVzdWFsIGNhc2UgaXMgdGhhdCB3ZSB0YWtlIHRoZSBwcm9qZWN0ZWQgYW5jaG9yIGFuZCBhZGQgdGhlIHBpeGVsLWJhc2VkIHNoaWZ0XG4gICAgICAgICAgICAvLyBjYWxjdWxhdGVkIGFib3ZlLiBJbiB0aGUgKHNvbWV3aGF0IHdlaXJkKSBjYXNlIG9mIHBpdGNoLWFsaWduZWQgdGV4dCwgd2UgYWRkIGFuIGVxdWl2YWxlbnRcbiAgICAgICAgICAgIC8vIHRpbGUtdW5pdCBiYXNlZCBzaGlmdCB0byB0aGUgYW5jaG9yIGJlZm9yZSBwcm9qZWN0aW5nIHRvIHRoZSBsYWJlbCBwbGFuZS5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ZWRBbmNob3IgPSBwaXRjaFdpdGhNYXAgP1xuICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24ucHJvamVjdCh0aWxlQW5jaG9yLmFkZChzaGlmdCksIGxhYmVsUGxhbmVNYXRyaXgpLnBvaW50IDpcbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRBbmNob3IucG9pbnQuYWRkKHJvdGF0ZVdpdGhNYXAgP1xuICAgICAgICAgICAgICAgICAgICBzaGlmdC5yb3RhdGUoLXRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICBzaGlmdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHN5bWJvbC5wbGFjZWRPcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpID8gTWF0aC5QSSAvIDIgOiAwO1xuICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBzeW1ib2wubnVtR2x5cGhzOyBnKyspIHtcbiAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5LCBzaGlmdGVkQW5jaG9yLCBhbmdsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL09ubHkgb2Zmc2V0IGhvcml6b250YWwgdGV4dCBpY29uc1xuICAgICAgICAgICAgaWYgKHVwZGF0ZVRleHRGaXRJY29uICYmIHN5bWJvbC5hc3NvY2lhdGVkSWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBwbGFjZWRUZXh0U2hpZnRzW3N5bWJvbC5hc3NvY2lhdGVkSWNvbkluZGV4XSA9IHtzaGlmdGVkQW5jaG9yLCBhbmdsZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXBkYXRlVGV4dEZpdEljb24pIHtcbiAgICAgICAgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBjb25zdCBwbGFjZWRJY29ucyA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlZEljb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWRJY29uID0gcGxhY2VkSWNvbnMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKHBsYWNlZEljb24uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzKHBsYWNlZEljb24ubnVtR2x5cGhzLCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBwbGFjZWRUZXh0U2hpZnRzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghc2hpZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzKHBsYWNlZEljb24ubnVtR2x5cGhzLCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBnID0gMDsgZyA8IHBsYWNlZEljb24ubnVtR2x5cGhzOyBnKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXksIHNoaWZ0LnNoaWZ0ZWRBbmNob3IsIHNoaWZ0LmFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBidWNrZXQuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfVxuICAgIGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sUHJvZ3JhbU5hbWUoaXNTREY6IGJvb2xlYW4sIGlzVGV4dDogYm9vbGVhbiwgYnVja2V0OiBTeW1ib2xCdWNrZXQpIHtcbiAgICBpZiAoYnVja2V0Lmljb25zSW5UZXh0ICYmIGlzVGV4dCkge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbFRleHRBbmRJY29uJztcbiAgICB9IGVsc2UgaWYgKGlzU0RGKSB7XG4gICAgICAgIHJldHVybiAnc3ltYm9sU0RGJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbEljb24nO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgaXNUZXh0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25BbGlnbm1lbnQsIHBpdGNoQWxpZ25tZW50LCBrZWVwVXByaWdodCwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSByb3RhdGlvbkFsaWdubWVudCA9PT0gJ21hcCc7XG4gICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gcGl0Y2hBbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IGFsb25nTGluZSA9IHJvdGF0ZVdpdGhNYXAgJiYgbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgIC8vIExpbmUgbGFiZWwgcm90YXRpb24gaGFwcGVucyBpbiBgdXBkYXRlTGluZUxhYmVsc2BcbiAgICAvLyBQaXRjaGVkIHBvaW50IGxhYmVscyBhcmUgYXV0b21hdGljYWxseSByb3RhdGVkIGJ5IHRoZSBsYWJlbFBsYW5lTWF0cml4IHByb2plY3Rpb25cbiAgICAvLyBVbnBpdGNoZWQgcG9pbnQgbGFiZWxzIG5lZWQgdG8gaGF2ZSB0aGVpciByb3RhdGlvbiBhcHBsaWVkIGFmdGVyIHByb2plY3Rpb25cbiAgICBjb25zdCByb3RhdGVJblNoYWRlciA9IHJvdGF0ZVdpdGhNYXAgJiYgIXBpdGNoV2l0aE1hcCAmJiAhYWxvbmdMaW5lO1xuXG4gICAgY29uc3Qgc29ydEZlYXR1cmVzQnlLZXkgPSBsYXllci5sYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG5cbiAgICBsZXQgcHJvZ3JhbTtcbiAgICBsZXQgc2l6ZTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICBjb25zdCB0aWxlUmVuZGVyU3RhdGU6IEFycmF5PFN5bWJvbFRpbGVSZW5kZXJTdGF0ZT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBpc1RleHQgPyBidWNrZXQudGV4dCA6IGJ1Y2tldC5pY29uO1xuICAgICAgICBpZiAoIWJ1ZmZlcnMgfHwgIWJ1ZmZlcnMuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWZmZXJzLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuXG4gICAgICAgIGNvbnN0IGlzU0RGID0gaXNUZXh0IHx8IGJ1Y2tldC5zZGZJY29ucztcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0U2l6ZURhdGEgOiBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBpdGNoV2l0aE1hcCB8fCB0ci5waXRjaCAhPT0gMDtcblxuICAgICAgICBpZiAoIXByb2dyYW0pIHtcbiAgICAgICAgICAgIHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oZ2V0U3ltYm9sUHJvZ3JhbU5hbWUoaXNTREYsIGlzVGV4dCwgYnVja2V0KSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgc2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgdHIuem9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgbGV0IHRleFNpemVJY29uOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuICAgICAgICBsZXQgYXRsYXNUZXh0dXJlO1xuICAgICAgICBsZXQgYXRsYXNJbnRlcnBvbGF0aW9uO1xuICAgICAgICBsZXQgYXRsYXNUZXh0dXJlSWNvbiA9IG51bGw7XG4gICAgICAgIGxldCBhdGxhc0ludGVycG9sYXRpb25JY29uO1xuICAgICAgICBpZiAoaXNUZXh0KSB7XG4gICAgICAgICAgICBhdGxhc1RleHR1cmUgPSB0aWxlLmdseXBoQXRsYXNUZXh0dXJlO1xuICAgICAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uID0gZ2wuTElORUFSO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgICAgIGlmIChidWNrZXQuaWNvbnNJblRleHQpIHtcbiAgICAgICAgICAgICAgICB0ZXhTaXplSWNvbiA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgICAgICAgICBhdGxhc1RleHR1cmVJY29uID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgICAgICBjb25zdCB6b29tRGVwZW5kZW50U2l6ZSA9IHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnIHx8IHNpemVEYXRhLmtpbmQgPT09ICdjYW1lcmEnO1xuICAgICAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb24gPSB0cmFuc2Zvcm1lZCB8fCBwYWludGVyLm9wdGlvbnMucm90YXRpbmcgfHwgcGFpbnRlci5vcHRpb25zLnpvb21pbmcgfHwgem9vbURlcGVuZGVudFNpemUgPyBnbC5MSU5FQVIgOiBnbC5ORUFSRVNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWNvblNjYWxlZCA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tc2l6ZScpLmNvbnN0YW50T3IoMCkgIT09IDEgfHwgYnVja2V0Lmljb25zTmVlZExpbmVhcjtcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmU7XG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24gPSBpc1NERiB8fCBwYWludGVyLm9wdGlvbnMucm90YXRpbmcgfHwgcGFpbnRlci5vcHRpb25zLnpvb21pbmcgfHwgaWNvblNjYWxlZCB8fCB0cmFuc2Zvcm1lZCA/XG4gICAgICAgICAgICAgICAgZ2wuTElORUFSIDpcbiAgICAgICAgICAgICAgICBnbC5ORUFSRVNUO1xuICAgICAgICAgICAgdGV4U2l6ZSA9IHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHMgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZU1hdHJpeCA9IHN5bWJvbFByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChjb29yZC5wb3NNYXRyaXgsIHBpdGNoV2l0aE1hcCwgcm90YXRlV2l0aE1hcCwgcGFpbnRlci50cmFuc2Zvcm0sIHMpO1xuICAgICAgICBjb25zdCBnbENvb3JkTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcyk7XG5cbiAgICAgICAgY29uc3QgaGFzVmFyaWFibGVBbmNob3JzID0gdmFyaWFibGVQbGFjZW1lbnQgJiYgYnVja2V0Lmhhc1RleHREYXRhKCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVRleHRGaXRJY29uID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgIGhhc1ZhcmlhYmxlQW5jaG9ycyAmJlxuICAgICAgICAgICAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKGFsb25nTGluZSkge1xuICAgICAgICAgICAgc3ltYm9sUHJvamVjdGlvbi51cGRhdGVMaW5lTGFiZWxzKGJ1Y2tldCwgY29vcmQucG9zTWF0cml4LCBwYWludGVyLCBpc1RleHQsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsIHBpdGNoV2l0aE1hcCwga2VlcFVwcmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciksXG4gICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCA9IChhbG9uZ0xpbmUgfHwgKGlzVGV4dCAmJiB2YXJpYWJsZVBsYWNlbWVudCkgfHwgdXBkYXRlVGV4dEZpdEljb24pID8gaWRlbnRpdHlNYXQ0IDogbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgICAgIHVnbENvb3JkTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoZ2xDb29yZE1hdHJpeCwgdGlsZSwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGhhc0hhbG8gPSBpc1NERiAmJiBsYXllci5wYWludC5nZXQoaXNUZXh0ID8gJ3RleHQtaGFsby13aWR0aCcgOiAnaWNvbi1oYWxvLXdpZHRoJykuY29uc3RhbnRPcigxKSAhPT0gMDtcblxuICAgICAgICBsZXQgdW5pZm9ybVZhbHVlcztcbiAgICAgICAgaWYgKGlzU0RGKSB7XG4gICAgICAgICAgICBpZiAoIWJ1Y2tldC5pY29uc0luVGV4dCkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBzeW1ib2xTREZVbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgaXNUZXh0LCB0ZXhTaXplLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybVZhbHVlcyhzaXplRGF0YS5raW5kLFxuICAgICAgICAgICAgICAgIHNpemUsIHJvdGF0ZUluU2hhZGVyLCBwaXRjaFdpdGhNYXAsIHBhaW50ZXIsIG1hdHJpeCxcbiAgICAgICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCwgdWdsQ29vcmRNYXRyaXgsIHRleFNpemUsIHRleFNpemVJY29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyhzaXplRGF0YS5raW5kLFxuICAgICAgICAgICAgICAgIHNpemUsIHJvdGF0ZUluU2hhZGVyLCBwaXRjaFdpdGhNYXAsIHBhaW50ZXIsIG1hdHJpeCxcbiAgICAgICAgICAgICAgICB1TGFiZWxQbGFuZU1hdHJpeCwgdWdsQ29vcmRNYXRyaXgsIGlzVGV4dCwgdGV4U2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICBidWZmZXJzLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSxcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZUljb24sXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24sXG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb25JY29uLFxuICAgICAgICAgICAgaXNTREYsXG4gICAgICAgICAgICBoYXNIYWxvXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTZWdtZW50cyA9IGJ1ZmZlcnMuc2VnbWVudHMuZ2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb2xkU2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0aWxlUmVuZGVyU3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBuZXcgU2VnbWVudFZlY3Rvcihbc2VnbWVudF0pLFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5OiAoKHNlZ21lbnQuc29ydEtleTogYW55KTogbnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBzZWdtZW50czogYnVmZmVycy5zZWdtZW50cyxcbiAgICAgICAgICAgICAgICBzb3J0S2V5OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICB0aWxlUmVuZGVyU3RhdGUuc29ydCgoYSwgYikgPT4gYS5zb3J0S2V5IC0gYi5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnRTdGF0ZSBvZiB0aWxlUmVuZGVyU3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzZWdtZW50U3RhdGUuc3RhdGU7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHN0YXRlLmF0bGFzVGV4dHVyZS5iaW5kKHN0YXRlLmF0bGFzSW50ZXJwb2xhdGlvbiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGlmIChzdGF0ZS5hdGxhc1RleHR1cmVJY29uKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5hdGxhc1RleHR1cmVJY29uKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYXRsYXNUZXh0dXJlSWNvbi5iaW5kKHN0YXRlLmF0bGFzSW50ZXJwb2xhdGlvbkljb24sIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLmlzU0RGKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gKChzdGF0ZS51bmlmb3JtVmFsdWVzOiBhbnkpOiBVbmlmb3JtVmFsdWVzPFN5bWJvbFNERlVuaWZvcm1zVHlwZT4pO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmhhc0hhbG8pIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzWyd1X2lzX2hhbG8nXSA9IDE7XG4gICAgICAgICAgICAgICAgZHJhd1N5bWJvbEVsZW1lbnRzKHN0YXRlLmJ1ZmZlcnMsIHNlZ21lbnRTdGF0ZS5zZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHN0YXRlLnByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgdW5pZm9ybVZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzWyd1X2lzX2hhbG8nXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1N5bWJvbEVsZW1lbnRzKHN0YXRlLmJ1ZmZlcnMsIHNlZ21lbnRTdGF0ZS5zZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHN0YXRlLnByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgc3RhdGUudW5pZm9ybVZhbHVlcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3U3ltYm9sRWxlbWVudHMoYnVmZmVycywgc2VnbWVudHMsIGxheWVyLCBwYWludGVyLCBwcm9ncmFtLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIHVuaWZvcm1WYWx1ZXMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIGJ1ZmZlcnMubGF5b3V0VmVydGV4QnVmZmVyLFxuICAgICAgICBidWZmZXJzLmluZGV4QnVmZmVyLCBzZWdtZW50cywgbGF5ZXIucGFpbnQsXG4gICAgICAgIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIGJ1ZmZlcnMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCksXG4gICAgICAgIGJ1ZmZlcnMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlciwgYnVmZmVycy5vcGFjaXR5VmVydGV4QnVmZmVyKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB7Y2lyY2xlVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDaXJjbGVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvY2lyY2xlX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDaXJjbGVVbmlmb3Jtc1R5cGV9IGZyb20gJy4vcHJvZ3JhbS9jaXJjbGVfcHJvZ3JhbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdDaXJjbGVzO1xuXG50eXBlIFRpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbjogUHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgcHJvZ3JhbTogUHJvZ3JhbTwqPixcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcixcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgdW5pZm9ybVZhbHVlczogVW5pZm9ybVZhbHVlczxDaXJjbGVVbmlmb3Jtc1R5cGU+XG59O1xuXG50eXBlIFNlZ21lbnRzVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yLFxuICAgIHNvcnRLZXk6IG51bWJlcixcbiAgICBzdGF0ZTogVGlsZVJlbmRlclN0YXRlXG59O1xuXG5mdW5jdGlvbiBkcmF3Q2lyY2xlcyhwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ3RyYW5zbHVjZW50JykgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLW9wYWNpdHknKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS13aWR0aCcpO1xuICAgIGNvbnN0IHN0cm9rZU9wYWNpdHkgPSBsYXllci5wYWludC5nZXQoJ2NpcmNsZS1zdHJva2Utb3BhY2l0eScpO1xuICAgIGNvbnN0IHNvcnRGZWF0dXJlc0J5S2V5ID0gbGF5ZXIubGF5b3V0LmdldCgnY2lyY2xlLXNvcnQta2V5JykuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCAmJiAoc3Ryb2tlV2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCB8fCBzdHJva2VPcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICAvLyBUdXJuIG9mZiBzdGVuY2lsIHRlc3RpbmcgdG8gYWxsb3cgY2lyY2xlcyB0byBiZSBkcmF3biBhY3Jvc3MgYm91bmRhcmllcyxcbiAgICAvLyBzbyB0aGF0IGxhcmdlIGNpcmNsZXMgYXJlIG5vdCBjbGlwcGVkIHRvIHRpbGVzXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IHNlZ21lbnRzUmVuZGVyU3RhdGVzOiBBcnJheTxTZWdtZW50c1RpbGVSZW5kZXJTdGF0ZT4gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuXG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/Q2lyY2xlQnVja2V0PCo+ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdjaXJjbGUnLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEJ1ZmZlciA9IGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXI7XG4gICAgICAgIGNvbnN0IGluZGV4QnVmZmVyID0gYnVja2V0LmluZGV4QnVmZmVyO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gY2lyY2xlVW5pZm9ybVZhbHVlcyhwYWludGVyLCBjb29yZCwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzZWdtZW50czogbmV3IFNlZ21lbnRWZWN0b3IoW3NlZ21lbnRdKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydEtleTogKChzZWdtZW50LnNvcnRLZXk6IGFueSk6IG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzZWdtZW50czogYnVja2V0LnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMuc29ydCgoYSwgYikgPT4gYS5zb3J0S2V5IC0gYi5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnRzU3RhdGUgb2Ygc2VnbWVudHNSZW5kZXJTdGF0ZXMpIHtcbiAgICAgICAgY29uc3Qge3Byb2dyYW1Db25maWd1cmF0aW9uLCBwcm9ncmFtLCBsYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCB1bmlmb3JtVmFsdWVzfSA9IHNlZ21lbnRzU3RhdGUuc3RhdGU7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudHNTdGF0ZS5zZWdtZW50cztcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLFxuICAgICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgc2VnbWVudHMsXG4gICAgICAgICAgICBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi4vZ2wvY29sb3JfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzXG59IGZyb20gJy4vcHJvZ3JhbS9oZWF0bWFwX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9oZWF0bWFwX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3SGVhdG1hcDtcblxuZnVuY3Rpb24gZHJhd0hlYXRtYXAocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogSGVhdG1hcFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIC8vIEFsbG93IGtlcm5lbHMgdG8gYmUgZHJhd24gYWNyb3NzIGJvdW5kYXJpZXMsIHNvIHRoYXRcbiAgICAgICAgLy8gbGFyZ2Uga2VybmVscyBhcmUgbm90IGNsaXBwZWQgdG8gdGlsZXNcbiAgICAgICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgLy8gVHVybiBvbiBhZGRpdGl2ZSBibGVuZGluZyBmb3Iga2VybmVscywgd2hpY2ggaXMgYSBrZXkgYXNwZWN0IG9mIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gZm9ybXVsYVxuICAgICAgICBjb25zdCBjb2xvck1vZGUgPSBuZXcgQ29sb3JNb2RlKFtnbC5PTkUsIGdsLk9ORV0sIENvbG9yLnRyYW5zcGFyZW50LCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pO1xuXG4gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcik7XG5cbiAgICAgICAgY29udGV4dC5jbGVhcih7Y29sb3I6IENvbG9yLnRyYW5zcGFyZW50fSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gY29vcmRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTa2lwIHRpbGVzIHRoYXQgaGF2ZSB1bmNvdmVyZWQgcGFyZW50cyB0byBhdm9pZCBmbGlja2VyaW5nOyB3ZSBkb24ndCBuZWVkXG4gICAgICAgICAgICAvLyB0byB1c2UgY29tcGxleCB0aWxlIG1hc2tpbmcgaGVyZSBiZWNhdXNlIHRoZSBjaGFuZ2UgYmV0d2VlbiB6b29tIGxldmVscyBpcyBzdWJ0bGUsXG4gICAgICAgICAgICAvLyBzbyBpdCdzIGZpbmUgdG8gc2ltcGx5IHJlbmRlciB0aGUgcGFyZW50IHVudGlsIGFsbCBpdHMgNCBjaGlsZHJlbiBhcmUgbG9hZGVkXG4gICAgICAgICAgICBpZiAoc291cmNlQ2FjaGUuaGFzUmVuZGVyYWJsZVBhcmVudChjb29yZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQ6ID9IZWF0bWFwQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgY29uc3Qge3pvb219ID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIERlcHRoTW9kZS5kaXNhYmxlZCwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhlYXRtYXBVbmlmb3JtVmFsdWVzKGNvb3JkLnBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgdGlsZSwgem9vbSwgbGF5ZXIucGFpbnQuZ2V0KCdoZWF0bWFwLWludGVuc2l0eScpKSxcbiAgICAgICAgICAgICAgICBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5zZWdtZW50cywgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sXG4gICAgICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG5cbiAgICB9IGVsc2UgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50Jykge1xuICAgICAgICBwYWludGVyLmNvbnRleHQuc2V0Q29sb3JNb2RlKHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtcbiAgICAgICAgcmVuZGVyVGV4dHVyZVRvTWFwKHBhaW50ZXIsIGxheWVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgIC8vIFVzZSBhIDR4IGRvd25zY2FsZWQgc2NyZWVuIHRleHR1cmUgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0XSk7XG5cbiAgICBsZXQgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcblxuICAgIGlmICghZmJvKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTtcblxuICAgICAgICBmYm8gPSBsYXllci5oZWF0bWFwRmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcihwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0LCBmYWxzZSk7XG5cbiAgICAgICAgYmluZFRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIHRleHR1cmUsIGZibyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBmYm8uY29sb3JBdHRhY2htZW50LmdldCgpKTtcbiAgICAgICAgY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KGZiby5mcmFtZWJ1ZmZlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKSB7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIC8vIFVzZSB0aGUgaGlnaGVyIHByZWNpc2lvbiBoYWxmLWZsb2F0IHRleHR1cmUgd2hlcmUgYXZhaWxhYmxlIChwcm9kdWNpbmcgbXVjaCBzbW9vdGhlciBsb29raW5nIGhlYXRtYXBzKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDQsIDAsIGdsLlJHQkEsXG4gICAgICAgIGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdCA/IGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUyA6IGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG4gICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQodGV4dHVyZSk7XG5cbiAgICAvLyBJZiB1c2luZyBoYWxmLWZsb2F0IHRleHR1cmUgYXMgYSByZW5kZXIgdGFyZ2V0IGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGwgYmFjayB0byBhIGxvdyBwcmVjaXNpb24gdGV4dHVyZVxuICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVIYWxmRmxvYXQgJiYgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgIT09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7XG4gICAgICAgIGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdCA9IG51bGw7XG4gICAgICAgIGZiby5jb2xvckF0dGFjaG1lbnQuc2V0RGlydHkoKTtcbiAgICAgICAgYmluZFRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIHRleHR1cmUsIGZibyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJUZXh0dXJlVG9NYXAocGFpbnRlciwgbGF5ZXIpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIC8vIEhlcmUgd2UgYmluZCB0d28gZGlmZmVyZW50IHRleHR1cmVzIGZyb20gd2hpY2ggd2UnbGwgc2FtcGxlIGluIGRyYXdpbmdcbiAgICAvLyBoZWF0bWFwczogdGhlIGtlcm5lbCB0ZXh0dXJlLCBwcmVwYXJlZCBpbiB0aGUgb2Zmc2NyZWVuIHBhc3MsIGFuZCBhXG4gICAgLy8gY29sb3IgcmFtcCB0ZXh0dXJlLlxuICAgIGNvbnN0IGZibyA9IGxheWVyLmhlYXRtYXBGYm87XG4gICAgaWYgKCFmYm8pIHJldHVybjtcbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBmYm8uY29sb3JBdHRhY2htZW50LmdldCgpKTtcblxuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuICAgIGxldCBjb2xvclJhbXBUZXh0dXJlID0gbGF5ZXIuY29sb3JSYW1wVGV4dHVyZTtcbiAgICBpZiAoIWNvbG9yUmFtcFRleHR1cmUpIHtcbiAgICAgICAgY29sb3JSYW1wVGV4dHVyZSA9IGxheWVyLmNvbG9yUmFtcFRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBsYXllci5jb2xvclJhbXAsIGdsLlJHQkEpO1xuICAgIH1cbiAgICBjb2xvclJhbXBUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcblxuICAgIHBhaW50ZXIudXNlUHJvZ3JhbSgnaGVhdG1hcFRleHR1cmUnKS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUyxcbiAgICAgICAgRGVwdGhNb2RlLmRpc2FibGVkLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIGxheWVyLCAwLCAxKSxcbiAgICAgICAgbGF5ZXIuaWQsIHBhaW50ZXIudmlld3BvcnRCdWZmZXIsIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsXG4gICAgICAgIHBhaW50ZXIudmlld3BvcnRTZWdtZW50cywgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcbmltcG9ydCB7XG4gICAgbGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVTREZVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVHcmFkaWVudFVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2xpbmVfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBMaW5lQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRyYXdMaW5lKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IExpbmVTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ3RyYW5zbHVjZW50JykgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgd2lkdGggPSBsYXllci5wYWludC5nZXQoJ2xpbmUtd2lkdGgnKTtcbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwIHx8IHdpZHRoLmNvbnN0YW50T3IoMSkgPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IGRhc2hhcnJheSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1kYXNoYXJyYXknKTtcbiAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoJ2xpbmUtcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IoKDE6IGFueSkpO1xuXG4gICAgY29uc3QgZ3JhZGllbnQgPSBsYXllci5wYWludC5nZXQoJ2xpbmUtZ3JhZGllbnQnKTtcbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtSWQgPVxuICAgICAgICBpbWFnZSA/ICdsaW5lUGF0dGVybicgOlxuICAgICAgICBkYXNoYXJyYXkgPyAnbGluZVNERicgOlxuICAgICAgICBncmFkaWVudCA/ICdsaW5lR3JhZGllbnQnIDogJ2xpbmUnO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBsZXQgZmlyc3RUaWxlID0gdHJ1ZTtcblxuICAgIGlmIChncmFkaWVudCkge1xuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBsZXQgZ3JhZGllbnRUZXh0dXJlID0gbGF5ZXIuZ3JhZGllbnRUZXh0dXJlO1xuICAgICAgICBpZiAoIWxheWVyLmdyYWRpZW50KSByZXR1cm47XG4gICAgICAgIGlmICghZ3JhZGllbnRUZXh0dXJlKSBncmFkaWVudFRleHR1cmUgPSBsYXllci5ncmFkaWVudFRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBsYXllci5ncmFkaWVudCwgZ2wuUkdCQSk7XG4gICAgICAgIGdyYWRpZW50VGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuXG4gICAgICAgIGlmIChpbWFnZSAmJiAhdGlsZS5wYXR0ZXJuc0xvYWRlZCgpKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBidWNrZXQ6ID9MaW5lQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcmV2UHJvZ3JhbSA9IHBhaW50ZXIuY29udGV4dC5wcm9ncmFtLmdldCgpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKHByb2dyYW1JZCwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBwcm9ncmFtQ2hhbmdlZCA9IGZpcnN0VGlsZSB8fCBwcm9ncmFtLnByb2dyYW0gIT09IHByZXZQcm9ncmFtO1xuXG4gICAgICAgIGNvbnN0IGNvbnN0YW50UGF0dGVybiA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKG51bGwpO1xuICAgICAgICBpZiAoY29uc3RhbnRQYXR0ZXJuICYmIHRpbGUuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXMgPSB0aWxlLmltYWdlQXRsYXM7XG4gICAgICAgICAgICBjb25zdCBwb3NUbyA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLnRvLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgcG9zRnJvbSA9IGF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbY29uc3RhbnRQYXR0ZXJuLmZyb20udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBpZiAocG9zVG8gJiYgcG9zRnJvbSkgcHJvZ3JhbUNvbmZpZ3VyYXRpb24uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSBpbWFnZSA/IGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciwgY3Jvc3NmYWRlKSA6XG4gICAgICAgICAgICBkYXNoYXJyYXkgPyBsaW5lU0RGVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllciwgZGFzaGFycmF5LCBjcm9zc2ZhZGUpIDpcbiAgICAgICAgICAgIGdyYWRpZW50ID8gbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcikgOlxuICAgICAgICAgICAgbGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpO1xuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLnVwZGF0ZVBhaW50QnVmZmVycyhjcm9zc2ZhZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhc2hhcnJheSAmJiAocHJvZ3JhbUNoYW5nZWQgfHwgcGFpbnRlci5saW5lQXRsYXMuZGlydHkpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHBhaW50ZXIubGluZUF0bGFzLmJpbmQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoY29vcmQpLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsIGJ1Y2tldC5zZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgZmlyc3RUaWxlID0gZmFsc2U7XG4gICAgICAgIC8vIG9uY2UgcmVmYWN0b3JlZCBzbyB0aGF0IGJvdW5kIHRleHR1cmUgc3RhdGUgaXMgbWFuYWdlZCwgd2UnbGwgYWxzbyBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGZpcnN0VGlsZS9wcm9ncmFtQ2hhbmdlZCBsb2dpY1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBmaWxsVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2ZpbGxfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGaWxsQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdGaWxsO1xuXG5mdW5jdGlvbiBkcmF3RmlsbChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBGaWxsU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGNvbnN0IGNvbG9yID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWNvbG9yJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IHBhc3MgPSBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSAmJlxuICAgICAgICAoIXBhdHRlcm4uY29uc3RhbnRPcigoMTogYW55KSkgJiZcbiAgICAgICAgY29sb3IuY29uc3RhbnRPcihDb2xvci50cmFuc3BhcmVudCkuYSA9PT0gMSAmJlxuICAgICAgICBvcGFjaXR5LmNvbnN0YW50T3IoMCkgPT09IDEpID8gJ29wYXF1ZScgOiAndHJhbnNsdWNlbnQnO1xuXG4gICAgLy8gRHJhdyBmaWxsXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gcGFzcykge1xuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKFxuICAgICAgICAgICAgMSwgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb3BhcXVlJyA/IERlcHRoTW9kZS5SZWFkV3JpdGUgOiBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERyYXcgc3Ryb2tlXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyAmJiBsYXllci5wYWludC5nZXQoJ2ZpbGwtYW50aWFsaWFzJykpIHtcblxuICAgICAgICAvLyBJZiB3ZSBkZWZpbmVkIGEgZGlmZmVyZW50IGNvbG9yIGZvciB0aGUgZmlsbCBvdXRsaW5lLCB3ZSBhcmVcbiAgICAgICAgLy8gZ29pbmcgdG8gaWdub3JlIHRoZSBiaXRzIGluIDB4MDcgYW5kIGp1c3QgY2FyZSBhYm91dCB0aGUgZ2xvYmFsXG4gICAgICAgIC8vIGNsaXBwaW5nIG1hc2suXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugb25seSB3YW50IHRvIGRyYXdGaWxsIHRoZSBhbnRpYWxpYXNlZCBwYXJ0cyB0aGF0IGFyZVxuICAgICAgICAvLyAqb3V0c2lkZSogdGhlIGN1cnJlbnQgc2hhcGUuIFRoaXMgaXMgaW1wb3J0YW50IGluIGNhc2UgdGhlIGZpbGxcbiAgICAgICAgLy8gb3Igc3Ryb2tlIGNvbG9yIGlzIHRyYW5zbHVjZW50LiBJZiB3ZSB3b3VsZG4ndCBjbGlwIHRvIG91dHNpZGVcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgc2hhcGUsIHNvbWUgcGl4ZWxzIGZyb20gdGhlIG91dGxpbmUgc3Ryb2tlIG92ZXJsYXBwZWRcbiAgICAgICAgLy8gdGhlIChub24tYW50aWFsaWFzZWQpIGZpbGwuXG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoXG4gICAgICAgICAgICBsYXllci5nZXRQYWludFByb3BlcnR5KCdmaWxsLW91dGxpbmUtY29sb3InKSA/IDIgOiAwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgICAgICBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgdHJ1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3RmlsbFRpbGVzKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIGNvbG9yTW9kZSwgaXNPdXRsaW5lKSB7XG4gICAgY29uc3QgZ2wgPSBwYWludGVyLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5ICYmIHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKCgxOiBhbnkpKTtcbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgbGV0IGRyYXdNb2RlLCBwcm9ncmFtTmFtZSwgdW5pZm9ybVZhbHVlcywgaW5kZXhCdWZmZXIsIHNlZ21lbnRzO1xuXG4gICAgaWYgKCFpc091dGxpbmUpIHtcbiAgICAgICAgcHJvZ3JhbU5hbWUgPSBpbWFnZSA/ICdmaWxsUGF0dGVybicgOiAnZmlsbCc7XG4gICAgICAgIGRyYXdNb2RlID0gZ2wuVFJJQU5HTEVTO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyYW1OYW1lID0gaW1hZ2UgJiYgIWxheWVyLmdldFBhaW50UHJvcGVydHkoJ2ZpbGwtb3V0bGluZS1jb2xvcicpID8gJ2ZpbGxPdXRsaW5lUGF0dGVybicgOiAnZmlsbE91dGxpbmUnO1xuICAgICAgICBkcmF3TW9kZSA9IGdsLkxJTkVTO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0ZpbGxCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbU5hbWUsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLnVwZGF0ZVBhaW50QnVmZmVycyhjcm9zc2ZhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGlsZU1hdHJpeCA9IHBhaW50ZXIudHJhbnNsYXRlUG9zTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgdGlsZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUnKSwgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZS1hbmNob3InKSk7XG5cbiAgICAgICAgaWYgKCFpc091dGxpbmUpIHtcbiAgICAgICAgICAgIGluZGV4QnVmZmVyID0gYnVja2V0LmluZGV4QnVmZmVyO1xuICAgICAgICAgICAgc2VnbWVudHMgPSBidWNrZXQuc2VnbWVudHM7XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyh0aWxlTWF0cml4LCBwYWludGVyLCBjcm9zc2ZhZGUsIHRpbGUpIDpcbiAgICAgICAgICAgICAgICBmaWxsVW5pZm9ybVZhbHVlcyh0aWxlTWF0cml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4QnVmZmVyID0gYnVja2V0LmluZGV4QnVmZmVyMjtcbiAgICAgICAgICAgIHNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzMjtcbiAgICAgICAgICAgIGNvbnN0IGRyYXdpbmdCdWZmZXJTaXplID0gW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF07XG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gKHByb2dyYW1OYW1lID09PSAnZmlsbE91dGxpbmVQYXR0ZXJuJyAmJiBpbWFnZSkgP1xuICAgICAgICAgICAgICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXModGlsZU1hdHJpeCwgcGFpbnRlciwgY3Jvc3NmYWRlLCB0aWxlLCBkcmF3aW5nQnVmZmVyU2l6ZSkgOlxuICAgICAgICAgICAgICAgIGZpbGxPdXRsaW5lVW5pZm9ybVZhbHVlcyh0aWxlTWF0cml4LCBkcmF3aW5nQnVmZmVyU2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9ncmFtLmRyYXcocGFpbnRlci5jb250ZXh0LCBkcmF3TW9kZSwgZGVwdGhNb2RlLFxuICAgICAgICAgICAgcGFpbnRlci5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKGNvb3JkKSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsIHVuaWZvcm1WYWx1ZXMsXG4gICAgICAgICAgICBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXIsIHNlZ21lbnRzLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGZpbGxFeHRydXNpb25Vbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbn0gZnJvbSAnLi9wcm9ncmFtL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXc7XG5cbmZ1bmN0aW9uIGRyYXcocGFpbnRlcjogUGFpbnRlciwgc291cmNlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEZpbGxFeHRydXNpb25TdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tb3BhY2l0eScpO1xuICAgIGlmIChvcGFjaXR5ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IG5ldyBEZXB0aE1vZGUocGFpbnRlci5jb250ZXh0LmdsLkxFUVVBTCwgRGVwdGhNb2RlLlJlYWRXcml0ZSwgcGFpbnRlci5kZXB0aFJhbmdlRm9yM0QpO1xuXG4gICAgICAgIGlmIChvcGFjaXR5ID09PSAxICYmICFsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nKS5jb25zdGFudE9yKCgxOiBhbnkpKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG4gICAgICAgICAgICBkcmF3RXh0cnVzaW9uVGlsZXMocGFpbnRlciwgc291cmNlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBjb2xvck1vZGUpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEcmF3IHRyYW5zcGFyZW50IGJ1aWxkaW5ncyBpbiB0d28gcGFzc2VzIHNvIHRoYXQgb25seSB0aGUgY2xvc2VzdCBzdXJmYWNlIGlzIGRyYXduLlxuICAgICAgICAgICAgLy8gRmlyc3QgZHJhdyBhbGwgdGhlIGV4dHJ1c2lvbnMgaW50byBvbmx5IHRoZSBkZXB0aCBidWZmZXIuIE5vIGNvbG9ycyBhcmUgZHJhd24uXG4gICAgICAgICAgICBkcmF3RXh0cnVzaW9uVGlsZXMocGFpbnRlciwgc291cmNlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICAgICAgU3RlbmNpbE1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgQ29sb3JNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICAgICAgLy8gVGhlbiBkcmF3IGFsbCB0aGUgZXh0cnVzaW9ucyBhIHNlY29uZCB0eXBlLCBvbmx5IGNvbG9yaW5nIGZyYWdtZW50cyBpZiB0aGV5IGhhdmUgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIGRlcHRoIHZhbHVlIGFzIHRoZSBjbG9zZXN0IGZyYWdtZW50IGluIHRoZSBwcmV2aW91cyBwYXNzLiBVc2UgdGhlIHN0ZW5jaWwgYnVmZmVyXG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IHRoZSBzZWNvbmQgZHJhdyBpbiBjYXNlcyB3aGVyZSB3ZSBoYXZlIGNvaW5jaWRlbnQgcG9seWdvbnMuXG4gICAgICAgICAgICBkcmF3RXh0cnVzaW9uVGlsZXMocGFpbnRlciwgc291cmNlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICAgICAgcGFpbnRlci5zdGVuY2lsTW9kZUZvcjNEKCksXG4gICAgICAgICAgICAgICAgcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmF3RXh0cnVzaW9uVGlsZXMocGFpbnRlciwgc291cmNlLCBsYXllciwgY29vcmRzLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nKTtcbiAgICBjb25zdCBpbWFnZSA9IHBhdHRlcm5Qcm9wZXJ0eS5jb25zdGFudE9yKCgxOiBhbnkpKTtcbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tb3BhY2l0eScpO1xuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/RmlsbEV4dHJ1c2lvbkJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShpbWFnZSA/ICdmaWxsRXh0cnVzaW9uUGF0dGVybicgOiAnZmlsbEV4dHJ1c2lvbicsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLnVwZGF0ZVBhaW50QnVmZmVycyhjcm9zc2ZhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvcicpKTtcblxuICAgICAgICBjb25zdCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCcpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCwgb3BhY2l0eSwgY29vcmQsIGNyb3NzZmFkZSwgdGlsZSkgOlxuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgY29udGV4dC5nbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmJhY2tDQ1csXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2hpbGxzaGFkZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBIaWxsc2hhZGVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3SGlsbHNoYWRlO1xuXG5mdW5jdGlvbiBkcmF3SGlsbHNoYWRlKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEhpbGxzaGFkZVN0eWxlTGF5ZXIsIHRpbGVJRHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ29mZnNjcmVlbicgJiYgcGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IHNvdXJjZU1heFpvb20gPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgW3N0ZW5jaWxNb2RlcywgY29vcmRzXSA9IHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyA/XG4gICAgICAgIHBhaW50ZXIuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEcykgOiBbe30sIHRpbGVJRHNdO1xuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBpZiAodGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgJiYgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuICAgICAgICAgICAgcHJlcGFyZUhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgc291cmNlTWF4Wm9vbSwgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgICAgIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZXNbY29vcmQub3ZlcnNjYWxlZFpdLCBjb2xvck1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgZmJvID0gdGlsZS5mYm87XG4gICAgaWYgKCFmYm8pIHJldHVybjtcblxuICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hpbGxzaGFkZScpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZmJvLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7XG5cbiAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbn1cblxuLy8gaGlsbHNoYWRlIHJlbmRlcmluZyBpcyBkb25lIGluIHR3byBzdGVwcy4gdGhlIHByZXBhcmUgc3RlcCBmaXJzdCBjYWxjdWxhdGVzIHRoZSBzbG9wZSBvZiB0aGUgdGVycmFpbiBpbiB0aGUgeCBhbmQgeVxuLy8gZGlyZWN0aW9ucyBmb3IgZWFjaCBwaXhlbCwgYW5kIHNhdmVzIHRob3NlIHZhbHVlcyB0byBhIGZyYW1lYnVmZmVyIHRleHR1cmUgaW4gdGhlIHIgYW5kIGcgY2hhbm5lbHMuXG5mdW5jdGlvbiBwcmVwYXJlSGlsbHNoYWRlKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBzb3VyY2VNYXhab29tLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBkZW0gPSB0aWxlLmRlbTtcbiAgICBpZiAoZGVtICYmIGRlbS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRpbGVTaXplID0gZGVtLmRpbTtcbiAgICAgICAgY29uc3QgdGV4dHVyZVN0cmlkZSA9IGRlbS5zdHJpZGU7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxEYXRhID0gZGVtLmdldFBpeGVscygpO1xuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldChmYWxzZSk7XG4gICAgICAgIHRpbGUuZGVtVGV4dHVyZSA9IHRpbGUuZGVtVGV4dHVyZSB8fCBwYWludGVyLmdldFRpbGVUZXh0dXJlKHRleHR1cmVTdHJpZGUpO1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1UZXh0dXJlID0gdGlsZS5kZW1UZXh0dXJlO1xuICAgICAgICAgICAgZGVtVGV4dHVyZS51cGRhdGUocGl4ZWxEYXRhLCB7cHJlbXVsdGlwbHk6IGZhbHNlfSk7XG4gICAgICAgICAgICBkZW1UZXh0dXJlLmJpbmQoZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLmRlbVRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBwaXhlbERhdGEsIGdsLlJHQkEsIHtwcmVtdWx0aXBseTogZmFsc2V9KTtcbiAgICAgICAgICAgIHRpbGUuZGVtVGV4dHVyZS5iaW5kKGdsLk5FQVJFU1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgbGV0IGZibyA9IHRpbGUuZmJvO1xuXG4gICAgICAgIGlmICghZmJvKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwge3dpZHRoOiB0aWxlU2l6ZSwgaGVpZ2h0OiB0aWxlU2l6ZSwgZGF0YTogbnVsbH0sIGdsLlJHQkEpO1xuICAgICAgICAgICAgcmVuZGVyVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICAgICAgICAgIGZibyA9IHRpbGUuZmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcih0aWxlU2l6ZSwgdGlsZVNpemUsIHRydWUpO1xuICAgICAgICAgICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQocmVuZGVyVGV4dHVyZS50ZXh0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChmYm8uZnJhbWVidWZmZXIpO1xuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgdGlsZVNpemUsIHRpbGVTaXplXSk7XG5cbiAgICAgICAgcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGVQcmVwYXJlJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzKHRpbGUudGlsZUlELCBkZW0sIHNvdXJjZU1heFpvb20pLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG5cbiAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSBmYWxzZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgSW1hZ2VTb3VyY2UgZnJvbSAnLi4vc291cmNlL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9yYXN0ZXJfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgUmFzdGVyU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd1Jhc3RlcjtcblxuZnVuY3Rpb24gZHJhd1Jhc3RlcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAwKSByZXR1cm47XG4gICAgaWYgKCF0aWxlSURzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgncmFzdGVyJyk7XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IFtzdGVuY2lsTW9kZXMsIGNvb3Jkc10gPSBzb3VyY2UgaW5zdGFuY2VvZiBJbWFnZVNvdXJjZSA/IFt7fSwgdGlsZUlEc10gOlxuICAgICAgICBwYWludGVyLnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKHRpbGVJRHMpO1xuXG4gICAgY29uc3QgbWluVGlsZVogPSBjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdLm92ZXJzY2FsZWRaO1xuXG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAvLyBTZXQgdGhlIGxvd2VyIHpvb20gbGV2ZWwgdG8gc3VibGF5ZXIgMCwgYW5kIGhpZ2hlciB6b29tIGxldmVscyB0byBoaWdoZXIgc3VibGF5ZXJzXG4gICAgICAgIC8vIFVzZSBnbC5MRVNTIHRvIHByZXZlbnQgZG91YmxlIGRyYXdpbmcgaW4gYXJlYXMgd2hlcmUgdGlsZXMgb3ZlcmxhcC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihjb29yZC5vdmVyc2NhbGVkWiAtIG1pblRpbGVaLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAxID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSwgZ2wuTEVTUyk7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSwgYWxpZ24pO1xuXG4gICAgICAgIHRpbGUucmVnaXN0ZXJGYWRlRHVyYXRpb24obGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItZmFkZS1kdXJhdGlvbicpKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gc291cmNlQ2FjaGUuZmluZExvYWRlZFBhcmVudChjb29yZCwgMCksXG4gICAgICAgICAgICBmYWRlID0gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHBhaW50ZXIudHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgcGFyZW50U2NhbGVCeSwgcGFyZW50VEw7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZUZpbHRlciA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLXJlc2FtcGxpbmcnKSA9PT0gJ25lYXJlc3QnID8gIGdsLk5FQVJFU1QgOiBnbC5MSU5FQVI7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHBhcmVudFRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgICAgICBwYXJlbnRTY2FsZUJ5ID0gTWF0aC5wb3coMiwgcGFyZW50VGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBwYXJlbnRUTCA9IFt0aWxlLnRpbGVJRC5jYW5vbmljYWwueCAqIHBhcmVudFNjYWxlQnkgJSAxLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueSAqIHBhcmVudFNjYWxlQnkgJSAxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQodGV4dHVyZUZpbHRlciwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSByYXN0ZXJVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgcGFyZW50VEwgfHwgWzAsIDBdLCBwYXJlbnRTY2FsZUJ5IHx8IDEsIGZhZGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBzb3VyY2UuYm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHNvdXJjZS5ib3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2Rlc1tjb29yZC5vdmVyc2NhbGVkWl0sIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnJhc3RlckJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHRyYW5zZm9ybSkge1xuICAgIGNvbnN0IGZhZGVEdXJhdGlvbiA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWZhZGUtZHVyYXRpb24nKTtcblxuICAgIGlmIChmYWRlRHVyYXRpb24gPiAwKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGNvbnN0IHNpbmNlVGlsZSA9IChub3cgLSB0aWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb247XG4gICAgICAgIGNvbnN0IHNpbmNlUGFyZW50ID0gcGFyZW50VGlsZSA/IChub3cgLSBwYXJlbnRUaWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb24gOiAtMTtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgY29uc3QgaWRlYWxaID0gdHJhbnNmb3JtLmNvdmVyaW5nWm9vbUxldmVsKHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBzb3VyY2UudGlsZVNpemUsXG4gICAgICAgICAgICByb3VuZFpvb206IHNvdXJjZS5yb3VuZFpvb21cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaWYgbm8gcGFyZW50IG9yIHBhcmVudCBpcyBvbGRlciwgZmFkZSBpbjsgaWYgcGFyZW50IGlzIHlvdW5nZXIsIGZhZGUgb3V0XG4gICAgICAgIGNvbnN0IGZhZGVJbiA9ICFwYXJlbnRUaWxlIHx8IE1hdGguYWJzKHBhcmVudFRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKSA+IE1hdGguYWJzKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKTtcblxuICAgICAgICBjb25zdCBjaGlsZE9wYWNpdHkgPSAoZmFkZUluICYmIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24pID8gMSA6IGNsYW1wKGZhZGVJbiA/IHNpbmNlVGlsZSA6IDEgLSBzaW5jZVBhcmVudCwgMCwgMSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3QgY3Jvc3NmYWRlIHRpbGVzIHRoYXQgd2VyZSBqdXN0IHJlZnJlc2hlZCB1cG9uIGV4cGlyaW5nOlxuICAgICAgICAvLyBvbmNlIHRoZXkncmUgb2xkIGVub3VnaCB0byBwYXNzIHRoZSBjcm9zc2ZhZGluZyB0aHJlc2hvbGRcbiAgICAgICAgLy8gKGZhZGVEdXJhdGlvbiksIHVuc2V0IHRoZSBgcmVmcmVzaGVkVXBvbkV4cGlyYXRpb25gIGZsYWcgc28gd2UgZG9uJ3RcbiAgICAgICAgLy8gaW5jb3JyZWN0bHkgZmFpbCB0byBjcm9zc2ZhZGUgdGhlbSB3aGVuIHpvb21pbmdcbiAgICAgICAgaWYgKHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gJiYgc2luY2VUaWxlID49IDEpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgIG1peDogMSAtIGNoaWxkT3BhY2l0eVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogY2hpbGRPcGFjaXR5LFxuICAgICAgICAgICAgICAgIG1peDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgbWl4OiAwXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBCYWNrZ3JvdW5kU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0JhY2tncm91bmQ7XG5cbmZ1bmN0aW9uIGRyYXdCYWNrZ3JvdW5kKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEJhY2tncm91bmRTdHlsZUxheWVyKSB7XG4gICAgY29uc3QgY29sb3IgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcblxuICAgIGlmIChvcGFjaXR5ID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCB0aWxlU2l6ZSA9IHRyYW5zZm9ybS50aWxlU2l6ZTtcbiAgICBjb25zdCBpbWFnZSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1wYXR0ZXJuJyk7XG4gICAgaWYgKHBhaW50ZXIuaXNQYXR0ZXJuTWlzc2luZyhpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHBhc3MgPSAoIWltYWdlICYmIGNvbG9yLmEgPT09IDEgJiYgb3BhY2l0eSA9PT0gMSAmJiBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgPyAnb3BhcXVlJyA6ICd0cmFuc2x1Y2VudCc7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gcGFzcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIHBhc3MgPT09ICdvcGFxdWUnID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKGltYWdlID8gJ2JhY2tncm91bmRQYXR0ZXJuJyA6ICdiYWNrZ3JvdW5kJyk7XG5cbiAgICBjb25zdCB0aWxlSURzID0gdHJhbnNmb3JtLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplfSk7XG5cbiAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmJpbmQocGFpbnRlci5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgZm9yIChjb25zdCB0aWxlSUQgb2YgdGlsZUlEcykge1xuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgb3BhY2l0eSwgcGFpbnRlciwgaW1hZ2UsIHt0aWxlSUQsIHRpbGVTaXplfSwgY3Jvc3NmYWRlKSA6XG4gICAgICAgICAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIGNvbG9yKTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnRpbGVFeHRlbnRTZWdtZW50cyk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3RGVidWc7XG5cbmNvbnN0IHRvcENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDAsIDEpO1xuY29uc3QgYnRtQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMCwgMSk7XG5jb25zdCBsZWZ0Q29sb3IgPSBuZXcgQ29sb3IoMCwgMCwgMSwgMSk7XG5jb25zdCByaWdodENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDEsIDEpO1xuY29uc3QgY2VudGVyQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMSwgMSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGVidWdQYWRkaW5nKHBhaW50ZXI6IFBhaW50ZXIpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gcGFpbnRlci50cmFuc2Zvcm0ucGFkZGluZztcbiAgICBjb25zdCBsaW5lV2lkdGggPSAzO1xuICAgIC8vIFRvcFxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQgLSAocGFkZGluZy50b3AgfHwgMCksIGxpbmVXaWR0aCwgdG9wQ29sb3IpO1xuICAgIC8vIEJvdHRvbVxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWRkaW5nLmJvdHRvbSB8fCAwLCBsaW5lV2lkdGgsIGJ0bUNvbG9yKTtcbiAgICAvLyBMZWZ0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWRkaW5nLmxlZnQgfHwgMCwgbGluZVdpZHRoLCBsZWZ0Q29sb3IpO1xuICAgIC8vIFJpZ2h0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS53aWR0aCAtIChwYWRkaW5nLnJpZ2h0IHx8IDApLCBsaW5lV2lkdGgsIHJpZ2h0Q29sb3IpO1xuICAgIC8vIENlbnRlclxuICAgIGNvbnN0IGNlbnRlciA9IHBhaW50ZXIudHJhbnNmb3JtLmNlbnRlclBvaW50O1xuICAgIGRyYXdDcm9zc2hhaXIocGFpbnRlciwgY2VudGVyLngsIHBhaW50ZXIudHJhbnNmb3JtLmhlaWdodCAtIGNlbnRlci55LCBjZW50ZXJDb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdDcm9zc2hhaXIocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGNvbnN0IHNpemUgPSAyMDtcbiAgICBjb25zdCBsaW5lV2lkdGggPSAyO1xuICAgIC8vVmVydGljYWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gbGluZVdpZHRoIC8gMiwgeSAtIHNpemUgLyAyLCBsaW5lV2lkdGgsIHNpemUsIGNvbG9yKTtcbiAgICAvL0hvcml6b250YWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gc2l6ZSAvIDIsIHkgLSBsaW5lV2lkdGggLyAyLCBzaXplLCBsaW5lV2lkdGgsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0hvcml6b250YWxMaW5lKHBhaW50ZXI6IFBhaW50ZXIsIHk6IG51bWJlciwgbGluZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCAwLCB5ICArIGxpbmVXaWR0aCAvIDIsIHBhaW50ZXIudHJhbnNmb3JtLndpZHRoLCAgbGluZVdpZHRoLCBjb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdWZXJ0aWNhbExpbmUocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCBsaW5lV2lkdGg6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXIsIHggLSBsaW5lV2lkdGggLyAyLCAwLCBsaW5lV2lkdGgsICBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXI6IFBhaW50ZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICBnbC5zY2lzc29yKHggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHkgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHdpZHRoICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLCBoZWlnaHQgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8pO1xuICAgIGNvbnRleHQuY2xlYXIoe2NvbG9yfSk7XG4gICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xufVxuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAvLyBCaW5kIHRoZSBlbXB0eSB0ZXh0dXJlIGZvciBkcmF3aW5nIG91dGxpbmVzXG4gICAgcGFpbnRlci5lbXB0eVRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVfU1RSSVAsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci5yZWQpLCBpZCxcbiAgICAgICAgcGFpbnRlci5kZWJ1Z0J1ZmZlciwgcGFpbnRlci50aWxlQm9yZGVySW5kZXhCdWZmZXIsIHBhaW50ZXIuZGVidWdTZWdtZW50cyk7XG5cbiAgICBjb25zdCB0aWxlUmF3RGF0YSA9IHNvdXJjZUNhY2hlLmdldFRpbGVCeUlEKGNvb3JkLmtleSkubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgY29uc3QgdGlsZUJ5dGVMZW5ndGggPSAodGlsZVJhd0RhdGEgJiYgdGlsZVJhd0RhdGEuYnl0ZUxlbmd0aCkgfHwgMDtcbiAgICBjb25zdCB0aWxlU2l6ZUtiID0gTWF0aC5mbG9vcih0aWxlQnl0ZUxlbmd0aCAvIDEwMjQpO1xuICAgIGNvbnN0IHRpbGVTaXplID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCkudGlsZVNpemU7XG4gICAgY29uc3Qgc2NhbGVSYXRpbyA9ICg1MTIgLyBNYXRoLm1pbih0aWxlU2l6ZSwgNTEyKSAqIChjb29yZC5vdmVyc2NhbGVkWiAvIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pKSAqIDAuNTtcbiAgICBsZXQgdGlsZUlkVGV4dCA9IGNvb3JkLmNhbm9uaWNhbC50b1N0cmluZygpO1xuICAgIGlmIChjb29yZC5vdmVyc2NhbGVkWiAhPT0gY29vcmQuY2Fub25pY2FsLnopIHtcbiAgICAgICAgdGlsZUlkVGV4dCArPSBgID0+ICR7Y29vcmQub3ZlcnNjYWxlZFp9YDtcbiAgICB9XG4gICAgY29uc3QgdGlsZUxhYmVsID0gYCR7dGlsZUlkVGV4dH0gJHt0aWxlU2l6ZUtifWtiYDtcbiAgICBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyLCB0aWxlTGFiZWwpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgQ29sb3JNb2RlLmFscGhhQmxlbmRlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci50cmFuc3BhcmVudCwgc2NhbGVSYXRpbyksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLmRlYnVnU2VnbWVudHMpO1xufVxuXG5mdW5jdGlvbiBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyOiBQYWludGVyLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBwYWludGVyLmluaXREZWJ1Z092ZXJsYXlDYW52YXMoKTtcbiAgICBjb25zdCBjYW52YXMgPSBwYWludGVyLmRlYnVnT3ZlcmxheUNhbnZhcztcbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcbiAgICBjb25zdCBjdHgyZCA9IHBhaW50ZXIuZGVidWdPdmVybGF5Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4MmQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgICBjdHgyZC5zaGFkb3dDb2xvciA9ICd3aGl0ZSc7XG4gICAgY3R4MmQuc2hhZG93Qmx1ciA9IDI7XG4gICAgY3R4MmQubGluZVdpZHRoID0gMS41O1xuICAgIGN0eDJkLnN0cm9rZVN0eWxlID0gJ3doaXRlJztcbiAgICBjdHgyZC50ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICBjdHgyZC5mb250ID0gYGJvbGQgJHszNn1weCBPcGVuIFNhbnMsIHNhbnMtc2VyaWZgO1xuICAgIGN0eDJkLmZpbGxUZXh0KHRleHQsIDUsIDUpO1xuICAgIGN0eDJkLnN0cm9rZVRleHQodGV4dCwgNSwgNSk7XG5cbiAgICBwYWludGVyLmRlYnVnT3ZlcmxheVRleHR1cmUudXBkYXRlKGNhbnZhcyk7XG4gICAgcGFpbnRlci5kZWJ1Z092ZXJsYXlUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdDdXN0b207XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBDdXN0b21TdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5cbmZ1bmN0aW9uIGRyYXdDdXN0b20ocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogQ3VzdG9tU3R5bGVMYXllcikge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBpbXBsZW1lbnRhdGlvbiA9IGxheWVyLmltcGxlbWVudGF0aW9uO1xuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcblxuICAgICAgICBjb25zdCBwcmVyZW5kZXIgPSBpbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXI7XG4gICAgICAgIGlmIChwcmVyZW5kZXIpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpO1xuICAgICAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuXG4gICAgICAgICAgICBwcmVyZW5kZXIuY2FsbChpbXBsZW1lbnRhdGlvbiwgY29udGV4dC5nbCwgcGFpbnRlci50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG5cbiAgICAgICAgcGFpbnRlci5zZXRDdXN0b21MYXllckRlZmF1bHRzKCk7XG5cbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKFN0ZW5jaWxNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBpbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnID9cbiAgICAgICAgICAgIG5ldyBEZXB0aE1vZGUocGFpbnRlci5jb250ZXh0LmdsLkxFUVVBTCwgRGVwdGhNb2RlLlJlYWRXcml0ZSwgcGFpbnRlci5kZXB0aFJhbmdlRm9yM0QpIDpcbiAgICAgICAgICAgIHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcblxuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuXG4gICAgICAgIGltcGxlbWVudGF0aW9uLnJlbmRlcihjb250ZXh0LmdsLCBwYWludGVyLnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKTtcblxuICAgICAgICBjb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgUG9zQXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBwb3NBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcG9zX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0ICogYXMgc2hhZGVycyBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge3Byb2dyYW1Vbmlmb3Jtc30gZnJvbSAnLi9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL2RyYXdfc3ltYm9sJztcbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9kcmF3X2NpcmNsZSc7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL2RyYXdfaGVhdG1hcCc7XG5pbXBvcnQgbGluZSBmcm9tICcuL2RyYXdfbGluZSc7XG5pbXBvcnQgZmlsbCBmcm9tICcuL2RyYXdfZmlsbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL2RyYXdfZmlsbF9leHRydXNpb24nO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL2RyYXdfaGlsbHNoYWRlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9kcmF3X3Jhc3Rlcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL2RyYXdfYmFja2dyb3VuZCc7XG5pbXBvcnQgZGVidWcsIHtkcmF3RGVidWdQYWRkaW5nfSBmcm9tICcuL2RyYXdfZGVidWcnO1xuaW1wb3J0IGN1c3RvbSBmcm9tICcuL2RyYXdfY3VzdG9tJztcblxuY29uc3QgZHJhdyA9IHtcbiAgICBzeW1ib2wsXG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgbGluZSxcbiAgICBmaWxsLFxuICAgICdmaWxsLWV4dHJ1c2lvbic6IGZpbGxFeHRydXNpb24sXG4gICAgaGlsbHNoYWRlLFxuICAgIHJhc3RlcixcbiAgICBiYWNrZ3JvdW5kLFxuICAgIGRlYnVnLFxuICAgIGN1c3RvbVxufTtcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lQXRsYXMgZnJvbSAnLi9saW5lX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgR2x5cGhNYW5hZ2VyIGZyb20gJy4vZ2x5cGhfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0RlcHRoUmFuZ2VUeXBlLCBEZXB0aE1hc2tUeXBlLCBEZXB0aEZ1bmNUeXBlfSBmcm9tICcuLi9nbC90eXBlcyc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhc3MgPSAnb2Zmc2NyZWVuJyB8ICdvcGFxdWUnIHwgJ3RyYW5zbHVjZW50JztcblxudHlwZSBQYWludGVyT3B0aW9ucyA9IHtcbiAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW4sXG4gICAgc2hvd1RpbGVCb3VuZGFyaWVzOiBib29sZWFuLFxuICAgIHNob3dQYWRkaW5nOiBib29sZWFuLFxuICAgIHJvdGF0aW5nOiBib29sZWFuLFxuICAgIHpvb21pbmc6IGJvb2xlYW4sXG4gICAgbW92aW5nOiBib29sZWFuLFxuICAgIGdwdVRpbWluZzogYm9vbGVhbixcbiAgICBmYWRlRHVyYXRpb246IG51bWJlclxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgcGFpbnRlciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGdsIGFuIGV4cGVyaW1lbnRhbC13ZWJnbCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhaW50ZXIge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX3RpbGVUZXh0dXJlczoge1tfOiBudW1iZXJdOiBBcnJheTxUZXh0dXJlPiB9O1xuICAgIG51bVN1YmxheWVyczogbnVtYmVyO1xuICAgIGRlcHRoRXBzaWxvbjogbnVtYmVyO1xuICAgIGVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgdGlsZUV4dGVudEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHRpbGVFeHRlbnRTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBkZWJ1Z0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGRlYnVnU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgcmFzdGVyQm91bmRzQnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgcmFzdGVyQm91bmRzU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdmlld3BvcnRCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICB2aWV3cG9ydFNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHF1YWRUcmlhbmdsZUluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcbiAgICB0aWxlQm9yZGVySW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuICAgIF90aWxlQ2xpcHBpbmdNYXNrSURzOiB7W186IHN0cmluZ106IG51bWJlciB9O1xuICAgIHN0ZW5jaWxDbGVhck1vZGU6IFN0ZW5jaWxNb2RlO1xuICAgIHN0eWxlOiBTdHlsZTtcbiAgICBvcHRpb25zOiBQYWludGVyT3B0aW9ucztcbiAgICBsaW5lQXRsYXM6IExpbmVBdGxhcztcbiAgICBpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcjtcbiAgICBnbHlwaE1hbmFnZXI6IEdseXBoTWFuYWdlcjtcbiAgICBkZXB0aFJhbmdlRm9yM0Q6IERlcHRoUmFuZ2VUeXBlO1xuICAgIG9wYXF1ZVBhc3NDdXRvZmY6IG51bWJlcjtcbiAgICByZW5kZXJQYXNzOiBSZW5kZXJQYXNzO1xuICAgIGN1cnJlbnRMYXllcjogbnVtYmVyO1xuICAgIGN1cnJlbnRTdGVuY2lsU291cmNlOiA/c3RyaW5nO1xuICAgIG5leHRTdGVuY2lsSUQ6IG51bWJlcjtcbiAgICBpZDogc3RyaW5nO1xuICAgIF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW47XG4gICAgY2FjaGU6IHtbXzogc3RyaW5nXTogUHJvZ3JhbTwqPiB9O1xuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBzeW1ib2xGYWRlQ2hhbmdlOiBudW1iZXI7XG4gICAgZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueSB9O1xuICAgIGVtcHR5VGV4dHVyZTogVGV4dHVyZTtcbiAgICBkZWJ1Z092ZXJsYXlUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGRlYnVnT3ZlcmxheUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dChnbCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl90aWxlVGV4dHVyZXMgPSB7fTtcblxuICAgICAgICB0aGlzLnNldHVwKCk7XG5cbiAgICAgICAgLy8gV2l0aGluIGVhY2ggbGF5ZXIgdGhlcmUgYXJlIG11bHRpcGxlIGRpc3RpbmN0IHotcGxhbmVzIHRoYXQgY2FuIGJlIGRyYXduIHRvLlxuICAgICAgICAvLyBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBXZWJHTCBkZXB0aCBidWZmZXIuXG4gICAgICAgIHRoaXMubnVtU3VibGF5ZXJzID0gU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nICsgU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcgKyAxO1xuICAgICAgICB0aGlzLmRlcHRoRXBzaWxvbiA9IDEgLyBNYXRoLnBvdygyLCAxNik7XG5cbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBVcGRhdGUgdGhlIEdMIHZpZXdwb3J0LCBwcm9qZWN0aW9uIG1hdHJpeCwgYW5kIHRyYW5zZm9ybXMgdG8gY29tcGVuc2F0ZVxuICAgICAqIGZvciBhIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlLlxuICAgICAqL1xuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5zdHlsZS5fb3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0ucmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgICBjb25zdCB0aWxlRXh0ZW50QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRpbGVFeHRlbnRBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgZGVidWdBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5UKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuZGVidWdCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihkZWJ1Z0FycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLmRlYnVnU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgNSk7XG5cbiAgICAgICAgY29uc3QgcmFzdGVyQm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgMCwgMCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCwgRVhURU5ULCAwKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5ULCAwLCBFWFRFTlQpO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCwgRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHJhc3RlckJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAxKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZpZXdwb3J0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudmlld3BvcnRTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB0aWxlTGluZVN0cmlwSW5kaWNlcyA9IG5ldyBMaW5lU3RyaXBJbmRleEFycmF5KCk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDApO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygxKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMyk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDIpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRpbGVMaW5lU3RyaXBJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBxdWFkVHJpYW5nbGVJbmRpY2VzID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDAsIDEsIDIpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDIsIDEsIDMpO1xuICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVJbmRpY2VzKTtcblxuICAgICAgICB0aGlzLmVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDBdKVxuICAgICAgICB9LCBjb250ZXh0LmdsLlJHQkEpO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLnN0ZW5jaWxDbGVhck1vZGUgPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkFMV0FZUywgbWFzazogMH0sIDB4MCwgMHhGRiwgZ2wuWkVSTywgZ2wuWkVSTywgZ2wuWkVSTyk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXNldCB0aGUgZHJhd2luZyBjYW52YXMgYnkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGRyYXdcbiAgICAgKiBuZXcgdGlsZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24sIHdoaWxlIHJldGFpbmluZyBwcmV2aW91c2x5IGRyYXduIHBpeGVscy5cbiAgICAgKi9cbiAgICBjbGVhclN0ZW5jaWwoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICB0aGlzLm5leHRTdGVuY2lsSUQgPSAxO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NDkwLFxuICAgICAgICAvLyBwZW5kaW5nIGFuIHVwc3RyZWFtIGZpeCwgd2UgZHJhdyBhIGZ1bGxzY3JlZW4gc3RlbmNpbD0wIGNsaXBwaW5nIG1hc2sgaGVyZSxcbiAgICAgICAgLy8gZWZmZWN0aXZlbHkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyOiBvbmNlIGFuIHVwc3RyZWFtIHBhdGNoIGxhbmRzLCByZW1vdmVcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpbiBmYXZvciBvZiBjb250ZXh0LmNsZWFyKHsgc3RlbmNpbDogMHgwIH0pXG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCAwLCAxKTtcbiAgICAgICAgbWF0NC5zY2FsZShtYXRyaXgsIG1hdHJpeCwgW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCwgMF0pO1xuXG4gICAgICAgIHRoaXMudXNlUHJvZ3JhbSgnY2xpcHBpbmdNYXNrJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIHRoaXMuc3RlbmNpbENsZWFyTW9kZSwgQ29sb3JNb2RlLmRpc2FibGVkLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgICAgICAgICAnJGNsaXBwaW5nJywgdGhpcy52aWV3cG9ydEJ1ZmZlcixcbiAgICAgICAgICAgIHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHRoaXMudmlld3BvcnRTZWdtZW50cyk7XG4gICAgfVxuXG4gICAgX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyOiBTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9PT0gbGF5ZXIuc291cmNlIHx8ICFsYXllci5pc1RpbGVDbGlwcGVkKCkgfHwgIXRpbGVJRHMgfHwgIXRpbGVJRHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IGxheWVyLnNvdXJjZTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIHRpbGVJRHMubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICAvLyB3ZSdsbCBydW4gb3V0IG9mIGZyZXNoIElEcyBzbyB3ZSBuZWVkIHRvIGNsZWFyIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2hcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShDb2xvck1vZGUuZGlzYWJsZWQpO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShEZXB0aE1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnVzZVByb2dyYW0oJ2NsaXBwaW5nTWFzaycpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiB0aWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0gPSB0aGlzLm5leHRTdGVuY2lsSUQrKztcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgRGVwdGhNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIC8vIFRlc3RzIHdpbGwgYWx3YXlzIHBhc3MsIGFuZCByZWYgdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAgICAgICAgICAgIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuQUxXQVlTLCBtYXNrOiAwfSwgaWQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKHRpbGVJRC5wb3NNYXRyaXgpLFxuICAgICAgICAgICAgICAgICckY2xpcHBpbmcnLCB0aGlzLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3IzRCgpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIDEgPiAyNTYpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHRoaXMubmV4dFN0ZW5jaWxJRCsrO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuTk9URVFVQUwsIG1hc2s6IDB4RkZ9LCBpZCwgMHhGRiwgZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuUkVQTEFDRSk7XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3JDbGlwcGluZyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICByZXR1cm4gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5FUVVBTCwgbWFzazogMHhGRn0sIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0sIDB4MDAsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogU29ydCBjb29yZGluYXRlcyBieSBaIGFzIGRyYXdpbmcgdGlsZXMgaXMgZG9uZSBpbiBaLWRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogQWxsIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUgWiB3cml0ZSB0aGUgc2FtZSBzdGVuY2lsIHZhbHVlLiAgQ2hpbGRyZW5cbiAgICAgKiBzdGVuY2lsIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIHBhcmVudCdzLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIHJhc3RlclxuICAgICAqIGFuZCByYXN0ZXItZGVtIHRpbGVzLCB3aGljaCBhcmUgYWxyZWFkeSBjbGlwcGVkIHRvIHRpbGUgYm91bmRhcmllcywgdG9cbiAgICAgKiBtYXNrIGFyZWEgb2YgdGlsZSBvdmVybGFwcGVkIGJ5IGNoaWxkcmVuIHRpbGVzLlxuICAgICAqIFN0ZW5jaWwgcmVmIHZhbHVlcyBjb250aW51ZSByYW5nZSB1c2VkIGluIF90aWxlQ2xpcHBpbmdNYXNrSURzLlxuICAgICAqXG4gICAgICogUmV0dXJucyBbU3RlbmNpbE1vZGUgZm9yIHRpbGUgb3ZlcnNjYWxlWiBtYXAsIHNvcnRlZENvb3Jkc10uXG4gICAgICovXG4gICAgc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pOiBbe1tfOiBudW1iZXJdOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+fSwgQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD5dIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRpbGVJRHMuc29ydCgoYSwgYikgPT4gYi5vdmVyc2NhbGVkWiAtIGEub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCBtaW5UaWxlWiA9IGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMV0ub3ZlcnNjYWxlZFo7XG4gICAgICAgIGNvbnN0IHN0ZW5jaWxWYWx1ZXMgPSBjb29yZHNbMF0ub3ZlcnNjYWxlZFogLSBtaW5UaWxlWiArIDE7XG4gICAgICAgIGlmIChzdGVuY2lsVmFsdWVzID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyBzdGVuY2lsVmFsdWVzID4gMjU2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHpUb1N0ZW5jaWxNb2RlID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZW5jaWxWYWx1ZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIHpUb1N0ZW5jaWxNb2RlW2kgKyBtaW5UaWxlWl0gPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkdFUVVBTCwgbWFzazogMHhGRn0sIGkgKyB0aGlzLm5leHRTdGVuY2lsSUQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXh0U3RlbmNpbElEICs9IHN0ZW5jaWxWYWx1ZXM7XG4gICAgICAgICAgICByZXR1cm4gW3pUb1N0ZW5jaWxNb2RlLCBjb29yZHNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbe1ttaW5UaWxlWl06IFN0ZW5jaWxNb2RlLmRpc2FibGVkfSwgY29vcmRzXTtcbiAgICB9XG5cbiAgICBjb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk6ICRSZWFkT25seTxDb2xvck1vZGU+IHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bU92ZXJkcmF3U3RlcHMgPSA4O1xuICAgICAgICAgICAgY29uc3QgYSA9IDEgLyBudW1PdmVyZHJhd1N0ZXBzO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yTW9kZShbZ2wuQ09OU1RBTlRfQ09MT1IsIGdsLk9ORV0sIG5ldyBDb2xvcihhLCBhLCBhLCAwKSwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLnVuYmxlbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvck1vZGUuYWxwaGFCbGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVwdGhNb2RlRm9yU3VibGF5ZXIobjogbnVtYmVyLCBtYXNrOiBEZXB0aE1hc2tUeXBlLCBmdW5jOiA/RGVwdGhGdW5jVHlwZSk6ICRSZWFkT25seTxEZXB0aE1vZGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgcmV0dXJuIERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgZGVwdGggPSAxIC0gKCgxICsgdGhpcy5jdXJyZW50TGF5ZXIpICogdGhpcy5udW1TdWJsYXllcnMgKyBuKSAqIHRoaXMuZGVwdGhFcHNpbG9uO1xuICAgICAgICByZXR1cm4gbmV3IERlcHRoTW9kZShmdW5jIHx8IHRoaXMuY29udGV4dC5nbC5MRVFVQUwsIG1hc2ssIFtkZXB0aCwgZGVwdGhdKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBvcGFxdWUgcGFzcyBhbmQgM0QgbGF5ZXJzIGJvdGggdXNlIHRoZSBkZXB0aCBidWZmZXIuXG4gICAgICogTGF5ZXJzIGRyYXduIGFib3ZlIDNEIGxheWVycyBuZWVkIHRvIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIHBhaW50ZXIncyBhbGdvcml0aG0gc28gdGhhdCB0aGV5IGFwcGVhciBhYm92ZSAzRCBmZWF0dXJlcy5cbiAgICAgKiBUaGlzIHJldHVybnMgdHJ1ZSBmb3IgbGF5ZXJzIHRoYXQgY2FuIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIG9wYXF1ZSBwYXNzLlxuICAgICAqL1xuICAgIG9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYXllciA8IHRoaXMub3BhcXVlUGFzc0N1dG9mZjtcbiAgICB9XG5cbiAgICByZW5kZXIoc3R5bGU6IFN0eWxlLCBvcHRpb25zOiBQYWludGVyT3B0aW9ucykge1xuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBzdHlsZS5saW5lQXRsYXM7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyID0gc3R5bGUuaW1hZ2VNYW5hZ2VyO1xuICAgICAgICB0aGlzLmdseXBoTWFuYWdlciA9IHN0eWxlLmdseXBoTWFuYWdlcjtcblxuICAgICAgICB0aGlzLnN5bWJvbEZhZGVDaGFuZ2UgPSBzdHlsZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShicm93c2VyLm5vdygpKTtcblxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJZHMgPSB0aGlzLnN0eWxlLl9vcmRlcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUucHJlcGFyZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29vcmRzQXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nU3ltYm9sOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBjb29yZHNBc2NlbmRpbmdbaWRdID0gc291cmNlQ2FjaGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nW2lkXSA9IGNvb3Jkc0FzY2VuZGluZ1tpZF0uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nU3ltYm9sW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcyh0cnVlKS5yZXZlcnNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcklkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IGxheWVySWRzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXS5pczNEKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gV2UgZmlyc3QgZG8gYWxsIHJlbmRlcmluZyB0aGF0IHJlcXVpcmVzIHJlbmRlcmluZyB0byBhIHNlcGFyYXRlXG4gICAgICAgIC8vIGZyYW1lYnVmZmVyLCBhbmQgdGhlbiBzYXZlIHRob3NlIGZvciByZW5kZXJpbmcgYmFjayB0byB0aGUgbWFwXG4gICAgICAgIC8vIGxhdGVyOiBpbiBkb2luZyB0aGlzIHdlIGF2b2lkIGRvaW5nIGV4cGVuc2l2ZSBmcmFtZWJ1ZmZlciByZXN0b3Jlcy5cbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzID0gJ29mZnNjcmVlbic7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIGxheWVySWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaGFzT2Zmc2NyZWVuUGFzcygpIHx8IGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gY29vcmRzRGVzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMYXllcih0aGlzLCBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXSwgbGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJpbmQgdGhlIG1haW4gZnJhbWVidWZmZXIgbm93IHRoYXQgYWxsIG9mZnNjcmVlbiBsYXllcnMgaGF2ZSBiZWVuIHJlbmRlcmVkOlxuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICAvLyBDbGVhciBidWZmZXJzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gQ29sb3IuYmxhY2sgOiBDb2xvci50cmFuc3BhcmVudCwgZGVwdGg6IDF9KTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcblxuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSBvcHRpb25zLnNob3dPdmVyZHJhd0luc3BlY3RvcjtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlRm9yM0QgPSBbMCwgMSAtICgoc3R5bGUuX29yZGVyLmxlbmd0aCArIDIpICogdGhpcy5udW1TdWJsYXllcnMgKiB0aGlzLmRlcHRoRXBzaWxvbildO1xuXG4gICAgICAgIC8vIE9wYXF1ZSBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIERyYXcgb3BhcXVlIGxheWVycyB0b3AtdG8tYm90dG9tIGZpcnN0LlxuICAgICAgICB0aGlzLnJlbmRlclBhc3MgPSAnb3BhcXVlJztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gbGF5ZXJJZHMubGVuZ3RoIC0gMTsgdGhpcy5jdXJyZW50TGF5ZXIgPj0gMDsgdGhpcy5jdXJyZW50TGF5ZXItLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZHNbdGhpcy5jdXJyZW50TGF5ZXJdXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zbHVjZW50IHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBhbGwgb3RoZXIgbGF5ZXJzIGJvdHRvbS10by10b3AuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAgICAgZm9yICh0aGlzLmN1cnJlbnRMYXllciA9IDA7IHRoaXMuY3VycmVudExheWVyIDwgbGF5ZXJJZHMubGVuZ3RoOyB0aGlzLmN1cnJlbnRMYXllcisrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgLy8gRm9yIHN5bWJvbCBsYXllcnMgaW4gdGhlIHRyYW5zbHVjZW50IHBhc3MsIHdlIGFkZCBleHRyYSB0aWxlcyB0byB0aGUgcmVuZGVyYWJsZSBzZXRcbiAgICAgICAgICAgIC8vIGZvciBjcm9zcy10aWxlIHN5bWJvbCBmYWRpbmcuIFN5bWJvbCBsYXllcnMgZG9uJ3QgdXNlIHRpbGUgY2xpcHBpbmcsIHNvIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjbGlwcGluZyBtYXNrc1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnID8gY29vcmRzRGVzY2VuZGluZ1N5bWJvbCA6IGNvb3Jkc0Rlc2NlbmRpbmcpW2xheWVyLnNvdXJjZV07XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyLCBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICAvL1VzZSBzb3VyY2Ugd2l0aCBoaWdoZXN0IG1heHpvb21cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFNvdXJjZTtcbiAgICAgICAgICAgIGxldCBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IHZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpO1xuICAgICAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhbGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAhPT0gKHNvdXJjZUNhY2hlICYmIHNvdXJjZUNhY2hlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGUgPSB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRTb3VyY2UgfHwgKHNlbGVjdGVkU291cmNlLmdldFNvdXJjZSgpLm1heHpvb20gPCBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTb3VyY2UgPSBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgZHJhdy5kZWJ1Zyh0aGlzLCBzZWxlY3RlZFNvdXJjZSwgc2VsZWN0ZWRTb3VyY2UuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UGFkZGluZykge1xuICAgICAgICAgICAgZHJhd0RlYnVnUGFkZGluZyh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBkZWZhdWx0cyBmb3IgbW9zdCBHTCB2YWx1ZXMgc28gdGhhdCBhbnlvbmUgdXNpbmcgdGhlIHN0YXRlIGFmdGVyIHRoZSByZW5kZXJcbiAgICAgICAgLy8gZW5jb3VudGVycyBtb3JlIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZW5kZXJMYXllcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgICAgIGlmIChsYXllci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSkgcmV0dXJuO1xuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcblxuICAgICAgICB0aGlzLmdwdVRpbWluZ1N0YXJ0KGxheWVyKTtcbiAgICAgICAgZHJhd1tsYXllci50eXBlXShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKTtcbiAgICAgICAgdGhpcy5ncHVUaW1pbmdFbmQoKTtcbiAgICB9XG5cbiAgICBncHVUaW1pbmdTdGFydChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIC8vIFRoaXMgdHJpZXMgdG8gdGltZSB0aGUgZHJhdyBjYWxsIGl0c2VsZiwgYnV0IG5vdGUgdGhhdCB0aGUgY29zdCBmb3IgZHJhd2luZyBhIGxheWVyXG4gICAgICAgIC8vIG1heSBiZSBkb21pbmF0ZWQgYnkgdGhlIGNvc3Qgb2YgdXBsb2FkaW5nIHZlcnRpY2VzIHRvIHRoZSBHUFUuXG4gICAgICAgIC8vIFRvIGluc3RydW1lbnQgdGhhdCwgd2UnZCBuZWVkIHRvIHBhc3MgdGhlIGxheWVyVGltZXJzIG9iamVjdCBkb3duIGludG8gdGhlIGJ1Y2tldFxuICAgICAgICAvLyB1cGxvYWRpbmcgbG9naWMuXG4gICAgICAgIGxldCBsYXllclRpbWVyID0gdGhpcy5ncHVUaW1lcnNbbGF5ZXIuaWRdO1xuICAgICAgICBpZiAoIWxheWVyVGltZXIpIHtcbiAgICAgICAgICAgIGxheWVyVGltZXIgPSB0aGlzLmdwdVRpbWVyc1tsYXllci5pZF0gPSB7XG4gICAgICAgICAgICAgICAgY2FsbHM6IDAsXG4gICAgICAgICAgICAgICAgY3B1VGltZTogMCxcbiAgICAgICAgICAgICAgICBxdWVyeTogZXh0LmNyZWF0ZVF1ZXJ5RVhUKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJUaW1lci5jYWxscysrO1xuICAgICAgICBleHQuYmVnaW5RdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCwgbGF5ZXJUaW1lci5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ3B1VGltaW5nRW5kKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIGV4dC5lbmRRdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gICAgfVxuXG4gICAgY29sbGVjdEdwdVRpbWVycygpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExheWVyVGltZXJzID0gdGhpcy5ncHVUaW1lcnM7XG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgICAgIHJldHVybiBjdXJyZW50TGF5ZXJUaW1lcnM7XG4gICAgfVxuXG4gICAgcXVlcnlHcHVUaW1lcnMoZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiBncHVUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdwdVRpbWVyID0gZ3B1VGltZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgICAgICBjb25zdCBncHVUaW1lID0gZXh0LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLnF1ZXJ5LCBleHQuUVVFUllfUkVTVUxUX0VYVCkgLyAoMTAwMCAqIDEwMDApO1xuICAgICAgICAgICAgZXh0LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyLnF1ZXJ5KTtcbiAgICAgICAgICAgIGxheWVyc1tsYXllcklkXSA9IGdwdVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gYSBtYXRyaXggdG8gaW5jb3Jwb3JhdGUgdGhlICotdHJhbnNsYXRlIGFuZCAqLXRyYW5zbGF0ZS1hbmNob3IgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgICAqIEBwYXJhbSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzIFRydWUgd2hlbiB0aGUgdW5pdHMgYWNjZXB0ZWQgYnkgdGhlIG1hdHJpeCBhcmUgaW4gdmlld3BvcnQgcGl4ZWxzIGluc3RlYWQgb2YgdGlsZSB1bml0cy5cbiAgICAgKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBtYXRyaXhcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZVBvc01hdHJpeChtYXRyaXg6IEZsb2F0MzJBcnJheSwgdGlsZTogVGlsZSwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cz86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGVbMF0gJiYgIXRyYW5zbGF0ZVsxXSkgcmV0dXJuIG1hdHJpeDtcblxuICAgICAgICBjb25zdCBhbmdsZSA9IGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgP1xuICAgICAgICAgICAgKHRyYW5zbGF0ZUFuY2hvciA9PT0gJ21hcCcgPyB0aGlzLnRyYW5zZm9ybS5hbmdsZSA6IDApIDpcbiAgICAgICAgICAgICh0cmFuc2xhdGVBbmNob3IgPT09ICd2aWV3cG9ydCcgPyAtdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAwKTtcblxuICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbkEgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCBjb3NBID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgdHJhbnNsYXRlID0gW1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIGNvc0EgLSB0cmFuc2xhdGVbMV0gKiBzaW5BLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIHNpbkEgKyB0cmFuc2xhdGVbMV0gKiBjb3NBXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBbXG4gICAgICAgICAgICBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID8gdHJhbnNsYXRlWzBdIDogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgdHJhbnNsYXRlWzBdLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgPyB0cmFuc2xhdGVbMV0gOiBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCB0cmFuc2xhdGVbMV0sIHRoaXMudHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodHJhbnNsYXRlZE1hdHJpeCwgbWF0cml4LCB0cmFuc2xhdGlvbik7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkTWF0cml4O1xuICAgIH1cblxuICAgIHNhdmVUaWxlVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmVzID0gdGhpcy5fdGlsZVRleHR1cmVzW3RleHR1cmUuc2l6ZVswXV07XG4gICAgICAgIGlmICghdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVUZXh0dXJlc1t0ZXh0dXJlLnNpemVbMF1dID0gW3RleHR1cmVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRpbGVUZXh0dXJlKHNpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0ZXh0dXJlcyA9IHRoaXMuX3RpbGVUZXh0dXJlc1tzaXplXTtcbiAgICAgICAgcmV0dXJuIHRleHR1cmVzICYmIHRleHR1cmVzLmxlbmd0aCA+IDAgPyB0ZXh0dXJlcy5wb3AoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBwYXR0ZXJuIGltYWdlIGlzIG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGV0aGVyIGl0IGlzIG5vdCBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmVlZGVkIGltYWdlIGlzIG1pc3NpbmcgYW5kIHJlbmRlcmluZyBuZWVkcyB0byBiZSBza2lwcGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaXNQYXR0ZXJuTWlzc2luZyhpbWFnZTogP0Nyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpbWFnZVBvc0EgPSB0aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zQiA9IHRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4oaW1hZ2UudG8udG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiAhaW1hZ2VQb3NBIHx8ICFpbWFnZVBvc0I7XG4gICAgfVxuXG4gICAgdXNlUHJvZ3JhbShuYW1lOiBzdHJpbmcsIHByb2dyYW1Db25maWd1cmF0aW9uOiA/UHJvZ3JhbUNvbmZpZ3VyYXRpb24pOiBQcm9ncmFtPGFueT4ge1xuICAgICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZSB8fCB7fTtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7bmFtZX0ke3Byb2dyYW1Db25maWd1cmF0aW9uID8gcHJvZ3JhbUNvbmZpZ3VyYXRpb24uY2FjaGVLZXkgOiAnJ30ke3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA/ICcvb3ZlcmRyYXcnIDogJyd9YDtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVba2V5XSA9IG5ldyBQcm9ncmFtKHRoaXMuY29udGV4dCwgc2hhZGVyc1tuYW1lXSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHByb2dyYW1Vbmlmb3Jtc1tuYW1lXSwgdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVzZXQgc29tZSBHTCBzdGF0ZSB0byBkZWZhdWx0IHZhbHVlcyB0byBhdm9pZCBoYXJkLXRvLWRlYnVnIGJ1Z3NcbiAgICAgKiBpbiBjdXN0b20gbGF5ZXJzLlxuICAgICAqL1xuICAgIHNldEN1c3RvbUxheWVyRGVmYXVsdHMoKSB7XG4gICAgICAgIC8vIFByZXZlbnQgY3VzdG9tIGxheWVycyBmcm9tIHVuaW50ZW50aW9uYWxseSBtb2RpZnkgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIC8vIEFsbCBvdGhlciBzdGF0ZSBpcyBzdGF0ZSBpcyByZXN0b3JlZCBvbiBpdCdzIG93biwgYnV0IGZvciBWQU9zIGl0J3NcbiAgICAgICAgLy8gc2ltcGxlciB0byB1bmJpbmQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiBWQU9zLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIHN0YXRlIGlzIG1lYW5pbmdmdWwgYW5kIG9mdGVuIGV4cGVjdGVkLlxuICAgICAgICAvLyBMZWF2aW5nIHRoaXMgc3RhdGUgZGlydHkgY291bGQgY2F1c2UgYSBsb3Qgb2YgY29uZnVzaW9uIGZvciB1c2Vycy5cbiAgICAgICAgdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFjay5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogU2V0IEdMIHN0YXRlIHRoYXQgaXMgc2hhcmVkIGJ5IGFsbCBsYXllcnMuXG4gICAgICovXG4gICAgc2V0QmFzZVN0YXRlKCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5ibGVuZEVxdWF0aW9uLnNldChnbC5GVU5DX0FERCk7XG4gICAgfVxuXG4gICAgaW5pdERlYnVnT3ZlcmxheUNhbnZhcygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWdPdmVybGF5Q2FudmFzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWdPdmVybGF5Q2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMud2lkdGggPSA1MTI7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcy5oZWlnaHQgPSA1MTI7XG4gICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgICAgIHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKHRoaXMuY29udGV4dCwgdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMsIGdsLlJHQkEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5lbXB0eVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYWludGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt2ZWMzLCB2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jbGFzcyBGcnVzdHVtIHtcbiAgICBwb2ludHM6IEFycmF5PEFycmF5PG51bWJlcj4+O1xuICAgIHBsYW5lczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG5cbiAgICBjb25zdHJ1Y3Rvcihwb2ludHNfOiBBcnJheTxBcnJheTxudW1iZXI+PiwgcGxhbmVzXzogQXJyYXk8QXJyYXk8bnVtYmVyPj4pIHtcbiAgICAgICAgdGhpcy5wb2ludHMgPSBwb2ludHNfO1xuICAgICAgICB0aGlzLnBsYW5lcyA9IHBsYW5lc187XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21JbnZQcm9qZWN0aW9uTWF0cml4KGludlByb2o6IEZsb2F0NjRBcnJheSwgd29ybGRTaXplOiBudW1iZXIsIHpvb206IG51bWJlcik6IEZydXN0dW0ge1xuICAgICAgICBjb25zdCBjbGlwU3BhY2VDb3JuZXJzID0gW1xuICAgICAgICAgICAgWy0xLCAxLCAtMSwgMV0sXG4gICAgICAgICAgICBbIDEsIDEsIC0xLCAxXSxcbiAgICAgICAgICAgIFsgMSwgLTEsIC0xLCAxXSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0xLCAxXSxcbiAgICAgICAgICAgIFstMSwgMSwgMSwgMV0sXG4gICAgICAgICAgICBbIDEsIDEsIDEsIDFdLFxuICAgICAgICAgICAgWyAxLCAtMSwgMSwgMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAxLCAxXVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coMiwgem9vbSk7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIGZydXN0dW0gY29ybmVyIHBvaW50cyBmcm9tIGNsaXAgc3BhY2UgdG8gdGlsZSBzcGFjZVxuICAgICAgICBjb25zdCBmcnVzdHVtQ29vcmRzID0gY2xpcFNwYWNlQ29ybmVyc1xuICAgICAgICAgICAgLm1hcCh2ID0+IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgdiwgaW52UHJvaikpXG4gICAgICAgICAgICAubWFwKHYgPT4gdmVjNC5zY2FsZShbXSwgdiwgMS4wIC8gdlszXSAvIHdvcmxkU2l6ZSAqIHNjYWxlKSk7XG5cbiAgICAgICAgY29uc3QgZnJ1c3R1bVBsYW5lUG9pbnRJbmRpY2VzID0gW1xuICAgICAgICAgICAgWzAsIDEsIDJdLCAgLy8gbmVhclxuICAgICAgICAgICAgWzYsIDUsIDRdLCAgLy8gZmFyXG4gICAgICAgICAgICBbMCwgMywgN10sICAvLyBsZWZ0XG4gICAgICAgICAgICBbMiwgMSwgNV0sICAvLyByaWdodFxuICAgICAgICAgICAgWzMsIDIsIDZdLCAgLy8gYm90dG9tXG4gICAgICAgICAgICBbMCwgNCwgNV0gICAvLyB0b3BcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmcnVzdHVtUGxhbmVzID0gZnJ1c3R1bVBsYW5lUG9pbnRJbmRpY2VzLm1hcCgocDogQXJyYXk8bnVtYmVyPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IHZlYzMuc3ViKFtdLCBmcnVzdHVtQ29vcmRzW3BbMF1dLCBmcnVzdHVtQ29vcmRzW3BbMV1dKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSB2ZWMzLnN1YihbXSwgZnJ1c3R1bUNvb3Jkc1twWzJdXSwgZnJ1c3R1bUNvb3Jkc1twWzFdXSk7XG4gICAgICAgICAgICBjb25zdCBuID0gdmVjMy5ub3JtYWxpemUoW10sIHZlYzMuY3Jvc3MoW10sIGEsIGIpKTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAtdmVjMy5kb3QobiwgZnJ1c3R1bUNvb3Jkc1twWzFdXSk7XG4gICAgICAgICAgICByZXR1cm4gbi5jb25jYXQoZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgRnJ1c3R1bShmcnVzdHVtQ29vcmRzLCBmcnVzdHVtUGxhbmVzKTtcbiAgICB9XG59XG5cbmNsYXNzIEFhYmIge1xuICAgIG1pbjogdmVjMztcbiAgICBtYXg6IHZlYzM7XG4gICAgY2VudGVyOiB2ZWMzO1xuXG4gICAgY29uc3RydWN0b3IobWluXzogdmVjMywgbWF4XzogdmVjMykge1xuICAgICAgICB0aGlzLm1pbiA9IG1pbl87XG4gICAgICAgIHRoaXMubWF4ID0gbWF4XztcbiAgICAgICAgdGhpcy5jZW50ZXIgPSB2ZWMzLnNjYWxlKFtdLCB2ZWMzLmFkZChbXSwgdGhpcy5taW4sIHRoaXMubWF4KSwgMC41KTtcbiAgICB9XG5cbiAgICBxdWFkcmFudChpbmRleDogbnVtYmVyKTogQWFiYiB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gWyhpbmRleCAlIDIpID09PSAwLCBpbmRleCA8IDJdO1xuICAgICAgICBjb25zdCBxTWluID0gdmVjMy5jbG9uZSh0aGlzLm1pbik7XG4gICAgICAgIGNvbnN0IHFNYXggPSB2ZWMzLmNsb25lKHRoaXMubWF4KTtcbiAgICAgICAgZm9yIChsZXQgYXhpcyA9IDA7IGF4aXMgPCBzcGxpdC5sZW5ndGg7IGF4aXMrKykge1xuICAgICAgICAgICAgcU1pbltheGlzXSA9IHNwbGl0W2F4aXNdID8gdGhpcy5taW5bYXhpc10gOiB0aGlzLmNlbnRlcltheGlzXTtcbiAgICAgICAgICAgIHFNYXhbYXhpc10gPSBzcGxpdFtheGlzXSA/IHRoaXMuY2VudGVyW2F4aXNdIDogdGhpcy5tYXhbYXhpc107XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxldmF0aW9uIGlzIGFsd2F5cyBjb25zdGFudCwgaGVuY2UgcXVhZHJhbnQubWF4LnogPSB0aGlzLm1heC56XG4gICAgICAgIHFNYXhbMl0gPSB0aGlzLm1heFsyXTtcbiAgICAgICAgcmV0dXJuIG5ldyBBYWJiKHFNaW4sIHFNYXgpO1xuICAgIH1cblxuICAgIGRpc3RhbmNlWChwb2ludDogQXJyYXk8bnVtYmVyPik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBvaW50T25BYWJiID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhbMF0sIHBvaW50WzBdKSwgdGhpcy5taW5bMF0pO1xuICAgICAgICByZXR1cm4gcG9pbnRPbkFhYmIgLSBwb2ludFswXTtcbiAgICB9XG5cbiAgICBkaXN0YW5jZVkocG9pbnQ6IEFycmF5PG51bWJlcj4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwb2ludE9uQWFiYiA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzFdLCBwb2ludFsxXSksIHRoaXMubWluWzFdKTtcbiAgICAgICAgcmV0dXJuIHBvaW50T25BYWJiIC0gcG9pbnRbMV07XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgYSBmcnVzdHVtLWFhYmIgaW50ZXJzZWN0aW9uIHRlc3QuIFJldHVybnMgMCBpZiB0aGVyZSdzIG5vIGludGVyc2VjdGlvbixcbiAgICAvLyAxIGlmIHNoYXBlcyBhcmUgaW50ZXJzZWN0aW5nIGFuZCAyIGlmIHRoZSBhYWJiIGlmIGZ1bGx5IGluc2lkZSB0aGUgZnJ1c3R1bS5cbiAgICBpbnRlcnNlY3RzKGZydXN0dW06IEZydXN0dW0pOiBudW1iZXIge1xuICAgICAgICAvLyBFeGVjdXRlIHNlcGFyYXRpbmcgYXhpcyB0ZXN0IGJldHdlZW4gdHdvIGNvbnZleCBvYmplY3RzIHRvIGZpbmQgaW50ZXJzZWN0aW9uc1xuICAgICAgICAvLyBFYWNoIGZydXN0dW0gcGxhbmUgdG9nZXRoZXIgd2l0aCAzIG1ham9yIGF4ZXMgZGVmaW5lIHRoZSBzZXBhcmF0aW5nIGF4ZXNcbiAgICAgICAgLy8gTm90ZTogdGVzdCBvbmx5IDQgcG9pbnRzIGFzIGJvdGggbWluIGFuZCBtYXggcG9pbnRzIGhhdmUgZXF1YWwgZWxldmF0aW9uXG4gICAgICAgIGFzc2VydCh0aGlzLm1pblsyXSA9PT0gMCAmJiB0aGlzLm1heFsyXSA9PT0gMCk7XG5cbiAgICAgICAgY29uc3QgYWFiYlBvaW50cyA9IFtcbiAgICAgICAgICAgIFt0aGlzLm1pblswXSwgdGhpcy5taW5bMV0sIDAuMCwgMV0sXG4gICAgICAgICAgICBbdGhpcy5tYXhbMF0sIHRoaXMubWluWzFdLCAwLjAsIDFdLFxuICAgICAgICAgICAgW3RoaXMubWF4WzBdLCB0aGlzLm1heFsxXSwgMC4wLCAxXSxcbiAgICAgICAgICAgIFt0aGlzLm1pblswXSwgdGhpcy5tYXhbMV0sIDAuMCwgMV1cbiAgICAgICAgXTtcblxuICAgICAgICBsZXQgZnVsbHlJbnNpZGUgPSB0cnVlO1xuXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgZnJ1c3R1bS5wbGFuZXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYW5lID0gZnJ1c3R1bS5wbGFuZXNbcF07XG4gICAgICAgICAgICBsZXQgcG9pbnRzSW5zaWRlID0gMDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhYWJiUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzSW5zaWRlICs9IHZlYzQuZG90KHBsYW5lLCBhYWJiUG9pbnRzW2ldKSA+PSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocG9pbnRzSW5zaWRlID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgICAgICBpZiAocG9pbnRzSW5zaWRlICE9PSBhYWJiUG9pbnRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICBmdWxseUluc2lkZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bGx5SW5zaWRlKVxuICAgICAgICAgICAgcmV0dXJuIDI7XG5cbiAgICAgICAgZm9yIChsZXQgYXhpcyA9IDA7IGF4aXMgPCAzOyBheGlzKyspIHtcbiAgICAgICAgICAgIGxldCBwcm9qTWluID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgIGxldCBwcm9qTWF4ID0gLU51bWJlci5NQVhfVkFMVUU7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgZnJ1c3R1bS5wb2ludHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IGZydXN0dW0ucG9pbnRzW3BdW2F4aXNdIC0gdGhpcy5taW5bYXhpc107XG5cbiAgICAgICAgICAgICAgICBwcm9qTWluID0gTWF0aC5taW4ocHJvak1pbiwgcHJvamVjdGVkUG9pbnQpO1xuICAgICAgICAgICAgICAgIHByb2pNYXggPSBNYXRoLm1heChwcm9qTWF4LCBwcm9qZWN0ZWRQb2ludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9qTWF4IDwgMCB8fCBwcm9qTWluID4gdGhpcy5tYXhbYXhpc10gLSB0aGlzLm1pbltheGlzXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbmV4cG9ydCB7XG4gICAgQWFiYixcbiAgICBGcnVzdHVtXG59O1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7bnVtYmVyfSBmcm9tIFwiLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlXCI7XG5pbXBvcnQgUG9pbnQgIGZyb20gXCJAbWFwYm94L3BvaW50LWdlb21ldHJ5XCI7XG5pbXBvcnQge2NsYW1wfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5cbi8qKlxuICogQW4gYEVkZ2VJbnNldGAgb2JqZWN0IHJlcHJlc2VudHMgc2NyZWVuIHNwYWNlIHBhZGRpbmcgYXBwbGllZCB0byB0aGUgZWRnZXMgb2YgdGhlIHZpZXdwb3J0LlxuICogVGhpcyBzaGlmdHMgdGhlIGFwcHJlbnQgY2VudGVyIG9yIHRoZSB2YW5pc2hpbmcgcG9pbnQgb2YgdGhlIG1hcC4gVGhpcyBpcyB1c2VmdWwgZm9yIGFkZGluZyBmbG9hdGluZyBVSSBlbGVtZW50c1xuICogb24gdG9wIG9mIHRoZSBtYXAgYW5kIGhhdmluZyB0aGUgdmFuaXNoaW5nIHBvaW50IHNoaWZ0IGFzIFVJIGVsZW1lbnRzIHJlc2l6ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3RvcD0wXVxuICogQHBhcmFtIHtudW1iZXJ9IFtib3R0b209MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVmdD0wXVxuICogQHBhcmFtIHtudW1iZXJ9IFtyaWdodD0wXVxuICovXG5jbGFzcyBFZGdlSW5zZXRzIHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICBib3R0b206IG51bWJlcjtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgcmlnaHQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRvcDogbnVtYmVyID0gMCwgYm90dG9tOiBudW1iZXIgPSAwLCBsZWZ0OiBudW1iZXIgPSAwLCByaWdodDogbnVtYmVyID0gMCkge1xuICAgICAgICBpZiAoaXNOYU4odG9wKSB8fCB0b3AgPCAwIHx8XG4gICAgICAgICAgICBpc05hTihib3R0b20pIHx8IGJvdHRvbSA8IDAgfHxcbiAgICAgICAgICAgIGlzTmFOKGxlZnQpIHx8IGxlZnQgPCAwIHx8XG4gICAgICAgICAgICBpc05hTihyaWdodCkgfHwgcmlnaHQgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBlZGdlLWluc2V0cywgdG9wLCBib3R0b20sIGxlZnQgYW5kIHJpZ2h0IG11c3QgYWxsIGJlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyB0aGUgaW5zZXQgaW4tcGxhY2UuXG4gICAgICogVGhpcyBtYWludGFpbnMgdGhlIGN1cnJlbnQgaW5zZXQgdmFsdWUgZm9yIGFueSBpbnNldCBub3QgcHJlc2VudCBpbiBgdGFyZ2V0YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFkZGluZ09wdGlvbnN9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0XG4gICAgICogQHJldHVybnMge0VkZ2VJbnNldHN9XG4gICAgICogQG1lbWJlcm9mIEVkZ2VJbnNldHNcbiAgICAgKi9cbiAgICBpbnRlcnBvbGF0ZShzdGFydDogUGFkZGluZ09wdGlvbnMgfCBFZGdlSW5zZXRzLCB0YXJnZXQ6IFBhZGRpbmdPcHRpb25zLCB0OiBudW1iZXIpOiBFZGdlSW5zZXRzIHtcbiAgICAgICAgaWYgKHRhcmdldC50b3AgIT0gbnVsbCAmJiBzdGFydC50b3AgIT0gbnVsbCkgdGhpcy50b3AgPSBudW1iZXIoc3RhcnQudG9wLCB0YXJnZXQudG9wLCB0KTtcbiAgICAgICAgaWYgKHRhcmdldC5ib3R0b20gIT0gbnVsbCAmJiBzdGFydC5ib3R0b20gIT0gbnVsbCkgdGhpcy5ib3R0b20gPSBudW1iZXIoc3RhcnQuYm90dG9tLCB0YXJnZXQuYm90dG9tLCB0KTtcbiAgICAgICAgaWYgKHRhcmdldC5sZWZ0ICE9IG51bGwgJiYgc3RhcnQubGVmdCAhPSBudWxsKSB0aGlzLmxlZnQgPSBudW1iZXIoc3RhcnQubGVmdCwgdGFyZ2V0LmxlZnQsIHQpO1xuICAgICAgICBpZiAodGFyZ2V0LnJpZ2h0ICE9IG51bGwgJiYgc3RhcnQucmlnaHQgIT0gbnVsbCkgdGhpcy5yaWdodCA9IG51bWJlcihzdGFydC5yaWdodCwgdGFyZ2V0LnJpZ2h0LCB0KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVdGlsaXR5IG1ldGhvZCB0aGF0IGNvbXB1dGVzIHRoZSBuZXcgYXBwcmVudCBjZW50ZXIgb3IgdmFuaXNoaW5nIHBvaW50IGFmdGVyIGFwcGx5aW5nIGluc2V0cy5cbiAgICAgKiBUaGlzIGlzIGluIHBpeGVscyBhbmQgd2l0aCB0aGUgdG9wIGxlZnQgYmVpbmcgKDAuMCkgYW5kICt5IGJlaW5nIGRvd253YXJkcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9XG4gICAgICogQG1lbWJlcm9mIEVkZ2VJbnNldHNcbiAgICAgKi9cbiAgICBnZXRDZW50ZXIod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQb2ludCB7XG4gICAgICAgIC8vIENsYW1wIGluc2V0cyBzbyB0aGV5IG5ldmVyIG92ZXJmbG93IHdpZHRoL2hlaWdodCBhbmQgYWx3YXlzIGNhbGN1bGF0ZSBhIHZhbGlkIGNlbnRlclxuICAgICAgICBjb25zdCB4ID0gY2xhbXAoKHRoaXMubGVmdCArIHdpZHRoIC0gdGhpcy5yaWdodCkgLyAyLCAwLCB3aWR0aCk7XG4gICAgICAgIGNvbnN0IHkgPSBjbGFtcCgodGhpcy50b3AgKyBoZWlnaHQgLSB0aGlzLmJvdHRvbSkgLyAyLCAwLCBoZWlnaHQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKG90aGVyOiBQYWRkaW5nT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b3AgPT09IG90aGVyLnRvcCAmJlxuICAgICAgICAgICAgdGhpcy5ib3R0b20gPT09IG90aGVyLmJvdHRvbSAmJlxuICAgICAgICAgICAgdGhpcy5sZWZ0ID09PSBvdGhlci5sZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID09PSBvdGhlci5yaWdodDtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFZGdlSW5zZXRzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFZGdlSW5zZXRzKHRoaXMudG9wLCB0aGlzLmJvdHRvbSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNkdGF0ZSBhcyBqc29uLCB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBoYXZlIGFcbiAgICAgKiByZWFkLW9ubHkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluc2V0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge1BhZGRpbmdPcHRpb25zfVxuICAgICAqIEBtZW1iZXJvZiBFZGdlSW5zZXRzXG4gICAgICovXG4gICAgdG9KU09OKCk6IFBhZGRpbmdPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogdGhpcy50b3AsXG4gICAgICAgICAgICBib3R0b206IHRoaXMuYm90dG9tLFxuICAgICAgICAgICAgbGVmdDogdGhpcy5sZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHRoaXMucmlnaHRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhZGRpbmdPcHRpb25zID0ge3RvcDogP251bWJlciwgYm90dG9tOiA/bnVtYmVyLCByaWdodDogP251bWJlciwgbGVmdDogP251bWJlcn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2VJbnNldHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSwge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXQsIG1lcmNhdG9yWmZyb21BbHRpdHVkZX0gZnJvbSAnLi9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7d3JhcCwgY2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHt2ZWM0LCBtYXQ0LCBtYXQyLCB2ZWMyfSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IHtBYWJiLCBGcnVzdHVtfSBmcm9tICcuLi91dGlsL3ByaW1pdGl2ZXMuanMnO1xuaW1wb3J0IEVkZ2VJbnNldHMgZnJvbSAnLi9lZGdlX2luc2V0cyc7XG5cbmltcG9ydCB7VW53cmFwcGVkVGlsZUlELCBPdmVyc2NhbGVkVGlsZUlELCBDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtQYWRkaW5nT3B0aW9uc30gZnJvbSAnLi9lZGdlX2luc2V0cyc7XG5cbi8qKlxuICogQSBzaW5nbGUgdHJhbnNmb3JtLCBnZW5lcmFsbHkgdXNlZCBmb3IgYSBzaW5nbGUgdGlsZSB0byBiZVxuICogc2NhbGVkLCByb3RhdGVkLCBhbmQgem9vbWVkLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNmb3JtIHtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHRpbGVab29tOiBudW1iZXI7XG4gICAgbG5nUmFuZ2U6ID9bbnVtYmVyLCBudW1iZXJdO1xuICAgIGxhdFJhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBtYXhWYWxpZExhdGl0dWRlOiBudW1iZXI7XG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgcm90YXRpb25NYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICB6b29tRnJhY3Rpb246IG51bWJlcjtcbiAgICBwaXhlbHNUb0dMVW5pdHM6IFtudW1iZXIsIG51bWJlcl07XG4gICAgY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTogbnVtYmVyO1xuICAgIG1lcmNhdG9yTWF0cml4OiBBcnJheTxudW1iZXI+O1xuICAgIHByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBpbnZQcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgYWxpZ25lZFByb2pNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBwaXhlbE1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIHBpeGVsTWF0cml4SW52ZXJzZTogRmxvYXQ2NEFycmF5O1xuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheTtcbiAgICBsYWJlbFBsYW5lTWF0cml4OiBGbG9hdDMyQXJyYXk7XG4gICAgX2ZvdjogbnVtYmVyO1xuICAgIF9waXRjaDogbnVtYmVyO1xuICAgIF96b29tOiBudW1iZXI7XG4gICAgX3VubW9kaWZpZWQ6IGJvb2xlYW47XG4gICAgX3JlbmRlcldvcmxkQ29waWVzOiBib29sZWFuO1xuICAgIF9taW5ab29tOiBudW1iZXI7XG4gICAgX21heFpvb206IG51bWJlcjtcbiAgICBfbWluUGl0Y2g6IG51bWJlcjtcbiAgICBfbWF4UGl0Y2g6IG51bWJlcjtcbiAgICBfY2VudGVyOiBMbmdMYXQ7XG4gICAgX2VkZ2VJbnNldHM6IEVkZ2VJbnNldHM7XG4gICAgX2NvbnN0cmFpbmluZzogYm9vbGVhbjtcbiAgICBfcG9zTWF0cml4Q2FjaGU6IHtbXzogc3RyaW5nXTogRmxvYXQzMkFycmF5fTtcbiAgICBfYWxpZ25lZFBvc01hdHJpeENhY2hlOiB7W186IHN0cmluZ106IEZsb2F0MzJBcnJheX07XG5cbiAgICBjb25zdHJ1Y3RvcihtaW5ab29tOiA/bnVtYmVyLCBtYXhab29tOiA/bnVtYmVyLCBtaW5QaXRjaDogP251bWJlciwgbWF4UGl0Y2g6ID9udW1iZXIsIHJlbmRlcldvcmxkQ29waWVzOiBib29sZWFuIHwgdm9pZCkge1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyOyAvLyBjb25zdGFudFxuICAgICAgICB0aGlzLm1heFZhbGlkTGF0aXR1ZGUgPSA4NS4wNTExMjk7IC8vIGNvbnN0YW50XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHJlbmRlcldvcmxkQ29waWVzO1xuICAgICAgICB0aGlzLl9taW5ab29tID0gbWluWm9vbSB8fCAwO1xuICAgICAgICB0aGlzLl9tYXhab29tID0gbWF4Wm9vbSB8fCAyMjtcblxuICAgICAgICB0aGlzLl9taW5QaXRjaCA9IChtaW5QaXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1pblBpdGNoID09PSBudWxsKSA/IDAgOiBtaW5QaXRjaDtcbiAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSAobWF4UGl0Y2ggPT09IHVuZGVmaW5lZCB8fCBtYXhQaXRjaCA9PT0gbnVsbCkgPyA2MCA6IG1heFBpdGNoO1xuXG4gICAgICAgIHRoaXMuc2V0TWF4Qm91bmRzKCk7XG5cbiAgICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gbmV3IExuZ0xhdCgwLCAwKTtcbiAgICAgICAgdGhpcy56b29tID0gMDtcbiAgICAgICAgdGhpcy5hbmdsZSA9IDA7XG4gICAgICAgIHRoaXMuX2ZvdiA9IDAuNjQzNTAxMTA4NzkzMjg0NDtcbiAgICAgICAgdGhpcy5fcGl0Y2ggPSAwO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZWRnZUluc2V0cyA9IG5ldyBFZGdlSW5zZXRzKCk7XG4gICAgICAgIHRoaXMuX3Bvc01hdHJpeENhY2hlID0ge307XG4gICAgICAgIHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRyYW5zZm9ybSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYW5zZm9ybSh0aGlzLl9taW5ab29tLCB0aGlzLl9tYXhab29tLCB0aGlzLl9taW5QaXRjaCwgdGhpcy5tYXhQaXRjaCwgdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO1xuICAgICAgICBjbG9uZS50aWxlU2l6ZSA9IHRoaXMudGlsZVNpemU7XG4gICAgICAgIGNsb25lLmxhdFJhbmdlID0gdGhpcy5sYXRSYW5nZTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuX2NlbnRlciA9IHRoaXMuX2NlbnRlcjtcbiAgICAgICAgY2xvbmUuem9vbSA9IHRoaXMuem9vbTtcbiAgICAgICAgY2xvbmUuYW5nbGUgPSB0aGlzLmFuZ2xlO1xuICAgICAgICBjbG9uZS5fZm92ID0gdGhpcy5fZm92O1xuICAgICAgICBjbG9uZS5fcGl0Y2ggPSB0aGlzLl9waXRjaDtcbiAgICAgICAgY2xvbmUuX3VubW9kaWZpZWQgPSB0aGlzLl91bm1vZGlmaWVkO1xuICAgICAgICBjbG9uZS5fZWRnZUluc2V0cyA9IHRoaXMuX2VkZ2VJbnNldHMuY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuX2NhbGNNYXRyaWNlcygpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0IG1pblpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX21pblpvb207IH1cbiAgICBzZXQgbWluWm9vbSh6b29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21pblpvb20gPT09IHpvb20pIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWluWm9vbSA9IHpvb207XG4gICAgICAgIHRoaXMuem9vbSA9IE1hdGgubWF4KHRoaXMuem9vbSwgem9vbSk7XG4gICAgfVxuXG4gICAgZ2V0IG1heFpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX21heFpvb207IH1cbiAgICBzZXQgbWF4Wm9vbSh6b29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21heFpvb20gPT09IHpvb20pIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWF4Wm9vbSA9IHpvb207XG4gICAgICAgIHRoaXMuem9vbSA9IE1hdGgubWluKHRoaXMuem9vbSwgem9vbSk7XG4gICAgfVxuXG4gICAgZ2V0IG1pblBpdGNoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW5QaXRjaDsgfVxuICAgIHNldCBtaW5QaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9taW5QaXRjaCA9PT0gcGl0Y2gpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWluUGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgdGhpcy5waXRjaCA9IE1hdGgubWF4KHRoaXMucGl0Y2gsIHBpdGNoKTtcbiAgICB9XG5cbiAgICBnZXQgbWF4UGl0Y2goKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX21heFBpdGNoOyB9XG4gICAgc2V0IG1heFBpdGNoKHBpdGNoOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21heFBpdGNoID09PSBwaXRjaCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9tYXhQaXRjaCA9IHBpdGNoO1xuICAgICAgICB0aGlzLnBpdGNoID0gTWF0aC5taW4odGhpcy5waXRjaCwgcGl0Y2gpO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJXb3JsZENvcGllcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzOyB9XG4gICAgc2V0IHJlbmRlcldvcmxkQ29waWVzKHJlbmRlcldvcmxkQ29waWVzPzogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHJlbmRlcldvcmxkQ29waWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVuZGVyV29ybGRDb3BpZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXM7XG4gICAgfVxuXG4gICAgZ2V0IHdvcmxkU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50aWxlU2l6ZSAqIHRoaXMuc2NhbGU7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlck9mZnNldCgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlclBvaW50Ll9zdWIodGhpcy5zaXplLl9kaXYoMikpO1xuICAgIH1cblxuICAgIGdldCBzaXplKCk6IFBvaW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgZ2V0IGJlYXJpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC10aGlzLmFuZ2xlIC8gTWF0aC5QSSAqIDE4MDtcbiAgICB9XG4gICAgc2V0IGJlYXJpbmcoYmVhcmluZzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGIgPSAtd3JhcChiZWFyaW5nLCAtMTgwLCAxODApICogTWF0aC5QSSAvIDE4MDtcbiAgICAgICAgaWYgKHRoaXMuYW5nbGUgPT09IGIpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFuZ2xlID0gYjtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG5cbiAgICAgICAgLy8gMngyIG1hdHJpeCBmb3Igcm90YXRpbmcgcG9pbnRzXG4gICAgICAgIHRoaXMucm90YXRpb25NYXRyaXggPSBtYXQyLmNyZWF0ZSgpO1xuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LCB0aGlzLnJvdGF0aW9uTWF0cml4LCB0aGlzLmFuZ2xlKTtcbiAgICB9XG5cbiAgICBnZXQgcGl0Y2goKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpdGNoIC8gTWF0aC5QSSAqIDE4MDtcbiAgICB9XG4gICAgc2V0IHBpdGNoKHBpdGNoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGNsYW1wKHBpdGNoLCB0aGlzLm1pblBpdGNoLCB0aGlzLm1heFBpdGNoKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgIGlmICh0aGlzLl9waXRjaCA9PT0gcCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BpdGNoID0gcDtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGZvdigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm92IC8gTWF0aC5QSSAqIDE4MDtcbiAgICB9XG4gICAgc2V0IGZvdihmb3Y6IG51bWJlcikge1xuICAgICAgICBmb3YgPSBNYXRoLm1heCgwLjAxLCBNYXRoLm1pbig2MCwgZm92KSk7XG4gICAgICAgIGlmICh0aGlzLl9mb3YgPT09IGZvdikgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZvdiA9IGZvdiAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCB6b29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl96b29tOyB9XG4gICAgc2V0IHpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHogPSBNYXRoLm1pbihNYXRoLm1heCh6b29tLCB0aGlzLm1pblpvb20pLCB0aGlzLm1heFpvb20pO1xuICAgICAgICBpZiAodGhpcy5fem9vbSA9PT0geikgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb20gPSB6O1xuICAgICAgICB0aGlzLnNjYWxlID0gdGhpcy56b29tU2NhbGUoeik7XG4gICAgICAgIHRoaXMudGlsZVpvb20gPSBNYXRoLmZsb29yKHopO1xuICAgICAgICB0aGlzLnpvb21GcmFjdGlvbiA9IHogLSB0aGlzLnRpbGVab29tO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlcigpOiBMbmdMYXQgeyByZXR1cm4gdGhpcy5fY2VudGVyOyB9XG4gICAgc2V0IGNlbnRlcihjZW50ZXI6IExuZ0xhdCkge1xuICAgICAgICBpZiAoY2VudGVyLmxhdCA9PT0gdGhpcy5fY2VudGVyLmxhdCAmJiBjZW50ZXIubG5nID09PSB0aGlzLl9jZW50ZXIubG5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gY2VudGVyO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHBhZGRpbmcoKTogUGFkZGluZ09wdGlvbnMgeyByZXR1cm4gdGhpcy5fZWRnZUluc2V0cy50b0pTT04oKTsgfVxuICAgIHNldCBwYWRkaW5nKHBhZGRpbmc6IFBhZGRpbmdPcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyhwYWRkaW5nKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIC8vVXBkYXRlIGVkZ2UtaW5zZXRzIGlucGxhY2VcbiAgICAgICAgdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0aGlzLl9lZGdlSW5zZXRzLCBwYWRkaW5nLCAxKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuIGluIHBpeGVscyB3aXRoIHRoZSB0b3AtbGVmdCBjb3JuZXIgYmVpbmcgKDAsMClcbiAgICAgKiBhbmQgK3kgYXhpcyBwb2ludGluZyBkb3dud2FyZHMuIFRoaXMgYWNjb3VudHMgZm9yIHBhZGRpbmcuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7UG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFRyYW5zZm9ybVxuICAgICAqL1xuICAgIGdldCBjZW50ZXJQb2ludCgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGdlSW5zZXRzLmdldENlbnRlcih0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgcGFkZGluZyBwYXJhbXMgbWF0Y2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFkZGluZ09wdGlvbnN9IHBhZGRpbmdcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgVHJhbnNmb3JtXG4gICAgICovXG4gICAgaXNQYWRkaW5nRXF1YWwocGFkZGluZzogUGFkZGluZ09wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMuZXF1YWxzKHBhZGRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdG8gdXBhZHRlIGVkZ2UtaW5zZXRzIGlucGxhY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGFkZGluZ09wdGlvbnN9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0XG4gICAgICogQG1lbWJlcm9mIFRyYW5zZm9ybVxuICAgICAqL1xuICAgIGludGVycG9sYXRlUGFkZGluZyhzdGFydDogUGFkZGluZ09wdGlvbnMsIHRhcmdldDogUGFkZGluZ09wdGlvbnMsIHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUoc3RhcnQsIHRhcmdldCwgdCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbigpO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSB6b29tIGxldmVsIHRoYXQgd2lsbCBjb3ZlciBhbGwgdGlsZXMgdGhlIHRyYW5zZm9ybVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZSBUaWxlIHNpemUsIGV4cHJlc3NlZCBpbiBzY3JlZW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yb3VuZFpvb20gVGFyZ2V0IHpvb20gbGV2ZWwuIElmIHRydWUsIHRoZSB2YWx1ZSB3aWxsIGJlIHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgaW50ZWdlci4gT3RoZXJ3aXNlIHRoZSB2YWx1ZSB3aWxsIGJlIGZsb29yZWQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gem9vbSBsZXZlbCBBbiBpbnRlZ2VyIHpvb20gbGV2ZWwgYXQgd2hpY2ggYWxsIHRpbGVzIHdpbGwgYmUgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBjb3ZlcmluZ1pvb21MZXZlbChvcHRpb25zOiB7cm91bmRab29tPzogYm9vbGVhbiwgdGlsZVNpemU6IG51bWJlcn0pIHtcbiAgICAgICAgY29uc3QgeiA9IChvcHRpb25zLnJvdW5kWm9vbSA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yKShcbiAgICAgICAgICAgIHRoaXMuem9vbSArIHRoaXMuc2NhbGVab29tKHRoaXMudGlsZVNpemUgLyBvcHRpb25zLnRpbGVTaXplKVxuICAgICAgICApO1xuICAgICAgICAvLyBBdCBuZWdhdGl2ZSB6b29tIGxldmVscyBsb2FkIHRpbGVzIGZyb20gejAgYmVjYXVzZSBuZWdhdGl2ZSB0aWxlIHpvb20gbGV2ZWxzIGRvbid0IGV4aXN0LlxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFueSBcIndyYXBwZWRcIiBjb3BpZXMgb2YgYSBnaXZlbiB0aWxlIGNvb3JkaW5hdGUgdGhhdCBhcmUgdmlzaWJsZVxuICAgICAqIGluIHRoZSBjdXJyZW50IHZpZXcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcyh0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbbmV3IFVud3JhcHBlZFRpbGVJRCgwLCB0aWxlSUQpXTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICBjb25zdCB1dGwgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICAgICAgY29uc3QgdXRyID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KHRoaXMud2lkdGgsIDApKTtcbiAgICAgICAgICAgIGNvbnN0IHVibCA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCkpO1xuICAgICAgICAgICAgY29uc3QgdWJyID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIHRoaXMuaGVpZ2h0KSk7XG4gICAgICAgICAgICBjb25zdCB3MCA9IE1hdGguZmxvb3IoTWF0aC5taW4odXRsLngsIHV0ci54LCB1YmwueCwgdWJyLngpKTtcbiAgICAgICAgICAgIGNvbnN0IHcxID0gTWF0aC5mbG9vcihNYXRoLm1heCh1dGwueCwgdXRyLngsIHVibC54LCB1YnIueCkpO1xuXG4gICAgICAgICAgICAvLyBBZGQgYW4gZXh0cmEgY29weSBvZiB0aGUgd29ybGQgb24gZWFjaCBzaWRlIHRvIHByb3Blcmx5IHJlbmRlciBJbWFnZVNvdXJjZXMgYW5kIENhbnZhc1NvdXJjZXMuXG4gICAgICAgICAgICAvLyBCb3RoIHNvdXJjZXMgZHJhdyBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJpZXMgb2YgdGhlIHRpbGUgdGhhdCBcImNvbnRhaW5zIHRoZW1cIiBzbyB3ZSBuZWVkXG4gICAgICAgICAgICAvLyB0byBhZGQgZXh0cmEgY29waWVzIG9uIGJvdGggc2lkZXMgaW4gY2FzZSBvZmZzY3JlZW4gdGlsZXMgbmVlZCB0byBkcmF3IGludG8gb24tc2NyZWVuIG9uZXMuXG4gICAgICAgICAgICBjb25zdCBleHRyYVdvcmxkQ29weSA9IDE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHcgPSB3MCAtIGV4dHJhV29ybGRDb3B5OyB3IDw9IHcxICsgZXh0cmFXb3JsZENvcHk7IHcrKykge1xuICAgICAgICAgICAgICAgIGlmICh3ID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgVW53cmFwcGVkVGlsZUlEKHcsIHRpbGVJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFsbCBjb29yZGluYXRlcyB0aGF0IGNvdWxkIGNvdmVyIHRoaXMgdHJhbnNmb3JtIGZvciBhIGNvdmVyaW5nXG4gICAgICogem9vbSBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbGVTaXplXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubWluem9vbVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm1heHpvb21cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucm91bmRab29tXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlbmRlcldvcmxkQ29waWVzXG4gICAgICogQHJldHVybnMge0FycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSBPdmVyc2NhbGVkVGlsZUlEc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY292ZXJpbmdUaWxlcyhcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdGlsZVNpemU6IG51bWJlcixcbiAgICAgICAgICAgIG1pbnpvb20/OiBudW1iZXIsXG4gICAgICAgICAgICBtYXh6b29tPzogbnVtYmVyLFxuICAgICAgICAgICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICAgICAgICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzPzogYm9vbGVhblxuICAgICAgICB9XG4gICAgKTogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4ge1xuICAgICAgICBsZXQgeiA9IHRoaXMuY292ZXJpbmdab29tTGV2ZWwob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFjdHVhbFogPSB6O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pbnpvb20gIT09IHVuZGVmaW5lZCAmJiB6IDwgb3B0aW9ucy5taW56b29tKSByZXR1cm4gW107XG4gICAgICAgIGlmIChvcHRpb25zLm1heHpvb20gIT09IHVuZGVmaW5lZCAmJiB6ID4gb3B0aW9ucy5tYXh6b29tKSB6ID0gb3B0aW9ucy5tYXh6b29tO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlckNvb3JkID0gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQodGhpcy5jZW50ZXIpO1xuICAgICAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHopO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFtudW1UaWxlcyAqIGNlbnRlckNvb3JkLngsIG51bVRpbGVzICogY2VudGVyQ29vcmQueSwgMF07XG4gICAgICAgIGNvbnN0IGNhbWVyYUZydXN0dW0gPSBGcnVzdHVtLmZyb21JbnZQcm9qZWN0aW9uTWF0cml4KHRoaXMuaW52UHJvak1hdHJpeCwgdGhpcy53b3JsZFNpemUsIHopO1xuXG4gICAgICAgIC8vIE5vIGNoYW5nZSBvZiBMT0QgYmVoYXZpb3IgZm9yIHBpdGNoIGxvd2VyIHRoYW4gNjAgYW5kIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHBhZGRpbmc6IHJldHVybiBvbmx5IHRpbGUgaWRzIGZyb20gdGhlIHJlcXVlc3RlZCB6b29tIGxldmVsXG4gICAgICAgIGxldCBtaW5ab29tID0gb3B0aW9ucy5taW56b29tIHx8IDA7XG4gICAgICAgIC8vIFVzZSAwLjEgYXMgYW4gZXBzaWxvbiB0byBhdm9pZCBmb3IgZXhwbGljaXQgPT0gMC4wIGZsb2F0aW5nIHBvaW50IGNoZWNrc1xuICAgICAgICBpZiAodGhpcy5waXRjaCA8PSA2MC4wICYmIHRoaXMuX2VkZ2VJbnNldHMudG9wIDwgMC4xKVxuICAgICAgICAgICAgbWluWm9vbSA9IHo7XG5cbiAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhIGNlcnRhaW4gbnVtYmVyIG9mIG1heGltdW0gem9vbSBsZXZlbCB0aWxlcyBzdXJyb3VuZGluZyB0aGUgY2VudGVyIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IHJhZGl1c09mTWF4THZsTG9kSW5UaWxlcyA9IDM7XG5cbiAgICAgICAgY29uc3QgbmV3Um9vdFRpbGUgPSAod3JhcDogbnVtYmVyKTogYW55ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLy8gQWxsIHRpbGVzIGFyZSBvbiB6ZXJvIGVsZXZhdGlvbiBwbGFuZSA9PiB6IGRpZmZlcmVuY2UgaXMgemVyb1xuICAgICAgICAgICAgICAgIGFhYmI6IG5ldyBBYWJiKFt3cmFwICogbnVtVGlsZXMsIDAsIDBdLCBbKHdyYXAgKyAxKSAqIG51bVRpbGVzLCBudW1UaWxlcywgMF0pLFxuICAgICAgICAgICAgICAgIHpvb206IDAsXG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIHdyYXAsXG4gICAgICAgICAgICAgICAgZnVsbHlWaXNpYmxlOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBEbyBhIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCB0byBmaW5kIHZpc2libGUgdGlsZXMgYW5kIHByb3BlciBsZXZlbHMgb2YgZGV0YWlsXG4gICAgICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBtYXhab29tID0gejtcbiAgICAgICAgY29uc3Qgb3ZlcnNjYWxlZFogPSBvcHRpb25zLnJlcGFyc2VPdmVyc2NhbGVkID8gYWN0dWFsWiA6IHo7XG5cbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICAvLyBSZW5kZXIgY29weSBvZiB0aGUgZ2xvYmUgdGhyaWNlIG9uIGJvdGggc2lkZXNcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDM7IGkrKykge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3Um9vdFRpbGUoLWkpKTtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YWNrLnB1c2gobmV3Um9vdFRpbGUoMCkpO1xuXG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGl0Lng7XG4gICAgICAgICAgICBjb25zdCB5ID0gaXQueTtcbiAgICAgICAgICAgIGxldCBmdWxseVZpc2libGUgPSBpdC5mdWxseVZpc2libGU7XG5cbiAgICAgICAgICAgIC8vIFZpc2liaWxpdHkgb2YgYSB0aWxlIGlzIG5vdCByZXF1aXJlZCBpZiBhbnkgb2YgaXRzIGFuY2VzdG9yIGlmIGZ1bGx5IGluc2lkZSB0aGUgZnJ1c3R1bVxuICAgICAgICAgICAgaWYgKCFmdWxseVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3RSZXN1bHQgPSBpdC5hYWJiLmludGVyc2VjdHMoY2FtZXJhRnJ1c3R1bSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0UmVzdWx0ID09PSAwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGZ1bGx5VmlzaWJsZSA9IGludGVyc2VjdFJlc3VsdCA9PT0gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VYID0gaXQuYWFiYi5kaXN0YW5jZVgoY2VudGVyUG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VZID0gaXQuYWFiYi5kaXN0YW5jZVkoY2VudGVyUG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgbG9uZ2VzdERpbSA9IE1hdGgubWF4KE1hdGguYWJzKGRpc3RhbmNlWCksIE1hdGguYWJzKGRpc3RhbmNlWSkpO1xuXG4gICAgICAgICAgICAvLyBXZSdyZSB1c2luZyBkaXN0YW5jZSBiYXNlZCBoZXVyaXN0aWNzIHRvIGRldGVybWluZSBpZiBhIHRpbGUgc2hvdWxkIGJlIHNwbGl0IGludG8gcXVhZHJhbnRzIG9yIG5vdC5cbiAgICAgICAgICAgIC8vIHJhZGl1c09mTWF4THZsTG9kSW5UaWxlcyBkZWZpbmVzIHRoYXQgdGhlcmUncyBhbHdheXMgYSBjZXJ0YWluIG51bWJlciBvZiBtYXhMZXZlbCB0aWxlcyBuZXh0IHRvIHRoZSBtYXAgY2VudGVyLlxuICAgICAgICAgICAgLy8gVXNpbmcgdGhlIGZhY3QgdGhhdCBhIHBhcmVudCBub2RlIGluIHF1YWR0cmVlIGlzIHR3aWNlIHRoZSBzaXplIG9mIGl0cyBjaGlsZHJlbiAocGVyIGRpbWVuc2lvbilcbiAgICAgICAgICAgIC8vIHdlIGNhbiBkZWZpbmUgZGlzdGFuY2UgdGhyZXNob2xkcyBmb3IgZWFjaCByZWxhdGl2ZSBsZXZlbDpcbiAgICAgICAgICAgIC8vIGYoaykgPSBvZmZzZXQgKyAyICsgNCArIDggKyAxNiArIC4uLiArIDJeay4gVGhpcyBpcyB0aGUgc2FtZSBhcyBcIm9mZnNldCsyXihrKzEpLTJcIlxuICAgICAgICAgICAgY29uc3QgZGlzdFRvU3BsaXQgPSByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgKyAoMSA8PCAobWF4Wm9vbSAtIGl0Lnpvb20pKSAtIDI7XG5cbiAgICAgICAgICAgIC8vIEhhdmUgd2UgcmVhY2hlZCB0aGUgdGFyZ2V0IGRlcHRoIG9yIGlzIHRoZSB0aWxlIHRvbyBmYXIgYXdheSB0byBiZSBhbnkgc3BsaXQgZnVydGhlcj9cbiAgICAgICAgICAgIGlmIChpdC56b29tID09PSBtYXhab29tIHx8IChsb25nZXN0RGltID4gZGlzdFRvU3BsaXQgJiYgaXQuem9vbSA+PSBtaW5ab29tKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZUlEOiBuZXcgT3ZlcnNjYWxlZFRpbGVJRChpdC56b29tID09PSBtYXhab29tID8gb3ZlcnNjYWxlZFogOiBpdC56b29tLCBpdC53cmFwLCBpdC56b29tLCB4LCB5KSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VTcTogdmVjMi5zcXJMZW4oW2NlbnRlclBvaW50WzBdIC0gMC41IC0geCwgY2VudGVyUG9pbnRbMV0gLSAwLjUgLSB5XSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFggPSAoeCA8PCAxKSArIChpICUgMik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRZID0gKHkgPDwgMSkgKyAoaSA+PiAxKTtcblxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goe2FhYmI6IGl0LmFhYmIucXVhZHJhbnQoaSksIHpvb206IGl0Lnpvb20gKyAxLCB4OiBjaGlsZFgsIHk6IGNoaWxkWSwgd3JhcDogaXQud3JhcCwgZnVsbHlWaXNpYmxlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2VTcSAtIGIuZGlzdGFuY2VTcSkubWFwKGEgPT4gYS50aWxlSUQpO1xuICAgIH1cblxuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMucGl4ZWxzVG9HTFVuaXRzID0gWzIgLyB3aWR0aCwgLTIgLyBoZWlnaHRdO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHVubW9kaWZpZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl91bm1vZGlmaWVkOyB9XG5cbiAgICB6b29tU2NhbGUoem9vbTogbnVtYmVyKSB7IHJldHVybiBNYXRoLnBvdygyLCB6b29tKTsgfVxuICAgIHNjYWxlWm9vbShzY2FsZTogbnVtYmVyKSB7IHJldHVybiBNYXRoLmxvZyhzY2FsZSkgLyBNYXRoLkxOMjsgfVxuXG4gICAgcHJvamVjdChsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCBsYXQgPSBjbGFtcChsbmdsYXQubGF0LCAtdGhpcy5tYXhWYWxpZExhdGl0dWRlLCB0aGlzLm1heFZhbGlkTGF0aXR1ZGUpO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWGZyb21MbmcobG5nbGF0LmxuZykgKiB0aGlzLndvcmxkU2l6ZSxcbiAgICAgICAgICAgICAgICBtZXJjYXRvcllmcm9tTGF0KGxhdCkgKiB0aGlzLndvcmxkU2l6ZSk7XG4gICAgfVxuXG4gICAgdW5wcm9qZWN0KHBvaW50OiBQb2ludCk6IExuZ0xhdCB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyY2F0b3JDb29yZGluYXRlKHBvaW50LnggLyB0aGlzLndvcmxkU2l6ZSwgcG9pbnQueSAvIHRoaXMud29ybGRTaXplKS50b0xuZ0xhdCgpO1xuICAgIH1cblxuICAgIGdldCBwb2ludCgpOiBQb2ludCB7IHJldHVybiB0aGlzLnByb2plY3QodGhpcy5jZW50ZXIpOyB9XG5cbiAgICBzZXRMb2NhdGlvbkF0UG9pbnQobG5nbGF0OiBMbmdMYXQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBhID0gdGhpcy5wb2ludENvb3JkaW5hdGUocG9pbnQpO1xuICAgICAgICBjb25zdCBiID0gdGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCk7XG4gICAgICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jYXRpb25Db29yZGluYXRlKGxuZ2xhdCk7XG4gICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoXG4gICAgICAgICAgICAgICAgbG9jLnggLSAoYS54IC0gYi54KSxcbiAgICAgICAgICAgICAgICBsb2MueSAtIChhLnkgLSBiLnkpKTtcbiAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbihuZXdDZW50ZXIpO1xuICAgICAgICBpZiAodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5jZW50ZXIud3JhcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBsb2NhdGlvbiwgcmV0dXJuIHRoZSBzY3JlZW4gcG9pbnQgdGhhdCBjb3JyZXNwb25kcyB0byBpdFxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdsYXQgbG9jYXRpb25cbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IHNjcmVlbiBwb2ludFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9jYXRpb25Qb2ludChsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUobG5nbGF0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBwb2ludCBvbiBzY3JlZW4sIHJldHVybiBpdHMgbG5nbGF0XG4gICAgICogQHBhcmFtIHtQb2ludH0gcCBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXQgbG9jYXRpb25cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHBvaW50TG9jYXRpb24ocDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGdlb2dyYXBoaWNhbCBsbmdsYXQsIHJldHVybiBhbiB1bnJvdW5kZWRcbiAgICAgKiBjb29yZGluYXRlIHRoYXQgcmVwcmVzZW50cyBpdCBhdCB0aGlzIHRyYW5zZm9ybSdzIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ2xhdFxuICAgICAqIEByZXR1cm5zIHtDb29yZGluYXRlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9jYXRpb25Db29yZGluYXRlKGxuZ2xhdDogTG5nTGF0KSB7XG4gICAgICAgIHJldHVybiBNZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdChsbmdsYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgQ29vcmRpbmF0ZSwgcmV0dXJuIGl0cyBnZW9ncmFwaGljYWwgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtDb29yZGluYXRlfSBjb29yZFxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IGxuZ2xhdFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29vcmRpbmF0ZUxvY2F0aW9uKGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgcmV0dXJuIGNvb3JkLnRvTG5nTGF0KCk7XG4gICAgfVxuXG4gICAgcG9pbnRDb29yZGluYXRlKHA6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFogPSAwO1xuICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSBjb3JyZWN0IHByb2plY3RlZCB6IHZhbHVlIGZvciB0aGUgcG9pbnQsXG4gICAgICAgIC8vIHVucHJvamVjdCB0d28gcG9pbnRzIHRvIGdldCBhIGxpbmUgYW5kIHRoZW4gZmluZCB0aGUgcG9pbnQgb24gdGhhdFxuICAgICAgICAvLyBsaW5lIHdpdGggej0wXG5cbiAgICAgICAgY29uc3QgY29vcmQwID0gW3AueCwgcC55LCAwLCAxXTtcbiAgICAgICAgY29uc3QgY29vcmQxID0gW3AueCwgcC55LCAxLCAxXTtcblxuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQoY29vcmQwLCBjb29yZDAsIHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGNvb3JkMSwgY29vcmQxLCB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7XG5cbiAgICAgICAgY29uc3QgdzAgPSBjb29yZDBbM107XG4gICAgICAgIGNvbnN0IHcxID0gY29vcmQxWzNdO1xuICAgICAgICBjb25zdCB4MCA9IGNvb3JkMFswXSAvIHcwO1xuICAgICAgICBjb25zdCB4MSA9IGNvb3JkMVswXSAvIHcxO1xuICAgICAgICBjb25zdCB5MCA9IGNvb3JkMFsxXSAvIHcwO1xuICAgICAgICBjb25zdCB5MSA9IGNvb3JkMVsxXSAvIHcxO1xuICAgICAgICBjb25zdCB6MCA9IGNvb3JkMFsyXSAvIHcwO1xuICAgICAgICBjb25zdCB6MSA9IGNvb3JkMVsyXSAvIHcxO1xuXG4gICAgICAgIGNvbnN0IHQgPSB6MCA9PT0gejEgPyAwIDogKHRhcmdldFogLSB6MCkgLyAoejEgLSB6MCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNZXJjYXRvckNvb3JkaW5hdGUoXG4gICAgICAgICAgICBpbnRlcnBvbGF0ZSh4MCwgeDEsIHQpIC8gdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0ZSh5MCwgeTEsIHQpIC8gdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgY29vcmRpbmF0ZSwgcmV0dXJuIHRoZSBzY3JlZW4gcG9pbnQgdGhhdCBjb3JyZXNwb25kcyB0byBpdFxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IHNjcmVlbiBwb2ludFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29vcmRpbmF0ZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgcCA9IFtjb29yZC54ICogdGhpcy53b3JsZFNpemUsIGNvb3JkLnkgKiB0aGlzLndvcmxkU2l6ZSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwLCBwLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChwWzBdIC8gcFszXSwgcFsxXSAvIHBbM10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IFJldHVybnMgYSB7QGxpbmsgTG5nTGF0Qm91bmRzfSBvYmplY3QgZGVzY3JpYmluZyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGJvdW5kcy5cbiAgICAgKi9cbiAgICBnZXRCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KDAsIDApKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCh0aGlzLndpZHRoLCAwKSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpKSlcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCgwLCB0aGlzLmhlaWdodCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGdlb2dyYXBoaWNhbCBib3VuZHMgdGhlIG1hcCBpcyBjb25zdHJhaW5lZCB0bywgb3IgYG51bGxgIGlmIG5vbmUgc2V0LlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IHtAbGluayBMbmdMYXRCb3VuZHN9XG4gICAgICovXG4gICAgZ2V0TWF4Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMubGF0UmFuZ2UgfHwgdGhpcy5sYXRSYW5nZS5sZW5ndGggIT09IDIgfHxcbiAgICAgICAgICAgICF0aGlzLmxuZ1JhbmdlIHx8IHRoaXMubG5nUmFuZ2UubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSwgdGhpcy5sYXRSYW5nZVswXV0sIFt0aGlzLmxuZ1JhbmdlWzFdLCB0aGlzLmxhdFJhbmdlWzFdXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjb25zdHJhaW50cy5cbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc30gYm91bmRzIEEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5ldyBnZW9ncmFwaGljIGJvdW5kYXJpZXMgb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBzZXRNYXhCb3VuZHMoYm91bmRzPzogTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBbYm91bmRzLmdldFdlc3QoKSwgYm91bmRzLmdldEVhc3QoKV07XG4gICAgICAgICAgICB0aGlzLmxhdFJhbmdlID0gW2JvdW5kcy5nZXRTb3V0aCgpLCBib3VuZHMuZ2V0Tm9ydGgoKV07XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG5nUmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFstdGhpcy5tYXhWYWxpZExhdGl0dWRlLCB0aGlzLm1heFZhbGlkTGF0aXR1ZGVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwb3NNYXRyaXggdGhhdCwgZ2l2ZW4gYSB0aWxlIGNvb3JkaW5hdGUsIHdvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdGlsZSBvbiBhIG1hcC5cbiAgICAgKiBAcGFyYW0ge1Vud3JhcHBlZFRpbGVJRH0gdW53cmFwcGVkVGlsZUlEO1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY2FsY3VsYXRlUG9zTWF0cml4KHVud3JhcHBlZFRpbGVJRDogVW53cmFwcGVkVGlsZUlELCBhbGlnbmVkOiBib29sZWFuID0gZmFsc2UpOiBGbG9hdDMyQXJyYXkge1xuICAgICAgICBjb25zdCBwb3NNYXRyaXhLZXkgPSB1bndyYXBwZWRUaWxlSUQua2V5O1xuICAgICAgICBjb25zdCBjYWNoZSA9IGFsaWduZWQgPyB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgOiB0aGlzLl9wb3NNYXRyaXhDYWNoZTtcbiAgICAgICAgaWYgKGNhY2hlW3Bvc01hdHJpeEtleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZVtwb3NNYXRyaXhLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gdW53cmFwcGVkVGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLndvcmxkU2l6ZSAvIHRoaXMuem9vbVNjYWxlKGNhbm9uaWNhbC56KTtcbiAgICAgICAgY29uc3QgdW53cmFwcGVkWCA9IGNhbm9uaWNhbC54ICsgTWF0aC5wb3coMiwgY2Fub25pY2FsLnopICogdW53cmFwcGVkVGlsZUlELndyYXA7XG5cbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gbWF0NC5pZGVudGl0eShuZXcgRmxvYXQ2NEFycmF5KDE2KSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKHBvc01hdHJpeCwgcG9zTWF0cml4LCBbdW53cmFwcGVkWCAqIHNjYWxlLCBjYW5vbmljYWwueSAqIHNjYWxlLCAwXSk7XG4gICAgICAgIG1hdDQuc2NhbGUocG9zTWF0cml4LCBwb3NNYXRyaXgsIFtzY2FsZSAvIEVYVEVOVCwgc2NhbGUgLyBFWFRFTlQsIDFdKTtcbiAgICAgICAgbWF0NC5tdWx0aXBseShwb3NNYXRyaXgsIGFsaWduZWQgPyB0aGlzLmFsaWduZWRQcm9qTWF0cml4IDogdGhpcy5wcm9qTWF0cml4LCBwb3NNYXRyaXgpO1xuXG4gICAgICAgIGNhY2hlW3Bvc01hdHJpeEtleV0gPSBuZXcgRmxvYXQzMkFycmF5KHBvc01hdHJpeCk7XG4gICAgICAgIHJldHVybiBjYWNoZVtwb3NNYXRyaXhLZXldO1xuICAgIH1cblxuICAgIGN1c3RvbUxheWVyTWF0cml4KCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJjYXRvck1hdHJpeC5zbGljZSgpO1xuICAgIH1cblxuICAgIF9jb25zdHJhaW4oKSB7XG4gICAgICAgIGlmICghdGhpcy5jZW50ZXIgfHwgIXRoaXMud2lkdGggfHwgIXRoaXMuaGVpZ2h0IHx8IHRoaXMuX2NvbnN0cmFpbmluZykgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1pblkgPSAtOTA7XG4gICAgICAgIGxldCBtYXhZID0gOTA7XG4gICAgICAgIGxldCBtaW5YID0gLTE4MDtcbiAgICAgICAgbGV0IG1heFggPSAxODA7XG4gICAgICAgIGxldCBzeSwgc3gsIHgyLCB5MjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIHVubW9kaWZpZWQgPSB0aGlzLl91bm1vZGlmaWVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxhdFJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBsYXRSYW5nZSA9IHRoaXMubGF0UmFuZ2U7XG4gICAgICAgICAgICBtaW5ZID0gbWVyY2F0b3JZZnJvbUxhdChsYXRSYW5nZVsxXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIG1heFkgPSBtZXJjYXRvcllmcm9tTGF0KGxhdFJhbmdlWzBdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgc3kgPSBtYXhZIC0gbWluWSA8IHNpemUueSA/IHNpemUueSAvIChtYXhZIC0gbWluWSkgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG5nUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGxuZ1JhbmdlID0gdGhpcy5sbmdSYW5nZTtcbiAgICAgICAgICAgIG1pblggPSBtZXJjYXRvclhmcm9tTG5nKGxuZ1JhbmdlWzBdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgbWF4WCA9IG1lcmNhdG9yWGZyb21MbmcobG5nUmFuZ2VbMV0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBzeCA9IG1heFggLSBtaW5YIDwgc2l6ZS54ID8gc2l6ZS54IC8gKG1heFggLSBtaW5YKSA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMucG9pbnQ7XG5cbiAgICAgICAgLy8gaG93IG11Y2ggdGhlIG1hcCBzaG91bGQgc2NhbGUgdG8gZml0IHRoZSBzY3JlZW4gaW50byBnaXZlbiBsYXRpdHVkZS9sb25naXR1ZGUgcmFuZ2VzXG4gICAgICAgIGNvbnN0IHMgPSBNYXRoLm1heChzeCB8fCAwLCBzeSB8fCAwKTtcblxuICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLnVucHJvamVjdChuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgc3ggPyAobWF4WCArIG1pblgpIC8gMiA6IHBvaW50LngsXG4gICAgICAgICAgICAgICAgc3kgPyAobWF4WSArIG1pblkpIC8gMiA6IHBvaW50LnkpKTtcbiAgICAgICAgICAgIHRoaXMuem9vbSArPSB0aGlzLnNjYWxlWm9vbShzKTtcbiAgICAgICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSB1bm1vZGlmaWVkO1xuICAgICAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXRSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgeSA9IHBvaW50LnksXG4gICAgICAgICAgICAgICAgaDIgPSBzaXplLnkgLyAyO1xuXG4gICAgICAgICAgICBpZiAoeSAtIGgyIDwgbWluWSkgeTIgPSBtaW5ZICsgaDI7XG4gICAgICAgICAgICBpZiAoeSArIGgyID4gbWF4WSkgeTIgPSBtYXhZIC0gaDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sbmdSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgeCA9IHBvaW50LngsXG4gICAgICAgICAgICAgICAgdzIgPSBzaXplLnggLyAyO1xuXG4gICAgICAgICAgICBpZiAoeCAtIHcyIDwgbWluWCkgeDIgPSBtaW5YICsgdzI7XG4gICAgICAgICAgICBpZiAoeCArIHcyID4gbWF4WCkgeDIgPSBtYXhYIC0gdzI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYW4gdGhlIG1hcCBpZiB0aGUgc2NyZWVuIGdvZXMgb2ZmIHRoZSByYW5nZVxuICAgICAgICBpZiAoeDIgIT09IHVuZGVmaW5lZCB8fCB5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMudW5wcm9qZWN0KG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICB4MiAhPT0gdW5kZWZpbmVkID8geDIgOiBwb2ludC54LFxuICAgICAgICAgICAgICAgIHkyICE9PSB1bmRlZmluZWQgPyB5MiA6IHBvaW50LnkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSB1bm1vZGlmaWVkO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfY2FsY01hdHJpY2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGVpZ2h0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaGFsZkZvdiA9IHRoaXMuX2ZvdiAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuY2VudGVyT2Zmc2V0O1xuICAgICAgICB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgPSAwLjUgLyBNYXRoLnRhbihoYWxmRm92KSAqIHRoaXMuaGVpZ2h0O1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBwb2ludCBbd2lkdGgvMiArIG9mZnNldC54LCBoZWlnaHQvMiArIG9mZnNldC55XSB0byB0aGVcbiAgICAgICAgLy8gY2VudGVyIHRvcCBwb2ludCBbd2lkdGgvMiArIG9mZnNldC54LCAwXSBpbiBaIHVuaXRzLCB1c2luZyB0aGUgbGF3IG9mIHNpbmVzLlxuICAgICAgICAvLyAxIFogdW5pdCBpcyBlcXVpdmFsZW50IHRvIDEgaG9yaXpvbnRhbCBweCBhdCB0aGUgY2VudGVyIG9mIHRoZSBtYXBcbiAgICAgICAgLy8gKHRoZSBkaXN0YW5jZSBiZXR3ZWVuW3dpZHRoLzIsIGhlaWdodC8yXSBhbmQgW3dpZHRoLzIgKyAxLCBoZWlnaHQvMl0pXG4gICAgICAgIGNvbnN0IGdyb3VuZEFuZ2xlID0gTWF0aC5QSSAvIDIgKyB0aGlzLl9waXRjaDtcbiAgICAgICAgY29uc3QgZm92QWJvdmVDZW50ZXIgPSB0aGlzLl9mb3YgKiAoMC41ICsgb2Zmc2V0LnkgLyB0aGlzLmhlaWdodCk7XG4gICAgICAgIGNvbnN0IHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgPSBNYXRoLnNpbihmb3ZBYm92ZUNlbnRlcikgKiB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBNYXRoLnNpbihjbGFtcChNYXRoLlBJIC0gZ3JvdW5kQW5nbGUgLSBmb3ZBYm92ZUNlbnRlciwgMC4wMSwgTWF0aC5QSSAtIDAuMDEpKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuICAgICAgICBjb25zdCB4ID0gcG9pbnQueCwgeSA9IHBvaW50Lnk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHogZGlzdGFuY2Ugb2YgdGhlIGZhcnRoZXN0IGZyYWdtZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgICAgICBjb25zdCBmdXJ0aGVzdERpc3RhbmNlID0gTWF0aC5jb3MoTWF0aC5QSSAvIDIgLSB0aGlzLl9waXRjaCkgKiB0b3BIYWxmU3VyZmFjZURpc3RhbmNlICsgdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgICAgICAvLyBBZGQgYSBiaXQgZXh0cmEgdG8gYXZvaWQgcHJlY2lzaW9uIHByb2JsZW1zIHdoZW4gYSBmcmFnbWVudCdzIGRpc3RhbmNlIGlzIGV4YWN0bHkgYGZ1cnRoZXN0RGlzdGFuY2VgXG4gICAgICAgIGNvbnN0IGZhclogPSBmdXJ0aGVzdERpc3RhbmNlICogMS4wMTtcblxuICAgICAgICAvLyBUaGUgbGFyZ2VyIHRoZSB2YWx1ZSBvZiBuZWFyWiBpc1xuICAgICAgICAvLyAtIHRoZSBtb3JlIGRlcHRoIHByZWNpc2lvbiBpcyBhdmFpbGFibGUgZm9yIGZlYXR1cmVzIChnb29kKVxuICAgICAgICAvLyAtIGNsaXBwaW5nIHN0YXJ0cyBhcHBlYXJpbmcgc29vbmVyIHdoZW4gdGhlIGNhbWVyYSBpcyBjbG9zZSB0byAzZCBmZWF0dXJlcyAoYmFkKVxuICAgICAgICAvL1xuICAgICAgICAvLyBTbWFsbGVyIHZhbHVlcyB3b3JrZWQgd2VsbCBmb3IgbWFwYm94LWdsLWpzIGJ1dCBkZWNrZ2wgd2FzIGVuY291bnRlcmluZyBwcmVjaXNpb24gaXNzdWVzXG4gICAgICAgIC8vIHdoZW4gcmVuZGVyaW5nIGl0J3MgbGF5ZXJzIHVzaW5nIGN1c3RvbSBsYXllcnMuIFRoaXMgdmFsdWUgd2FzIGV4cGVyaW1lbnRhbGx5IGNob3NlbiBhbmRcbiAgICAgICAgLy8gc2VlbXMgdG8gc29sdmUgei1maWdodGluZyBpc3N1ZXMgaW4gZGVja2dsIHdoaWxlIG5vdCBjbGlwcGluZyBidWlsZGluZ3MgdG9vIGNsb3NlIHRvIHRoZSBjYW1lcmEuXG4gICAgICAgIGNvbnN0IG5lYXJaID0gdGhpcy5oZWlnaHQgLyA1MDtcblxuICAgICAgICAvLyBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBsb2NhdGlvbiB0byBHTCBjb29yZGluYXRlcyAoLTEgLi4gMSlcbiAgICAgICAgbGV0IG0gPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZShtLCB0aGlzLl9mb3YsIHRoaXMud2lkdGggLyB0aGlzLmhlaWdodCwgbmVhclosIGZhclopO1xuXG4gICAgICAgIC8vQXBwbHkgY2VudGVyIG9mIHBlcnNwZWN0aXZlIG9mZnNldFxuICAgICAgICBtWzhdID0gLW9mZnNldC54ICogMiAvIHRoaXMud2lkdGg7XG4gICAgICAgIG1bOV0gPSBvZmZzZXQueSAqIDIgLyB0aGlzLmhlaWdodDtcblxuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAtMSwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbMCwgMCwgLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pO1xuICAgICAgICBtYXQ0LnJvdGF0ZVgobSwgbSwgdGhpcy5fcGl0Y2gpO1xuICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgdGhpcy5hbmdsZSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFsteCwgLXksIDBdKTtcblxuICAgICAgICAvLyBUaGUgbWVyY2F0b3JNYXRyaXggY2FuIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHBvaW50cyBmcm9tIG1lcmNhdG9yIGNvb3JkaW5hdGVzXG4gICAgICAgIC8vIChbMCwgMF0gbncsIFsxLCAxXSBzZSkgdG8gR0wgY29vcmRpbmF0ZXMuXG4gICAgICAgIHRoaXMubWVyY2F0b3JNYXRyaXggPSBtYXQ0LnNjYWxlKFtdLCBtLCBbdGhpcy53b3JsZFNpemUsIHRoaXMud29ybGRTaXplLCB0aGlzLndvcmxkU2l6ZV0pO1xuXG4gICAgICAgIC8vIHNjYWxlIHZlcnRpY2FsbHkgdG8gbWV0ZXJzIHBlciBwaXhlbCAoaW52ZXJzZSBvZiBncm91bmQgcmVzb2x1dGlvbik6XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzEsIDEsIG1lcmNhdG9yWmZyb21BbHRpdHVkZSgxLCB0aGlzLmNlbnRlci5sYXQpICogdGhpcy53b3JsZFNpemUsIDFdKTtcblxuICAgICAgICB0aGlzLnByb2pNYXRyaXggPSBtO1xuICAgICAgICB0aGlzLmludlByb2pNYXRyaXggPSBtYXQ0LmludmVydChbXSwgdGhpcy5wcm9qTWF0cml4KTtcblxuICAgICAgICAvLyBNYWtlIGEgc2Vjb25kIHByb2plY3Rpb24gbWF0cml4IHRoYXQgaXMgYWxpZ25lZCB0byBhIHBpeGVsIGdyaWQgZm9yIHJlbmRlcmluZyByYXN0ZXIgdGlsZXMuXG4gICAgICAgIC8vIFdlJ3JlIHJvdW5kaW5nIHRoZSAoZmxvYXRpbmcgcG9pbnQpIHgveSB2YWx1ZXMgdG8gYWNoaWV2ZSB0byBhdm9pZCByZW5kZXJpbmcgcmFzdGVyIGltYWdlcyB0byBmcmFjdGlvbmFsXG4gICAgICAgIC8vIGNvb3JkaW5hdGVzLiBBZGRpdGlvbmFsbHksIHdlIGFkanVzdCBieSBoYWxmIGEgcGl4ZWwgaW4gZWl0aGVyIGRpcmVjdGlvbiBpbiBjYXNlIHRoYXQgdmlld3BvcnQgZGltZW5zaW9uXG4gICAgICAgIC8vIGlzIGFuIG9kZCBpbnRlZ2VyIHRvIHByZXNlcnZlIHJlbmRlcmluZyB0byB0aGUgcGl4ZWwgZ3JpZC4gV2UncmUgcm90YXRpbmcgdGhpcyBzaGlmdCBiYXNlZCBvbiB0aGUgYW5nbGVcbiAgICAgICAgLy8gb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHNvIHRoYXQgMMOCwrAsIDkww4LCsCwgMTgww4LCsCwgYW5kIDI3MMOCwrAgcmFzdGVycyBhcmUgY3Jpc3AsIGFuZCBhZGp1c3QgdGhlIHNoaWZ0IHNvIHRoYXRcbiAgICAgICAgLy8gaXQgaXMgYWx3YXlzIDw9IDAuNSBwaXhlbHMuXG4gICAgICAgIGNvbnN0IHhTaGlmdCA9ICh0aGlzLndpZHRoICUgMikgLyAyLCB5U2hpZnQgPSAodGhpcy5oZWlnaHQgJSAyKSAvIDIsXG4gICAgICAgICAgICBhbmdsZUNvcyA9IE1hdGguY29zKHRoaXMuYW5nbGUpLCBhbmdsZVNpbiA9IE1hdGguc2luKHRoaXMuYW5nbGUpLFxuICAgICAgICAgICAgZHggPSB4IC0gTWF0aC5yb3VuZCh4KSArIGFuZ2xlQ29zICogeFNoaWZ0ICsgYW5nbGVTaW4gKiB5U2hpZnQsXG4gICAgICAgICAgICBkeSA9IHkgLSBNYXRoLnJvdW5kKHkpICsgYW5nbGVDb3MgKiB5U2hpZnQgKyBhbmdsZVNpbiAqIHhTaGlmdDtcbiAgICAgICAgY29uc3QgYWxpZ25lZE0gPSBuZXcgRmxvYXQ2NEFycmF5KG0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShhbGlnbmVkTSwgYWxpZ25lZE0sIFsgZHggPiAwLjUgPyBkeCAtIDEgOiBkeCwgZHkgPiAwLjUgPyBkeSAtIDEgOiBkeSwgMCBdKTtcbiAgICAgICAgdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA9IGFsaWduZWRNO1xuXG4gICAgICAgIG0gPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFt0aGlzLndpZHRoIC8gMiwgLXRoaXMuaGVpZ2h0IC8gMiwgMV0pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbMSwgLTEsIDBdKTtcbiAgICAgICAgdGhpcy5sYWJlbFBsYW5lTWF0cml4ID0gbTtcblxuICAgICAgICBtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgLTEsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWy0xLCAtMSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsyIC8gdGhpcy53aWR0aCwgMiAvIHRoaXMuaGVpZ2h0LCAxXSk7XG4gICAgICAgIHRoaXMuZ2xDb29yZE1hdHJpeCA9IG07XG5cbiAgICAgICAgLy8gbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gbG9jYXRpb24gdG8gc2NyZWVuIGNvb3JkaW5hdGVzXG4gICAgICAgIHRoaXMucGl4ZWxNYXRyaXggPSBtYXQ0Lm11bHRpcGx5KG5ldyBGbG9hdDY0QXJyYXkoMTYpLCB0aGlzLmxhYmVsUGxhbmVNYXRyaXgsIHRoaXMucHJvak1hdHJpeCk7XG5cbiAgICAgICAgLy8gaW52ZXJzZSBtYXRyaXggZm9yIGNvbnZlcnNpb24gZnJvbSBzY3JlZW4gY29vcmRpbmFlcyB0byBsb2NhdGlvblxuICAgICAgICBtID0gbWF0NC5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksIHRoaXMucGl4ZWxNYXRyaXgpO1xuICAgICAgICBpZiAoIW0pIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBpbnZlcnQgbWF0cml4XCIpO1xuICAgICAgICB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSA9IG07XG5cbiAgICAgICAgdGhpcy5fcG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlID0ge307XG4gICAgfVxuXG4gICAgbWF4UGl0Y2hTY2FsZUZhY3RvcigpIHtcbiAgICAgICAgLy8gY2FsY01hdHJpY2VzIGhhc24ndCBydW4geWV0XG4gICAgICAgIGlmICghdGhpcy5waXhlbE1hdHJpeEludmVyc2UpIHJldHVybiAxO1xuXG4gICAgICAgIGNvbnN0IGNvb3JkID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgY29uc3QgcCA9IFtjb29yZC54ICogdGhpcy53b3JsZFNpemUsIGNvb3JkLnkgKiB0aGlzLndvcmxkU2l6ZSwgMCwgMV07XG4gICAgICAgIGNvbnN0IHRvcFBvaW50ID0gdmVjNC50cmFuc2Zvcm1NYXQ0KHAsIHAsIHRoaXMucGl4ZWxNYXRyaXgpO1xuICAgICAgICByZXR1cm4gdG9wUG9pbnRbM10gLyB0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgY2FtZXJhIGxvb2tzIGF0IHRoZSBtYXAgZnJvbSBhIDNEIChsbmcsIGxhdCwgYWx0aXR1ZGUpIGxvY2F0aW9uLiBMZXQncyB1c2UgYGNhbWVyYUxvY2F0aW9uYFxuICAgICAqIGFzIHRoZSBuYW1lIGZvciB0aGUgbG9jYXRpb24gdW5kZXIgdGhlIGNhbWVyYSBhbmQgb24gdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoIChsbmcsIGxhdCwgMCkuXG4gICAgICogYGNhbWVyYVBvaW50YCBpcyB0aGUgcHJvamVjdGVkIHBvc2l0aW9uIG9mIHRoZSBgY2FtZXJhTG9jYXRpb25gLlxuICAgICAqXG4gICAgICogVGhpcyBwb2ludCBpcyB1c2VmdWwgdG8gdXMgYmVjYXVzZSBvbmx5IGZpbGwtZXh0cnVzaW9ucyB0aGF0IGFyZSBiZXR3ZWVuIGBjYW1lcmFQb2ludGAgYW5kXG4gICAgICogdGhlIHF1ZXJ5IHBvaW50IG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aCBjYW4gZXh0ZW5kIGFuZCBpbnRlcnNlY3QgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogV2hlbiB0aGUgbWFwIGlzIG5vdCBwaXRjaGVkIHRoZSBgY2FtZXJhUG9pbnRgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGNlbnRlciBvZiB0aGUgbWFwIGJlY2F1c2VcbiAgICAgKiB0aGUgY2FtZXJhIGlzIHJpZ2h0IGFib3ZlIHRoZSBjZW50ZXIgb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBnZXRDYW1lcmFQb2ludCgpIHtcbiAgICAgICAgY29uc3QgcGl0Y2ggPSB0aGlzLl9waXRjaDtcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IE1hdGgudGFuKHBpdGNoKSAqICh0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgfHwgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlclBvaW50LmFkZChuZXcgUG9pbnQoMCwgeU9mZnNldCkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogV2hlbiB0aGUgbWFwIGlzIHBpdGNoZWQsIHNvbWUgb2YgdGhlIDNEIGZlYXR1cmVzIHRoYXQgaW50ZXJzZWN0IGEgcXVlcnkgd2lsbCBub3QgaW50ZXJzZWN0XG4gICAgICogdGhlIHF1ZXJ5IGF0IHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aC4gSW5zdGVhZCB0aGUgZmVhdHVyZSBtYXkgYmUgY2xvc2VyIGFuZCBvbmx5IGludGVyc2VjdFxuICAgICAqIHRoZSBxdWVyeSBiZWNhdXNlIGl0IGV4dHJ1ZGVzIGludG8gdGhlIGFpci5cbiAgICAgKlxuICAgICAqIFRoaXMgcmV0dXJucyBhIGdlb21ldHJ5IHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBvcmlnaW5hbCBxdWVyeSBhcyB3ZWxsIGFzIGFsbCBwb3NzaWJsZSBhcmVzIG9mIHRoZVxuICAgICAqIHNjcmVlbiB3aGVyZSB0aGUgKmJhc2UqIG9mIGEgdmlzaWJsZSBleHRydXNpb24gY291bGQgYmUuXG4gICAgICogIC0gRm9yIHBvaW50IHF1ZXJpZXMsIHRoZSBsaW5lIGZyb20gdGhlIHF1ZXJ5IHBvaW50IHRvIHRoZSBcImNhbWVyYSBwb2ludFwiXG4gICAgICogIC0gRm9yIG90aGVyIGdlb21ldHJpZXMsIHRoZSBlbnZlbG9wZSBvZiB0aGUgcXVlcnkgZ2VvbWV0cnkgYW5kIHRoZSBcImNhbWVyYSBwb2ludFwiXG4gICAgICovXG4gICAgZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4pOiBBcnJheTxQb2ludD4ge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5nZXRDYW1lcmFQb2ludCgpO1xuXG4gICAgICAgIGlmIChxdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFtxdWVyeUdlb21ldHJ5WzBdLCBjXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtaW5YID0gYy54O1xuICAgICAgICAgICAgbGV0IG1pblkgPSBjLnk7XG4gICAgICAgICAgICBsZXQgbWF4WCA9IGMueDtcbiAgICAgICAgICAgIGxldCBtYXhZID0gYy55O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcC55KTtcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1pblkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtYXhYLCBtaW5ZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWF4WCwgbWF4WSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1pblgsIG1heFkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtaW5ZKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNmb3JtO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbi8qKlxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1biBhdCBtb3N0IGV2ZXJ5IGBwZXJpb2RgIG1pbGxpc2Vjb25kcy5cbiBUaHJvdHRsZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGF0IG1vc3QgZXZlcnkgcGVyaW9kIG1pbGxpc2Vjb25kcy5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm90dGxlKGZuOiAoKSA9PiB2b2lkLCB0aW1lOiBudW1iZXIpOiAoKSA9PiA/VGltZW91dElEIHtcbiAgICBsZXQgcGVuZGluZyA9IGZhbHNlO1xuICAgIGxldCB0aW1lcklkOiA/VGltZW91dElEID0gbnVsbDtcblxuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgICB0aW1lcklkID0gbnVsbDtcbiAgICAgICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dChsYXRlciwgdGltZSk7XG4gICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghdGltZXJJZCkge1xuICAgICAgICAgICAgbGF0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZXJJZDtcbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnLi4vdXRpbC90aHJvdHRsZSc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5cbi8qXG4gKiBBZGRzIHRoZSBtYXAncyBwb3NpdGlvbiB0byBpdHMgcGFnZSdzIGxvY2F0aW9uIGhhc2guXG4gKiBQYXNzZWQgYXMgYW4gb3B0aW9uIHRvIHRoZSBtYXAgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHtIYXNofSBgdGhpc2BcbiAqL1xuY2xhc3MgSGFzaCB7XG4gICAgX21hcDogTWFwO1xuICAgIF91cGRhdGVIYXNoOiAoKSA9PiA/VGltZW91dElEO1xuICAgIF9oYXNoTmFtZTogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGhhc2hOYW1lOiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2hhc2hOYW1lID0gaGFzaE5hbWUgJiYgZW5jb2RlVVJJQ29tcG9uZW50KGhhc2hOYW1lKTtcbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX2dldEN1cnJlbnRIYXNoJyxcbiAgICAgICAgICAgICdfb25IYXNoQ2hhbmdlJyxcbiAgICAgICAgICAgICdfdXBkYXRlSGFzaCdcbiAgICAgICAgXSwgdGhpcyk7XG5cbiAgICAgICAgLy8gTW9iaWxlIFNhZmFyaSBkb2Vzbid0IGFsbG93IHVwZGF0aW5nIHRoZSBoYXNoIG1vcmUgdGhhbiAxMDAgdGltZXMgcGVyIDMwIHNlY29uZHMuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUhhc2ggPSB0aHJvdHRsZSh0aGlzLl91cGRhdGVIYXNoVW50aHJvdHRsZWQuYmluZCh0aGlzKSwgMzAgKiAxMDAwIC8gMTAwKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE1hcCBlbGVtZW50IHRvIGxpc3RlbiBmb3IgY29vcmRpbmF0ZSBjaGFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWFwXG4gICAgICogQHJldHVybnMge0hhc2h9IGB0aGlzYFxuICAgICAqL1xuICAgIGFkZFRvKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLl9vbkhhc2hDaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlSGFzaCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmVtb3ZlcyBoYXNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLl9vbkhhc2hDaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUhhc2gpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBnZXRIYXNoU3RyaW5nKG1hcEZlZWRiYWNrPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLl9tYXAuZ2V0Q2VudGVyKCksXG4gICAgICAgICAgICB6b29tID0gTWF0aC5yb3VuZCh0aGlzLl9tYXAuZ2V0Wm9vbSgpICogMTAwKSAvIDEwMCxcbiAgICAgICAgICAgIC8vIGRlcml2ZWQgZnJvbSBlcXVhdGlvbjogNTEycHggKiAyXnogLyAzNjAgLyAxMF5kIDwgMC41cHhcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IE1hdGguY2VpbCgoem9vbSAqIE1hdGguTE4yICsgTWF0aC5sb2coNTEyIC8gMzYwIC8gMC41KSkgLyBNYXRoLkxOMTApLFxuICAgICAgICAgICAgbSA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pLFxuICAgICAgICAgICAgbG5nID0gTWF0aC5yb3VuZChjZW50ZXIubG5nICogbSkgLyBtLFxuICAgICAgICAgICAgbGF0ID0gTWF0aC5yb3VuZChjZW50ZXIubGF0ICogbSkgLyBtLFxuICAgICAgICAgICAgYmVhcmluZyA9IHRoaXMuX21hcC5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBwaXRjaCA9IHRoaXMuX21hcC5nZXRQaXRjaCgpO1xuICAgICAgICBsZXQgaGFzaCA9ICcnO1xuICAgICAgICBpZiAobWFwRmVlZGJhY2spIHtcbiAgICAgICAgICAgIC8vIG5ldyBtYXAgZmVlZGJhY2sgc2l0ZSBoYXMgc29tZSBjb25zdHJhaW50cyB0aGF0IGRvbid0IGFsbG93XG4gICAgICAgICAgICAvLyB1cyB0byB1c2UgdGhlIHNhbWUgaGFzaCBmb3JtYXQgYXMgd2UgZG8gZm9yIHRoZSBNYXAgaGFzaCBvcHRpb24uXG4gICAgICAgICAgICBoYXNoICs9IGAvJHtsbmd9LyR7bGF0fS8ke3pvb219YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhc2ggKz0gYCR7em9vbX0vJHtsYXR9LyR7bG5nfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVhcmluZyB8fCBwaXRjaCkgaGFzaCArPSAoYC8ke01hdGgucm91bmQoYmVhcmluZyAqIDEwKSAvIDEwfWApO1xuICAgICAgICBpZiAocGl0Y2gpIGhhc2ggKz0gKGAvJHtNYXRoLnJvdW5kKHBpdGNoKX1gKTtcblxuICAgICAgICBpZiAodGhpcy5faGFzaE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hOYW1lID0gdGhpcy5faGFzaE5hbWU7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gd2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSkuc3BsaXQoJyYnKS5tYXAocGFydCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFydC5zcGxpdCgnPScpWzBdO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGhhc2hOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtoYXNofWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgICAgfSkuZmlsdGVyKGEgPT4gYSk7XG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaChgJHtoYXNoTmFtZX09JHtoYXNofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjJHtwYXJ0cy5qb2luKCcmJyl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgIyR7aGFzaH1gO1xuICAgIH1cblxuICAgIF9nZXRDdXJyZW50SGFzaCgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGhhc2ggZnJvbSBsb2NhdGlvbiwgc3RyaXBwZWQgZnJvbSBpdHMgbnVtYmVyIHNpZ25cbiAgICAgICAgY29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICAgIGlmICh0aGlzLl9oYXNoTmFtZSkge1xuICAgICAgICAgICAgLy8gU3BsaXQgdGhlIHBhcmFtZXRlci1zdHlsZWQgaGFzaCBpbnRvIHBhcnRzIGFuZCBmaW5kIHRoZSB2YWx1ZSB3ZSBuZWVkXG4gICAgICAgICAgICBsZXQga2V5dmFsO1xuICAgICAgICAgICAgaGFzaC5zcGxpdCgnJicpLm1hcChcbiAgICAgICAgICAgICAgICBwYXJ0ID0+IHBhcnQuc3BsaXQoJz0nKVxuICAgICAgICAgICAgKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0WzBdID09PSB0aGlzLl9oYXNoTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBrZXl2YWwgPSBwYXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIChrZXl2YWwgPyBrZXl2YWxbMV0gfHwgJycgOiAnJykuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzaC5zcGxpdCgnLycpO1xuICAgIH1cblxuICAgIF9vbkhhc2hDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHRoaXMuX2dldEN1cnJlbnRIYXNoKCk7XG4gICAgICAgIGlmIChsb2MubGVuZ3RoID49IDMgJiYgIWxvYy5zb21lKHYgPT4gaXNOYU4odikpKSB7XG4gICAgICAgICAgICBjb25zdCBiZWFyaW5nID0gdGhpcy5fbWFwLmRyYWdSb3RhdGUuaXNFbmFibGVkKCkgJiYgdGhpcy5fbWFwLnRvdWNoWm9vbVJvdGF0ZS5pc0VuYWJsZWQoKSA/ICsobG9jWzNdIHx8IDApIDogdGhpcy5fbWFwLmdldEJlYXJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5qdW1wVG8oe1xuICAgICAgICAgICAgICAgIGNlbnRlcjogWytsb2NbMl0sICtsb2NbMV1dLFxuICAgICAgICAgICAgICAgIHpvb206ICtsb2NbMF0sXG4gICAgICAgICAgICAgICAgYmVhcmluZyxcbiAgICAgICAgICAgICAgICBwaXRjaDogKyhsb2NbNF0gfHwgMClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF91cGRhdGVIYXNoVW50aHJvdHRsZWQoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEhhc2hTdHJpbmcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwgJycsIGhhc2gpO1xuICAgICAgICB9IGNhdGNoIChTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAvLyBJRTExIGRvZXMgbm90IGFsbG93IHRoaXMgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGFuIGlmcmFtZSBjcmVhdGVkXG4gICAgICAgICAgICAvLyB3aXRoIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKC4uLikuXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzQxMFxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhhc2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuLyoqXG4gKiBgTWFwTW91c2VFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIG1vdXNlLXJlbGF0ZWQgbWFwIGV2ZW50cy5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBNb3VzZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICdtb3VzZWRvd24nXG4gICAgICAgIHwgJ21vdXNldXAnXG4gICAgICAgIHwgJ2NsaWNrJ1xuICAgICAgICB8ICdkYmxjbGljaydcbiAgICAgICAgfCAnbW91c2Vtb3ZlJ1xuICAgICAgICB8ICdtb3VzZW92ZXInXG4gICAgICAgIHwgJ21vdXNlZW50ZXInXG4gICAgICAgIHwgJ21vdXNlbGVhdmUnXG4gICAgICAgIHwgJ21vdXNlb3V0J1xuICAgICAgICB8ICdjb250ZXh0bWVudSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYE1hcGAgb2JqZWN0IHRoYXQgZmlyZWQgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHRhcmdldDogTWFwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBldmVudCB3aGljaCBjYXVzZWQgdGhlIG1hcCBldmVudC5cbiAgICAgKi9cbiAgICBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBjdXJzb3IsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lci5cbiAgICAgKi9cbiAgICBwb2ludDogUG9pbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBtb3VzZSBjdXJzb3IuXG4gICAgICovXG4gICAgbG5nTGF0OiBMbmdMYXQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUGFuSGFuZGxlcn1cbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfVxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBkYmxjbGlja2AgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9XG4gICAgICpcbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBPYmplY3QgPSB7fSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IERPTS5tb3VzZVBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwgZXh0ZW5kKHtwb2ludCwgbG5nTGF0LCBvcmlnaW5hbEV2ZW50fSwgZGF0YSkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbWFwO1xuICAgIH1cbn1cblxuLyoqXG4gKiBgTWFwVG91Y2hFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIHRvdWNoLXJlbGF0ZWQgbWFwIGV2ZW50cy5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBUb3VjaEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICd0b3VjaHN0YXJ0J1xuICAgICAgICB8ICd0b3VjaGVuZCdcbiAgICAgICAgfCAndG91Y2hjYW5jZWwnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBNYXBgIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICB0YXJnZXQ6IE1hcDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZXZlbnQgd2hpY2ggY2F1c2VkIHRoZSBtYXAgZXZlbnQuXG4gICAgICovXG4gICAgb3JpZ2luYWxFdmVudDogVG91Y2hFdmVudDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBnZW9ncmFwaGljIGxvY2F0aW9uIG9uIHRoZSBtYXAgb2YgdGhlIGNlbnRlciBvZiB0aGUgdG91Y2ggZXZlbnQgcG9pbnRzLlxuICAgICAqL1xuICAgIGxuZ0xhdDogTG5nTGF0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cywgcmVsYXRpdmUgdG8gdGhlIG1hcCBhbmQgbWVhc3VyZWQgZnJvbSB0aGUgdG9wIGxlZnRcbiAgICAgKiBjb3JuZXIuXG4gICAgICovXG4gICAgcG9pbnQ6IFBvaW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIHBpeGVsIGNvb3JkaW5hdGVzIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgICAqIFt0b3VjaCBldmVudCdzIGB0b3VjaGVzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoRXZlbnQvdG91Y2hlcykgcHJvcGVydHkuXG4gICAgICovXG4gICAgcG9pbnRzOiBBcnJheTxQb2ludD47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9ucyBvbiB0aGUgbWFwIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgICAqIFt0b3VjaCBldmVudCdzIGB0b3VjaGVzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RvdWNoRXZlbnQvdG91Y2hlcykgcHJvcGVydHkuXG4gICAgICovXG4gICAgbG5nTGF0czogQXJyYXk8TG5nTGF0PjtcblxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHN1YnNlcXVlbnQgZGVmYXVsdCBwcm9jZXNzaW5nIG9mIHRoZSBldmVudCBieSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIHByZXZlbnQgdGhlIGZvbGxvd2luZyBkZWZhdWx0IG1hcCBiZWhhdmlvcnM6XG4gICAgICpcbiAgICAgKiAgICogT24gYHRvdWNoc3RhcnRgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUGFuSGFuZGxlcn1cbiAgICAgKiAgICogT24gYHRvdWNoc3RhcnRgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyfVxuICAgICAqXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBgcHJldmVudERlZmF1bHRgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogVG91Y2hFdmVudCkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBET00udG91Y2hQb3MobWFwLmdldENhbnZhc0NvbnRhaW5lcigpLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgY29uc3QgbG5nTGF0cyA9IHBvaW50cy5tYXAoKHQpID0+IG1hcC51bnByb2plY3QodCkpO1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50cy5yZWR1Y2UoKHByZXYsIGN1cnIsIGksIGFycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByZXYuYWRkKGN1cnIuZGl2KGFyci5sZW5ndGgpKTtcbiAgICAgICAgfSwgbmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gbWFwLnVucHJvamVjdChwb2ludCk7XG4gICAgICAgIHN1cGVyKHR5cGUsIHtwb2ludHMsIHBvaW50LCBsbmdMYXRzLCBsbmdMYXQsIG9yaWdpbmFsRXZlbnR9KTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBgTWFwV2hlZWxFdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIHRoZSBgd2hlZWxgIG1hcCBldmVudC5cbiAqIEBleHRlbmRzIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBXaGVlbEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6ICd3aGVlbCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYE1hcGAgb2JqZWN0IHRoYXQgZmlyZWQgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHRhcmdldDogTWFwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBldmVudCB3aGljaCBjYXVzZWQgdGhlIG1hcCBldmVudC5cbiAgICAgKi9cbiAgICBvcmlnaW5hbEV2ZW50OiBXaGVlbEV2ZW50O1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudHMgc3Vic2VxdWVudCBkZWZhdWx0IHByb2Nlc3Npbmcgb2YgdGhlIGV2ZW50IGJ5IHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgcHJldmVudCB0aGUgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0uXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBgcHJldmVudERlZmF1bHRgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICBzdXBlcih0eXBlLCB7b3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgYE1hcEJveFpvb21FdmVudGAgaXMgdGhlIGV2ZW50IHR5cGUgZm9yIGJveHpvb20tcmVsYXRlZCBtYXAgZXZlbnRzLlxuICogYG9yaWdpbmFsRXZlbnRgIGNhbiBiZSBhIHtAbGluayBNYXAuZXZlbnQ6Y2xpY2t9IHdoZW4gdGhlIHpvb20gaXMgdHJpZ2dlcmVkIGJ5IGEgVUkgZXZlbnQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwQm94Wm9vbUV2ZW50XG4gKiBAcHJvcGVydHkge01vdXNlRXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTWFwQm94Wm9vbUV2ZW50ID0ge1xuICAgIHR5cGU6ICdib3h6b29tc3RhcnQnXG4gICAgICAgIHwgJ2JveHpvb21lbmQnXG4gICAgICAgIHwgJ2JveHpvb21jYW5jZWwnLFxuICAgIG1hcDogTWFwLFxuICAgIG9yaWdpbmFsRXZlbnQ6IE1vdXNlRXZlbnRcbn07XG5cbi8qKlxuICogQSBgTWFwRGF0YUV2ZW50YCBvYmplY3QgaXMgZW1pdHRlZCB3aXRoIHRoZSB7QGxpbmsgTWFwLmV2ZW50OmRhdGF9XG4gKiBhbmQge0BsaW5rIE1hcC5ldmVudDpkYXRhbG9hZGluZ30gZXZlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgZm9yXG4gKiBgZGF0YVR5cGVgcyBhcmU6XG4gKlxuICogLSBgJ3NvdXJjZSdgOiBUaGUgbm9uLXRpbGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW55IHNvdXJjZVxuICogLSBgJ3N0eWxlJ2A6IFRoZSBbc3R5bGVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSB1c2VkIGJ5IHRoZSBtYXBcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXBEYXRhRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFUeXBlIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCBoYXMgY2hhbmdlZC4gT25lIG9mIGAnc291cmNlJ2AsIGAnc3R5bGUnYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzU291cmNlTG9hZGVkXSBUcnVlIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgc291cmNlIGhhcyBubyBvdXRzdGFuZGluZyBuZXR3b3JrIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzb3VyY2VdIFRoZSBbc3R5bGUgc3BlYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc291cmNlRGF0YVR5cGVdIEluY2x1ZGVkIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZCB0aGUgZXZlbnQgc2lnbmFsc1xuICogdGhhdCBpbnRlcm5hbCBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIG9yIGNoYW5nZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYG1ldGFkYXRhYCBhbmQgYGNvbnRlbnRgLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt0aWxlXSBUaGUgdGlsZSBiZWluZyBsb2FkZWQgb3IgY2hhbmdlZCwgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kXG4gKiB0aGUgZXZlbnQgaXMgcmVsYXRlZCB0byBsb2FkaW5nIG9mIGEgdGlsZS5cbiAqIEBwcm9wZXJ0eSB7Q29vcmRpbmF0ZX0gW2Nvb3JkXSBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgdGlsZSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmRcbiAqIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIGxvYWRpbmcgb2YgYSB0aWxlLlxuICovXG5leHBvcnQgdHlwZSBNYXBEYXRhRXZlbnQgPSB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGFUeXBlOiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIE1hcENvbnRleHRFdmVudCA9IHtcbiAgICB0eXBlOiAnd2ViZ2xjb250ZXh0bG9zdCcgfCAnd2ViZ2xjb250ZXh0cmVzdG9yZWQnLFxuICAgIG9yaWdpbmFsRXZlbnQ6IFdlYkdMQ29udGV4dEV2ZW50XG59XG5cbmV4cG9ydCB0eXBlIE1hcEV2ZW50ID1cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vkb3duXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2Vkb3duJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyByZWxlYXNlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZXVwXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2V1cCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgbW92ZWQgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VvdmVyXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW0dldCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tb3VzZS1wb3NpdGlvbi8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW92ZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIG1vdmVkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZW1vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgYW5kIHJlbGVhc2VkIGF0IHRoZSBzYW1lIHBvaW50IG9uIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICB8ICdjbGljaydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgY2xpY2tlZCB0d2ljZSBhdCB0aGUgc2FtZSBwb2ludCBvbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRibGNsaWNrXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RibGNsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIgZnJvbVxuICAgICAqIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50XG4gICAgICogdmVyc2lvbiBvZiB7QGxpbmsgTWFwI29ufSwgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VlbnRlclxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZWVudGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIsIG9yIGxlYXZlc1xuICAgICAqIHRoZSBtYXAgY2FudmFzLiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIGxpc3RlbmVkIGZvciB2aWEgdGhlIHRocmVlLWFyZ3VtZW50IHZlcnNpb24gb2Yge0BsaW5rIE1hcCNvbn0sXG4gICAgICogd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2VsZWF2ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWxlYXZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50IGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgdGhlIG1hcCdzIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW91dFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdtb3VzZW91dCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHJpZ2h0IGJ1dHRvbiBvZiB0aGUgbW91c2UgaXMgY2xpY2tlZCBvciB0aGUgY29udGV4dCBtZW51IGtleSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbnRleHRtZW51XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2NvbnRleHRtZW51J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgd2hlZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3aGVlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFdoZWVsRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICd3aGVlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoc3RhcnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2hzdGFydCkgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQGV2ZW50IHRvdWNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoZW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoZW5kKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B0b3VjaG1vdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2htb3ZlKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2htb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3RvdWNobW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoY2FuY2VsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoY2FuY2VsKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hjYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAndG91Y2hjYW5jZWwnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGJlZm9yZSB0aGUgbWFwIGJlZ2lucyBhIHRyYW5zaXRpb24gZnJvbSBvbmVcbiAgICAgKiB2aWV3IHRvIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjanVtcFRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3Zlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgdmlldyB0b1xuICAgICAqIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ21vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBzZWUgW1BsYXkgbWFwIGxvY2F0aW9ucyBhcyBhIHNsaWRlc2hvd10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wbGF5YmFjay1sb2NhdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICovXG4gICAgfCAnbW92ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gc3RhcnRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RyYWdzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e29yaWdpbmFsRXZlbnQ6IERyYWdFdmVudH19IGRhdGFcbiAgICAgKi9cbiAgICB8ICdkcmFnZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBiZWZvcmUgdGhlIG1hcCBiZWdpbnMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHpvb20gbGV2ZWwgdG8gYW5vdGhlcixcbiAgICAgKiBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCB6b29tc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21zdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBzZWUgW1VwZGF0ZSBhIGNob3JvcGxldGggbGF5ZXIgYnkgem9vbSBsZXZlbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91cGRhdGluZy1jaG9yb3BsZXRoLylcbiAgICAgKi9cbiAgICB8ICd6b29tJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciB0aGUgbWFwIGNvbXBsZXRlcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3pvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uIFNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJvdGF0ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAncm90YXRlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBlbmRzLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3JvdGF0ZWVuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgYmVnaW5zIGEgY2hhbmdlIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30gLlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaHN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbmV2ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjaGFuZ2VzIGFzXG4gICAgICogdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdwaXRjaCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgZmluaXNoZXMgY2hhbmdpbmcgYXNcbiAgICAgKiB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwaXRjaGVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcEV2ZW50RGF0YX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3BpdGNoZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBzdGFydHMuIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21zdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcEJveFpvb21FdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2JveHpvb21zdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gZW5kcy4gIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge01hcEJveFpvb21FdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2JveHpvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMgYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24sIG9yIHdoZW4gdGhlIGJvdW5kaW5nIGJveCBkb2VzIG5vdCBtZWV0IHRoZSBtaW5pbXVtIHNpemUgdGhyZXNob2xkLlxuICAgICAqIFNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGJveHpvb21jYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBCb3hab29tRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdib3h6b29tY2FuY2VsJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZXNpemVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHJlc2l6ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICdyZXNpemUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIGxvc3QuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgd2ViZ2xjb250ZXh0bG9zdFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRsb3N0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyByZXN0b3JlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3ZWJnbGNvbnRleHRyZXN0b3JlZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRyZXN0b3JlZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBuZWNlc3NhcnkgcmVzb3VyY2VzIGhhdmUgYmVlbiBkb3dubG9hZGVkXG4gICAgICogYW5kIHRoZSBmaXJzdCB2aXN1YWxseSBjb21wbGV0ZSByZW5kZXJpbmcgb2YgdGhlIG1hcCBoYXMgb2NjdXJyZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBzZWUgW0RyYXcgR2VvSlNPTiBwb2ludHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2VvanNvbi1tYXJrZXJzLylcbiAgICAgKiBAc2VlIFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2xpdmUtZ2VvanNvbi8pXG4gICAgICogQHNlZSBbQW5pbWF0ZSBhIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FuaW1hdGUtcG9pbnQtYWxvbmctbGluZS8pXG4gICAgICovXG4gICAgfCAnbG9hZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW5ldmVyIHRoZSBtYXAgaXMgZHJhd24gdG8gdGhlIHNjcmVlbiwgYXMgdGhlIHJlc3VsdCBvZlxuICAgICAqXG4gICAgICogLSBhIGNoYW5nZSB0byB0aGUgbWFwJ3MgcG9zaXRpb24sIHpvb20sIHBpdGNoLCBvciBiZWFyaW5nXG4gICAgICogLSBhIGNoYW5nZSB0byB0aGUgbWFwJ3Mgc3R5bGVcbiAgICAgKiAtIGEgY2hhbmdlIHRvIGEgR2VvSlNPTiBzb3VyY2VcbiAgICAgKiAtIHRoZSBsb2FkaW5nIG9mIGEgdmVjdG9yIHRpbGUsIEdlb0pTT04gZmlsZSwgZ2x5cGgsIG9yIHNwcml0ZVxuICAgICAqXG4gICAgICogQGV2ZW50IHJlbmRlclxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICB8ICdyZW5kZXInXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgbGFzdCBmcmFtZSByZW5kZXJlZCBiZWZvcmUgdGhlIG1hcCBlbnRlcnMgYW5cbiAgICAgKiBcImlkbGVcIiBzdGF0ZTpcbiAgICAgKlxuICAgICAqIC0gTm8gY2FtZXJhIHRyYW5zaXRpb25zIGFyZSBpbiBwcm9ncmVzc1xuICAgICAqIC0gQWxsIGN1cnJlbnRseSByZXF1ZXN0ZWQgdGlsZXMgaGF2ZSBsb2FkZWRcbiAgICAgKiAtIEFsbCBmYWRlL3RyYW5zaXRpb24gYW5pbWF0aW9ucyBoYXZlIGNvbXBsZXRlZFxuICAgICAqXG4gICAgICogQGV2ZW50IGlkbGVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAnaWRsZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVtb3ZlZCB3aXRoIHtAbGluayBNYXAuZXZlbnQ6cmVtb3ZlfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByZW1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgfCAncmVtb3ZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuIFRoaXMgaXMgR0wgSlMncyBwcmltYXJ5IGVycm9yIHJlcG9ydGluZ1xuICAgICAqIG1lY2hhbmlzbS4gV2UgdXNlIGFuIGV2ZW50IGluc3RlYWQgb2YgYHRocm93YCB0byBiZXR0ZXIgYWNjb21tb2RhdGVcbiAgICAgKiBhc3luY3Jvbm91cyBvcGVyYXRpb25zLiBJZiBubyBsaXN0ZW5lcnMgYXJlIGJvdW5kIHRvIHRoZSBgZXJyb3JgIGV2ZW50LCB0aGVcbiAgICAgKiBlcnJvciB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7ZXJyb3I6IHttZXNzYWdlOiBzdHJpbmd9fX0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2Vycm9yJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbnkgbWFwIGRhdGEgbG9hZHMgb3IgY2hhbmdlcy4gU2VlIHtAbGluayBNYXBEYXRhRXZlbnR9XG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWVcbiAgICAgKiB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKi9cbiAgICB8ICdzdHlsZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvZiB0aGUgbWFwJ3Mgc291cmNlcyBsb2FkcyBvciBjaGFuZ2VzLCBpbmNsdWRpbmcgaWYgYSB0aWxlIGJlbG9uZ2luZ1xuICAgICAqIHRvIGEgc291cmNlIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzb3VyY2VkYXRhXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc291cmNlZGF0YSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIChzdHlsZSwgc291cmNlLCB0aWxlLCBldGMpIGJlZ2lucyBsb2FkaW5nIG9yXG4gICAgICogY2hhbmdpbmcgYXN5bmNyb25vdXNseS4gQWxsIGBkYXRhbG9hZGluZ2AgZXZlbnRzIGFyZSBmb2xsb3dlZCBieSBhIGBkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ2RhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHN0eWxlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc3R5bGVkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gb25lIG9mIHRoZSBtYXAncyBzb3VyY2VzIGJlZ2lucyBsb2FkaW5nIG9yIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuXG4gICAgICogQWxsIGBzb3VyY2VkYXRhbG9hZGluZ2AgZXZlbnRzIGFyZSBmb2xsb3dlZCBieSBhIGBzb3VyY2VkYXRhYCBvciBgZXJyb3JgIGV2ZW50LlxuICAgICAqIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzb3VyY2VkYXRhbG9hZGluZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBpY29uIG9yIHBhdHRlcm4gbmVlZGVkIGJ5IHRoZSBzdHlsZSBpcyBtaXNzaW5nLiBUaGUgbWlzc2luZyBpbWFnZSBjYW5cbiAgICAgKiBiZSBhZGRlZCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9IHdpdGhpbiB0aGlzIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIHRvIHByZXZlbnQgdGhlIGltYWdlIGZyb21cbiAgICAgKiBiZWluZyBza2lwcGVkLiBUaGlzIGV2ZW50IGNhbiBiZSB1c2VkIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGljb25zIGFuZCBwYXR0ZXJucy5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWltYWdlbWlzc2luZ1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgVGhlIGlkIG9mIHRoZSBtaXNzaW5nIGltYWdlLlxuICAgICAqXG4gICAgICogQHNlZSBbR2VuZXJhdGUgYW5kIGFkZCBhIG1pc3NpbmcgaWNvbiB0byB0aGUgbWFwXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLW1pc3NpbmctZ2VuZXJhdGVkLylcbiAgICAgKi9cbiAgICB8ICdzdHlsZWltYWdlbWlzc2luZydcblxuICAgIC8qKlxuICAgICAqIEBldmVudCBzdHlsZS5sb2FkXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgfCAnc3R5bGUubG9hZCc7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtlYXNlIGFzIF9lYXNlLCBiaW5kQWxsLCBiZXppZXJ9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uLy4uL3V0aWwvdGFza19xdWV1ZSc7XG5cbi8vIGRlbHRhWSB2YWx1ZSBmb3IgbW91c2Ugc2Nyb2xsIHdoZWVsIGlkZW50aWZpY2F0aW9uXG5jb25zdCB3aGVlbFpvb21EZWx0YSA9IDQuMDAwMjQ0MTQwNjI1O1xuXG4vLyBUaGVzZSBtYWdpYyBudW1iZXJzIGNvbnRyb2wgdGhlIHJhdGUgb2Ygem9vbS4gVHJhY2twYWQgZXZlbnRzIGZpcmUgYXQgYSBncmVhdGVyXG4vLyBmcmVxdWVuY3kgdGhhbiBtb3VzZSBzY3JvbGwgd2hlZWwsIHNvIHJlZHVjZSB0aGUgem9vbSByYXRlIHBlciB3aGVlbCB0aWNrXG5jb25zdCBkZWZhdWx0Wm9vbVJhdGUgPSAxIC8gMTAwO1xuY29uc3Qgd2hlZWxab29tUmF0ZSA9IDEgLyA0NTA7XG5cbi8vIHVwcGVyIGJvdW5kIG9uIGhvdyBtdWNoIHdlIHNjYWxlIHRoZSBtYXAgaW4gYW55IHNpbmdsZSByZW5kZXIgZnJhbWU7IHRoaXNcbi8vIGlzIHVzZWQgdG8gbGltaXQgem9vbSByYXRlIGluIHRoZSBjYXNlIG9mIHZlcnkgZmFzdCBzY3JvbGxpbmdcbmNvbnN0IG1heFNjYWxlUGVyRnJhbWUgPSAyO1xuXG4vKipcbiAqIFRoZSBgU2Nyb2xsWm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgYnkgc2Nyb2xsaW5nLlxuICovXG5jbGFzcyBTY3JvbGxab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfem9vbWluZzogYm9vbGVhbjtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuICAgIF9hcm91bmQ6IFBvaW50O1xuICAgIF9hcm91bmRQb2ludDogUG9pbnQ7XG4gICAgX3R5cGU6ICd3aGVlbCcgfCAndHJhY2twYWQnIHwgbnVsbDtcbiAgICBfbGFzdFZhbHVlOiBudW1iZXI7XG4gICAgX3RpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgZm9yIGRlbGF5ZWQtaGFuZGxpbmcgb2YgYSBzaW5nbGUgd2hlZWwgbW92ZW1lbnRcbiAgICBfZmluaXNoVGltZW91dDogP1RpbWVvdXRJRDsgLy8gdXNlZCB0byBkZWxheSBmaW5hbCAne21vdmUsem9vbX1lbmQnIGV2ZW50c1xuXG4gICAgX2xhc3RXaGVlbEV2ZW50OiBhbnk7XG4gICAgX2xhc3RXaGVlbEV2ZW50VGltZTogbnVtYmVyO1xuXG4gICAgX3N0YXJ0Wm9vbTogP251bWJlcjtcbiAgICBfdGFyZ2V0Wm9vbTogP251bWJlcjtcbiAgICBfZGVsdGE6IG51bWJlcjtcbiAgICBfZWFzaW5nOiA/KChudW1iZXIpID0+IG51bWJlcik7XG4gICAgX3ByZXZFYXNlOiA/e3N0YXJ0OiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKF86IG51bWJlcikgPT4gbnVtYmVyfTtcblxuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgX2RlZmF1bHRab29tUmF0ZTogbnVtYmVyO1xuICAgIF93aGVlbFpvb21SYXRlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG5cbiAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuXG4gICAgICAgIHRoaXMuX2RlZmF1bHRab29tUmF0ZSA9IGRlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uV2hlZWwnLFxuICAgICAgICAgICAgJ19vblRpbWVvdXQnLFxuICAgICAgICAgICAgJ19vblNjcm9sbEZyYW1lJyxcbiAgICAgICAgICAgICdfb25TY3JvbGxGaW5pc2hlZCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB6b29tIHJhdGUgb2YgYSB0cmFja3BhZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbem9vbVJhdGU9MS8xMDBdIFRoZSByYXRlIHVzZWQgdG8gc2NhbGUgdHJhY2twYWQgbW92ZW1lbnQgdG8gYSB6b29tIHZhbHVlLlxuICAgICAqL1xuICAgIHNldFpvb21SYXRlKHpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFpvb21SYXRlID0gem9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB6b29tIHJhdGUgb2YgYSBtb3VzZSB3aGVlbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2hlZWxab29tUmF0ZT0xLzQ1MF0gVGhlIHJhdGUgdXNlZCB0byBzY2FsZSBtb3VzZSB3aGVlbCBtb3ZlbWVudCB0byBhIHpvb20gdmFsdWUuXG4gICAgICovXG4gICAgc2V0V2hlZWxab29tUmF0ZSh3aGVlbFpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWN0aXZlIHN0YXRlIGlzIHR1cm5lZCBvbiBhbmQgb2ZmIHdpdGggZXZlcnkgc2Nyb2xsIHdoZWVsIGV2ZW50IGFuZCBpcyBzZXQgYmFjayB0byBmYWxzZSBiZWZvcmUgdGhlIG1hcFxuICAgICogcmVuZGVyIGlzIGNhbGxlZCwgc28gX2FjdGl2ZSBpcyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzY3JvbGwgem9vbSBhbmltYXRpb24gaXMgaW5cbiAgICAqIHByb2dyZXNzLlxuICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICBpc1pvb21pbmcoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX3pvb21pbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFyb3VuZF0gSWYgXCJjZW50ZXJcIiBpcyBwYXNzZWQsIG1hcCB3aWxsIHpvb20gYXJvdW5kIGNlbnRlciBvZiBtYXBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pXG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmFyb3VuZCA9PT0gJ2NlbnRlcic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbldoZWVsKGU6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICAgICAgLy8gUmVtb3ZlIGBhbnlgIGNhc3Qgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDg3OSBpcyBmaXhlZC5cbiAgICAgICAgbGV0IHZhbHVlID0gZS5kZWx0YU1vZGUgPT09ICh3aW5kb3cuV2hlZWxFdmVudDogYW55KS5ET01fREVMVEFfTElORSA/IGUuZGVsdGFZICogNDAgOiBlLmRlbHRhWTtcbiAgICAgICAgY29uc3Qgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIHRpbWVEZWx0YSA9IG5vdyAtICh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUgfHwgMCk7XG5cbiAgICAgICAgdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lID0gbm93O1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gMCAmJiAodmFsdWUgJSB3aGVlbFpvb21EZWx0YSkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25lIGlzIGRlZmluaXRlbHkgYSBtb3VzZSB3aGVlbCBldmVudC5cbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSAnd2hlZWwnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IDAgJiYgTWF0aC5hYnModmFsdWUpIDwgNCkge1xuICAgICAgICAgICAgLy8gVGhpcyBvbmUgaXMgZGVmaW5pdGVseSBhIHRyYWNrcGFkIGV2ZW50IGJlY2F1c2UgaXQgaXMgc28gc21hbGwuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gJ3RyYWNrcGFkJztcblxuICAgICAgICB9IGVsc2UgaWYgKHRpbWVEZWx0YSA+IDQwMCkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBsaWtlbHkgYSBuZXcgc2Nyb2xsIGFjdGlvbi5cbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIC8vIFN0YXJ0IGEgdGltZW91dCBpbiBjYXNlIHRoaXMgd2FzIGEgc2luZ3VsYXIgZXZlbnQsIGFuZCBkZWx5IGl0IGJ5IHVwIHRvIDQwbXMuXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsIDQwLCBlKTtcblxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl90eXBlKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVwZWF0aW5nIGV2ZW50LCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSBvZiBldmVudCBqdXN0IHlldC5cbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWx0YSBwZXIgdGltZSBpcyBzbWFsbCwgd2UgYXNzdW1lIGl0J3MgYSBmYXN0IHRyYWNrcGFkOyBvdGhlcndpc2Ugd2Ugc3dpdGNoIGludG8gd2hlZWwgbW9kZS5cbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSAoTWF0aC5hYnModGltZURlbHRhICogdmFsdWUpIDwgMjAwKSA/ICd0cmFja3BhZCcgOiAnd2hlZWwnO1xuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIGRlbGF5ZWQgZXZlbnQgaXNuJ3QgZmlyZWQgYWdhaW4sIGJlY2F1c2Ugd2UgYWNjdW11bGF0ZVxuICAgICAgICAgICAgLy8gdGhlIHByZXZpb3VzIGV2ZW50ICh3aGljaCB3YXMgbGVzcyB0aGFuIDQwbXMgYWdvKSBpbnRvIHRoaXMgZXZlbnQuXG4gICAgICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLl9sYXN0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTbG93IGRvd24gem9vbSBpZiBzaGlmdCBrZXkgaXMgaGVsZCBmb3IgbW9yZSBwcmVjaXNlIHpvb21pbmdcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgdmFsdWUpIHZhbHVlID0gdmFsdWUgLyA0O1xuXG4gICAgICAgIC8vIE9ubHkgZmlyZSB0aGUgY2FsbGJhY2sgaWYgd2UgYWN0dWFsbHkga25vdyB3aGF0IHR5cGUgb2Ygc2Nyb2xsaW5nIGRldmljZSB0aGUgdXNlciB1c2VzLlxuICAgICAgICBpZiAodGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdFdoZWVsRXZlbnQgPSBlO1xuICAgICAgICAgICAgdGhpcy5fZGVsdGEgLT0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIF9vblRpbWVvdXQoaW5pdGlhbEV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICd3aGVlbCc7XG4gICAgICAgIHRoaXMuX2RlbHRhIC09IHRoaXMuX2xhc3RWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0KGluaXRpYWxFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc3RhcnQoZTogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5fZGVsdGEpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fZnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzWm9vbWluZygpKSB7XG4gICAgICAgICAgICB0aGlzLl96b29taW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0Jywge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ3pvb21zdGFydCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgdGhpcy5fYXJvdW5kID0gTG5nTGF0LmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyID8gdGhpcy5fbWFwLmdldENlbnRlcigpIDogdGhpcy5fbWFwLnVucHJvamVjdChwb3MpKTtcbiAgICAgICAgdGhpcy5fYXJvdW5kUG9pbnQgPSB0aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKTtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25TY3JvbGxGcmFtZSgpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLl9tYXAudHJhbnNmb3JtO1xuXG4gICAgICAgIC8vIGlmIHdlJ3ZlIGhhZCBzY3JvbGwgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHJlbmRlciBmcmFtZSwgY29uc3VtZSB0aGVcbiAgICAgICAgLy8gYWNjdW11bGF0ZWQgZGVsdGEsIGFuZCB1cGRhdGUgdGhlIHRhcmdldCB6b29tIGxldmVsIGFjY29yZGluZ2x5XG4gICAgICAgIGlmICh0aGlzLl9kZWx0YSAhPT0gMCkge1xuICAgICAgICAgICAgLy8gRm9yIHRyYWNrcGFkIGV2ZW50cyBhbmQgc2luZ2xlIG1vdXNlIHdoZWVsIHRpY2tzLCB1c2UgdGhlIGRlZmF1bHQgem9vbSByYXRlXG4gICAgICAgICAgICBjb25zdCB6b29tUmF0ZSA9ICh0aGlzLl90eXBlID09PSAnd2hlZWwnICYmIE1hdGguYWJzKHRoaXMuX2RlbHRhKSA+IHdoZWVsWm9vbURlbHRhKSA/IHRoaXMuX3doZWVsWm9vbVJhdGUgOiB0aGlzLl9kZWZhdWx0Wm9vbVJhdGU7XG4gICAgICAgICAgICAvLyBTY2FsZSBieSBzaWdtb2lkIG9mIHNjcm9sbCB3aGVlbCBkZWx0YS5cbiAgICAgICAgICAgIGxldCBzY2FsZSA9IG1heFNjYWxlUGVyRnJhbWUgLyAoMSArIE1hdGguZXhwKC1NYXRoLmFicyh0aGlzLl9kZWx0YSAqIHpvb21SYXRlKSkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVsdGEgPCAwICYmIHNjYWxlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSAxIC8gc2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZyb21TY2FsZSA9IHR5cGVvZiB0aGlzLl90YXJnZXRab29tID09PSAnbnVtYmVyJyA/IHRyLnpvb21TY2FsZSh0aGlzLl90YXJnZXRab29tKSA6IHRyLnNjYWxlO1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHRyLm1heFpvb20sIE1hdGgubWF4KHRyLm1pblpvb20sIHRyLnNjYWxlWm9vbShmcm9tU2NhbGUgKiBzY2FsZSkpKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIG1vdXNlIHdoZWVsLCByZWZyZXNoIHRoZSBzdGFydGluZyB6b29tIGFuZCBlYXNpbmdcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIHdlJ3JlIHVzaW5nIHRvIHNtb290aCBvdXQgdGhlIHpvb21pbmcgYmV0d2VlbiB3aGVlbFxuICAgICAgICAgICAgLy8gZXZlbnRzXG4gICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ3doZWVsJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Wm9vbSA9IHRyLnpvb207XG4gICAgICAgICAgICAgICAgdGhpcy5fZWFzaW5nID0gdGhpcy5fc21vb3RoT3V0RWFzaW5nKDIwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RlbHRhID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldFpvb20gPSB0eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Wm9vbSA6IHRyLnpvb207XG4gICAgICAgIGNvbnN0IHN0YXJ0Wm9vbSA9IHRoaXMuX3N0YXJ0Wm9vbTtcbiAgICAgICAgY29uc3QgZWFzaW5nID0gdGhpcy5fZWFzaW5nO1xuXG4gICAgICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ3doZWVsJyAmJiBzdGFydFpvb20gJiYgZWFzaW5nKSB7XG4gICAgICAgICAgICBhc3NlcnQoZWFzaW5nICYmIHR5cGVvZiBzdGFydFpvb20gPT09ICdudW1iZXInKTtcblxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKSAvIDIwMCwgMSk7XG4gICAgICAgICAgICBjb25zdCBrID0gZWFzaW5nKHQpO1xuICAgICAgICAgICAgdHIuem9vbSA9IGludGVycG9sYXRlKHN0YXJ0Wm9vbSwgdGFyZ2V0Wm9vbSwgayk7XG4gICAgICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IHRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHIuem9vbSA9IHRhcmdldFpvb207XG4gICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQodGhpcy5fYXJvdW5kLCB0aGlzLl9hcm91bmRQb2ludCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpO1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnR9KSk7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0V2hlZWxFdmVudH0pKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0Wm9vbTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc21vb3RoT3V0RWFzaW5nKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGVhc2luZyA9IF9lYXNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcmV2RWFzZSkge1xuICAgICAgICAgICAgY29uc3QgZWFzZSA9IHRoaXMuX3ByZXZFYXNlLFxuICAgICAgICAgICAgICAgIHQgPSAoYnJvd3Nlci5ub3coKSAtIGVhc2Uuc3RhcnQpIC8gZWFzZS5kdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzcGVlZCA9IGVhc2UuZWFzaW5nKHQgKyAwLjAxKSAtIGVhc2UuZWFzaW5nKHQpLFxuXG4gICAgICAgICAgICAgICAgLy8gUXVpY2sgaGFjayB0byBtYWtlIG5ldyBiZXppZXIgdGhhdCBpcyBjb250aW51b3VzIHdpdGggbGFzdFxuICAgICAgICAgICAgICAgIHggPSAwLjI3IC8gTWF0aC5zcXJ0KHNwZWVkICogc3BlZWQgKyAwLjAwMDEpICogMC4wMSxcbiAgICAgICAgICAgICAgICB5ID0gTWF0aC5zcXJ0KDAuMjcgKiAwLjI3IC0geCAqIHgpO1xuXG4gICAgICAgICAgICBlYXNpbmcgPSBiZXppZXIoeCwgeSwgMC4yNSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2RWFzZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlYXNpbmdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZWFzaW5nO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsWm9vbUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuLyoqXG4gKiBUaGUgYEJveFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIHRvIGZpdCB3aXRoaW4gYSBib3VuZGluZyBib3guXG4gKiBUaGUgYm91bmRpbmcgYm94IGlzIGRlZmluZWQgYnkgY2xpY2tpbmcgYW5kIGhvbGRpbmcgYHNoaWZ0YCB3aGlsZSBkcmFnZ2luZyB0aGUgY3Vyc29yLlxuICovXG5jbGFzcyBCb3hab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfc3RhcnRQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfYm94OiBIVE1MRWxlbWVudDtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM6IHtcbiAgICAgICAgY2xpY2tUb2xlcmFuY2U/OiBudW1iZXJcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG1hcC5nZXRDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY2xpY2tUb2xlcmFuY2UgPSBvcHRpb25zLmNsaWNrVG9sZXJhbmNlIHx8IDE7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uTW91c2VNb3ZlJyxcbiAgICAgICAgICAgICdfb25Nb3VzZVVwJyxcbiAgICAgICAgICAgICdfb25LZXlEb3duJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmJveFpvb20uZW5hYmxlKCk7XG4gICAgICovXG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5ib3hab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmICghKGUuc2hpZnRLZXkgJiYgZS5idXR0b24gPT09IDApKSByZXR1cm47XG5cbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwLCBmYWxzZSk7XG5cbiAgICAgICAgRE9NLmRpc2FibGVEcmFnKCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zID0gdGhpcy5fbGFzdFBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgX29uTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICBpZiAodGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKSB8fCAoIXRoaXMuX2JveCAmJiBwb3MuZGlzdCh0aGlzLl9zdGFydFBvcykgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHAwID0gdGhpcy5fc3RhcnRQb3M7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9ib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX2JveCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1ib3h6b29tJywgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jcm9zc2hhaXInKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbXN0YXJ0JywgZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4ocDAueCwgcG9zLngpLFxuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KHAwLngsIHBvcy54KSxcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihwMC55LCBwb3MueSksXG4gICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgocDAueSwgcG9zLnkpO1xuXG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fYm94LCBgdHJhbnNsYXRlKCR7bWluWH1weCwke21pbll9cHgpYCk7XG5cbiAgICAgICAgdGhpcy5fYm94LnN0eWxlLndpZHRoID0gYCR7bWF4WCAtIG1pblh9cHhgO1xuICAgICAgICB0aGlzLl9ib3guc3R5bGUuaGVpZ2h0ID0gYCR7bWF4WSAtIG1pbll9cHhgO1xuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBwMCA9IHRoaXMuX3N0YXJ0UG9zLFxuICAgICAgICAgICAgcDEgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuXG4gICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuXG4gICAgICAgIERPTS5zdXBwcmVzc0NsaWNrKCk7XG5cbiAgICAgICAgaWYgKHAwLnggPT09IHAxLnggJiYgcDAueSA9PT0gcDEueSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tY2FuY2VsJywgZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXBcbiAgICAgICAgICAgICAgICAuZml0U2NyZWVuQ29vcmRpbmF0ZXMocDAsIHAxLCB0aGlzLl9tYXAuZ2V0QmVhcmluZygpLCB7bGluZWFyOiB0cnVlfSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ2JveHpvb21lbmQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbktleURvd24oZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgdGhpcy5fZmluaXNoKCk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2JveHpvb21jYW5jZWwnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9maW5pc2goKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jcm9zc2hhaXInKTtcblxuICAgICAgICBpZiAodGhpcy5fYm94KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2JveCk7XG4gICAgICAgICAgICB0aGlzLl9ib3ggPSAobnVsbDogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5lbmFibGVEcmFnKCk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFBvcztcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94Wm9vbUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiZXppZXIsIGJpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vLi4vdXRpbC90YXNrX3F1ZXVlJztcblxuY29uc3QgaW5lcnRpYUxpbmVhcml0eSA9IDAuMjUsXG4gICAgaW5lcnRpYUVhc2luZyA9IGJlemllcigwLCAwLCBpbmVydGlhTGluZWFyaXR5LCAxKSxcbiAgICBpbmVydGlhTWF4U3BlZWQgPSAxODAsIC8vIGRlZy9zXG4gICAgaW5lcnRpYURlY2VsZXJhdGlvbiA9IDcyMDsgLy8gZGVnL3NeMlxuXG4vKipcbiAqIFRoZSBgRHJhZ1JvdGF0ZUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byByb3RhdGUgdGhlIG1hcCBieSBjbGlja2luZyBhbmRcbiAqIGRyYWdnaW5nIHRoZSBjdXJzb3Igd2hpbGUgaG9sZGluZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIG9yIGBjdHJsYCBrZXkuXG4gKi9cbmNsYXNzIERyYWdSb3RhdGVIYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfc3RhdGU6ICdkaXNhYmxlZCcgfCAnZW5hYmxlZCcgfCAncGVuZGluZycgfCAnYWN0aXZlJztcbiAgICBfYnV0dG9uOiAncmlnaHQnIHwgJ2xlZnQnO1xuICAgIF9ldmVudEJ1dHRvbjogbnVtYmVyO1xuICAgIF9iZWFyaW5nU25hcDogbnVtYmVyO1xuICAgIF9waXRjaFdpdGhSb3RhdGU6IGJvb2xlYW47XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBfc3RhcnRQb3M6IFBvaW50O1xuICAgIF9wcmV2UG9zOiBQb2ludDtcbiAgICBfbGFzdFBvczogUG9pbnQ7XG4gICAgX3N0YXJ0VGltZTogbnVtYmVyO1xuICAgIF9sYXN0TW92ZUV2ZW50OiBNb3VzZUV2ZW50O1xuICAgIF9pbmVydGlhOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgICBfY2VudGVyOiBQb2ludDtcbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcGJveCBHTCBKUyBtYXAgdG8gYWRkIHRoZSBoYW5kbGVyIHRvLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZ1NuYXBdIFRoZSB0aHJlc2hvbGQsIG1lYXN1cmVkIGluIGRlZ3JlZXMsIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBtYXAnc1xuICAgICAqICAgYmVhcmluZyB3aWxsIHNuYXAgdG8gbm9ydGguXG4gICAgICogQHBhcmFtIHtib29sfSBbb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU9dHJ1ZV0gQ29udHJvbCB0aGUgbWFwIHBpdGNoIGluIGFkZGl0aW9uIHRvIHRoZSBiZWFyaW5nXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBidXR0b24/OiAncmlnaHQnIHwgJ2xlZnQnLFxuICAgICAgICBlbGVtZW50PzogSFRNTEVsZW1lbnQsXG4gICAgICAgIGJlYXJpbmdTbmFwPzogbnVtYmVyLFxuICAgICAgICBwaXRjaFdpdGhSb3RhdGU/OiBib29sZWFuLFxuICAgICAgICBjbGlja1RvbGVyYW5jZT86IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG9wdGlvbnMuZWxlbWVudCB8fCBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2Rpc2FibGVkJztcbiAgICAgICAgdGhpcy5fYnV0dG9uID0gb3B0aW9ucy5idXR0b24gfHwgJ3JpZ2h0JztcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwIHx8IDA7XG4gICAgICAgIHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSA9IG9wdGlvbnMucGl0Y2hXaXRoUm90YXRlICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2xpY2tUb2xlcmFuY2UgPSBvcHRpb25zLmNsaWNrVG9sZXJhbmNlIHx8IDE7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnb25Nb3VzZURvd24nLFxuICAgICAgICAgICAgJ19vbk1vdXNlTW92ZScsXG4gICAgICAgICAgICAnX29uTW91c2VVcCcsXG4gICAgICAgICAgICAnX29uQmx1cicsXG4gICAgICAgICAgICAnX29uRHJhZ0ZyYW1lJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgIT09ICdkaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnYWN0aXZlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUm90YXRlLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlZW5kJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2VuYWJsZWQnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2J1dHRvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gRE9NLm1vdXNlQnV0dG9uKGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5IHx8IGUubWV0YUtleSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudEJ1dHRvbiAhPT0gKGUuY3RybEtleSA/IDAgOiAyKSkgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5IHx8IERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50QnV0dG9uID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5kaXNhYmxlRHJhZygpO1xuXG4gICAgICAgIC8vIEJpbmQgd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBmb3IgbW92ZSBhbmQgdXAvZW5kIGV2ZW50cy4gSW4gdGhlIGFic2VuY2Ugb2ZcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgIC8vIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZ2l2ZSB1cyB0aGUgYmVzdCBzaG90IGF0IGNhcHR1cmluZyBldmVudHMgdGhhdFxuICAgICAgICAvLyBmYWxsIG91dHNpZGUgdGhlIG1hcCBjYW52YXMgZWxlbWVudC4gVXNlIGB7Y2FwdHVyZTogdHJ1ZX1gIGZvciB0aGUgbW92ZSBldmVudFxuICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50KSB7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIE90aGVyd2lzZSBpZiBhIG1vdXNldXAgb2NjdXJzIHdoZW4gdGhlIHdpbmRvd1xuICAgICAgICAvLyBpc24ndCBpbiBmb2N1cywgZHJhZ2dpbmcgd2lsbCBjb250aW51ZSBldmVuIHRob3VnaCB0aGUgbW91c2UgaXMgbm8gbG9uZ2VyIHByZXNzZWQuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IFtbYnJvd3Nlci5ub3coKSwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dO1xuICAgICAgICB0aGlzLl9zdGFydFBvcyA9IHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcbiAgICAgICAgdGhpcy5fY2VudGVyID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludDsgIC8vIENlbnRlciBvZiByb3RhdGlvblxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwb3MgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUpO1xuICAgICAgICBpZiAodGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKSB8fCAoKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpICYmIChwb3MuZGlzdCh0aGlzLl9zdGFydFBvcykgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sYXN0TW92ZUV2ZW50ID0gZTtcbiAgICAgICAgdGhpcy5fbGFzdFBvcyA9IHBvcztcblxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnYWN0aXZlJztcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlc3RhcnQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZXN0YXJ0JywgZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaHN0YXJ0JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25EcmFnRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLl9sYXN0TW92ZUV2ZW50O1xuICAgICAgICBpZiAoIWUpIHJldHVybjtcbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLl9tYXAudHJhbnNmb3JtO1xuXG4gICAgICAgIGNvbnN0IHAxID0gdGhpcy5fcHJldlBvcyxcbiAgICAgICAgICAgIHAyID0gdGhpcy5fbGFzdFBvcyxcbiAgICAgICAgICAgIGJlYXJpbmdEaWZmID0gKHAxLnggLSBwMi54KSAqIDAuOCxcbiAgICAgICAgICAgIHBpdGNoRGlmZiA9IChwMS55IC0gcDIueSkgKiAtMC41LFxuICAgICAgICAgICAgYmVhcmluZyA9IHRyLmJlYXJpbmcgLSBiZWFyaW5nRGlmZixcbiAgICAgICAgICAgIHBpdGNoID0gdHIucGl0Y2ggLSBwaXRjaERpZmYsXG4gICAgICAgICAgICBpbmVydGlhID0gdGhpcy5faW5lcnRpYSxcbiAgICAgICAgICAgIGxhc3QgPSBpbmVydGlhW2luZXJ0aWEubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG4gICAgICAgIGluZXJ0aWEucHVzaChbYnJvd3Nlci5ub3coKSwgdGhpcy5fbWFwLl9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmcsIGxhc3RbMV0pXSk7XG5cbiAgICAgICAgY29uc3QgcHJldkJlYXJpbmcgPSB0ci5iZWFyaW5nO1xuICAgICAgICB0ci5iZWFyaW5nID0gYmVhcmluZztcbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJldlBpdGNoID0gdHIucGl0Y2g7XG4gICAgICAgICAgICB0ci5waXRjaCA9IHBpdGNoO1xuICAgICAgICAgICAgaWYgKHRyLnBpdGNoICE9PSBwcmV2UGl0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3BpdGNoJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHIuYmVhcmluZyAhPT0gcHJldkJlYXJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgncm90YXRlJywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlJywgZSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQ7XG4gICAgICAgIHRoaXMuX3ByZXZQb3MgPSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0b3VjaEV2ZW50ID0gZS50eXBlID09PSAndG91Y2hlbmQnO1xuXG4gICAgICAgIGlmICh0b3VjaEV2ZW50ICYmICh0aGlzLl9zdGFydFBvcyA9PT0gdGhpcy5fbGFzdFBvcykgJiYgKERhdGUubm93KCkgLSB0aGlzLl9zdGFydFRpbWUpIDwgMzAwKSB7XG4gICAgICAgICAgICB0aGlzLl9lbC5jbGljaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0b3VjaEV2ZW50ICYmIERPTS5tb3VzZUJ1dHRvbihlKSAhPT0gdGhpcy5fZXZlbnRCdXR0b24pIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICBET00uc3VwcHJlc3NDbGljaygpO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9pbmVydGlhbFJvdGF0ZShlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXIoZTogRm9jdXNFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdyb3RhdGVlbmQnLCBlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaFdpdGhSb3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ3BpdGNoZW5kJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91bmJpbmQoKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX29uTW91c2VVcCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcbiAgICB9XG5cbiAgICBfZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJldlBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgfVxuXG4gICAgX2luZXJ0aWFsUm90YXRlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdyb3RhdGVlbmQnLCBlKTtcbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG5cbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwLFxuICAgICAgICAgICAgbWFwQmVhcmluZyA9IG1hcC5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBpbmVydGlhID0gdGhpcy5faW5lcnRpYTtcblxuICAgICAgICBjb25zdCBmaW5pc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobWFwQmVhcmluZykgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgICAgIG1hcC5yZXNldE5vcnRoKHtub01vdmVTdGFydDogdHJ1ZX0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZWVuZCcsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkgdGhpcy5fZmlyZUV2ZW50KCdwaXRjaGVuZCcsIGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmVydGlhLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBpbmVydGlhWzBdLFxuICAgICAgICAgICAgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIHByZXZpb3VzID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDJdO1xuICAgICAgICBsZXQgYmVhcmluZyA9IG1hcC5fbm9ybWFsaXplQmVhcmluZyhtYXBCZWFyaW5nLCBwcmV2aW91c1sxXSk7XG4gICAgICAgIGNvbnN0IGZsaW5nRGlmZiA9IGxhc3RbMV0gLSBmaXJzdFsxXSxcbiAgICAgICAgICAgIHNpZ24gPSBmbGluZ0RpZmYgPCAwID8gLTEgOiAxLFxuICAgICAgICAgICAgZmxpbmdEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMDtcblxuICAgICAgICBpZiAoZmxpbmdEaWZmID09PSAwIHx8IGZsaW5nRHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNwZWVkID0gTWF0aC5hYnMoZmxpbmdEaWZmICogKGluZXJ0aWFMaW5lYXJpdHkgLyBmbGluZ0R1cmF0aW9uKSk7ICAvLyBkZWcvc1xuICAgICAgICBpZiAoc3BlZWQgPiBpbmVydGlhTWF4U3BlZWQpIHtcbiAgICAgICAgICAgIHNwZWVkID0gaW5lcnRpYU1heFNwZWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzcGVlZCAvIChpbmVydGlhRGVjZWxlcmF0aW9uICogaW5lcnRpYUxpbmVhcml0eSksXG4gICAgICAgICAgICBvZmZzZXQgPSBzaWduICogc3BlZWQgKiAoZHVyYXRpb24gLyAyKTtcblxuICAgICAgICBiZWFyaW5nICs9IG9mZnNldDtcblxuICAgICAgICBpZiAoTWF0aC5hYnMobWFwLl9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmcsIDApKSA8IHRoaXMuX2JlYXJpbmdTbmFwKSB7XG4gICAgICAgICAgICBiZWFyaW5nID0gbWFwLl9ub3JtYWxpemVCZWFyaW5nKDAsIGJlYXJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLnJvdGF0ZVRvKGJlYXJpbmcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsXG4gICAgICAgICAgICBlYXNpbmc6IGluZXJ0aWFFYXNpbmcsXG4gICAgICAgICAgICBub01vdmVTdGFydDogdHJ1ZVxuICAgICAgICB9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQodHlwZSwgZSA/IHtvcmlnaW5hbEV2ZW50OiBlfSA6IHt9KSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAgIC8vbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXVswXSA+IGN1dG9mZilcbiAgICAgICAgICAgIGluZXJ0aWEuc2hpZnQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdSb3RhdGVIYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2JlemllciwgYmluZEFsbCwgZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uLy4uL3V0aWwvdGFza19xdWV1ZSc7XG5cbmNvbnN0IGRlZmF1bHRJbmVydGlhID0ge1xuICAgIGxpbmVhcml0eTogMC4zLFxuICAgIGVhc2luZzogYmV6aWVyKDAsIDAsIDAuMywgMSksXG4gICAgbWF4U3BlZWQ6IDE0MDAsXG4gICAgZGVjZWxlcmF0aW9uOiAyNTAwLFxufTtcbmV4cG9ydCB0eXBlIFBhbkluZXJ0aWFPcHRpb25zID0gdHlwZW9mIGRlZmF1bHRJbmVydGlhO1xuXG5leHBvcnQgdHlwZSBEcmFnUGFuT3B0aW9ucyA9IGJvb2xlYW4gfCBQYW5JbmVydGlhT3B0aW9ucztcblxuLyoqXG4gKiBUaGUgYERyYWdQYW5IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcGFuIHRoZSBtYXAgYnkgY2xpY2tpbmcgYW5kIGRyYWdnaW5nXG4gKiB0aGUgY3Vyc29yLlxuICovXG5jbGFzcyBEcmFnUGFuSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX3N0YXRlOiAnZGlzYWJsZWQnIHwgJ2VuYWJsZWQnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7XG4gICAgX3N0YXJ0UG9zOiBQb2ludDtcbiAgICBfbW91c2VEb3duUG9zOiBQb2ludDtcbiAgICBfcHJldlBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9zdGFydFRvdWNoOiA/QXJyYXk8UG9pbnQ+O1xuICAgIF9sYXN0VG91Y2g6ID9BcnJheTxQb2ludD47XG4gICAgX2xhc3RNb3ZlRXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgdm9pZDtcbiAgICBfaW5lcnRpYTogQXJyYXk8W251bWJlciwgUG9pbnRdPjtcbiAgICBfZnJhbWVJZDogP1Rhc2tJRDtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcbiAgICBfc2hvdWxkU3RhcnQ6ID9ib29sZWFuO1xuICAgIF9pbmVydGlhT3B0aW9uczogUGFuSW5lcnRpYU9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7XG4gICAgICAgIGNsaWNrVG9sZXJhbmNlPzogbnVtYmVyXG4gICAgfSkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuICAgICAgICB0aGlzLl9pbmVydGlhT3B0aW9ucyA9IGRlZmF1bHRJbmVydGlhO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ19vbk1vdXNlVXAnLFxuICAgICAgICAgICAgJ19vblRvdWNoRW5kJyxcbiAgICAgICAgICAgICdfb25CbHVyJyxcbiAgICAgICAgICAgICdfb25EcmFnRnJhbWUnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSAhPT0gJ2Rpc2FibGVkJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUsIGkuZS4gY3VycmVudGx5IGJlaW5nIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLlxuICAgICAqL1xuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGluZWFyaXR5PTBdIGZhY3RvciB1c2VkIHRvIHNjYWxlIHRoZSBkcmFnIHZlbG9jaXR5XG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nPWJlemllcigwLCAwLCAwLjMsIDEpXSBlYXNpbmcgZnVuY3Rpb24gYXBwbGxlZCB0byBgbWFwLnBhblRvYCB3aGVuIGFwcGx5aW5nIHRoZSBkcmFnLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTcGVlZD0xNDAwXSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZHJhZyB2ZWxvY2l0eS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGVjZWxlcmF0aW9uPTI1MDBdIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBzcGVlZCByZWR1Y2VzIGFmdGVyIHRoZSBwYW4gZW5kcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmRyYWdwYW4uZW5hYmxlKHtcbiAgICAgKiAgICAgIGxpbmVhcml0eTogMC4zLFxuICAgICAqICAgICAgZWFzaW5nOiBiZXppZXIoMCwgMCwgMC4zLCAxKSxcbiAgICAgKiAgICAgIG1heFNwZWVkOiAxNDAwLFxuICAgICAqICAgICAgZGVjZWxlcmF0aW9uOiAyNTAwLFxuICAgICAqICAgfSk7XG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6IERyYWdQYW5PcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRvdWNoLWRyYWctcGFuJyk7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICB0aGlzLl9pbmVydGlhT3B0aW9ucyA9IGV4dGVuZChkZWZhdWx0SW5lcnRpYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdQYW4uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10b3VjaC1kcmFnLXBhbicpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnZHJhZ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2VuYWJsZWQnKSByZXR1cm47XG4gICAgICAgIGlmIChlLmN0cmxLZXkgfHwgRE9NLm1vdXNlQnV0dG9uKGUpICE9PSAwKSByZXR1cm47XG5cbiAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciBtb3VzZW1vdmUvdXAgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAvLyB0aGUgcG9pbnRlciBjYXB0dXJlIEFQSSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgbmVjZXNzYXJ5IHBsYXRmb3JtcyxcbiAgICAgICAgLy8gd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBnaXZlIHVzIHRoZSBiZXN0IHNob3QgYXQgY2FwdHVyaW5nIGV2ZW50cyB0aGF0XG4gICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgIC8vIHRvIHByZXZlbnQgbWFwIG1vdmUgZXZlbnRzIGZyb20gYmVpbmcgZmlyZWQgZHVyaW5nIGEgZHJhZy5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Nb3VzZVVwKTtcblxuICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICB9XG5cbiAgICBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkgeyAvLyBtdWx0aS1maW5nZXIgdG91Y2hcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGRyYWdnaW5nIChlLmcuIHdpdGggb25lIGZpbmdlcikgYW5kIGFkZCBhbm90aGVyIGZpbmdlcixcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIGhhbmRsZXIgYWN0aXZlIGJ1dCBkb24ndCBhdHRlbXB0IHRvIC5fc3RhcnQoKSBhZ2FpblxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycgfHwgdGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIHdpbmRvdy1sZXZlbCBldmVudCBsaXN0ZW5lcnMgZm9yIHRvdWNobW92ZS9lbmQgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAvLyB0aGUgcG9pbnRlciBjYXB0dXJlIEFQSSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgbmVjZXNzYXJ5IHBsYXRmb3JtcyxcbiAgICAgICAgLy8gd2luZG93LWxldmVsIGV2ZW50IGxpc3RlbmVycyBnaXZlIHVzIHRoZSBiZXN0IHNob3QgYXQgY2FwdHVyaW5nIGV2ZW50cyB0aGF0XG4gICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgIC8vIHRvIHByZXZlbnQgbWFwIG1vdmUgZXZlbnRzIGZyb20gYmVpbmcgZmlyZWQgZHVyaW5nIGEgZHJhZy5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kKTtcblxuICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICB9XG5cbiAgICBfc3RhcnQoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSB3aGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMuIE90aGVyd2lzZSBpZiBhIG1vdXNldXAgb2NjdXJzIHdoZW4gdGhlIHdpbmRvd1xuICAgICAgICAvLyBpc24ndCBpbiBmb2N1cywgZHJhZ2dpbmcgd2lsbCBjb250aW51ZSBldmVuIHRob3VnaCB0aGUgbW91c2UgaXMgbm8gbG9uZ2VyIHByZXNzZWQuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25CbHVyKTtcblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9tb3VzZURvd25Qb3MgPSB0aGlzLl9wcmV2UG9zID0gdGhpcy5fbGFzdFBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG4gICAgICAgIHRoaXMuX3N0YXJ0VG91Y2ggPSB0aGlzLl9sYXN0VG91Y2ggPSAod2luZG93LlRvdWNoRXZlbnQgJiYgZSBpbnN0YW5jZW9mIHdpbmRvdy5Ub3VjaEV2ZW50KSA/IERPTS50b3VjaFBvcyh0aGlzLl9lbCwgZSkgOiBudWxsO1xuICAgICAgICB0aGlzLl9pbmVydGlhID0gW1ticm93c2VyLm5vdygpLCB0aGlzLl9zdGFydFBvc11dO1xuICAgIH1cblxuICAgIF90b3VjaGVzTWF0Y2gobGFzdFRvdWNoOiA/QXJyYXk8UG9pbnQ+LCB0aGlzVG91Y2g6ID9BcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKCFsYXN0VG91Y2ggfHwgIXRoaXNUb3VjaCB8fCBsYXN0VG91Y2gubGVuZ3RoICE9PSB0aGlzVG91Y2gubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBsYXN0VG91Y2guZXZlcnkoKHBvcywgaSkgPT4gdGhpc1RvdWNoW2ldID09PSBwb3MpO1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUG9zID0gKHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGUgaW5zdGFuY2VvZiB3aW5kb3cuVG91Y2hFdmVudCkgPyBET00udG91Y2hQb3ModGhpcy5fZWwsIGUpIDogbnVsbDtcbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlKTtcblxuICAgICAgICBjb25zdCBtYXRjaGVzTGFzdFBvcyA9IHRvdWNoUG9zID8gdGhpcy5fdG91Y2hlc01hdGNoKHRoaXMuX2xhc3RUb3VjaCwgdG91Y2hQb3MpIDogdGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKTtcblxuICAgICAgICBpZiAobWF0Y2hlc0xhc3RQb3MgfHwgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycgJiYgcG9zLmRpc3QodGhpcy5fbW91c2VEb3duUG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdE1vdmVFdmVudCA9IGU7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG4gICAgICAgIHRoaXMuX2xhc3RUb3VjaCA9IHRvdWNoUG9zO1xuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5faW5lcnRpYS5wdXNoKFticm93c2VyLm5vdygpLCB0aGlzLl9sYXN0UG9zXSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgaW4gZWFjaCByZW5kZXIgZnJhbWUgd2hpbGUgZHJhZ2dpbmcgaXMgaGFwcGVuaW5nLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX29uRHJhZ0ZyYW1lKCkge1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBjb25zdCBlID0gdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC50b3VjaFpvb21Sb3RhdGUuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5fYWJvcnQoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIHdlIHRyZWF0IHRoZSBmaXJzdCBkcmFnIGZyYW1lIChyYXRoZXIgdGhhbiB0aGUgbW91c2Vkb3duIGV2ZW50KVxuICAgICAgICAgICAgLy8gYXMgdGhlIHN0YXJ0IG9mIHRoZSBkcmFnXG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdzdGFydCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3Zlc3RhcnQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFN0YXJ0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuOyAvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUgZHJhZ3N0YXJ0IGV2ZW50IHRvIHRyaWdnZXIgYSBkaXNhYmxlKCkgY2FsbCAoIzI0MTkpIHNvIHdlIG11c3QgYWNjb3VudCBmb3IgdGhhdFxuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy5fbWFwLnRyYW5zZm9ybTtcbiAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnBvaW50TG9jYXRpb24odGhpcy5fcHJldlBvcyksIHRoaXMuX2xhc3RQb3MpO1xuICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWcnLCBlKTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlJywgZSk7XG5cbiAgICAgICAgdGhpcy5fcHJldlBvcyA9IHRoaXMuX2xhc3RQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50O1xuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoRE9NLm1vdXNlQnV0dG9uKGUpICE9PSAwKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5faW5lcnRpYWxQYW4oZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25Ub3VjaEVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghZS50b3VjaGVzIHx8IGUudG91Y2hlcy5sZW5ndGggPT09IDApIHsgLy8gb25seSBzdG9wIGRyYWcgaWYgYWxsIGZpbmdlcnMgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luZXJ0aWFsUGFuKGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgICAgICB0aGlzLl91bmJpbmQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgIC8vIHNvbWUgZmluZ2VyKHMpIHN0aWxsIHRvdWNoaW5nIHRoZSBzY3JlZW5cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgYWxyZWFkeSBkcmFnZ2luZzsgY29udGludWVcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgZHJhZ2dpbmc7IGdldCByZWFkeSB0byBzdGFydCBhIG5ldyBkcmFnXG4gICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWJvcnQoZTogRm9jdXNFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9zaG91bGRTdGFydCkgeyAvLyBJZiB3ZSBzY2hlZHVsZWQgdGhlIGRyYWdzdGFydCBidXQgbmV2ZXIgZmlyZWQsIG5vdGhpbmcgdG8gZW5kXG4gICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBzdGFydGVkIHRoZSBkcmFnLCBlbmQgaXRcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2RyYWdlbmQnLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ21vdmVlbmQnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgaWYgKCh3aW5kb3cuVG91Y2hFdmVudCAmJiBlIGluc3RhbmNlb2Ygd2luZG93LlRvdWNoRXZlbnQpICYmIGUudG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpbmdlcnMgdG91Y2hpbmcsIHJlYXR0YWNoIHRvdWNoZW5kIGxpc3RlbmVyIGluIGNhc2VcbiAgICAgICAgICAgICAgICAvLyBhbGwgYnV0IG9uZSBmaW5nZXIgaXMgcmVtb3ZlZCBhbmQgd2UgbmVlZCB0byByZXN0YXJ0IGEgZHJhZyBvbiB0b3VjaGVuZFxuICAgICAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIHRoaXMuX3VuYmluZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXIoZTogRm9jdXNFdmVudCkge1xuICAgICAgICB0aGlzLl9hYm9ydChlKTtcbiAgICB9XG5cbiAgICBfdW5iaW5kKCkge1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUsIHtjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZX0pO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQpO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUsIHtjYXB0dXJlOiB0cnVlfSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdibHVyJywgdGhpcy5fb25CbHVyKTtcbiAgICB9XG5cbiAgICBfZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJldlBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX21vdXNlRG93blBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fc2hvdWxkU3RhcnQ7XG4gICAgfVxuXG4gICAgX2luZXJ0aWFsUGFuKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnZHJhZ2VuZCcsIGUpO1xuXG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICBjb25zdCBpbmVydGlhID0gdGhpcy5faW5lcnRpYTtcbiAgICAgICAgaWYgKGluZXJ0aWEubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0ID0gaW5lcnRpYVtpbmVydGlhLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgZmlyc3QgPSBpbmVydGlhWzBdLFxuICAgICAgICAgICAgZmxpbmdPZmZzZXQgPSBsYXN0WzFdLnN1YihmaXJzdFsxXSksXG4gICAgICAgICAgICBmbGluZ0R1cmF0aW9uID0gKGxhc3RbMF0gLSBmaXJzdFswXSkgLyAxMDAwO1xuXG4gICAgICAgIGlmIChmbGluZ0R1cmF0aW9uID09PSAwIHx8IGxhc3RbMV0uZXF1YWxzKGZpcnN0WzFdKSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlZW5kJywgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2xpbmVhcml0eSwgZWFzaW5nLCBtYXhTcGVlZCwgZGVjZWxlcmF0aW9ufSA9IHRoaXMuX2luZXJ0aWFPcHRpb25zO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBweC9zIHZlbG9jaXR5ICYgYWRqdXN0IGZvciBpbmNyZWFzZWQgaW5pdGlhbCBhbmltYXRpb24gc3BlZWQgd2hlbiBlYXNpbmcgb3V0XG4gICAgICAgIGNvbnN0IHZlbG9jaXR5ID0gZmxpbmdPZmZzZXQubXVsdChsaW5lYXJpdHkgLyBmbGluZ0R1cmF0aW9uKTtcbiAgICAgICAgbGV0IHNwZWVkID0gdmVsb2NpdHkubWFnKCk7IC8vIHB4L3NcblxuICAgICAgICBpZiAoc3BlZWQgPiBtYXhTcGVlZCkge1xuICAgICAgICAgICAgc3BlZWQgPSBtYXhTcGVlZDtcbiAgICAgICAgICAgIHZlbG9jaXR5Ll91bml0KCkuX211bHQoc3BlZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzcGVlZCAvIChkZWNlbGVyYXRpb24gKiBsaW5lYXJpdHkpLFxuICAgICAgICAgICAgb2Zmc2V0ID0gdmVsb2NpdHkubXVsdCgtZHVyYXRpb24gLyAyKTtcblxuICAgICAgICB0aGlzLl9tYXAucGFuQnkob2Zmc2V0LCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICAgICAgZWFzaW5nLFxuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIGUgPyB7b3JpZ2luYWxFdmVudDogZX0gOiB7fSkpO1xuICAgIH1cblxuICAgIF9kcmFpbkluZXJ0aWFCdWZmZXIoKSB7XG4gICAgICAgIGNvbnN0IGluZXJ0aWEgPSB0aGlzLl9pbmVydGlhLFxuICAgICAgICAgICAgbm93ID0gYnJvd3Nlci5ub3coKSxcbiAgICAgICAgICAgIGN1dG9mZiA9IDE2MDsgICAvLyBtc2VjXG5cbiAgICAgICAgd2hpbGUgKGluZXJ0aWEubGVuZ3RoID4gMCAmJiBub3cgLSBpbmVydGlhWzBdWzBdID4gY3V0b2ZmKSBpbmVydGlhLnNoaWZ0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnUGFuSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbmNvbnN0IHBhblN0ZXAgPSAxMDAsXG4gICAgYmVhcmluZ1N0ZXAgPSAxNSxcbiAgICBwaXRjaFN0ZXAgPSAxMDtcblxuLyoqXG4gKiBUaGUgYEtleWJvYXJkSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20sIHJvdGF0ZSwgYW5kIHBhbiB0aGUgbWFwIHVzaW5nXG4gKiB0aGUgZm9sbG93aW5nIGtleWJvYXJkIHNob3J0Y3V0czpcbiAqXG4gKiAtIGA9YCAvIGArYDogSW5jcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMS5cbiAqIC0gYFNoaWZ0LT1gIC8gYFNoaWZ0LStgOiBJbmNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAyLlxuICogLSBgLWA6IERlY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDEuXG4gKiAtIGBTaGlmdC0tYDogRGVjcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMi5cbiAqIC0gQXJyb3cga2V5czogUGFuIGJ5IDEwMCBwaXhlbHMuXG4gKiAtIGBTaGlmdCvDosKHwqJgOiBJbmNyZWFzZSB0aGUgcm90YXRpb24gYnkgMTUgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCoGA6IERlY3JlYXNlIHRoZSByb3RhdGlvbiBieSAxNSBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KhYDogSW5jcmVhc2UgdGhlIHBpdGNoIGJ5IDEwIGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqNgOiBEZWNyZWFzZSB0aGUgcGl0Y2ggYnkgMTAgZGVncmVlcy5cbiAqL1xuY2xhc3MgS2V5Ym9hcmRIYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25LZXlEb3duJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIga2V5Ym9hcmQgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYga2V5Ym9hcmQgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmtleWJvYXJkLmVuYWJsZSgpO1xuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmtleWJvYXJkLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHJldHVybjtcblxuICAgICAgICBsZXQgem9vbURpciA9IDA7XG4gICAgICAgIGxldCBiZWFyaW5nRGlyID0gMDtcbiAgICAgICAgbGV0IHBpdGNoRGlyID0gMDtcbiAgICAgICAgbGV0IHhEaXIgPSAwO1xuICAgICAgICBsZXQgeURpciA9IDA7XG5cbiAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgIGNhc2UgMTcxOlxuICAgICAgICBjYXNlIDE4NzpcbiAgICAgICAgICAgIHpvb21EaXIgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxODk6XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICBjYXNlIDE3MzpcbiAgICAgICAgICAgIHpvb21EaXIgPSAtMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGJlYXJpbmdEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGJlYXJpbmdEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeERpciA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBwaXRjaERpciA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB5RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBwaXRjaERpciA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5RGlyID0gMTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuICAgICAgICBjb25zdCB6b29tID0gbWFwLmdldFpvb20oKTtcblxuICAgICAgICBjb25zdCBlYXNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICBkZWxheUVuZEV2ZW50czogNTAwLFxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0LFxuXG4gICAgICAgICAgICB6b29tOiB6b29tRGlyID8gTWF0aC5yb3VuZCh6b29tKSArIHpvb21EaXIgKiAoZS5zaGlmdEtleSA/IDIgOiAxKSA6IHpvb20sXG4gICAgICAgICAgICBiZWFyaW5nOiBtYXAuZ2V0QmVhcmluZygpICsgYmVhcmluZ0RpciAqIGJlYXJpbmdTdGVwLFxuICAgICAgICAgICAgcGl0Y2g6IG1hcC5nZXRQaXRjaCgpICsgcGl0Y2hEaXIgKiBwaXRjaFN0ZXAsXG4gICAgICAgICAgICBvZmZzZXQ6IFsteERpciAqIHBhblN0ZXAsIC15RGlyICogcGFuU3RlcF0sXG4gICAgICAgICAgICBjZW50ZXI6IG1hcC5nZXRDZW50ZXIoKVxuICAgICAgICB9O1xuXG4gICAgICAgIG1hcC5lYXNlVG8oZWFzZU9wdGlvbnMsIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlYXNlT3V0KHQpIHtcbiAgICByZXR1cm4gdCAqICgyIC0gdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtleWJvYXJkSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gdHdvIHRhcCBQb2ludHMgZm9yIHRoZW0gdG8gcXVhbGlmeSBhcyBhIGRvdWJsZS10YXBcbmNvbnN0IG1heERpc3QgPSAzMDtcblxuLyoqXG4gKiBUaGUgYERvdWJsZUNsaWNrWm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgYXQgYSBwb2ludCBieVxuICogZG91YmxlIGNsaWNraW5nIG9yIGRvdWJsZSB0YXBwaW5nLlxuICovXG5jbGFzcyBEb3VibGVDbGlja1pvb21IYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfdGFwcGVkOiA/VGltZW91dElEO1xuICAgIF90YXBwZWRQb2ludDogP1BvaW50O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uRGJsQ2xpY2snLFxuICAgICAgICAgICAgJ19vblpvb21FbmQnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Ub3VjaFN0YXJ0KGU6IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmIChlLnBvaW50cy5sZW5ndGggPiAxKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YXBwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhcHBlZFBvaW50ID0gZS5wb2ludHNbMF07XG4gICAgICAgICAgICB0aGlzLl90YXBwZWQgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5fdGFwcGVkID0gbnVsbDsgdGhpcy5fdGFwcGVkUG9pbnQgPSBudWxsOyB9LCAzMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3VGFwID0gZS5wb2ludHNbMF07XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRhcCA9IHRoaXMuX3RhcHBlZFBvaW50O1xuXG4gICAgICAgICAgICBpZiAoZmlyc3RUYXAgJiYgZmlyc3RUYXAuZGlzdChuZXdUYXApIDw9IG1heERpc3QpIHtcbiAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudCBkdXBsaWNhdGUgem9vbSBvbiBkYmxjbGlja1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25Ub3VjaEVuZCA9ICgpID0+IHsgLy8gaWdub3JlIHRoZSB0b3VjaGVuZCBldmVudCwgYXMgaXQgaGFzIG5vIHBvaW50IHdlIGNhbiB6b29tIHRvXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YXBwZWQpIHsgLy8gbWFrZSBzdXJlIHdlIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHRpbWVvdXQgd2luZG93XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl96b29tKGUpOyAvLyBwYXNzIHRoZSBvcmlnaW5hbCB0b3VjaHN0YXJ0IGV2ZW50LCB3aXRoIHRoZSB0YXBwZWQgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGNhbmNlbCcsIG9uVG91Y2hDYW5jZWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvblRvdWNoQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRhcHBlZCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hjYW5jZWwnLCBvblRvdWNoQ2FuY2VsKTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gdG91Y2hlcyBhcmUgdG9vIGZhciBhcGFydCwgZG9uJ3Qgem9vbVxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VGFwcGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVzZXRUYXBwZWQoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpO1xuICAgICAgICB0aGlzLl90YXBwZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl90YXBwZWRQb2ludCA9IG51bGw7XG4gICAgfVxuXG4gICAgb25EYmxDbGljayhlOiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICBlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fem9vbShlKTtcbiAgICB9XG5cbiAgICBfem9vbShlOiBNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9tYXAub24oJ3pvb21lbmQnLCB0aGlzLl9vblpvb21FbmQpO1xuICAgICAgICB0aGlzLl9tYXAuem9vbVRvKFxuICAgICAgICAgICAgdGhpcy5fbWFwLmdldFpvb20oKSArIChlLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgPyAtMSA6IDEpLFxuICAgICAgICAgICAge2Fyb3VuZDogZS5sbmdMYXR9LFxuICAgICAgICAgICAgZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9vblpvb21FbmQoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tZW5kJywgdGhpcy5fb25ab29tRW5kKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7YmV6aWVyLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi8uLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi8uLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIExuZ0xhdCBmcm9tICcuLi8uLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi8uLi91dGlsL3Rhc2tfcXVldWUnO1xuXG5jb25zdCBpbmVydGlhTGluZWFyaXR5ID0gMC4xNSxcbiAgICBpbmVydGlhRWFzaW5nID0gYmV6aWVyKDAsIDAsIGluZXJ0aWFMaW5lYXJpdHksIDEpLFxuICAgIGluZXJ0aWFEZWNlbGVyYXRpb24gPSAxMiwgLy8gc2NhbGUgLyBzXjJcbiAgICBpbmVydGlhTWF4U3BlZWQgPSAyLjUsIC8vIHNjYWxlIC8gc1xuICAgIHNpZ25pZmljYW50U2NhbGVUaHJlc2hvbGQgPSAwLjE1LFxuICAgIHNpZ25pZmljYW50Um90YXRlVGhyZXNob2xkID0gMTA7XG5cbi8qKlxuICogVGhlIGBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBhbmQgcm90YXRlIHRoZSBtYXAgYnlcbiAqIHBpbmNoaW5nIG9uIGEgdG91Y2hzY3JlZW4uXG4gKi9cbmNsYXNzIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hcm91bmRDZW50ZXI6IGJvb2xlYW47XG4gICAgX3JvdGF0aW9uRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgX3N0YXJ0VmVjOiBQb2ludDtcbiAgICBfc3RhcnRBcm91bmQ6IExuZ0xhdDtcbiAgICBfc3RhcnRTY2FsZTogbnVtYmVyO1xuICAgIF9zdGFydEJlYXJpbmc6IG51bWJlcjtcbiAgICBfZ2VzdHVyZUludGVudDogJ3JvdGF0ZScgfCAnem9vbScgfCB2b2lkO1xuICAgIF9pbmVydGlhOiBBcnJheTxbbnVtYmVyLCBudW1iZXIsIFBvaW50XT47XG4gICAgX2xhc3RUb3VjaEV2ZW50OiBUb3VjaEV2ZW50O1xuICAgIF9mcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ19vbkVuZCcsXG4gICAgICAgICAgICAnX29uVG91Y2hGcmFtZSdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcm91bmRdIElmIFwiY2VudGVyXCIgaXMgcGFzc2VkLCBtYXAgd2lsbCB6b29tIGFyb3VuZCB0aGUgY2VudGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pO1xuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiA/e2Fyb3VuZD86ICdjZW50ZXInfSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZScpO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gISFvcHRpb25zICYmIG9wdGlvbnMuYXJvdW5kID09PSAnY2VudGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUnKTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLCBsZWF2aW5nIHRoZSBcInBpbmNoIHRvIHpvb21cIlxuICAgICAqIGludGVyYWN0aW9uIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5kaXNhYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlUm90YXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZW5hYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBlbmFibGVSb3RhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGFuZGxlciBpcyBlbmFibGVkIGFuZCBoYXMgZGV0ZWN0ZWQgdGhlIHN0YXJ0IG9mIGEgem9vbS9yb3RhdGUgZ2VzdHVyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICogQG1lbWJlcm9mIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJcbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbmFibGVkKCkgJiYgISF0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgIH1cblxuICAgIG9uU3RhcnQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggIT09IDIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwMCA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzBdKSxcbiAgICAgICAgICAgIHAxID0gRE9NLm1vdXNlUG9zKHRoaXMuX2VsLCBlLnRvdWNoZXNbMV0pLFxuICAgICAgICAgICAgY2VudGVyID0gcDAuYWRkKHAxKS5kaXYoMik7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRWZWMgPSBwMC5zdWIocDEpO1xuICAgICAgICB0aGlzLl9zdGFydEFyb3VuZCA9IHRoaXMuX21hcC50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihjZW50ZXIpO1xuICAgICAgICB0aGlzLl9nZXN0dXJlSW50ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pbmVydGlhID0gW107XG5cbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkVuZCk7XG4gICAgfVxuXG4gICAgX2dldFRvdWNoRXZlbnREYXRhKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcDAgPSBET00ubW91c2VQb3ModGhpcy5fZWwsIGUudG91Y2hlc1swXSksXG4gICAgICAgICAgICBwMSA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZS50b3VjaGVzWzFdKTtcblxuICAgICAgICBjb25zdCB2ZWMgPSBwMC5zdWIocDEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmVjLFxuICAgICAgICAgICAgY2VudGVyOiBwMC5hZGQocDEpLmRpdigyKSxcbiAgICAgICAgICAgIHNjYWxlOiB2ZWMubWFnKCkgLyB0aGlzLl9zdGFydFZlYy5tYWcoKSxcbiAgICAgICAgICAgIGJlYXJpbmc6IHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPyAwIDogdmVjLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykgKiAxODAgLyBNYXRoLlBJXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX29uTW92ZShlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qge3ZlYywgc2NhbGUsIGJlYXJpbmd9ID0gdGhpcy5fZ2V0VG91Y2hFdmVudERhdGEoZSk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lICdpbnRlbnQnIGJ5IHdoaWNoZXZlciB0aHJlc2hvbGQgaXMgc3VycGFzc2VkIGZpcnN0LFxuICAgICAgICAvLyB0aGVuIGtlZXAgdGhhdCBzdGF0ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgZ2VzdHVyZS5cbiAgICAgICAgaWYgKCF0aGlzLl9nZXN0dXJlSW50ZW50KSB7XG4gICAgICAgICAgICAvLyB3aGVuIHJvdGF0aW9uIGlzIGRpc2FibGVkLCBhbnkgc2NhbGUgY2hhbmdlIHRyaWdnZXJzIHRoZSB6b29tIGdlc3R1cmUgdG8gc3RhcnRcbiAgICAgICAgICAgIGNvbnN0IHNjYWxpbmdTaWduaWZpY2FudGx5ID0gKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgJiYgc2NhbGUgIT09IDEpIHx8IChNYXRoLmFicygxIC0gc2NhbGUpID4gc2lnbmlmaWNhbnRTY2FsZVRocmVzaG9sZCksXG4gICAgICAgICAgICAgICAgcm90YXRpbmdTaWduaWZpY2FudGx5ID0gKE1hdGguYWJzKGJlYXJpbmcpID4gc2lnbmlmaWNhbnRSb3RhdGVUaHJlc2hvbGQpO1xuXG4gICAgICAgICAgICBpZiAocm90YXRpbmdTaWduaWZpY2FudGx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VzdHVyZUludGVudCA9ICdyb3RhdGUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY2FsaW5nU2lnbmlmaWNhbnRseSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlc3R1cmVJbnRlbnQgPSAnem9vbSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9nZXN0dXJlSW50ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KGAke3RoaXMuX2dlc3R1cmVJbnRlbnR9c3RhcnRgLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0VmVjID0gdmVjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdFRvdWNoRXZlbnQgPSBlO1xuICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIF9vblRvdWNoRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IGdlc3R1cmVJbnRlbnQgPSB0aGlzLl9nZXN0dXJlSW50ZW50O1xuICAgICAgICBpZiAoIWdlc3R1cmVJbnRlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgaWYgKCF0aGlzLl9zdGFydFNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFNjYWxlID0gdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl9zdGFydEJlYXJpbmcgPSB0ci5iZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2NlbnRlciwgYmVhcmluZywgc2NhbGV9ID0gdGhpcy5fZ2V0VG91Y2hFdmVudERhdGEodGhpcy5fbGFzdFRvdWNoRXZlbnQpO1xuICAgICAgICBjb25zdCBhcm91bmQgPSB0ci5wb2ludExvY2F0aW9uKGNlbnRlcik7XG4gICAgICAgIGNvbnN0IGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuXG4gICAgICAgIGlmIChnZXN0dXJlSW50ZW50ID09PSAncm90YXRlJykge1xuICAgICAgICAgICAgdHIuYmVhcmluZyA9IHRoaXMuX3N0YXJ0QmVhcmluZyArIGJlYXJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0ci56b29tID0gdHIuc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUgKiBzY2FsZSk7XG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9zdGFydEFyb3VuZCwgYXJvdW5kUG9pbnQpO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudChnZXN0dXJlSW50ZW50LCB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFRvdWNoRXZlbnR9KSk7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnbW92ZScsIHtvcmlnaW5hbEV2ZW50OiB0aGlzLl9sYXN0VG91Y2hFdmVudH0pKTtcblxuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5faW5lcnRpYS5wdXNoKFticm93c2VyLm5vdygpLCBzY2FsZSwgY2VudGVyXSk7XG4gICAgfVxuXG4gICAgX29uRW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkVuZCk7XG5cbiAgICAgICAgY29uc3QgZ2VzdHVyZUludGVudCA9IHRoaXMuX2dlc3R1cmVJbnRlbnQ7XG4gICAgICAgIGNvbnN0IHN0YXJ0U2NhbGUgPSB0aGlzLl9zdGFydFNjYWxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2dlc3R1cmVJbnRlbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFNjYWxlO1xuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRCZWFyaW5nO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFRvdWNoRXZlbnQ7XG5cbiAgICAgICAgaWYgKCFnZXN0dXJlSW50ZW50KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KGAke2dlc3R1cmVJbnRlbnR9ZW5kYCwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG5cbiAgICAgICAgdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7XG5cbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWEsXG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgbWFwLnNuYXBUb05vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdCA9IGluZXJ0aWFbaW5lcnRpYS5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIGZpcnN0ID0gaW5lcnRpYVswXSxcbiAgICAgICAgICAgIGxhc3RTY2FsZSA9IG1hcC50cmFuc2Zvcm0uc2NhbGVab29tKHN0YXJ0U2NhbGUgKiBsYXN0WzFdKSxcbiAgICAgICAgICAgIGZpcnN0U2NhbGUgPSBtYXAudHJhbnNmb3JtLnNjYWxlWm9vbShzdGFydFNjYWxlICogZmlyc3RbMV0pLFxuICAgICAgICAgICAgc2NhbGVPZmZzZXQgPSBsYXN0U2NhbGUgLSBmaXJzdFNjYWxlLFxuICAgICAgICAgICAgc2NhbGVEdXJhdGlvbiA9IChsYXN0WzBdIC0gZmlyc3RbMF0pIC8gMTAwMCxcbiAgICAgICAgICAgIHAgPSBsYXN0WzJdO1xuXG4gICAgICAgIGlmIChzY2FsZUR1cmF0aW9uID09PSAwIHx8IGxhc3RTY2FsZSA9PT0gZmlyc3RTY2FsZSkge1xuICAgICAgICAgICAgbWFwLnNuYXBUb05vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHNjYWxlL3Mgc3BlZWQgYW5kIGFkanVzdCBmb3IgaW5jcmVhc2VkIGluaXRpYWwgYW5pbWF0aW9uIHNwZWVkIHdoZW4gZWFzaW5nXG4gICAgICAgIGxldCBzcGVlZCA9IHNjYWxlT2Zmc2V0ICogaW5lcnRpYUxpbmVhcml0eSAvIHNjYWxlRHVyYXRpb247IC8vIHNjYWxlL3NcblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3BlZWQpID4gaW5lcnRpYU1heFNwZWVkKSB7XG4gICAgICAgICAgICBpZiAoc3BlZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc3BlZWQgPSBpbmVydGlhTWF4U3BlZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwZWVkID0gLWluZXJ0aWFNYXhTcGVlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5hYnMoc3BlZWQgLyAoaW5lcnRpYURlY2VsZXJhdGlvbiAqIGluZXJ0aWFMaW5lYXJpdHkpKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IHRhcmdldFNjYWxlID0gbGFzdFNjYWxlICsgc3BlZWQgKiBkdXJhdGlvbiAvIDIwMDA7XG5cbiAgICAgICAgbWFwLmVhc2VUbyh7XG4gICAgICAgICAgICB6b29tOiB0YXJnZXRTY2FsZSxcbiAgICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nOiBpbmVydGlhRWFzaW5nLFxuICAgICAgICAgICAgYXJvdW5kOiB0aGlzLl9hcm91bmRDZW50ZXIgPyBtYXAuZ2V0Q2VudGVyKCkgOiBtYXAudW5wcm9qZWN0KHApLFxuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICB9XG5cbiAgICBfZHJhaW5JbmVydGlhQnVmZmVyKCkge1xuICAgICAgICBjb25zdCBpbmVydGlhID0gdGhpcy5faW5lcnRpYSxcbiAgICAgICAgICAgIG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICBjdXRvZmYgPSAxNjA7IC8vIG1zZWNcblxuICAgICAgICB3aGlsZSAoaW5lcnRpYS5sZW5ndGggPiAyICYmIG5vdyAtIGluZXJ0aWFbMF1bMF0gPiBjdXRvZmYpIGluZXJ0aWEuc2hpZnQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge01hcE1vdXNlRXZlbnQsIE1hcFRvdWNoRXZlbnQsIE1hcFdoZWVsRXZlbnR9IGZyb20gJy4uL3VpL2V2ZW50cyc7XG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgc2Nyb2xsWm9vbSBmcm9tICcuL2hhbmRsZXIvc2Nyb2xsX3pvb20nO1xuaW1wb3J0IGJveFpvb20gZnJvbSAnLi9oYW5kbGVyL2JveF96b29tJztcbmltcG9ydCBkcmFnUm90YXRlIGZyb20gJy4vaGFuZGxlci9kcmFnX3JvdGF0ZSc7XG5pbXBvcnQgZHJhZ1BhbiBmcm9tICcuL2hhbmRsZXIvZHJhZ19wYW4nO1xuaW1wb3J0IGtleWJvYXJkIGZyb20gJy4vaGFuZGxlci9rZXlib2FyZCc7XG5pbXBvcnQgZG91YmxlQ2xpY2tab29tIGZyb20gJy4vaGFuZGxlci9kYmxjbGlja196b29tJztcbmltcG9ydCB0b3VjaFpvb21Sb3RhdGUgZnJvbSAnLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlJztcblxuY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgc2Nyb2xsWm9vbSxcbiAgICBib3hab29tLFxuICAgIGRyYWdSb3RhdGUsXG4gICAgZHJhZ1BhbixcbiAgICBrZXlib2FyZCxcbiAgICBkb3VibGVDbGlja1pvb20sXG4gICAgdG91Y2hab29tUm90YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kSGFuZGxlcnMobWFwOiBNYXAsIG9wdGlvbnM6IHtpbnRlcmFjdGl2ZTogYm9vbGVhbiwgY2xpY2tUb2xlcmFuY2U6IG51bWJlcn0pIHtcbiAgICBjb25zdCBlbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICBsZXQgY29udGV4dE1lbnVFdmVudCA9IG51bGw7XG4gICAgbGV0IG1vdXNlRG93biA9IGZhbHNlO1xuICAgIGxldCBzdGFydFBvcyA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gaGFuZGxlcnMpIHtcbiAgICAgICAgKG1hcDogYW55KVtuYW1lXSA9IG5ldyBoYW5kbGVyc1tuYW1lXShtYXAsIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBvcHRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICAobWFwOiBhbnkpW25hbWVdLmVuYWJsZShvcHRpb25zW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnbW91c2VvdXQnLCBvbk1vdXNlT3V0KTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnbW91c2VvdmVyJywgb25Nb3VzZU92ZXIpO1xuXG4gICAgLy8gQmluZCB0b3VjaHN0YXJ0IGFuZCB0b3VjaG1vdmUgd2l0aCBwYXNzaXZlOiBmYWxzZSBiZWNhdXNlLCBldmVuIHRob3VnaFxuICAgIC8vIHRoZXkgb25seSBmaXJlIGEgbWFwIGV2ZW50cyBhbmQgdGhlcmVmb3JlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmVcbiAgICAvLyBwYXNzaXZlLCBiaW5kaW5nIHdpdGggcGFzc2l2ZTogdHJ1ZSBjYXVzZXMgaU9TIG5vdCB0byByZXNwZWN0XG4gICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpIGluIF9vdGhlcl8gaGFuZGxlcnMsIGV2ZW4gaWYgdGhleSBhcmUgbm9uLXBhc3NpdmVcbiAgICAvLyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNTEpXG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCB7cGFzc2l2ZTogZmFsc2V9KTtcblxuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ3RvdWNoY2FuY2VsJywgb25Ub3VjaENhbmNlbCk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjbGljaycsIG9uQ2xpY2spO1xuICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsLCAnZGJsY2xpY2snLCBvbkRibENsaWNrKTtcbiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NvbnRleHRtZW51Jywgb25Db250ZXh0TWVudSk7XG4gICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWwsICd3aGVlbCcsIG9uV2hlZWwsIHtwYXNzaXZlOiBmYWxzZX0pO1xuXG4gICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBzdGFydFBvcyA9IERPTS5tb3VzZVBvcyhlbCwgZSk7XG5cbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwTW91c2VFdmVudCgnbW91c2Vkb3duJywgbWFwLCBlKTtcbiAgICAgICAgbWFwLmZpcmUobWFwRXZlbnQpO1xuXG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiAhbWFwLmRvdWJsZUNsaWNrWm9vbS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBtYXAuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLmJveFpvb20ub25Nb3VzZURvd24oZSk7XG5cbiAgICAgICAgaWYgKCFtYXAuYm94Wm9vbS5pc0FjdGl2ZSgpICYmICFtYXAuZHJhZ1Bhbi5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5vbk1vdXNlRG93bihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWFwLmJveFpvb20uaXNBY3RpdmUoKSAmJiAhbWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLmRyYWdQYW4ub25Nb3VzZURvd24oZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlVXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCByb3RhdGluZyA9IG1hcC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7XG5cbiAgICAgICAgaWYgKGNvbnRleHRNZW51RXZlbnQgJiYgIXJvdGF0aW5nKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIE1hY1xuICAgICAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NvbnRleHRtZW51JywgbWFwLCBjb250ZXh0TWVudUV2ZW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0TWVudUV2ZW50ID0gbnVsbDtcbiAgICAgICAgbW91c2VEb3duID0gZmFsc2U7XG5cbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNldXAnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChtYXAuZHJhZ1Bhbi5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgIGlmIChtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHRhcmdldDogP05vZGUgPSAoZS50YXJnZXQ6IGFueSk7XG4gICAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBlbCkgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IGVsKSByZXR1cm47XG5cbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgbGV0IHRhcmdldDogP05vZGUgPSAoZS50YXJnZXQ6IGFueSk7XG4gICAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBlbCkgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IGVsKSByZXR1cm47XG5cbiAgICAgICAgbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ21vdXNlb3ZlcicsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2VPdXQoZTogTW91c2VFdmVudCkge1xuICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnbW91c2VvdXQnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBjb25zdCBtYXBFdmVudCA9IG5ldyBNYXBUb3VjaEV2ZW50KCd0b3VjaHN0YXJ0JywgbWFwLCBlKTtcbiAgICAgICAgbWFwLmZpcmUobWFwRXZlbnQpO1xuXG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgbWFwLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWFwLmJveFpvb20uaXNBY3RpdmUoKSAmJiAhbWFwLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgbWFwLmRyYWdQYW4ub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5vblN0YXJ0KGUpO1xuICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLm9uVG91Y2hTdGFydChtYXBFdmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Ub3VjaE1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBtYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudCgndG91Y2htb3ZlJywgbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Ub3VjaEVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIG1hcC5maXJlKG5ldyBNYXBUb3VjaEV2ZW50KCd0b3VjaGVuZCcsIG1hcCwgZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uVG91Y2hDYW5jZWwoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBtYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudCgndG91Y2hjYW5jZWwnLCBtYXAsIGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkNsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gRE9NLm1vdXNlUG9zKGVsLCBlKTtcbiAgICAgICAgaWYgKCFzdGFydFBvcyB8fCBwb3MuZXF1YWxzKHN0YXJ0UG9zKSB8fCBwb3MuZGlzdChzdGFydFBvcykgPCBvcHRpb25zLmNsaWNrVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnY2xpY2snLCBtYXAsIGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uRGJsQ2xpY2soZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBtYXBFdmVudCA9IG5ldyBNYXBNb3VzZUV2ZW50KCdkYmxjbGljaycsIG1hcCwgZSk7XG4gICAgICAgIG1hcC5maXJlKG1hcEV2ZW50KTtcblxuICAgICAgICBpZiAobWFwRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLmRvdWJsZUNsaWNrWm9vbS5vbkRibENsaWNrKG1hcEV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm90YXRpbmcgPSBtYXAuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO1xuICAgICAgICBpZiAoIW1vdXNlRG93biAmJiAhcm90YXRpbmcpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3M6IGNvbnRleHRtZW51IGZpcmVkIG9uIG1vdXNldXAsIHNvIGZpcmUgZXZlbnQgbm93XG4gICAgICAgICAgICBtYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudCgnY29udGV4dG1lbnUnLCBtYXAsIGUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3VzZURvd24pIHtcbiAgICAgICAgICAgIC8vIE1hYzogY29udGV4dG1lbnUgZmlyZWQgb24gbW91c2Vkb3duOyB3ZSBzYXZlIGl0IHVudGlsIG1vdXNldXAgZm9yIGNvbnNpc3RlbmN5J3Mgc2FrZVxuICAgICAgICAgICAgY29udGV4dE1lbnVFdmVudCA9IGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcmV2ZW50IGJyb3dzZXIgY29udGV4dCBtZW51IHdoZW4gbmVjZXNzYXJ5OyB3ZSBkb24ndCBhbGxvdyBpdCB3aXRoIHJvdGF0aW9uXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgY2FuJ3QgZGlzY2VybiByb3RhdGlvbiBnZXN0dXJlIHN0YXJ0IGZyb20gY29udGV4dG1lbnUgb24gTWFjXG4gICAgICAgIGlmIChtYXAuZHJhZ1JvdGF0ZS5pc0VuYWJsZWQoKSB8fCBtYXAubGlzdGVucygnY29udGV4dG1lbnUnKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25XaGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBtYXAuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwRXZlbnQgPSBuZXcgTWFwV2hlZWxFdmVudCgnd2hlZWwnLCBtYXAsIGUpO1xuICAgICAgICBtYXAuZmlyZShtYXBFdmVudCk7XG5cbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5zY3JvbGxab29tLm9uV2hlZWwoZSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBiaW5kQWxsLFxuICAgIGV4dGVuZCxcbiAgICB3YXJuT25jZSxcbiAgICBjbGFtcCxcbiAgICB3cmFwLFxuICAgIGVhc2UgYXMgZGVmYXVsdEVhc2luZyxcbiAgICBwaWNrXG59IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0Qm91bmRzTGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uL3V0aWwvdGFza19xdWV1ZSc7XG5pbXBvcnQgdHlwZSB7UG9pbnRMaWtlfSBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtQYWRkaW5nT3B0aW9uc30gZnJvbSAnLi4vZ2VvL2VkZ2VfaW5zZXRzJztcblxuLyoqXG4gKiBPcHRpb25zIGNvbW1vbiB0byB7QGxpbmsgTWFwI2p1bXBUb30sIHtAbGluayBNYXAjZWFzZVRvfSwgYW5kIHtAbGluayBNYXAjZmx5VG99LCBjb250cm9sbGluZyB0aGUgZGVzaXJlZCBsb2NhdGlvbixcbiAqIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCBvZiB0aGUgY2FtZXJhLiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGFuZCB3aGVuIGEgcHJvcGVydHkgaXMgb21pdHRlZCwgdGhlIGN1cnJlbnRcbiAqIGNhbWVyYSB2YWx1ZSBmb3IgdGhhdCBwcm9wZXJ0eSB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FtZXJhT3B0aW9uc1xuICogQHByb3BlcnR5IHtMbmdMYXRMaWtlfSBjZW50ZXIgVGhlIGRlc2lyZWQgY2VudGVyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHpvb20gVGhlIGRlc2lyZWQgem9vbSBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcsIGluIGRlZ3JlZXMuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0XG4gKiBpcyBcInVwXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmcgb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGl0Y2ggVGhlIGRlc2lyZWQgcGl0Y2gsIGluIGRlZ3JlZXMuXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGFyb3VuZCBJZiBgem9vbWAgaXMgc3BlY2lmaWVkLCBgYXJvdW5kYCBkZXRlcm1pbmVzIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggdGhlIHpvb20gaXMgY2VudGVyZWQuXG4gKiBAcHJvcGVydHkge1BhZGRpbmdPcHRpb25zfSBwYWRkaW5nIERpbWVuc2lvbnMgaW4gcGl4ZWxzIGFwcGxpZWQgb24gZWFjaHMgc2lkZSBvZiB0aGUgdmlld3BvcnQgZm9yIHNoaWZ0aW5nIHRoZSB2YW5pc2hpbmcgcG9pbnQuXG4gKi9cbmV4cG9ydCB0eXBlIENhbWVyYU9wdGlvbnMgPSB7XG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgYXJvdW5kPzogTG5nTGF0TGlrZSxcbiAgICBwYWRkaW5nPzogUGFkZGluZ09wdGlvbnNcbn07XG5cbi8qKlxuICogT3B0aW9ucyBjb21tb24gdG8gbWFwIG1vdmVtZW50IG1ldGhvZHMgdGhhdCBpbnZvbHZlIGFuaW1hdGlvbiwgc3VjaCBhcyB7QGxpbmsgTWFwI3BhbkJ5fSBhbmRcbiAqIHtAbGluayBNYXAjZWFzZVRvfSwgY29udHJvbGxpbmcgdGhlIGR1cmF0aW9uIGFuZCBlYXNpbmcgZnVuY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gQWxsIHByb3BlcnRpZXNcbiAqIGFyZSBvcHRpb25hbC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmltYXRpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gZHVyYXRpb24gVGhlIGFuaW1hdGlvbidzIGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBlYXNpbmcgQSBmdW5jdGlvbiB0YWtpbmcgYSB0aW1lIGluIHRoZSByYW5nZSAwLi4xIGFuZCByZXR1cm5pbmcgYSBudW1iZXIgd2hlcmUgMCBpc1xuICogICB0aGUgaW5pdGlhbCBzdGF0ZSBhbmQgMSBpcyB0aGUgZmluYWwgc3RhdGUuXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZX0gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgY2VudGVyIHJlbGF0aXZlIHRvIHJlYWwgbWFwIGNvbnRhaW5lciBjZW50ZXIgYXQgdGhlIGVuZCBvZiBhbmltYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFuaW1hdGUgSWYgYGZhbHNlYCwgbm8gYW5pbWF0aW9uIHdpbGwgb2NjdXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVzc2VudGlhbCBJZiBgdHJ1ZWAsIHRoZW4gdGhlIGFuaW1hdGlvbiBpcyBjb25zaWRlcmVkIGVzc2VudGlhbCBhbmQgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnlcbiAqICAgW2BwcmVmZXJzLXJlZHVjZWQtbW90aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0BtZWRpYS9wcmVmZXJzLXJlZHVjZWQtbW90aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgQW5pbWF0aW9uT3B0aW9ucyA9IHtcbiAgICBkdXJhdGlvbj86IG51bWJlcixcbiAgICBlYXNpbmc/OiAoXzogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgb2Zmc2V0PzogUG9pbnRMaWtlLFxuICAgIGFuaW1hdGU/OiBib29sZWFuLFxuICAgIGVzc2VudGlhbD86IGJvb2xlYW5cbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2V0dGluZyBwYWRkaW5nIG9uIGEgY2FsbCB0byB7QGxpbmsgTWFwI2ZpdEJvdW5kc30uIEFsbCBwcm9wZXJ0aWVzIG9mIHRoaXMgb2JqZWN0IG11c3QgYmVcbiAqIG5vbi1uZWdhdGl2ZSBpbnRlZ2Vycy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYWRkaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgbWFwIGNhbnZhcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIG1hcCBjYW52YXMuXG4gKi9cblxuY2xhc3MgQ2FtZXJhIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX21vdmluZzogYm9vbGVhbjtcbiAgICBfem9vbWluZzogYm9vbGVhbjtcbiAgICBfcm90YXRpbmc6IGJvb2xlYW47XG4gICAgX3BpdGNoaW5nOiBib29sZWFuO1xuICAgIF9wYWRkaW5nOiBib29sZWFuO1xuXG4gICAgX2JlYXJpbmdTbmFwOiBudW1iZXI7XG4gICAgX2Vhc2VFbmRUaW1lb3V0SUQ6IFRpbWVvdXRJRDtcbiAgICBfZWFzZVN0YXJ0OiBudW1iZXI7XG4gICAgX2Vhc2VPcHRpb25zOiB7ZHVyYXRpb246IG51bWJlciwgZWFzaW5nOiAoXzogbnVtYmVyKSA9PiBudW1iZXJ9O1xuXG4gICAgX29uRWFzZUZyYW1lOiAoXzogbnVtYmVyKSA9PiB2b2lkO1xuICAgIF9vbkVhc2VFbmQ6ICgpID0+IHZvaWQ7XG4gICAgX2Vhc2VGcmFtZUlkOiA/VGFza0lEO1xuXG4gICAgK19yZXF1ZXN0UmVuZGVyRnJhbWU6ICgoKSA9PiB2b2lkKSA9PiBUYXNrSUQ7XG4gICAgK19jYW5jZWxSZW5kZXJGcmFtZTogKF86IFRhc2tJRCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogVHJhbnNmb3JtLCBvcHRpb25zOiB7YmVhcmluZ1NuYXA6IG51bWJlcn0pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcDtcblxuICAgICAgICBiaW5kQWxsKFsnX3JlbmRlckZyYW1lQ2FsbGJhY2snXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqL1xuICAgIGdldENlbnRlcigpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nLCB0aGlzLnRyYW5zZm9ybS5jZW50ZXIubGF0KTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2NlbnRlcjogY2VudGVyfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gY2VudGVyIFRoZSBjZW50ZXJwb2ludCB0byBzZXQuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldENlbnRlcihbLTc0LCAzOF0pO1xuICAgICAqL1xuICAgIHNldENlbnRlcihjZW50ZXI6IExuZ0xhdExpa2UsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcn0sIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIGJ5IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIGJ5IHdoaWNoIHRvIHBhbiB0aGUgbWFwLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgcGFuQnkob2Zmc2V0OiBQb2ludExpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgb2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpLm11bHQoLTEpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsIGV4dGVuZCh7b2Zmc2V0fSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24sIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGxuZ2xhdCBUaGUgbG9jYXRpb24gdG8gcGFuIHRoZSBtYXAgdG8uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcGFuVG8obG5nbGF0OiBMbmdMYXRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgY2VudGVyOiBsbmdsYXRcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIGdldFpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHpvb20gbGV2ZWwuIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7em9vbTogem9vbX0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gc2V0ICgwLTIwKS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gem9vbSB0aGUgbWFwIHRvIDVcbiAgICAgKiBtYXAuc2V0Wm9vbSg1KTtcbiAgICAgKi9cbiAgICBzZXRab29tKHpvb206IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHt6b29tfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWm9vbXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIHpvb20gbGV2ZWwsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gdHJhbnNpdGlvbiB0by5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgem9vbVRvKHpvb206IG51bWJlciwgb3B0aW9uczogPyBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICB6b29tXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlYXNlcyB0aGUgbWFwJ3Mgem9vbSBsZXZlbCBieSAxLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgem9vbUluKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkgKyAxLCBvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZWFzZXMgdGhlIG1hcCdzIHpvb20gbGV2ZWwgYnkgMS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHpvb21PdXQob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSAtIDEsIG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgYmVhcmluZy4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZ1xuICAgICAqIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCBiZWFyaW5nLlxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgZ2V0QmVhcmluZygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZzsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgYmVhcmluZyAocm90YXRpb24pLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb24gdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nXG4gICAgICogb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gICAgICpcbiAgICAgKiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2JlYXJpbmc6IGJlYXJpbmd9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gcm90YXRlIHRoZSBtYXAgdG8gOTAgZGVncmVlc1xuICAgICAqIG1hcC5zZXRCZWFyaW5nKDkwKTtcbiAgICAgKi9cbiAgICBzZXRCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtiZWFyaW5nfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwYWRkaW5nIGFwcGxpZWQgYXJvdW5kIHRoZSBtYXAgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHBhZGRpbmcgYXJvdW5kIHRoZSBtYXAgdmlld3BvcnQuXG4gICAgICovXG4gICAgZ2V0UGFkZGluZygpOiBQYWRkaW5nT3B0aW9ucyB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5wYWRkaW5nOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWRkaW5nIGluIHBpeGVscyBhcm91bmQgdGhlIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBganVtcFRvKHtwYWRkaW5nOiBwYWRkaW5nfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gcGFkZGluZyBUaGUgZGVzaXJlZCBwYWRkaW5nLiBGb3JtYXQ6IHsgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIgfVxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNldHMgYSBsZWZ0IHBhZGRpbmcgb2YgMzAwcHgsIGFuZCBhIHRvcCBwYWRkaW5nIG9mIDUwcHhcbiAgICAgKiBtYXAuc2V0UGFkZGluZyh7IGxlZnQ6IDMwMCwgdG9wOiA1MCB9KTtcbiAgICAgKi9cbiAgICBzZXRQYWRkaW5nKHBhZGRpbmc6IFBhZGRpbmdPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5qdW1wVG8oe3BhZGRpbmd9LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIHRoZSBtYXAgdG8gdGhlIHNwZWNpZmllZCBiZWFyaW5nLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvblxuICAgICAqIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZyBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByb3RhdGVUbyhiZWFyaW5nOiBudW1iZXIsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICBiZWFyaW5nXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgdGhlIG1hcCBzbyB0aGF0IG5vcnRoIGlzIHVwICgww4LCsCBiZWFyaW5nKSwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZXNldE5vcnRoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5yb3RhdGVUbygwLCBleHRlbmQoe2R1cmF0aW9uOiAxMDAwfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgYW5kIHBpdGNoZXMgdGhlIG1hcCBzbyB0aGF0IG5vcnRoIGlzIHVwICgww4LCsCBiZWFyaW5nKSBhbmQgcGl0Y2ggaXMgMMOCwrAsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVzZXROb3J0aFBpdGNoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAwXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbmFwcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpLCBpZiB0aGUgY3VycmVudCBiZWFyaW5nIGlzIGNsb3NlIGVub3VnaCB0byBpdCAoaS5lLiB3aXRoaW4gdGhlXG4gICAgICogYGJlYXJpbmdTbmFwYCB0aHJlc2hvbGQpLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzbmFwVG9Ob3J0aChvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSkgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzZXROb3J0aChvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2ggKHRpbHQpLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCBwaXRjaCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgZ2V0UGl0Y2goKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNoOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyBwaXRjaCAodGlsdCkuIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7cGl0Y2g6IHBpdGNofSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggVGhlIHBpdGNoIHRvIHNldCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4gKDAtNjApLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFBpdGNoKHBpdGNoOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7cGl0Y2h9LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gYm91bmRzIENhbGN1bGF0ZSB0aGUgY2VudGVyIGZvciB0aGVzZSBib3VuZHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2VcbiAgICAgKiAgICAgIHRoZSBoaWdoZXN0IHpvb20gbGV2ZWwgdXAgdG8gYW5kIGluY2x1ZGluZyBgTWFwI2dldE1heFpvb20oKWAgdGhhdCBmaXRzXG4gICAgICogICAgICBpbiB0aGUgdmlld3BvcnQuIExhdExuZ0JvdW5kcyByZXByZXNlbnQgYSBib3ggdGhhdCBpcyBhbHdheXMgYXhpcy1hbGlnbmVkIHdpdGggYmVhcmluZyAwLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBjYW1lcmEgd291bGQgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7Q2FtZXJhT3B0aW9ucyB8IHZvaWR9IElmIG1hcCBpcyBhYmxlIHRvIGZpdCB0byBwcm92aWRlZCBib3VuZHMsIHJldHVybnMgYENhbWVyYU9wdGlvbnNgIHdpdGhcbiAgICAgKiAgICAgIGBjZW50ZXJgLCBgem9vbWAsIGFuZCBgYmVhcmluZ2AuIElmIG1hcCBpcyB1bmFibGUgdG8gZml0LCBtZXRob2Qgd2lsbCB3YXJuIGFuZCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGJib3ggPSBbWy03OSwgNDNdLCBbLTczLCA0NV1dO1xuICAgICAqIHZhciBuZXdDYW1lcmFUcmFuc2Zvcm0gPSBtYXAuY2FtZXJhRm9yQm91bmRzKGJib3gsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBjYW1lcmFGb3JCb3VuZHMoYm91bmRzOiBMbmdMYXRCb3VuZHNMaWtlLCBvcHRpb25zPzogQ2FtZXJhT3B0aW9ucyk6IHZvaWQgfCBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyB7XG4gICAgICAgIGJvdW5kcyA9IExuZ0xhdEJvdW5kcy5jb252ZXJ0KGJvdW5kcyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKGJvdW5kcy5nZXROb3J0aFdlc3QoKSwgYm91bmRzLmdldFNvdXRoRWFzdCgpLCAwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNlbnRlciBvZiB0aGVzZSB0d28gcG9pbnRzIGluIHRoZSB2aWV3cG9ydCBhbmQgdXNlXG4gICAgICogdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHNcbiAgICAgKiB0aGUgcG9pbnRzIGluIHRoZSB2aWV3cG9ydCBhdCB0aGUgc3BlY2lmaWVkIGJlYXJpbmcuXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHAwIEZpcnN0IHBvaW50XG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBwMSBTZWNvbmQgcG9pbnRcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBEZXNpcmVkIG1hcCBiZWFyaW5nIGF0IGVuZCBvZiBhbmltYXRpb24sIGluIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgY2FtZXJhIHdvdWxkIHRyYW5zaXRpb24gdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHJldHVybnMge0NhbWVyYU9wdGlvbnMgfCB2b2lkfSBJZiBtYXAgaXMgYWJsZSB0byBmaXQgdG8gcHJvdmlkZWQgYm91bmRzLCByZXR1cm5zIGBDYW1lcmFPcHRpb25zYCB3aXRoXG4gICAgICogICAgICBgY2VudGVyYCwgYHpvb21gLCBhbmQgYGJlYXJpbmdgLiBJZiBtYXAgaXMgdW5hYmxlIHRvIGZpdCwgbWV0aG9kIHdpbGwgd2FybiBhbmQgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHAwID0gWy03OSwgNDNdO1xuICAgICAqIHZhciBwMSA9IFstNzMsIDQ1XTtcbiAgICAgKiB2YXIgYmVhcmluZyA9IDkwO1xuICAgICAqIHZhciBuZXdDYW1lcmFUcmFuc2Zvcm0gPSBtYXAuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcocDAsIHAxLCBiZWFyaW5nLCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICovXG4gICAgX2NhbWVyYUZvckJveEFuZEJlYXJpbmcocDA6IExuZ0xhdExpa2UsIHAxOiBMbmdMYXRMaWtlLCBiZWFyaW5nOiBudW1iZXIsIG9wdGlvbnM/OiBDYW1lcmFPcHRpb25zKTogdm9pZCB8IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhZGRpbmcgPSB7XG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBwYWRkaW5nOiBkZWZhdWx0UGFkZGluZyxcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbVxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFkZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSB7XG4gICAgICAgICAgICAgICAgdG9wOiBwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogcCxcbiAgICAgICAgICAgICAgICByaWdodDogcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiBwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gZXh0ZW5kKGRlZmF1bHRQYWRkaW5nLCBvcHRpb25zLnBhZGRpbmcpO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBjb25zdCBlZGdlUGFkZGluZyA9IHRyLnBhZGRpbmc7XG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHVwcGVyIHJpZ2h0IGFuZCBsb3dlciBsZWZ0IG9mIHRoZSBib3ggZGVmaW5lZCBieSBwMCBhbmQgcDFcbiAgICAgICAgLy8gaW4gYSBjb29yZGluYXRlIHN5c3RlbSByb3RhdGUgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIGJlYXJpbmcuXG4gICAgICAgIGNvbnN0IHAwd29ybGQgPSB0ci5wcm9qZWN0KExuZ0xhdC5jb252ZXJ0KHAwKSk7XG4gICAgICAgIGNvbnN0IHAxd29ybGQgPSB0ci5wcm9qZWN0KExuZ0xhdC5jb252ZXJ0KHAxKSk7XG4gICAgICAgIGNvbnN0IHAwcm90YXRlZCA9IHAwd29ybGQucm90YXRlKC1iZWFyaW5nICogTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgIGNvbnN0IHAxcm90YXRlZCA9IHAxd29ybGQucm90YXRlKC1iZWFyaW5nICogTWF0aC5QSSAvIDE4MCk7XG5cbiAgICAgICAgY29uc3QgdXBwZXJSaWdodCA9IG5ldyBQb2ludChNYXRoLm1heChwMHJvdGF0ZWQueCwgcDFyb3RhdGVkLngpLCBNYXRoLm1heChwMHJvdGF0ZWQueSwgcDFyb3RhdGVkLnkpKTtcbiAgICAgICAgY29uc3QgbG93ZXJMZWZ0ID0gbmV3IFBvaW50KE1hdGgubWluKHAwcm90YXRlZC54LCBwMXJvdGF0ZWQueCksIE1hdGgubWluKHAwcm90YXRlZC55LCBwMXJvdGF0ZWQueSkpO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB6b29tOiBjb25zaWRlciB0aGUgb3JpZ2luYWwgYmJveCBhbmQgcGFkZGluZy5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHVwcGVyUmlnaHQuc3ViKGxvd2VyTGVmdCk7XG4gICAgICAgIGNvbnN0IHNjYWxlWCA9ICh0ci53aWR0aCAtIChlZGdlUGFkZGluZy5sZWZ0ICsgZWRnZVBhZGRpbmcucmlnaHQgKyBvcHRpb25zLnBhZGRpbmcubGVmdCArIG9wdGlvbnMucGFkZGluZy5yaWdodCkpIC8gc2l6ZS54O1xuICAgICAgICBjb25zdCBzY2FsZVkgPSAodHIuaGVpZ2h0IC0gKGVkZ2VQYWRkaW5nLnRvcCArIGVkZ2VQYWRkaW5nLmJvdHRvbSArIG9wdGlvbnMucGFkZGluZy50b3AgKyBvcHRpb25zLnBhZGRpbmcuYm90dG9tKSkgLyBzaXplLnk7XG5cbiAgICAgICAgaWYgKHNjYWxlWSA8IDAgfHwgc2NhbGVYIDwgMCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgJ01hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b29tID0gTWF0aC5taW4odHIuc2NhbGVab29tKHRyLnNjYWxlICogTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpKSwgb3B0aW9ucy5tYXhab29tKTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgY2VudGVyOiBhcHBseSB0aGUgem9vbSwgdGhlIGNvbmZpZ3VyZWQgb2Zmc2V0LCBhcyB3ZWxsIGFzIG9mZnNldCB0aGF0IGV4aXN0cyBhcyBhIHJlc3VsdCBvZiBwYWRkaW5nLlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFggPSAob3B0aW9ucy5wYWRkaW5nLmxlZnQgLSBvcHRpb25zLnBhZGRpbmcucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFkgPSAob3B0aW9ucy5wYWRkaW5nLnRvcCAtIG9wdGlvbnMucGFkZGluZy5ib3R0b20pIC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRJbml0aWFsWm9vbSA9IG5ldyBQb2ludChvZmZzZXQueCArIHBhZGRpbmdPZmZzZXRYLCBvZmZzZXQueSArIHBhZGRpbmdPZmZzZXRZKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRGaW5hbFpvb20gPSBvZmZzZXRBdEluaXRpYWxab29tLm11bHQodHIuc2NhbGUgLyB0ci56b29tU2NhbGUoem9vbSkpO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlciA9ICB0ci51bnByb2plY3QocDB3b3JsZC5hZGQocDF3b3JsZCkuZGl2KDIpLnN1YihvZmZzZXRBdEZpbmFsWm9vbSkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgYmVhcmluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgYW5kIHpvb21zIHRoZSBtYXAgdG8gY29udGFpbiBpdHMgdmlzaWJsZSBhcmVhIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gcmVzZXQgdGhlIG1hcCdzIGJlYXJpbmcgdG8gMCBpZiBiZWFyaW5nIGlzIG5vbnplcm8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBib3VuZHMgQ2VudGVyIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZSB0aGUgaGlnaGVzdFxuICAgICAqICAgICAgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHMgdGhlbSBpbiB0aGUgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHN1cHBvcnRzIGFsbCBwcm9wZXJ0aWVzIGZyb20ge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGFuZCB7QGxpbmsgQ2FtZXJhT3B0aW9uc30gaW4gYWRkaXRpb24gdG8gdGhlIGZpZWxkcyBiZWxvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGluZWFyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmdcbiAgICAgKiAgICAge0BsaW5rIE1hcCNlYXNlVG99LiBJZiBgZmFsc2VgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nIHtAbGluayBNYXAjZmx5VG99LiBTZWVcbiAgICAgKiAgICAgdGhvc2UgZnVuY3Rpb25zIGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gZm9yIGluZm9ybWF0aW9uIGFib3V0IG9wdGlvbnMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ10gQW4gZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0ZWQgdHJhbnNpdGlvbi4gU2VlIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBtYXAgdmlldyB0cmFuc2l0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW2V2ZW50RGF0YV0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogbWFwLmZpdEJvdW5kcyhiYm94LCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbRml0IGEgbWFwIHRvIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpdGJvdW5kcy8pXG4gICAgICovXG4gICAgZml0Qm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5jYW1lcmFGb3JCb3VuZHMoYm91bmRzLCBvcHRpb25zKSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMsIHJvdGF0ZXMgYW5kIHpvb21zIHRoZSBtYXAgdG8gdG8gZml0IHRoZSBib3ggbWFkZSBieSBwb2ludHMgcDAgYW5kIHAxXG4gICAgICogb25jZSB0aGUgbWFwIGlzIHJvdGF0ZWQgdG8gdGhlIHNwZWNpZmllZCBiZWFyaW5nLiBUbyB6b29tIHdpdGhvdXQgcm90YXRpbmcsXG4gICAgICogcGFzcyBpbiB0aGUgY3VycmVudCBtYXAgYmVhcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHAwIEZpcnN0IHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gcDEgU2Vjb25kIHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBEZXNpcmVkIG1hcCBiZWFyaW5nIGF0IGVuZCBvZiBhbmltYXRpb24sIGluIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5saW5lYXI9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZ1xuICAgICAqICAgICB7QGxpbmsgTWFwI2Vhc2VUb30uIElmIGBmYWxzZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmcge0BsaW5rIE1hcCNmbHlUb30uIFNlZVxuICAgICAqICAgICB0aG9zZSBmdW5jdGlvbnMgYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW9ucyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nXSBBbiBlYXNpbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRlZCB0cmFuc2l0aW9uLiBTZWUge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIG1hcCB2aWV3IHRyYW5zaXRpb25zIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbMjIwLCA0MDBdO1xuICAgICAqIHZhciBwMSA9IFs1MDAsIDkwMF07XG4gICAgICogbWFwLmZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwLCBwMSwgbWFwLmdldEJlYXJpbmcoKSwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW1VzZWQgYnkgQm94Wm9vbUhhbmRsZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8jYm94em9vbWhhbmRsZXIpXG4gICAgICovXG4gICAgZml0U2NyZWVuQ29vcmRpbmF0ZXMocDA6IFBvaW50TGlrZSwgcDE6IFBvaW50TGlrZSwgYmVhcmluZzogbnVtYmVyLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMCkpLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMSkpLFxuICAgICAgICAgICAgICAgIGJlYXJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBfZml0SW50ZXJuYWwoY2FsY3VsYXRlZE9wdGlvbnM/OiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucywgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gY2FtZXJhRm9yQm91bmRzIHdhcm5zICsgcmV0dXJucyB1bmRlZmluZWQgaWYgdW5hYmxlIHRvIGZpdDpcbiAgICAgICAgaWYgKCFjYWxjdWxhdGVkT3B0aW9ucykgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZChjYWxjdWxhdGVkT3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGluZWFyID9cbiAgICAgICAgICAgIHRoaXMuZWFzZVRvKG9wdGlvbnMsIGV2ZW50RGF0YSkgOlxuICAgICAgICAgICAgdGhpcy5mbHlUbyhvcHRpb25zLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCB3aXRob3V0XG4gICAgICogYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi4gVGhlIG1hcCB3aWxsIHJldGFpbiBpdHMgY3VycmVudCB2YWx1ZXMgZm9yIGFueVxuICAgICAqIGRldGFpbHMgbm90IHNwZWNpZmllZCBpbiBgb3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBqdW1wVG8ob3B0aW9uczogQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGxldCB6b29tQ2hhbmdlZCA9IGZhbHNlLFxuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgnem9vbScgaW4gb3B0aW9ucyAmJiB0ci56b29tICE9PSArb3B0aW9ucy56b29tKSB7XG4gICAgICAgICAgICB6b29tQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci56b29tID0gK29wdGlvbnMuem9vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ci5jZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2JlYXJpbmcnIGluIG9wdGlvbnMgJiYgdHIuYmVhcmluZyAhPT0gK29wdGlvbnMuYmVhcmluZykge1xuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuYmVhcmluZyA9ICtvcHRpb25zLmJlYXJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BpdGNoJyBpbiBvcHRpb25zICYmIHRyLnBpdGNoICE9PSArb3B0aW9ucy5waXRjaCkge1xuICAgICAgICAgICAgcGl0Y2hDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLnBpdGNoID0gK29wdGlvbnMucGl0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYWRkaW5nICE9IG51bGwgJiYgIXRyLmlzUGFkZGluZ0VxdWFsKG9wdGlvbnMucGFkZGluZykpIHtcbiAgICAgICAgICAgIHRyLnBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG5cbiAgICAgICAgaWYgKHpvb21DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVhcmluZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaXRjaENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2hlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbnkgY29tYmluYXRpb24gb2YgY2VudGVyLCB6b29tLCBiZWFyaW5nLCBwaXRjaCwgYW5kIHBhZGRpbmcgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uXG4gICAgICogYmV0d2VlbiBvbGQgYW5kIG5ldyB2YWx1ZXMuIFRoZSBtYXAgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWVzIGZvciBhbnlcbiAgICAgKiBkZXRhaWxzIG5vdCBzcGVjaWZpZWQgaW4gYG9wdGlvbnNgLlxuICAgICAqXG4gICAgICogTm90ZTogVGhlIHRyYW5zaXRpb24gd2lsbCBoYXBwZW4gaW5zdGFudGx5IGlmIHRoZSB1c2VyIGhhcyBlbmFibGVkXG4gICAgICogdGhlIGByZWR1Y2VkIG1vdGlvbmAgYWNjZXNpYmlsaXR5IGZlYXR1cmUgZW5hYmxlZCBpbiB0aGVpciBvcGVyYXRpbmcgc3lzdGVtLFxuICAgICAqIHVubGVzcyAnb3B0aW9ucycgaW5jbHVkZXMgYGVzc2VudGlhbDogdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZGVzY3JpYmluZyB0aGUgZGVzdGluYXRpb24gYW5kIGFuaW1hdGlvbiBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgKiAgICAgICAgICAgIEFjY2VwdHMge0BsaW5rIENhbWVyYU9wdGlvbnN9IGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIGVhc2VUbyhvcHRpb25zOiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyAmIHtkZWxheUVuZEV2ZW50cz86IG51bWJlcn0sIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDUwMCxcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCAoIW9wdGlvbnMuZXNzZW50aWFsICYmIGJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pKSBvcHRpb25zLmR1cmF0aW9uID0gMDtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCksXG4gICAgICAgICAgICBzdGFydFBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcoKSxcblxuICAgICAgICAgICAgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gK29wdGlvbnMuem9vbSA6IHN0YXJ0Wm9vbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2ggPSAncGl0Y2gnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5waXRjaCA6IHN0YXJ0UGl0Y2gsXG4gICAgICAgICAgICBwYWRkaW5nID0gJ3BhZGRpbmcnIGluIG9wdGlvbnMgPyBvcHRpb25zLnBhZGRpbmcgOiB0ci5wYWRkaW5nO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldEFzUG9pbnQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICAgICAgbGV0IHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQob2Zmc2V0QXNQb2ludCk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcbiAgICAgICAgY29uc3QgZmluYWxTY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcblxuICAgICAgICBsZXQgYXJvdW5kLCBhcm91bmRQb2ludDtcblxuICAgICAgICBpZiAob3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgIGFyb3VuZCA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuYXJvdW5kKTtcbiAgICAgICAgICAgIGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9ICh6b29tICE9PSBzdGFydFpvb20pO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IChzdGFydEJlYXJpbmcgIT09IGJlYXJpbmcpO1xuICAgICAgICB0aGlzLl9waXRjaGluZyA9IChwaXRjaCAhPT0gc3RhcnRQaXRjaCk7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSAhdHIuaXNQYWRkaW5nRXF1YWwocGFkZGluZyk7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBvcHRpb25zLm5vTW92ZVN0YXJ0KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCk7XG5cbiAgICAgICAgdGhpcy5fZWFzZSgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgICAgICB0ci56b29tID0gaW50ZXJwb2xhdGUoc3RhcnRab29tLCB6b29tLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgICAgIHRyLmJlYXJpbmcgPSBpbnRlcnBvbGF0ZShzdGFydEJlYXJpbmcsIGJlYXJpbmcsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIucGl0Y2ggPSBpbnRlcnBvbGF0ZShzdGFydFBpdGNoLCBwaXRjaCwgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcGFkZGluZykge1xuICAgICAgICAgICAgICAgIHRyLmludGVycG9sYXRlUGFkZGluZyhzdGFydFBhZGRpbmcsIHBhZGRpbmcsIGspO1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gcGFkZGluZyBpcyBiZWluZyBhcHBsaWVkLCBUcmFuc2Zvcm0jY2VudGVyUG9pbnQgaXMgY2hhbmdpbmcgY29udGlub3VzbHksXG4gICAgICAgICAgICAgICAgLy8gdGh1cyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIG9mZnNldFBvaW50IGV2ZXJ5IGZyYSxlXG4gICAgICAgICAgICAgICAgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChvZmZzZXRBc1BvaW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFyb3VuZCkge1xuICAgICAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludChhcm91bmQsIGFyb3VuZFBvaW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSB0ci56b29tU2NhbGUodHIuem9vbSAtIHN0YXJ0Wm9vbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHpvb20gPiBzdGFydFpvb20gP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbigyLCBmaW5hbFNjYWxlKSA6XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAuNSwgZmluYWxTY2FsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BlZWR1cCA9IE1hdGgucG93KGJhc2UsIDEgLSBrKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSB0ci51bnByb2plY3QoZnJvbS5hZGQoZGVsdGEubXVsdChrICogc3BlZWR1cCkpLm11bHQoc2NhbGUpKTtcbiAgICAgICAgICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQodHIucmVuZGVyV29ybGRDb3BpZXMgPyBuZXdDZW50ZXIud3JhcCgpIDogbmV3Q2VudGVyLCBwb2ludEF0T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZmlyZU1vdmVFdmVudHMoZXZlbnREYXRhKTtcblxuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5kZWxheUVuZEV2ZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpLCBvcHRpb25zLmRlbGF5RW5kRXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9wcmVwYXJlRWFzZShldmVudERhdGE/OiBPYmplY3QsIG5vTW92ZVN0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFub01vdmVTdGFydCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3pvb21zdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9maXJlTW92ZUV2ZW50cyhldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZScsIGV2ZW50RGF0YSkpO1xuICAgICAgICBpZiAodGhpcy5fem9vbWluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbScsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FmdGVyRWFzZShldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgd2FzWm9vbWluZyA9IHRoaXMuX3pvb21pbmc7XG4gICAgICAgIGNvbnN0IHdhc1JvdGF0aW5nID0gdGhpcy5fcm90YXRpbmc7XG4gICAgICAgIGNvbnN0IHdhc1BpdGNoaW5nID0gdGhpcy5fcGl0Y2hpbmc7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BpdGNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAod2FzWm9vbWluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXNSb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaGVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVlbmQnLCBldmVudERhdGEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgYW5pbWF0aW5nIHRoZSB0cmFuc2l0aW9uIGFsb25nIGEgY3VydmUgdGhhdFxuICAgICAqIGV2b2tlcyBmbGlnaHQuIFRoZSBhbmltYXRpb24gc2VhbWxlc3NseSBpbmNvcnBvcmF0ZXMgem9vbWluZyBhbmQgcGFubmluZyB0byBoZWxwXG4gICAgICogdGhlIHVzZXIgbWFpbnRhaW4gaGVyIGJlYXJpbmdzIGV2ZW4gYWZ0ZXIgdHJhdmVyc2luZyBhIGdyZWF0IGRpc3RhbmNlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhlIGFuaW1hdGlvbiB3aWxsIGJlIHNraXBwZWQsIGFuZCB0aGlzIHdpbGwgYmVoYXZlIGVxdWl2YWxlbnRseSB0byBganVtcFRvYFxuICAgICAqIGlmIHRoZSB1c2VyIGhhcyB0aGUgYHJlZHVjZWQgbW90aW9uYCBhY2Nlc2liaWxpdHkgZmVhdHVyZSBlbmFibGVkIGluIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0sXG4gICAgICogdW5sZXNzICdvcHRpb25zJyBpbmNsdWRlcyBgZXNzZW50aWFsOiB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqICAgICBBY2NlcHRzIHtAbGluayBDYW1lcmFPcHRpb25zfSwge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LFxuICAgICAqICAgICBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmN1cnZlPTEuNDJdIFRoZSB6b29taW5nIFwiY3VydmVcIiB0aGF0IHdpbGwgb2NjdXIgYWxvbmcgdGhlXG4gICAgICogICAgIGZsaWdodCBwYXRoLiBBIGhpZ2ggdmFsdWUgbWF4aW1pemVzIHpvb21pbmcgZm9yIGFuIGV4YWdnZXJhdGVkIGFuaW1hdGlvbiwgd2hpbGUgYSBsb3dcbiAgICAgKiAgICAgdmFsdWUgbWluaW1pemVzIHpvb21pbmcgZm9yIGFuIGVmZmVjdCBjbG9zZXIgdG8ge0BsaW5rIE1hcCNlYXNlVG99LiAxLjQyIGlzIHRoZSBhdmVyYWdlXG4gICAgICogICAgIHZhbHVlIHNlbGVjdGVkIGJ5IHBhcnRpY2lwYW50cyBpbiB0aGUgdXNlciBzdHVkeSBkaXNjdXNzZWQgaW5cbiAgICAgKiAgICAgW3ZhbiBXaWprICgyMDAzKV0oaHR0cHM6Ly93d3cud2luLnR1ZS5ubC9+dmFud2lqay96b29tcGFuLnBkZikuIEEgdmFsdWUgb2ZcbiAgICAgKiAgICAgYE1hdGgucG93KDYsIDAuMjUpYCB3b3VsZCBiZSBlcXVpdmFsZW50IHRvIHRoZSByb290IG1lYW4gc3F1YXJlZCBhdmVyYWdlIHZlbG9jaXR5LiBBXG4gICAgICogICAgIHZhbHVlIG9mIDEgd291bGQgcHJvZHVjZSBhIGNpcmN1bGFyIG1vdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluWm9vbV0gVGhlIHplcm8tYmFzZWQgem9vbSBsZXZlbCBhdCB0aGUgcGVhayBvZiB0aGUgZmxpZ2h0IHBhdGguIElmXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNwZWVkPTEuMl0gVGhlIGF2ZXJhZ2Ugc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiBkZWZpbmVkIGluIHJlbGF0aW9uIHRvXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYC4gQSBzcGVlZCBvZiAxLjIgbWVhbnMgdGhhdCB0aGUgbWFwIGFwcGVhcnMgdG8gbW92ZSBhbG9uZyB0aGUgZmxpZ2h0IHBhdGhcbiAgICAgKiAgICAgYnkgMS4yIHRpbWVzIGBvcHRpb25zLmN1cnZlYCBzY3JlZW5mdWxzIGV2ZXJ5IHNlY29uZC4gQSBfc2NyZWVuZnVsXyBpcyB0aGUgbWFwJ3MgdmlzaWJsZSBzcGFuLlxuICAgICAqICAgICBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZml4ZWQgcGh5c2ljYWwgZGlzdGFuY2UsIGJ1dCB2YXJpZXMgYnkgem9vbSBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2NyZWVuU3BlZWRdIFRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBhbmltYXRpb24gbWVhc3VyZWQgaW4gc2NyZWVuZnVsc1xuICAgICAqICAgICBwZXIgc2Vjb25kLCBhc3N1bWluZyBhIGxpbmVhciB0aW1pbmcgY3VydmUuIElmIGBvcHRpb25zLnNwZWVkYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heER1cmF0aW9uXSBUaGUgYW5pbWF0aW9uJ3MgbWF4aW11bSBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqICAgICBJZiBkdXJhdGlvbiBleGNlZWRzIG1heGltdW0gZHVyYXRpb24sIGl0IHJlc2V0cyB0byAwLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBmbHkgd2l0aCBkZWZhdWx0IG9wdGlvbnMgdG8gbnVsbCBpc2xhbmRcbiAgICAgKiBtYXAuZmx5VG8oe2NlbnRlcjogWzAsIDBdLCB6b29tOiA5fSk7XG4gICAgICogLy8gdXNpbmcgZmx5VG8gb3B0aW9uc1xuICAgICAqIG1hcC5mbHlUbyh7XG4gICAgICogICBjZW50ZXI6IFswLCAwXSxcbiAgICAgKiAgIHpvb206IDksXG4gICAgICogICBzcGVlZDogMC4yLFxuICAgICAqICAgY3VydmU6IDEsXG4gICAgICogICBlYXNpbmcodCkge1xuICAgICAqICAgICByZXR1cm4gdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtGbHkgdG8gYSBsb2NhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mbHl0by8pXG4gICAgICogQHNlZSBbU2xvd2x5IGZseSB0byBhIGxvY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZseXRvLW9wdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zY3JvbGwtZmx5LXRvLylcbiAgICAgKi9cbiAgICBmbHlUbyhvcHRpb25zOiBPYmplY3QsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8ganVtcFRvIGlmIHVzZXIgaGFzIHNldCBwcmVmZXJzLXJlZHVjZWQtbW90aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5lc3NlbnRpYWwgJiYgYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY29lcmNlZE9wdGlvbnMgPSAocGljayhvcHRpb25zLCBbJ2NlbnRlcicsICd6b29tJywgJ2JlYXJpbmcnLCAncGl0Y2gnLCAnYXJvdW5kJ10pOiBDYW1lcmFPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmp1bXBUbyhjb2VyY2VkT3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgYW4gw6LCgMKcb3B0aW1hbCBwYXRow6LCgMKdIGFuaW1hdGlvbiwgYXMgZGV0YWlsZWQgaW46XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFZhbiBXaWprLCBKYXJrZSBKLjsgTnVpaiwgV2ltIEEuIEEuIMOiwoDCnFNtb290aCBhbmQgZWZmaWNpZW50IHpvb21pbmcgYW5kIHBhbm5pbmcuw6LCgMKdIElORk9WSVNcbiAgICAgICAgLy8gICDDosKAwpkwMy4gcHAuIDE1w6LCgMKTMjIuIDxodHRwczovL3d3dy53aW4udHVlLm5sL352YW53aWprL3pvb21wYW4ucGRmI3BhZ2U9NT4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZXJlIGFwcGxpY2FibGUsIGxvY2FsIHZhcmlhYmxlIGRvY3VtZW50YXRpb24gYmVnaW5zIHdpdGggdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgb3JcbiAgICAgICAgLy8gZnVuY3Rpb24gaW4gdmFuIFdpamsgKDIwMDMpLlxuXG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBzcGVlZDogMS4yLFxuICAgICAgICAgICAgY3VydmU6IDEuNDIsXG4gICAgICAgICAgICBlYXNpbmc6IGRlZmF1bHRFYXNpbmdcbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHN0YXJ0Wm9vbSA9IHRoaXMuZ2V0Wm9vbSgpLFxuICAgICAgICAgICAgc3RhcnRCZWFyaW5nID0gdGhpcy5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBzdGFydFBpdGNoID0gdGhpcy5nZXRQaXRjaCgpLFxuICAgICAgICAgICAgc3RhcnRQYWRkaW5nID0gdGhpcy5nZXRQYWRkaW5nKCk7XG5cbiAgICAgICAgY29uc3Qgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gY2xhbXAoK29wdGlvbnMuem9vbSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSkgOiBzdGFydFpvb207XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nO1xuICAgICAgICBjb25zdCBwaXRjaCA9ICdwaXRjaCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnBpdGNoIDogc3RhcnRQaXRjaDtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9ICdwYWRkaW5nJyBpbiBvcHRpb25zID8gb3B0aW9ucy5wYWRkaW5nIDogdHIucGFkZGluZztcblxuICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXNQb2ludCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucy5vZmZzZXQpO1xuICAgICAgICBsZXQgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChvZmZzZXRBc1BvaW50KTtcbiAgICAgICAgY29uc3QgbG9jYXRpb25BdE9mZnNldCA9IHRyLnBvaW50TG9jYXRpb24ocG9pbnRBdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuY2VudGVyIHx8IGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICB0aGlzLl9ub3JtYWxpemVDZW50ZXIoY2VudGVyKTtcblxuICAgICAgICBjb25zdCBmcm9tID0gdHIucHJvamVjdChsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB0ci5wcm9qZWN0KGNlbnRlcikuc3ViKGZyb20pO1xuXG4gICAgICAgIGxldCByaG8gPSBvcHRpb25zLmN1cnZlO1xuXG4gICAgICAgIC8vIHfDosKCwoA6IEluaXRpYWwgdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgIGNvbnN0IHcwID0gTWF0aC5tYXgodHIud2lkdGgsIHRyLmhlaWdodCksXG4gICAgICAgICAgICAvLyB3w6LCgsKBOiBGaW5hbCB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgICAgICB3MSA9IHcwIC8gc2NhbGUsXG4gICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhlIGZsaWdodCBwYXRoIGFzIHByb2plY3RlZCBvbnRvIHRoZSBncm91bmQgcGxhbmUsIG1lYXN1cmVkIGluIHBpeGVscyBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgd29ybGQgaW1hZ2Ugb3JpZ2luIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICAgICAgdTEgPSBkZWx0YS5tYWcoKTtcblxuICAgICAgICBpZiAoJ21pblpvb20nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pblpvb20gPSBjbGFtcChNYXRoLm1pbihvcHRpb25zLm1pblpvb20sIHN0YXJ0Wm9vbSwgem9vbSksIHRyLm1pblpvb20sIHRyLm1heFpvb20pO1xuICAgICAgICAgICAgLy8gdzxzdWI+bTwvc3ViPjogTWF4aW11bSB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlIGluaXRpYWxcbiAgICAgICAgICAgIC8vIHNjYWxlLlxuICAgICAgICAgICAgY29uc3Qgd01heCA9IHcwIC8gdHIuem9vbVNjYWxlKG1pblpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICAgICAgcmhvID0gTWF0aC5zcXJ0KHdNYXggLyB1MSAqIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gw4/CgcOCwrJcbiAgICAgICAgY29uc3QgcmhvMiA9IHJobyAqIHJobztcblxuICAgICAgICAvKipcbiAgICAgICAgICogcsOhwrXCojogUmV0dXJucyB0aGUgem9vbS1vdXQgZmFjdG9yIGF0IG9uZSBlbmQgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGkgMCBmb3IgdGhlIGFzY2VudCBvciAxIGZvciB0aGUgZGVzY2VudC5cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHIoaSkge1xuICAgICAgICAgICAgY29uc3QgYiA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIChpID8gLTEgOiAxKSAqIHJobzIgKiByaG8yICogdTEgKiB1MSkgLyAoMiAqIChpID8gdzEgOiB3MCkgKiByaG8yICogdTEpO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKE1hdGguc3FydChiICogYiArIDEpIC0gYik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzaW5oKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSAtIE1hdGguZXhwKC1uKSkgLyAyOyB9XG4gICAgICAgIGZ1bmN0aW9uIGNvc2gobikgeyByZXR1cm4gKE1hdGguZXhwKG4pICsgTWF0aC5leHAoLW4pKSAvIDI7IH1cbiAgICAgICAgZnVuY3Rpb24gdGFuaChuKSB7IHJldHVybiBzaW5oKG4pIC8gY29zaChuKTsgfVxuXG4gICAgICAgIC8vIHLDosKCwoA6IFpvb20tb3V0IGZhY3RvciBkdXJpbmcgYXNjZW50LlxuICAgICAgICBjb25zdCByMCA9IHIoMCk7XG5cbiAgICAgICAgLy8gdyhzKTogUmV0dXJucyB0aGUgdmlzaWJsZSBzcGFuIG9uIHRoZSBncm91bmQsIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlXG4gICAgICAgIC8vIGluaXRpYWwgc2NhbGUuIEFzc3VtZXMgYW4gYW5ndWxhciBmaWVsZCBvZiB2aWV3IG9mIDIgYXJjdGFuIMOCwr0gw6LCicKIIDUzw4LCsC5cbiAgICAgICAgbGV0IHc6IChfOiBudW1iZXIpID0+IG51bWJlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gKGNvc2gocjApIC8gY29zaChyMCArIHJobyAqIHMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB1KHMpOiBSZXR1cm5zIHRoZSBkaXN0YW5jZSBhbG9uZyB0aGUgZmxpZ2h0IHBhdGggYXMgcHJvamVjdGVkIG9udG8gdGhlIGdyb3VuZCBwbGFuZSxcbiAgICAgICAgLy8gbWVhc3VyZWQgaW4gcGl4ZWxzIGZyb20gdGhlIHdvcmxkIGltYWdlIG9yaWdpbiBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgbGV0IHU6IChfOiBudW1iZXIpID0+IG51bWJlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdzAgKiAoKGNvc2gocjApICogdGFuaChyMCArIHJobyAqIHMpIC0gc2luaChyMCkpIC8gcmhvMikgLyB1MTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTOiBUb3RhbCBsZW5ndGggb2YgdGhlIGZsaWdodCBwYXRoLCBtZWFzdXJlZCBpbiDDj8KBLXNjcmVlbmZ1bHMuXG4gICAgICAgIGxldCBTID0gKHIoMSkgLSByMCkgLyByaG87XG5cbiAgICAgICAgLy8gV2hlbiB1w6LCgsKAID0gdcOiwoLCgSwgdGhlIG9wdGltYWwgcGF0aCBkb2VzbsOiwoDCmXQgcmVxdWlyZSBib3RoIGFzY2VudCBhbmQgZGVzY2VudC5cbiAgICAgICAgaWYgKE1hdGguYWJzKHUxKSA8IDAuMDAwMDAxIHx8ICFpc0Zpbml0ZShTKSkge1xuICAgICAgICAgICAgLy8gUGVyZm9ybSBhIG1vcmUgb3IgbGVzcyBpbnN0YW50YW5lb3VzIHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgdG9vIHNob3J0LlxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHcwIC0gdzEpIDwgMC4wMDAwMDEpIHJldHVybiB0aGlzLmVhc2VUbyhvcHRpb25zLCBldmVudERhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBrID0gdzEgPCB3MCA/IC0xIDogMTtcbiAgICAgICAgICAgIFMgPSBNYXRoLmFicyhNYXRoLmxvZyh3MSAvIHcwKSkgLyByaG87XG5cbiAgICAgICAgICAgIHUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4gICAgICAgICAgICB3ID0gZnVuY3Rpb24ocykgeyByZXR1cm4gTWF0aC5leHAoayAqIHJobyAqIHMpOyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkdXJhdGlvbicgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9ICtvcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgViA9ICdzY3JlZW5TcGVlZCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnNjcmVlblNwZWVkIC8gcmhvIDogK29wdGlvbnMuc3BlZWQ7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gMTAwMCAqIFMgLyBWO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4RHVyYXRpb24gJiYgb3B0aW9ucy5kdXJhdGlvbiA+IG9wdGlvbnMubWF4RHVyYXRpb24pIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gKHN0YXJ0QmVhcmluZyAhPT0gYmVhcmluZyk7XG4gICAgICAgIHRoaXMuX3BpdGNoaW5nID0gKHBpdGNoICE9PSBzdGFydFBpdGNoKTtcbiAgICAgICAgdGhpcy5fcGFkZGluZyA9ICF0ci5pc1BhZGRpbmdFcXVhbChwYWRkaW5nKTtcblxuICAgICAgICB0aGlzLl9wcmVwYXJlRWFzZShldmVudERhdGEsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9lYXNlKChrKSA9PiB7XG4gICAgICAgICAgICAvLyBzOiBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYWxvbmcgdGhlIGZsaWdodCBwYXRoLCBtZWFzdXJlZCBpbiDDj8KBLXNjcmVlbmZ1bHMuXG4gICAgICAgICAgICBjb25zdCBzID0gayAqIFM7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyB3KHMpO1xuICAgICAgICAgICAgdHIuem9vbSA9IGsgPT09IDEgPyB6b29tIDogc3RhcnRab29tICsgdHIuc2NhbGVab29tKHNjYWxlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuYmVhcmluZyA9IGludGVycG9sYXRlKHN0YXJ0QmVhcmluZywgYmVhcmluZywgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5waXRjaCA9IGludGVycG9sYXRlKHN0YXJ0UGl0Y2gsIHBpdGNoLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuaW50ZXJwb2xhdGVQYWRkaW5nKHN0YXJ0UGFkZGluZywgcGFkZGluZywgayk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwYWRkaW5nIGlzIGJlaW5nIGFwcGxpZWQsIFRyYW5zZm9ybSNjZW50ZXJQb2ludCBpcyBjaGFuZ2luZyBjb250aW5vdXNseSxcbiAgICAgICAgICAgICAgICAvLyB0aHVzIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb2Zmc2V0UG9pbnQgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgICAgICBwb2ludEF0T2Zmc2V0ID0gdHIuY2VudGVyUG9pbnQuYWRkKG9mZnNldEFzUG9pbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBrID09PSAxID8gY2VudGVyIDogdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQodShzKSkpLm11bHQoc2NhbGUpKTtcbiAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5yZW5kZXJXb3JsZENvcGllcyA/IG5ld0NlbnRlci53cmFwKCkgOiBuZXdDZW50ZXIsIHBvaW50QXRPZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9maXJlTW92ZUV2ZW50cyhldmVudERhdGEpO1xuXG4gICAgICAgIH0sICgpID0+IHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0Vhc2luZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZWFzZUZyYW1lSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgYW55IGFuaW1hdGVkIHRyYW5zaXRpb24gdW5kZXJ3YXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHN0b3AoKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9lYXNlRnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX29uRWFzZUVuZCkge1xuICAgICAgICAgICAgLy8gVGhlIF9vbkVhc2VFbmQgZnVuY3Rpb24gbWlnaHQgZW1pdCBldmVudHMgd2hpY2ggdHJpZ2dlciBuZXdcbiAgICAgICAgICAgIC8vIGFuaW1hdGlvbiwgd2hpY2ggc2V0cyBhIG5ldyBfb25FYXNlRW5kLiBFbnN1cmUgd2UgZG9uJ3QgZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCB1bmludGVudGlvbmFsbHkuXG4gICAgICAgICAgICBjb25zdCBvbkVhc2VFbmQgPSB0aGlzLl9vbkVhc2VFbmQ7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25FYXNlRW5kO1xuICAgICAgICAgICAgb25FYXNlRW5kLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2Vhc2UoZnJhbWU6IChfOiBudW1iZXIpID0+IHZvaWQsXG4gICAgICAgICAgZmluaXNoOiAoKSA9PiB2b2lkLFxuICAgICAgICAgIG9wdGlvbnM6IHthbmltYXRlOiBib29sZWFuLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChfOiBudW1iZXIpID0+IG51bWJlcn0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgb3B0aW9ucy5kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgZnJhbWUoMSk7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VTdGFydCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLl9lYXNlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSA9IGZyYW1lO1xuICAgICAgICAgICAgdGhpcy5fb25FYXNlRW5kID0gZmluaXNoO1xuICAgICAgICAgICAgdGhpcy5fZWFzZUZyYW1lSWQgPSB0aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxsYmFjayBmb3IgbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWVcbiAgICBfcmVuZGVyRnJhbWVDYWxsYmFjaygpIHtcbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fZWFzZVN0YXJ0KSAvIHRoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLCAxKTtcbiAgICAgICAgdGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKHQpKTtcbiAgICAgICAgaWYgKHQgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBiZWFyaW5nIHNvIHRoYXQgaXQncyBudW1lcmljYWxseSBjbG9zZSB0byB0aGUgY3VycmVudCBvbmUgc28gdGhhdCBpdCBpbnRlcnBvbGF0ZXMgcHJvcGVybHlcbiAgICBfbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nOiBudW1iZXIsIGN1cnJlbnRCZWFyaW5nOiBudW1iZXIpIHtcbiAgICAgICAgYmVhcmluZyA9IHdyYXAoYmVhcmluZywgLTE4MCwgMTgwKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGJlYXJpbmcgLSBjdXJyZW50QmVhcmluZyk7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nIC0gMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyAtPSAzNjA7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nICsgMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyArPSAzNjA7XG4gICAgICAgIHJldHVybiBiZWFyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIGEgcGF0aCBjcm9zc2luZyB0aGUgYW50aW1lcmlkaWFuIHdvdWxkIGJlIHNob3J0ZXIsIGV4dGVuZCB0aGUgZmluYWwgY29vcmRpbmF0ZSBzbyB0aGF0XG4gICAgLy8gaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZSB0d28gZW5kcG9pbnRzIHdpbGwgY3Jvc3MgaXQuXG4gICAgX25vcm1hbGl6ZUNlbnRlcihjZW50ZXI6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyLnJlbmRlcldvcmxkQ29waWVzIHx8IHRyLmxuZ1JhbmdlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVsdGEgPSBjZW50ZXIubG5nIC0gdHIuY2VudGVyLmxuZztcbiAgICAgICAgY2VudGVyLmxuZyArPVxuICAgICAgICAgICAgZGVsdGEgPiAxODAgPyAtMzYwIDpcbiAgICAgICAgICAgIGRlbHRhIDwgLTE4MCA/IDM2MCA6IDA7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW1lcmE7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGNvbXBhY3Q/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPlxufTtcblxuLyoqXG4gKiBBbiBgQXR0cmlidXRpb25Db250cm9sYCBjb250cm9sIHByZXNlbnRzIHRoZSBtYXAncyBbYXR0cmlidXRpb24gaW5mb3JtYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hdHRyaWJ1dGlvbi8pLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcGFjdF0gSWYgYHRydWVgIGZvcmNlIGEgY29tcGFjdCBhdHRyaWJ1dGlvbiB0aGF0IHNob3dzIHRoZSBmdWxsIGF0dHJpYnV0aW9uIG9uIG1vdXNlIGhvdmVyLCBvciBpZiBgZmFsc2VgIGZvcmNlIHRoZSBmdWxsIGF0dHJpYnV0aW9uIGNvbnRyb2wuIFRoZSBkZWZhdWx0IGlzIGEgcmVzcG9uc2l2ZSBhdHRyaWJ1dGlvbiB0aGF0IGNvbGxhcHNlcyB3aGVuIHRoZSBtYXAgaXMgbGVzcyB0aGFuIDY0MCBwaXhlbHMgd2lkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuY3VzdG9tQXR0cmlidXRpb25dIFN0cmluZyBvciBzdHJpbmdzIHRvIHNob3cgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGF0dHJpYnV0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7YXR0cmlidXRpb25Db250cm9sOiBmYWxzZX0pXG4gKiAgICAgLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkF0dHJpYnV0aW9uQ29udHJvbCh7XG4gKiAgICAgICAgIGNvbXBhY3Q6IHRydWVcbiAqICAgICB9KSk7XG4gKi9cbmNsYXNzIEF0dHJpYnV0aW9uQ29udHJvbCB7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2lubmVyQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZWRpdExpbms6ID9IVE1MQW5jaG9yRWxlbWVudDtcbiAgICBfYXR0cmliSFRNTDogc3RyaW5nO1xuICAgIHN0eWxlSWQ6IHN0cmluZztcbiAgICBzdHlsZU93bmVyOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfdXBkYXRlRWRpdExpbmsnLFxuICAgICAgICAgICAgJ191cGRhdGVEYXRhJyxcbiAgICAgICAgICAgICdfdXBkYXRlQ29tcGFjdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1yaWdodCc7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgY29uc3QgY29tcGFjdCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY29tcGFjdDtcblxuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliJyk7XG4gICAgICAgIHRoaXMuX2lubmVyQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICBpZiAoY29tcGFjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpO1xuICAgICAgICB0aGlzLl91cGRhdGVFZGl0TGluaygpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignc3R5bGVkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVFZGl0TGluayk7XG5cbiAgICAgICAgaWYgKGNvbXBhY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbXBhY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzdHlsZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlRWRpdExpbmspO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcblxuICAgICAgICB0aGlzLl9tYXAgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgICAgICB0aGlzLl9hdHRyaWJIVE1MID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICB9XG5cbiAgICBfdXBkYXRlRWRpdExpbmsoKSB7XG4gICAgICAgIGxldCBlZGl0TGluayA9IHRoaXMuX2VkaXRMaW5rO1xuICAgICAgICBpZiAoIWVkaXRMaW5rKSB7XG4gICAgICAgICAgICBlZGl0TGluayA9IHRoaXMuX2VkaXRMaW5rID0gKHRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcubWFwYm94LWltcHJvdmUtbWFwJyk6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXG4gICAgICAgICAgICB7a2V5OiBcIm93bmVyXCIsIHZhbHVlOiB0aGlzLnN0eWxlT3duZXJ9LFxuICAgICAgICAgICAge2tleTogXCJpZFwiLCB2YWx1ZTogdGhpcy5zdHlsZUlkfSxcbiAgICAgICAgICAgIHtrZXk6IFwiYWNjZXNzX3Rva2VuXCIsIHZhbHVlOiB0aGlzLl9tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOfVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChlZGl0TGluaykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1TdHJpbmcgPSBwYXJhbXMucmVkdWNlKChhY2MsIG5leHQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYCR7bmV4dC5rZXl9PSR7bmV4dC52YWx1ZX0ke2kgPCBwYXJhbXMubGVuZ3RoIC0gMSA/ICcmJyA6ICcnfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBgP2ApO1xuICAgICAgICAgICAgZWRpdExpbmsuaHJlZiA9IGAke2NvbmZpZy5GRUVEQkFDS19VUkx9LyR7cGFyYW1TdHJpbmd9JHt0aGlzLl9tYXAuX2hhc2ggPyB0aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyh0cnVlKSA6ICcnfWA7XG4gICAgICAgICAgICBlZGl0TGluay5yZWwgPSBcIm5vb3BlbmVyIG5vZm9sbG93XCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlRGF0YShlOiBhbnkpIHtcbiAgICAgICAgaWYgKGUgJiYgKGUuc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScgfHwgZS5kYXRhVHlwZSA9PT0gJ3N0eWxlJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdExpbmsoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVBdHRyaWJ1dGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwLnN0eWxlKSByZXR1cm47XG4gICAgICAgIGxldCBhdHRyaWJ1dGlvbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucyA9IGF0dHJpYnV0aW9ucy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoYXR0cmlidXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGlvbiAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucy5wdXNoKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQ6IGFueSA9IHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O1xuICAgICAgICAgICAgdGhpcy5zdHlsZU93bmVyID0gc3R5bGVzaGVldC5vd25lcjtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVJZCA9IHN0eWxlc2hlZXQuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZXMgPSB0aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNhY2hlLnVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmF0dHJpYnV0aW9uICYmIGF0dHJpYnV0aW9ucy5pbmRleE9mKHNvdXJjZS5hdHRyaWJ1dGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucy5wdXNoKHNvdXJjZS5hdHRyaWJ1dGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGFueSBlbnRyaWVzIHRoYXQgYXJlIHN1YnN0cmluZ3Mgb2YgYW5vdGhlciBlbnRyeS5cbiAgICAgICAgLy8gZmlyc3Qgc29ydCBieSBsZW5ndGggc28gdGhhdCBzdWJzdHJpbmdzIGNvbWUgZmlyc3RcbiAgICAgICAgYXR0cmlidXRpb25zLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xuICAgICAgICBhdHRyaWJ1dGlvbnMgPSBhdHRyaWJ1dGlvbnMuZmlsdGVyKChhdHRyaWIsIGkpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGF0dHJpYnV0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGlvbnNbal0uaW5kZXhPZihhdHRyaWIpID49IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgYXR0cmlidXRpb24gc3RyaW5nIGlzIGRpZmZlcmVudCB0byBtaW5pbWl6ZSBET00gY2hhbmdlc1xuICAgICAgICBjb25zdCBhdHRyaWJIVE1MID0gYXR0cmlidXRpb25zLmpvaW4oJyB8ICcpO1xuICAgICAgICBpZiAoYXR0cmliSFRNTCA9PT0gdGhpcy5fYXR0cmliSFRNTCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2F0dHJpYkhUTUwgPSBhdHRyaWJIVE1MO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbm5lckNvbnRhaW5lci5pbm5lckhUTUwgPSBhdHRyaWJIVE1MO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWF0dHJpYi1lbXB0eScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWF0dHJpYi1lbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBvbGQgRE9NIG5vZGUgZnJvbSBfZWRpdExpbmtcbiAgICAgICAgdGhpcy5fZWRpdExpbmsgPSBudWxsO1xuICAgIH1cblxuICAgIF91cGRhdGVDb21wYWN0KCkge1xuICAgICAgICBpZiAodGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoIDw9IDY0MCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0cmlidXRpb25Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbi8qKlxuICogQSBgTG9nb0NvbnRyb2xgIGlzIGEgY29udHJvbCB0aGF0IGFkZHMgdGhlIE1hcGJveCB3YXRlcm1hcmtcbiAqIHRvIHRoZSBtYXAgYXMgcmVxdWlyZWQgYnkgdGhlIFt0ZXJtcyBvZiBzZXJ2aWNlXShodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy8pIGZvciBNYXBib3hcbiAqIHZlY3RvciB0aWxlcyBhbmQgY29yZSBzdHlsZXMuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHByaXZhdGVcbioqL1xuXG5jbGFzcyBMb2dvQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGJpbmRBbGwoWydfdXBkYXRlTG9nbyddLCB0aGlzKTtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGVDb21wYWN0J10sIHRoaXMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwnKTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gRE9NLmNyZWF0ZSgnYScsICdtYXBib3hnbC1jdHJsLWxvZ28nKTtcbiAgICAgICAgYW5jaG9yLnRhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgICAgIGFuY2hvci5yZWwgPSBcIm5vb3BlbmVyIG5vZm9sbG93XCI7XG4gICAgICAgIGFuY2hvci5ocmVmID0gXCJodHRwczovL3d3dy5tYXBib3guY29tL1wiO1xuICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKCdMb2dvQ29udHJvbC5UaXRsZScpKTtcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcIm5vb3BlbmVyIG5vZm9sbG93XCIpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvZ28oKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgICAgICB0aGlzLl91cGRhdGVDb21wYWN0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20tbGVmdCc7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxvZ28oZTogYW55KSB7XG4gICAgICAgIGlmICghZSB8fCBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHRoaXMuX2xvZ29SZXF1aXJlZCgpID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9sb2dvUmVxdWlyZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwLnN0eWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlc1tpZF0uZ2V0U291cmNlKCk7XG4gICAgICAgICAgICBpZiAoc291cmNlLm1hcGJveF9sb2dvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbXBhY3QoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckNoaWxkcmVuID0gdGhpcy5fY29udGFpbmVyLmNoaWxkcmVuO1xuICAgICAgICBpZiAoY29udGFpbmVyQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBjb250YWluZXJDaGlsZHJlblswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGggPCAyNTApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ29Db250cm9sO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCB0eXBlIFRhc2tJRCA9IG51bWJlcjsgLy8gY2FuJ3QgbWFyayBvcGFxdWUgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG93dHlwZS9mbG93LXJlbW92ZS10eXBlcy9wdWxsLzYxXG50eXBlIFRhc2sgPSB7XG4gICAgY2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gICAgaWQ6IFRhc2tJRDtcbiAgICBjYW5jZWxsZWQ6IGJvb2xlYW47XG59O1xuXG5jbGFzcyBUYXNrUXVldWUge1xuICAgIF9xdWV1ZTogQXJyYXk8VGFzaz47XG4gICAgX2lkOiBUYXNrSUQ7XG4gICAgX2NsZWFyZWQ6IGJvb2xlYW47XG4gICAgX2N1cnJlbnRseVJ1bm5pbmc6IEFycmF5PFRhc2s+IHwgZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpICB7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX2lkID0gMDtcbiAgICAgICAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFza0lEIHtcbiAgICAgICAgY29uc3QgaWQgPSArK3RoaXMuX2lkO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX3F1ZXVlO1xuICAgICAgICBxdWV1ZS5wdXNoKHtjYWxsYmFjaywgaWQsIGNhbmNlbGxlZDogZmFsc2V9KTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIHJlbW92ZShpZDogVGFza0lEKSB7XG4gICAgICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLl9jdXJyZW50bHlSdW5uaW5nO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHJ1bm5pbmcgPyB0aGlzLl9xdWV1ZS5jb25jYXQocnVubmluZykgOiB0aGlzLl9xdWV1ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHF1ZXVlKSB7XG4gICAgICAgICAgICBpZiAodGFzay5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuKCkge1xuICAgICAgICBhc3NlcnQoIXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSB0aGlzLl9xdWV1ZTtcblxuICAgICAgICAvLyBUYXNrcyBxdWV1ZWQgYnkgY2FsbGJhY2tzIGluIHRoZSBjdXJyZW50IHF1ZXVlIHNob3VsZCBiZSBleGVjdXRlZFxuICAgICAgICAvLyBvbiB0aGUgbmV4dCBydW4sIG5vdCB0aGUgY3VycmVudCBydW4uXG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHF1ZXVlKSB7XG4gICAgICAgICAgICBpZiAodGFzay5jYW5jZWxsZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFzay5jYWxsYmFjaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NsZWFyZWQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50bHlSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFza1F1ZXVlO1xuIiwiLy8gQGZsb3dcblxuY29uc3QgZGVmYXVsdExvY2FsZSA9IHtcbiAgICAnRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXInOiAnRW50ZXIgZnVsbHNjcmVlbicsXG4gICAgJ0Z1bGxzY3JlZW5Db250cm9sLkV4aXQnOiAnRXhpdCBmdWxsc2NyZWVuJyxcbiAgICAnR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbic6ICdGaW5kIG15IGxvY2F0aW9uJyxcbiAgICAnR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSc6ICdMb2NhdGlvbiBub3QgYXZhaWxhYmxlJyxcbiAgICAnTG9nb0NvbnRyb2wuVGl0bGUnOiAnTWFwYm94IGxvZ28nLFxuICAgICdOYXZpZ2F0aW9uQ29udHJvbC5SZXNldEJlYXJpbmcnOiAnUmVzZXQgYmVhcmluZyB0byBub3J0aCcsXG4gICAgJ05hdmlnYXRpb25Db250cm9sLlpvb21Jbic6ICdab29tIGluJyxcbiAgICAnTmF2aWdhdGlvbkNvbnRyb2wuWm9vbU91dCc6ICdab29tIG91dCcsXG4gICAgJ1NjYWxlQ29udHJvbC5GZWV0JzogJ2Z0JyxcbiAgICAnU2NhbGVDb250cm9sLk1ldGVycyc6ICdtJyxcbiAgICAnU2NhbGVDb250cm9sLktpbG9tZXRlcnMnOiAna20nLFxuICAgICdTY2FsZUNvbnRyb2wuTWlsZXMnOiAnbWknLFxuICAgICdTY2FsZUNvbnRyb2wuTmF1dGljYWxNaWxlcyc6ICdubSdcblxufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdExvY2FsZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZSwgdW5pcXVlSWR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5jb25zdCB7SFRNTEltYWdlRWxlbWVudCwgSFRNTEVsZW1lbnQsIEltYWdlQml0bWFwfSA9IHdpbmRvdztcbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtnZXRJbWFnZSwgZ2V0SlNPTiwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IFN0eWxlIGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IFBhaW50ZXIgZnJvbSAnLi4vcmVuZGVyL3BhaW50ZXInO1xuaW1wb3J0IFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCBIYXNoIGZyb20gJy4vaGFzaCc7XG5pbXBvcnQgYmluZEhhbmRsZXJzIGZyb20gJy4vYmluZF9oYW5kbGVycyc7XG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vY2FtZXJhJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IEF0dHJpYnV0aW9uQ29udHJvbCBmcm9tICcuL2NvbnRyb2wvYXR0cmlidXRpb25fY29udHJvbCc7XG5pbXBvcnQgTG9nb0NvbnRyb2wgZnJvbSAnLi9jb250cm9sL2xvZ29fY29udHJvbCc7XG5pbXBvcnQgaXNTdXBwb3J0ZWQgZnJvbSAnQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge01hcE1vdXNlRXZlbnR9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBUYXNrUXVldWUgZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4uL3V0aWwvd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtQZXJmb3JtYW5jZU1hcmtlcnMsIFBlcmZvcm1hbmNlVXRpbHN9IGZyb20gJy4uL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5pbXBvcnQge3NldENhY2hlTGltaXRzfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1N0eWxlT3B0aW9ucywgU3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgdHlwZSB7TWFwRXZlbnQsIE1hcERhdGFFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2VJbnRlcmZhY2UsIFN0eWxlSW1hZ2VNZXRhZGF0YX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSBTY3JvbGxab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2Nyb2xsX3pvb20nO1xuaW1wb3J0IHR5cGUgQm94Wm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2JveF96b29tJztcbmltcG9ydCB0eXBlIERyYWdSb3RhdGVIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9kcmFnX3JvdGF0ZSc7XG5pbXBvcnQgdHlwZSBEcmFnUGFuSGFuZGxlciwge0RyYWdQYW5PcHRpb25zfSBmcm9tICcuL2hhbmRsZXIvZHJhZ19wYW4nO1xuaW1wb3J0IHR5cGUgS2V5Ym9hcmRIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9rZXlib2FyZCc7XG5pbXBvcnQgdHlwZSBEb3VibGVDbGlja1pvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9kYmxjbGlja196b29tJztcbmltcG9ydCB0eXBlIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlJztcbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gJy4vZGVmYXVsdF9sb2NhbGUnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICBTdHlsZVNwZWNpZmljYXRpb24sXG4gICAgTGlnaHRTcGVjaWZpY2F0aW9uLFxuICAgIFNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgQ29udHJvbFBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbnR5cGUgSUNvbnRyb2wgPSB7XG4gICAgb25BZGQobWFwOiBNYXApOiBIVE1MRWxlbWVudDtcbiAgICBvblJlbW92ZShtYXA6IE1hcCk6IHZvaWQ7XG5cbiAgICArZ2V0RGVmYXVsdFBvc2l0aW9uPzogKCkgPT4gQ29udHJvbFBvc2l0aW9uO1xufVxuLyogZXNsaW50LWVuYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuXG50eXBlIE1hcE9wdGlvbnMgPSB7XG4gICAgaGFzaD86IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgaW50ZXJhY3RpdmU/OiBib29sZWFuLFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBzdHJpbmcsXG4gICAgYmVhcmluZ1NuYXA/OiBudW1iZXIsXG4gICAgYXR0cmlidXRpb25Db250cm9sPzogYm9vbGVhbixcbiAgICBjdXN0b21BdHRyaWJ1dGlvbj86IHN0cmluZyB8IEFycmF5PHN0cmluZz4sXG4gICAgbG9nb1Bvc2l0aW9uPzogQ29udHJvbFBvc2l0aW9uLFxuICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ/OiBib29sZWFuLFxuICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcj86IGJvb2xlYW4sXG4gICAgYW50aWFsaWFzPzogYm9vbGVhbixcbiAgICByZWZyZXNoRXhwaXJlZFRpbGVzPzogYm9vbGVhbixcbiAgICBtYXhCb3VuZHM/OiBMbmdMYXRCb3VuZHNMaWtlLFxuICAgIHNjcm9sbFpvb20/OiBib29sZWFuLFxuICAgIG1pblpvb20/OiA/bnVtYmVyLFxuICAgIG1heFpvb20/OiA/bnVtYmVyLFxuICAgIG1pblBpdGNoPzogP251bWJlcixcbiAgICBtYXhQaXRjaD86ID9udW1iZXIsXG4gICAgYm94Wm9vbT86IGJvb2xlYW4sXG4gICAgZHJhZ1JvdGF0ZT86IGJvb2xlYW4sXG4gICAgZHJhZ1Bhbj86IERyYWdQYW5PcHRpb25zLFxuICAgIGtleWJvYXJkPzogYm9vbGVhbixcbiAgICBkb3VibGVDbGlja1pvb20/OiBib29sZWFuLFxuICAgIHRvdWNoWm9vbVJvdGF0ZT86IGJvb2xlYW4sXG4gICAgdHJhY2tSZXNpemU/OiBib29sZWFuLFxuICAgIGNlbnRlcj86IExuZ0xhdExpa2UsXG4gICAgem9vbT86IG51bWJlcixcbiAgICBiZWFyaW5nPzogbnVtYmVyLFxuICAgIHBpdGNoPzogbnVtYmVyLFxuICAgIHJlbmRlcldvcmxkQ29waWVzPzogYm9vbGVhbixcbiAgICBtYXhUaWxlQ2FjaGVTaXplPzogbnVtYmVyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q/OiBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24sXG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgICBsb2NhbGU/OiBPYmplY3Rcbn07XG5cbmNvbnN0IGRlZmF1bHRNaW5ab29tID0gLTI7XG5jb25zdCBkZWZhdWx0TWF4Wm9vbSA9IDIyO1xuXG4vLyB0aGUgZGVmYXVsdCB2YWx1ZXMsIGJ1dCBhbHNvIHRoZSB2YWxpZCByYW5nZVxuY29uc3QgZGVmYXVsdE1pblBpdGNoID0gMDtcbmNvbnN0IGRlZmF1bHRNYXhQaXRjaCA9IDYwO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBjZW50ZXI6IFswLCAwXSxcbiAgICB6b29tOiAwLFxuICAgIGJlYXJpbmc6IDAsXG4gICAgcGl0Y2g6IDAsXG5cbiAgICBtaW5ab29tOiBkZWZhdWx0TWluWm9vbSxcbiAgICBtYXhab29tOiBkZWZhdWx0TWF4Wm9vbSxcblxuICAgIG1pblBpdGNoOiBkZWZhdWx0TWluUGl0Y2gsXG4gICAgbWF4UGl0Y2g6IGRlZmF1bHRNYXhQaXRjaCxcblxuICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgIHNjcm9sbFpvb206IHRydWUsXG4gICAgYm94Wm9vbTogdHJ1ZSxcbiAgICBkcmFnUm90YXRlOiB0cnVlLFxuICAgIGRyYWdQYW46IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZG91YmxlQ2xpY2tab29tOiB0cnVlLFxuICAgIHRvdWNoWm9vbVJvdGF0ZTogdHJ1ZSxcblxuICAgIGJlYXJpbmdTbmFwOiA3LFxuICAgIGNsaWNrVG9sZXJhbmNlOiAzLFxuXG4gICAgaGFzaDogZmFsc2UsXG4gICAgYXR0cmlidXRpb25Db250cm9sOiB0cnVlLFxuXG4gICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogZmFsc2UsXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICB0cmFja1Jlc2l6ZTogdHJ1ZSxcbiAgICByZW5kZXJXb3JsZENvcGllczogdHJ1ZSxcbiAgICByZWZyZXNoRXhwaXJlZFRpbGVzOiB0cnVlLFxuICAgIG1heFRpbGVDYWNoZVNpemU6IG51bGwsXG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiAnc2Fucy1zZXJpZicsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogbnVsbCxcbiAgICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgICBmYWRlRHVyYXRpb246IDMwMCxcbiAgICBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IHRydWVcbn07XG5cbi8qKlxuICogVGhlIGBNYXBgIG9iamVjdCByZXByZXNlbnRzIHRoZSBtYXAgb24geW91ciBwYWdlLiBJdCBleHBvc2VzIG1ldGhvZHNcbiAqIGFuZCBwcm9wZXJ0aWVzIHRoYXQgZW5hYmxlIHlvdSB0byBwcm9ncmFtbWF0aWNhbGx5IGNoYW5nZSB0aGUgbWFwLFxuICogYW5kIGZpcmVzIGV2ZW50cyBhcyB1c2VycyBpbnRlcmFjdCB3aXRoIGl0LlxuICpcbiAqIFlvdSBjcmVhdGUgYSBgTWFwYCBieSBzcGVjaWZ5aW5nIGEgYGNvbnRhaW5lcmAgYW5kIG90aGVyIG9wdGlvbnMuXG4gKiBUaGVuIE1hcGJveCBHTCBKUyBpbml0aWFsaXplcyB0aGUgbWFwIG9uIHRoZSBwYWdlIGFuZCByZXR1cm5zIHlvdXIgYE1hcGBcbiAqIG9iamVjdC5cbiAqXG4gKiBAZXh0ZW5kcyBFdmVudGVkXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IG9wdGlvbnMuY29udGFpbmVyIFRoZSBIVE1MIGVsZW1lbnQgaW4gd2hpY2ggTWFwYm94IEdMIEpTIHdpbGwgcmVuZGVyIHRoZSBtYXAsIG9yIHRoZSBlbGVtZW50J3Mgc3RyaW5nIGBpZGAuIFRoZSBzcGVjaWZpZWQgZWxlbWVudCBtdXN0IGhhdmUgbm8gY2hpbGRyZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluWm9vbT0wXSBUaGUgbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKDAtMjQpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb209MjJdIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoMC0yNCkuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluUGl0Y2g9MF0gVGhlIG1pbmltdW0gcGl0Y2ggb2YgdGhlIG1hcCAoMC02MCkuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4UGl0Y2g9NjBdIFRoZSBtYXhpbXVtIHBpdGNoIG9mIHRoZSBtYXAgKDAtNjApLlxuICogQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBbb3B0aW9ucy5zdHlsZV0gVGhlIG1hcCdzIE1hcGJveCBzdHlsZS4gVGhpcyBtdXN0IGJlIGFuIGEgSlNPTiBvYmplY3QgY29uZm9ybWluZyB0b1xuICogdGhlIHNjaGVtYSBkZXNjcmliZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyksIG9yIGEgVVJMIHRvXG4gKiBzdWNoIEpTT04uXG4gKlxuICogVG8gbG9hZCBhIHN0eWxlIGZyb20gdGhlIE1hcGJveCBBUEksIHlvdSBjYW4gdXNlIGEgVVJMIG9mIHRoZSBmb3JtIGBtYXBib3g6Ly9zdHlsZXMvOm93bmVyLzpzdHlsZWAsXG4gKiB3aGVyZSBgOm93bmVyYCBpcyB5b3VyIE1hcGJveCBhY2NvdW50IG5hbWUgYW5kIGA6c3R5bGVgIGlzIHRoZSBzdHlsZSBJRC4gT3IgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAqIFt0aGUgcHJlZGVmaW5lZCBNYXBib3ggc3R5bGVzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcHMvKTpcbiAqXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L291dGRvb3JzLXYxMWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2xpZ2h0LXYxMGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2RhcmstdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXY5YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXN0cmVldHMtdjExYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1wcmV2aWV3LWRheS12NGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tcHJldmlldy1uaWdodC12NGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tZ3VpZGFuY2UtZGF5LXY0YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1ndWlkYW5jZS1uaWdodC12NGBcbiAqXG4gKiBUaWxlc2V0cyBob3N0ZWQgd2l0aCBNYXBib3ggY2FuIGJlIHN0eWxlLW9wdGltaXplZCBpZiB5b3UgYXBwZW5kIGA/b3B0aW1pemU9dHJ1ZWAgdG8gdGhlIGVuZCBvZiB5b3VyIHN0eWxlIFVSTCwgbGlrZSBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMT9vcHRpbWl6ZT10cnVlYC5cbiAqIExlYXJuIG1vcmUgYWJvdXQgc3R5bGUtb3B0aW1pemVkIHZlY3RvciB0aWxlcyBpbiBvdXIgW0FQSSBkb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uL21hcHMvI3JldHJpZXZlLXRpbGVzKS5cbiAqXG4gKiBAcGFyYW0geyhib29sZWFufHN0cmluZyl9IFtvcHRpb25zLmhhc2g9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCdzIHBvc2l0aW9uICh6b29tLCBjZW50ZXIgbGF0aXR1ZGUsIGNlbnRlciBsb25naXR1ZGUsIGJlYXJpbmcsIGFuZCBwaXRjaCkgd2lsbCBiZSBzeW5jZWQgd2l0aCB0aGUgaGFzaCBmcmFnbWVudCBvZiB0aGUgcGFnZSdzIFVSTC5cbiAqICAgRm9yIGV4YW1wbGUsIGBodHRwOi8vcGF0aC90by9teS9wYWdlLmh0bWwjMi41OS8zOS4yNi81My4wNy8tMjQuMS82MGAuXG4gKiAgIEFuIGFkZGl0aW9uYWwgc3RyaW5nIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIHRvIGluZGljYXRlIGEgcGFyYW1ldGVyLXN0eWxlZCBoYXNoLFxuICogICBlLmcuIGh0dHA6Ly9wYXRoL3RvL215L3BhZ2UuaHRtbCNtYXA9Mi41OS8zOS4yNi81My4wNy8tMjQuMS82MCZmb289YmFyLCB3aGVyZSBmb29cbiAqICAgaXMgYSBjdXN0b20gcGFyYW1ldGVyIGFuZCBiYXIgaXMgYW4gYXJiaXRyYXJ5IGhhc2ggZGlzdGluY3QgZnJvbSB0aGUgbWFwIGhhc2guXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmludGVyYWN0aXZlPXRydWVdIElmIGBmYWxzZWAsIG5vIG1vdXNlLCB0b3VjaCwgb3Iga2V5Ym9hcmQgbGlzdGVuZXJzIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIG1hcCwgc28gaXQgd2lsbCBub3QgcmVzcG9uZCB0byBpbnRlcmFjdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iZWFyaW5nU25hcD03XSBUaGUgdGhyZXNob2xkLCBtZWFzdXJlZCBpbiBkZWdyZWVzLCB0aGF0IGRldGVybWluZXMgd2hlbiB0aGUgbWFwJ3NcbiAqICAgYmVhcmluZyB3aWxsIHNuYXAgdG8gbm9ydGguIEZvciBleGFtcGxlLCB3aXRoIGEgYGJlYXJpbmdTbmFwYCBvZiA3LCBpZiB0aGUgdXNlciByb3RhdGVzXG4gKiAgIHRoZSBtYXAgd2l0aGluIDcgZGVncmVlcyBvZiBub3J0aCwgdGhlIG1hcCB3aWxsIGF1dG9tYXRpY2FsbHkgc25hcCB0byBleGFjdCBub3J0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGl0Y2hXaXRoUm90YXRlPXRydWVdIElmIGBmYWxzZWAsIHRoZSBtYXAncyBwaXRjaCAodGlsdCkgY29udHJvbCB3aXRoIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiB3aWxsIGJlIGRpc2FibGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNsaWNrVG9sZXJhbmNlPTNdIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IHRoZSBtb3VzZSBwb2ludGVyIGR1cmluZyBhIGNsaWNrIGZvciBpdCB0byBiZSBjb25zaWRlcmVkIGEgdmFsaWQgY2xpY2sgKGFzIG9wcG9zZWQgdG8gYSBtb3VzZSBkcmFnKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0cmlidXRpb25Db250cm9sPXRydWVdIElmIGB0cnVlYCwgYW4ge0BsaW5rIEF0dHJpYnV0aW9uQ29udHJvbH0gd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFwLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBbb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbl0gU3RyaW5nIG9yIHN0cmluZ3MgdG8gc2hvdyBpbiBhbiB7QGxpbmsgQXR0cmlidXRpb25Db250cm9sfS4gT25seSBhcHBsaWNhYmxlIGlmIGBvcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbGAgaXMgYHRydWVgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvZ29Qb3NpdGlvbj0nYm90dG9tLWxlZnQnXSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBNYXBib3ggd29yZG1hcmsgb24gdGhlIG1hcC4gVmFsaWQgb3B0aW9ucyBhcmUgYHRvcC1sZWZ0YCxgdG9wLXJpZ2h0YCwgYGJvdHRvbS1sZWZ0YCwgYGJvdHRvbS1yaWdodGAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCwgbWFwIGNyZWF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgcGVyZm9ybWFuY2Ugb2YgTWFwYm94XG4gKiAgIEdMIEpTIHdvdWxkIGJlIGRyYW1hdGljYWxseSB3b3JzZSB0aGFuIGV4cGVjdGVkIChpLmUuIGEgc29mdHdhcmUgcmVuZGVyZXIgd291bGQgYmUgdXNlZCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwJ3MgY2FudmFzIGNhbiBiZSBleHBvcnRlZCB0byBhIFBORyB1c2luZyBgbWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpYC4gVGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFudGlhbGlhc10gSWYgYHRydWVgLCB0aGUgZ2wgY29udGV4dCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBNU0FBIGFudGlhbGlhc2luZywgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgYW50aWFsaWFzaW5nIGN1c3RvbSBsYXllcnMuIHRoaXMgaXMgYGZhbHNlYCBieSBkZWZhdWx0IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzPXRydWVdIElmIGBmYWxzZWAsIHRoZSBtYXAgd29uJ3QgYXR0ZW1wdCB0byByZS1yZXF1ZXN0IHRpbGVzIG9uY2UgdGhleSBleHBpcmUgcGVyIHRoZWlyIEhUVFAgYGNhY2hlQ29udHJvbGAvYGV4cGlyZXNgIGhlYWRlcnMuXG4gKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IFtvcHRpb25zLm1heEJvdW5kc10gSWYgc2V0LCB0aGUgbWFwIHdpbGwgYmUgY29uc3RyYWluZWQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLnNjcm9sbFpvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJzY3JvbGwgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuIEFuIGBPYmplY3RgIHZhbHVlIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHtAbGluayBTY3JvbGxab29tSGFuZGxlciNlbmFibGV9LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ib3hab29tPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRyYWdSb3RhdGU9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLmRyYWdQYW49dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuIEFuIGBPYmplY3RgIHZhbHVlIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHtAbGluayBEcmFnUGFuSGFuZGxlciNlbmFibGV9LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5rZXlib2FyZD10cnVlXSBJZiBgdHJ1ZWAsIGtleWJvYXJkIHNob3J0Y3V0cyBhcmUgZW5hYmxlZCAoc2VlIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZG91YmxlQ2xpY2tab29tPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLnRvdWNoWm9vbVJvdGF0ZT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuIEFuIGBPYmplY3RgIHZhbHVlIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWNrUmVzaXplPXRydWVdICBJZiBgdHJ1ZWAsIHRoZSBtYXAgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2l6ZSB3aGVuIHRoZSBicm93c2VyIHdpbmRvdyByZXNpemVzLlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbb3B0aW9ucy5jZW50ZXI9WzAsIDBdXSBUaGUgaW5pdGFsIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludCBvZiB0aGUgbWFwLiBJZiBgY2VudGVyYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYFswLCAwXWAgTm90ZTogTWFwYm94IEdMIHVzZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBjb29yZGluYXRlIG9yZGVyIChhcyBvcHBvc2VkIHRvIGxhdGl0dWRlLCBsb25naXR1ZGUpIHRvIG1hdGNoIEdlb0pTT04uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuem9vbT0wXSBUaGUgaW5pdGlhbCB6b29tIGxldmVsIG9mIHRoZSBtYXAuIElmIGB6b29tYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmc9MF0gVGhlIGluaXRpYWwgYmVhcmluZyAocm90YXRpb24pIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UgZnJvbSBub3J0aC4gSWYgYGJlYXJpbmdgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGl0Y2g9MF0gVGhlIGluaXRpYWwgcGl0Y2ggKHRpbHQpIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgYXdheSBmcm9tIHRoZSBwbGFuZSBvZiB0aGUgc2NyZWVuICgwLTYwKS4gSWYgYHBpdGNoYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBbb3B0aW9ucy5ib3VuZHNdIFRoZSBpbml0aWFsIGJvdW5kcyBvZiB0aGUgbWFwLiBJZiBgYm91bmRzYCBpcyBzcGVjaWZpZWQsIGl0IG92ZXJyaWRlcyBgY2VudGVyYCBhbmQgYHpvb21gIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZml0Qm91bmRzT3B0aW9uc10gQSBbYGZpdEJvdW5kc2BdKCNtYXAjZml0Ym91bmRzKSBvcHRpb25zIG9iamVjdCB0byB1c2UgX29ubHlfIHdoZW4gZml0dGluZyB0aGUgaW5pdGlhbCBgYm91bmRzYCBwcm92aWRlZCBhYm92ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVuZGVyV29ybGRDb3BpZXM9dHJ1ZV0gIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4VGlsZUNhY2hlU2l6ZT1udWxsXSAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbGVzIHN0b3JlZCBpbiB0aGUgdGlsZSBjYWNoZSBmb3IgYSBnaXZlbiBzb3VyY2UuIElmIG9taXR0ZWQsIHRoZSBjYWNoZSB3aWxsIGJlIGR5bmFtaWNhbGx5IHNpemVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAqICAgZm9udC1mYW1pbHkgZm9yIGxvY2FsbHkgb3ZlcnJpZGluZyBnZW5lcmF0aW9uIG9mIGdseXBocyBpbiB0aGUgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnLCAnSGlyYWdhbmEnLCAnS2F0YWthbmEnIGFuZCAnSGFuZ3VsIFN5bGxhYmxlcycgcmFuZ2VzLlxuICogICBJbiB0aGVzZSByYW5nZXMsIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgd2lsbCBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIGZvbnQtd2VpZ2h0IGtleXdvcmRzIChsaWdodC9yZWd1bGFyL21lZGl1bS9ib2xkKS5cbiAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuICBOb3RlIHRoYXQgW01hcGJveCBTdHVkaW9dKGh0dHBzOi8vc3R1ZGlvLm1hcGJveC5jb20vKSBzZXRzIHRoaXMgdmFsdWUgdG8gYGZhbHNlYCBieSBkZWZhdWx0LlxuICogICBUaGUgcHVycG9zZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBhdm9pZCBiYW5kd2lkdGgtaW50ZW5zaXZlIGdseXBoIHNlcnZlciByZXF1ZXN0cy4gKFNlZSBbVXNlIGxvY2FsbHkgZ2VuZXJhdGVkIGlkZW9ncmFwaHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYWwtaWRlb2dyYXBocykuKVxuICogQHBhcmFtIHtSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb259IFtvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3Q9bnVsbF0gQSBjYWxsYmFjayBydW4gYmVmb3JlIHRoZSBNYXAgbWFrZXMgYSByZXF1ZXN0IGZvciBhbiBleHRlcm5hbCBVUkwuIFRoZSBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIHVybCwgc2V0IGhlYWRlcnMsIG9yIHNldCB0aGUgY3JlZGVudGlhbHMgcHJvcGVydHkgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy5cbiAqICAgRXhwZWN0ZWQgdG8gcmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgYHVybGAgcHJvcGVydHkgYW5kIG9wdGlvbmFsbHkgYGhlYWRlcnNgIGFuZCBgY3JlZGVudGlhbHNgIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZz1mYWxzZV0gSWYgYHRydWVgLCBSZXNvdXJjZSBUaW1pbmcgQVBJIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGZvciByZXF1ZXN0cyBtYWRlIGJ5IEdlb0pTT04gYW5kIFZlY3RvciBUaWxlIHdlYiB3b3JrZXJzICh0aGlzIGluZm9ybWF0aW9uIGlzIG5vcm1hbGx5IGluYWNjZXNzaWJsZSBmcm9tIHRoZSBtYWluIEphdmFzY3JpcHQgdGhyZWFkKS4gSW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZCBpbiBhIGByZXNvdXJjZVRpbWluZ2AgcHJvcGVydHkgb2YgcmVsZXZhbnQgYGRhdGFgIGV2ZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mYWRlRHVyYXRpb249MzAwXSBDb250cm9scyB0aGUgZHVyYXRpb24gb2YgdGhlIGZhZGUtaW4vZmFkZS1vdXQgYW5pbWF0aW9uIGZvciBsYWJlbCBjb2xsaXNpb25zLCBpbiBtaWxsaXNlY29uZHMuIFRoaXMgc2V0dGluZyBhZmZlY3RzIGFsbCBzeW1ib2wgbGF5ZXJzLiBUaGlzIHNldHRpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBkdXJhdGlvbiBvZiBydW50aW1lIHN0eWxpbmcgdHJhbnNpdGlvbnMgb3IgcmFzdGVyIHRpbGUgY3Jvc3MtZmFkaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM9dHJ1ZV0gSWYgYHRydWVgLCBzeW1ib2xzIGZyb20gbXVsdGlwbGUgc291cmNlcyBjYW4gY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIgZHVyaW5nIGNvbGxpc2lvbiBkZXRlY3Rpb24uIElmIGBmYWxzZWAsIGNvbGxpc2lvbiBkZXRlY3Rpb24gaXMgcnVuIHNlcGFyYXRlbHkgZm9yIHRoZSBzeW1ib2xzIGluIGVhY2ggc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFjY2Vzc1Rva2VuPW51bGxdIElmIHNwZWNpZmllZCwgbWFwIHdpbGwgdXNlIHRoaXMgdG9rZW4gaW5zdGVhZCBvZiB0aGUgb25lIGRlZmluZWQgaW4gbWFwYm94Z2wuYWNjZXNzVG9rZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlPW51bGxdIEEgcGF0Y2ggdG8gYXBwbHkgdG8gdGhlIGRlZmF1bHQgbG9jYWxpemF0aW9uIHRhYmxlIGZvciBVSSBzdHJpbmdzLCBlLmcuIGNvbnRyb2wgdG9vbHRpcHMuIFRoZSBgbG9jYWxlYCBvYmplY3QgbWFwcyBuYW1lc3BhY2VkIFVJIHN0cmluZyBJRHMgdG8gdHJhbnNsYXRlZCBzdHJpbmdzIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2U7IHNlZSBgc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzYCBmb3IgYW4gZXhhbXBsZSB3aXRoIGFsbCBzdXBwb3J0ZWQgc3RyaW5nIElEcy4gVGhlIG9iamVjdCBtYXkgc3BlY2lmeSBhbGwgVUkgc3RyaW5ncyAodGhlcmVieSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgdHJhbnNsYXRpb24pIG9yIG9ubHkgYSBzdWJzZXQgb2Ygc3RyaW5ncyAodGhlcmVieSBwYXRjaGluZyB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbiB0YWJsZSkuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoe1xuICogICBjb250YWluZXI6ICdtYXAnLFxuICogICBjZW50ZXI6IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XSxcbiAqICAgem9vbTogMTMsXG4gKiAgIHN0eWxlOiBzdHlsZV9vYmplY3QsXG4gKiAgIGhhc2g6IHRydWUsXG4gKiAgIHRyYW5zZm9ybVJlcXVlc3Q6ICh1cmwsIHJlc291cmNlVHlwZSk9PiB7XG4gKiAgICAgaWYocmVzb3VyY2VUeXBlID09PSAnU291cmNlJyAmJiB1cmwuc3RhcnRzV2l0aCgnaHR0cDovL215SG9zdCcpKSB7XG4gKiAgICAgICByZXR1cm4ge1xuICogICAgICAgIHVybDogdXJsLnJlcGxhY2UoJ2h0dHAnLCAnaHR0cHMnKSxcbiAqICAgICAgICBoZWFkZXJzOiB7ICdteS1jdXN0b20taGVhZGVyJzogdHJ1ZX0sXG4gKiAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyAgLy8gSW5jbHVkZSBjb29raWVzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHNcbiAqICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBAc2VlIFtEaXNwbGF5IGEgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlcy8pXG4gKi9cbmNsYXNzIE1hcCBleHRlbmRzIENhbWVyYSB7XG4gICAgc3R5bGU6IFN0eWxlO1xuICAgIHBhaW50ZXI6IFBhaW50ZXI7XG5cbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfbWlzc2luZ0NTU0NhbmFyeTogSFRNTEVsZW1lbnQ7XG4gICAgX2NhbnZhc0NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRyb2xDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9jb250cm9sUG9zaXRpb25zOiB7W186IHN0cmluZ106IEhUTUxFbGVtZW50fTtcbiAgICBfaW50ZXJhY3RpdmU6ID9ib29sZWFuO1xuICAgIF9zaG93VGlsZUJvdW5kYXJpZXM6ID9ib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6ID9ib29sZWFuO1xuICAgIF9zaG93UGFkZGluZzogP2Jvb2xlYW47XG4gICAgX3Nob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbjtcbiAgICBfcmVwYWludDogP2Jvb2xlYW47XG4gICAgX3ZlcnRpY2VzOiA/Ym9vbGVhbjtcbiAgICBfY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBfbWF4VGlsZUNhY2hlU2l6ZTogbnVtYmVyO1xuICAgIF9mcmFtZTogP0NhbmNlbGFibGU7XG4gICAgX3N0eWxlRGlydHk6ID9ib29sZWFuO1xuICAgIF9zb3VyY2VzRGlydHk6ID9ib29sZWFuO1xuICAgIF9wbGFjZW1lbnREaXJ0eTogP2Jvb2xlYW47XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICAvLyBhY2NvdW50cyBmb3IgcGxhY2VtZW50IGZpbmlzaGluZyBhcyB3ZWxsXG4gICAgX2Z1bGx5TG9hZGVkOiBib29sZWFuO1xuICAgIF90cmFja1Jlc2l6ZTogYm9vbGVhbjtcbiAgICBfcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBib29sZWFuO1xuICAgIF9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBib29sZWFuO1xuICAgIF9hbnRpYWxpYXM6IGJvb2xlYW47XG4gICAgX3JlZnJlc2hFeHBpcmVkVGlsZXM6IGJvb2xlYW47XG4gICAgX2hhc2g6IEhhc2g7XG4gICAgX2RlbGVnYXRlZExpc3RlbmVyczogYW55O1xuICAgIF9mYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICBfY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuO1xuICAgIF9jcm9zc0ZhZGluZ0ZhY3RvcjogbnVtYmVyO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgX3JlbmRlclRhc2tRdWV1ZTogVGFza1F1ZXVlO1xuICAgIF9jb250cm9sczogQXJyYXk8SUNvbnRyb2w+O1xuICAgIF9tYXBJZDogbnVtYmVyO1xuICAgIF9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBfcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuICAgIF9sb2NhbGU6IE9iamVjdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgaW4gYW5kIG91dCB3aXRoIGEgc2Nyb2xsIHdoZWVsIG9yIHRyYWNrcGFkLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgc2Nyb2xsWm9vbWAgaW4gdGhlIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBzY3JvbGxab29tOiBTY3JvbGxab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgdXNpbmcgYSBkcmFnIGdlc3R1cmUgd2l0aCB0aGUgU2hpZnQga2V5IHByZXNzZWQuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBib3hab29tYCBpbiB0aGUge0BsaW5rIEJveFpvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGJveFpvb206IEJveFpvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgcm90YXRpbmcgdGhlIG1hcCB3aGlsZSBkcmFnZ2luZyB3aXRoIHRoZSByaWdodFxuICAgICAqIG1vdXNlIGJ1dHRvbiBvciB3aXRoIHRoZSBDb250cm9sIGtleSBwcmVzc2VkLiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRyYWdSb3RhdGVgXG4gICAgICogaW4gdGhlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkcmFnUm90YXRlOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIGRyYWdnaW5nIHRoZSBtYXAgd2l0aCBhIG1vdXNlIG9yIHRvdWNoIGdlc3R1cmUuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkcmFnUGFuYCBpbiB0aGUge0BsaW5rIERyYWdQYW5IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRyYWdQYW46IERyYWdQYW5IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmcga2V5Ym9hcmRcbiAgICAgKiBzaG9ydGN1dHMuIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBga2V5Ym9hcmRgIGluIHRoZSB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGtleWJvYXJkOiBLZXlib2FyZEhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBieSBkb3VibGUgY2xpY2tpbmcuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkb3VibGVDbGlja1pvb21gIGluIHRoZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkb3VibGVDbGlja1pvb206IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBvciByb3RhdGUgdGhlIG1hcCB3aXRoIHRvdWNoIGdlc3R1cmVzLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgdG91Y2hab29tUm90YXRlYCBpbiB0aGUge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgdG91Y2hab29tUm90YXRlOiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWFwT3B0aW9ucykge1xuICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLm1hcmsoUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pblpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1heFpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1pblpvb20gPiBvcHRpb25zLm1heFpvb20pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5ab29tYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5taW5QaXRjaCAhPSBudWxsICYmIG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoID4gb3B0aW9ucy5tYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5QaXRjaGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluUGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoIDwgZGVmYXVsdE1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1pblBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1heFBpdGNoID4gZGVmYXVsdE1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1heFBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybShvcHRpb25zLm1pblpvb20sIG9wdGlvbnMubWF4Wm9vbSwgb3B0aW9ucy5taW5QaXRjaCwgb3B0aW9ucy5tYXhQaXRjaCwgb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIHN1cGVyKHRyYW5zZm9ybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5faW50ZXJhY3RpdmUgPSBvcHRpb25zLmludGVyYWN0aXZlO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplO1xuICAgICAgICB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuICAgICAgICB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcbiAgICAgICAgdGhpcy5fYW50aWFsaWFzID0gb3B0aW9ucy5hbnRpYWxpYXM7XG4gICAgICAgIHRoaXMuX3RyYWNrUmVzaXplID0gb3B0aW9ucy50cmFja1Jlc2l6ZTtcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwO1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXhwaXJlZFRpbGVzID0gb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzO1xuICAgICAgICB0aGlzLl9mYWRlRHVyYXRpb24gPSBvcHRpb25zLmZhZGVEdXJhdGlvbjtcbiAgICAgICAgdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zID0gb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gMTtcbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZSA9IG5ldyBUYXNrUXVldWUoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFwSWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBleHRlbmQoe30sIGRlZmF1bHRMb2NhbGUsIG9wdGlvbnMubG9jYWxlKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0TWFuYWdlciA9IG5ldyBSZXF1ZXN0TWFuYWdlcihvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3QsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRhaW5lciAnJHtvcHRpb25zLmNvbnRhaW5lcn0nIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4Qm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEJvdW5kcyhvcHRpb25zLm1heEJvdW5kcyk7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaW5kb3dPbmxpbmUnLFxuICAgICAgICAgICAgJ19vbldpbmRvd1Jlc2l6ZScsXG4gICAgICAgICAgICAnX2NvbnRleHRMb3N0JyxcbiAgICAgICAgICAgICdfY29udGV4dFJlc3RvcmVkJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9zZXR1cENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbignbW92ZScsICgpID0+IHRoaXMuX3VwZGF0ZShmYWxzZSkpO1xuICAgICAgICB0aGlzLm9uKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fdXBkYXRlKGZhbHNlKSk7XG4gICAgICAgIHRoaXMub24oJ3pvb20nLCAoKSA9PiB0aGlzLl91cGRhdGUodHJ1ZSkpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMuX29uV2luZG93T25saW5lLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRIYW5kbGVycyh0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBoYXNoTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5oYXNoID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmhhc2gpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faGFzaCA9IG9wdGlvbnMuaGFzaCAmJiAobmV3IEhhc2goaGFzaE5hbWUpKS5hZGRUbyh0aGlzKTtcbiAgICAgICAgLy8gZG9uJ3Qgc2V0IHBvc2l0aW9uIGZyb20gb3B0aW9ucyBpZiBzZXQgdGhyb3VnaCBoYXNoXG4gICAgICAgIGlmICghdGhpcy5faGFzaCB8fCAhdGhpcy5faGFzaC5fb25IYXNoQ2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvKHtcbiAgICAgICAgICAgICAgICBjZW50ZXI6IG9wdGlvbnMuY2VudGVyLFxuICAgICAgICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICAgICAgICBiZWFyaW5nOiBvcHRpb25zLmJlYXJpbmcsXG4gICAgICAgICAgICAgICAgcGl0Y2g6IG9wdGlvbnMucGl0Y2hcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZml0Qm91bmRzKG9wdGlvbnMuYm91bmRzLCBleHRlbmQoe30sIG9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucywge2R1cmF0aW9uOiAwfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNpemUoKTtcblxuICAgICAgICB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3R5bGUpIHRoaXMuc2V0U3R5bGUob3B0aW9ucy5zdHlsZSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpXG4gICAgICAgICAgICB0aGlzLmFkZENvbnRyb2wobmV3IEF0dHJpYnV0aW9uQ29udHJvbCh7Y3VzdG9tQXR0cmlidXRpb246IG9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb259KSk7XG5cbiAgICAgICAgdGhpcy5hZGRDb250cm9sKG5ldyBMb2dvQ29udHJvbCgpLCBvcHRpb25zLmxvZ29Qb3NpdGlvbik7XG5cbiAgICAgICAgdGhpcy5vbignc3R5bGUubG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG8oKHRoaXMuc3R5bGUuc3R5bGVzaGVldDogYW55KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50OiBNYXBEYXRhRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5kYXRhVHlwZSA9PT0gJ3N0eWxlJyk7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KGAke2V2ZW50LmRhdGFUeXBlfWRhdGFgLCBldmVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZGF0YWxvYWRpbmcnLCAoZXZlbnQ6IE1hcERhdGFFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudChgJHtldmVudC5kYXRhVHlwZX1kYXRhbG9hZGluZ2AsIGV2ZW50KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBSZXR1cm5zIGEgdW5pcXVlIG51bWJlciBmb3IgdGhpcyBtYXAgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCBmb3IgdGhlIE1hcExvYWRFdmVudFxuICAgICogdG8gbWFrZSBzdXJlIHdlIG9ubHkgZmlyZSBvbmUgZXZlbnQgcGVyIGluc3RhbnRpYXRlZCBtYXAgb2JqZWN0LlxuICAgICogQHByaXZhdGVcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgKi9cbiAgICBfZ2V0TWFwSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXBJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIHtAbGluayBJQ29udHJvbH0gdG8gdGhlIG1hcCwgY2FsbGluZyBgY29udHJvbC5vbkFkZCh0aGlzKWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0lDb250cm9sfSBjb250cm9sIFRoZSB7QGxpbmsgSUNvbnRyb2x9IHRvIGFkZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bvc2l0aW9uXSBwb3NpdGlvbiBvbiB0aGUgbWFwIHRvIHdoaWNoIHRoZSBjb250cm9sIHdpbGwgYmUgYWRkZWQuXG4gICAgICogVmFsaWQgdmFsdWVzIGFyZSBgJ3RvcC1sZWZ0J2AsIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIERlZmF1bHRzIHRvIGAndG9wLXJpZ2h0J2AuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBBZGQgem9vbSBhbmQgcm90YXRpb24gY29udHJvbHMgdG8gdGhlIG1hcC5cbiAgICAgKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuTmF2aWdhdGlvbkNvbnRyb2woKSk7XG4gICAgICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAgICAgKi9cbiAgICBhZGRDb250cm9sKGNvbnRyb2w6IElDb250cm9sLCBwb3NpdGlvbj86IENvbnRyb2xQb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCAmJiBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24gPSBjb250cm9sLmdldERlZmF1bHRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9ICd0b3AtcmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vbkFkZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2xFbGVtZW50ID0gY29udHJvbC5vbkFkZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMucHVzaChjb250cm9sKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbkNvbnRhaW5lciA9IHRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbcG9zaXRpb25dO1xuICAgICAgICBpZiAocG9zaXRpb24uaW5kZXhPZignYm90dG9tJykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3NpdGlvbkNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY29udHJvbEVsZW1lbnQsIHBvc2l0aW9uQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25Db250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgZnJvbSB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJQ29udHJvbH0gY29udHJvbCBUaGUge0BsaW5rIElDb250cm9sfSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBEZWZpbmUgYSBuZXcgbmF2aWdhdGlvbiBjb250cm9sLlxuICAgICAqIHZhciBuYXZpZ2F0aW9uID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gICAgICogLy8gQWRkIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIHRvIHRoZSBtYXAuXG4gICAgICogbWFwLmFkZENvbnRyb2wobmF2aWdhdGlvbik7XG4gICAgICogLy8gUmVtb3ZlIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIGZyb20gdGhlIG1hcC5cbiAgICAgKiBtYXAucmVtb3ZlQ29udHJvbChuYXZpZ2F0aW9uKTtcbiAgICAgKi9cbiAgICByZW1vdmVDb250cm9sKGNvbnRyb2w6IElDb250cm9sKSB7XG4gICAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5vblJlbW92ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgdG8gbWFwLnJlbW92ZUNvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNpID0gdGhpcy5fY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgaWYgKGNpID4gLTEpIHRoaXMuX2NvbnRyb2xzLnNwbGljZShjaSwgMSk7XG4gICAgICAgIGNvbnRyb2wub25SZW1vdmUodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZXMgdGhlIG1hcCBhY2NvcmRpbmcgdG8gdGhlIGRpbWVuc2lvbnMgb2YgaXRzXG4gICAgICogYGNvbnRhaW5lcmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAgaXMgcmVzaXplZCBwcm9ncmFtbWF0aWNhbGx5XG4gICAgICogb3Igd2hlbiB0aGUgbWFwIGlzIHNob3duIGFmdGVyIGJlaW5nIGluaXRpYWxseSBoaWRkZW4gd2l0aCBDU1MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBwYXNzZWQgdG8gYG1vdmVzdGFydGAsIGBtb3ZlYCwgYHJlc2l6ZWAsIGFuZCBgbW92ZWVuZGBcbiAgICAgKiAgIGV2ZW50cyB0aGF0IGdldCB0cmlnZ2VyZWQgYXMgYSByZXN1bHQgb2YgcmVzaXplLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRpZmZlcmVudGlhdGluZyB0aGVcbiAgICAgKiAgIHNvdXJjZSBvZiBhbiBldmVudCAoZm9yIGV4YW1wbGUsIHVzZXItaW5pdGlhdGVkIG9yIHByb2dyYW1tYXRpY2FsbHktdHJpZ2dlcmVkIGV2ZW50cykuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBSZXNpemUgdGhlIG1hcCB3aGVuIHRoZSBtYXAgY29udGFpbmVyIGlzIHNob3duXG4gICAgICogLy8gYWZ0ZXIgYmVpbmcgaW5pdGlhbGx5IGhpZGRlbiB3aXRoIENTUy5cbiAgICAgKiB2YXIgbWFwRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpO1xuICAgICAqIGlmIChtYXBEaXYuc3R5bGUudmlzaWJpbGl0eSA9PT0gdHJ1ZSkgbWFwLnJlc2l6ZSgpO1xuICAgICAqL1xuICAgIHJlc2l6ZShldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBkaW1lbnNpb25zWzFdO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyZXNpemUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IFRoZSBnZW9ncmFwaGljYWwgYm91bmRzIG9mIHRoZSBtYXAgYXMge0BsaW5rIExuZ0xhdEJvdW5kc30uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYm91bmRzID0gbWFwLmdldEJvdW5kcygpO1xuICAgICAqL1xuICAgIGdldEJvdW5kcygpOiBMbmdMYXRCb3VuZHMge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0Qm91bmRzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBnZW9ncmFwaGljYWwgYm91bmRzIHRoZSBtYXAgaXMgY29uc3RyYWluZWQgdG8sIG9yIGBudWxsYCBpZiBub25lIHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXhCb3VuZHMgPSBtYXAuZ2V0TWF4Qm91bmRzKCk7XG4gICAgICovXG4gICAgZ2V0TWF4Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0TWF4Qm91bmRzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBQYW4gYW5kIHpvb20gb3BlcmF0aW9ucyBhcmUgY29uc3RyYWluZWQgd2l0aGluIHRoZXNlIGJvdW5kcy5cbiAgICAgKiBJZiBhIHBhbiBvciB6b29tIGlzIHBlcmZvcm1lZCB0aGF0IHdvdWxkXG4gICAgICogZGlzcGxheSByZWdpb25zIG91dHNpZGUgdGhlc2UgYm91bmRzLCB0aGUgbWFwIHdpbGxcbiAgICAgKiBpbnN0ZWFkIGRpc3BsYXkgYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbFxuICAgICAqIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBvcGVyYXRpb24ncyByZXF1ZXN0IHdoaWxlIHN0aWxsXG4gICAgICogcmVtYWluaW5nIHdpdGhpbiB0aGUgYm91bmRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gYm91bmRzIFRoZSBtYXhpbXVtIGJvdW5kcyB0byBzZXQuIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIG1hcCdzIG1heGltdW0gYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRGVmaW5lIGJvdW5kcyB0aGF0IGNvbmZvcm0gdG8gdGhlIGBMbmdMYXRCb3VuZHNMaWtlYCBvYmplY3QuXG4gICAgICogdmFyIGJvdW5kcyA9IFtcbiAgICAgKiAgIFstNzQuMDQ3MjgsIDQwLjY4MzkyXSwgLy8gW3dlc3QsIHNvdXRoXVxuICAgICAqICAgWy03My45MTA1OCwgNDAuODc3NjRdICAvLyBbZWFzdCwgbm9ydGhdXG4gICAgICogXTtcbiAgICAgKiAvLyBTZXQgdGhlIG1hcCdzIG1heCBib3VuZHMuXG4gICAgICogbWFwLnNldE1heEJvdW5kcyhib3VuZHMpO1xuICAgICAqL1xuICAgIHNldE1heEJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0uc2V0TWF4Qm91bmRzKExuZ0xhdEJvdW5kcy5jb252ZXJ0KGJvdW5kcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1pbmltdW0gem9vbSBsZXZlbC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsIGlzIGxvd2VyIHRoYW4gdGhlIG5ldyBtaW5pbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCB6b29tIHRvIHRoZSBuZXcgbWluaW11bS5cbiAgICAgKlxuICAgICAqIEl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gem9vbSBvdXQgYW5kIHJlYWNoIHRoZSBzZXQgYG1pblpvb21gLlxuICAgICAqIE90aGVyIGZhY3RvcnMgc3VjaCBhcyBtYXAgaGVpZ2h0IG1heSByZXN0cmljdCB6b29taW5nLiBGb3IgZXhhbXBsZSxcbiAgICAgKiBpZiB0aGUgbWFwIGlzIDUxMnB4IHRhbGwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gem9vbSBiZWxvdyB6b29tIDBcbiAgICAgKiBubyBtYXR0ZXIgd2hhdCB0aGUgYG1pblpvb21gIGlzIHNldCB0by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWluWm9vbSBUaGUgbWluaW11bSB6b29tIGxldmVsIHRvIHNldCAoLTIgLSAyNCkuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1pbmltdW0gem9vbSAoaS5lLiBzZXRzIGl0IHRvIC0yKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRNaW5ab29tKDEyLjI1KTtcbiAgICAgKi9cbiAgICBzZXRNaW5ab29tKG1pblpvb20/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWluWm9vbSA9IG1pblpvb20gPT09IG51bGwgfHwgbWluWm9vbSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1pblpvb20gOiBtaW5ab29tO1xuXG4gICAgICAgIGlmIChtaW5ab29tID49IGRlZmF1bHRNaW5ab29tICYmIG1pblpvb20gPD0gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWluWm9vbSA9IG1pblpvb207XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Wm9vbSgpIDwgbWluWm9vbSkgdGhpcy5zZXRab29tKG1pblpvb20pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAke2RlZmF1bHRNaW5ab29tfSBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWluaW11bSBhbGxvd2FibGUgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1pblpvb21cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtaW5ab29tID0gbWFwLmdldE1pblpvb20oKTtcbiAgICAgKi9cbiAgICBnZXRNaW5ab29tKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1heGltdW0gem9vbSBsZXZlbC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsIGlzIGhpZ2hlciB0aGFuIHRoZSBuZXcgbWF4aW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgem9vbSB0byB0aGUgbmV3IG1heGltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFpvb20gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBzZXQuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1heGltdW0gem9vbSAoc2V0cyBpdCB0byAyMikuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TWF4Wm9vbSgxOC43NSk7XG4gICAgICovXG4gICAgc2V0TWF4Wm9vbShtYXhab29tPzogP251bWJlcikge1xuXG4gICAgICAgIG1heFpvb20gPSBtYXhab29tID09PSBudWxsIHx8IG1heFpvb20gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXhab29tIDogbWF4Wm9vbTtcblxuICAgICAgICBpZiAobWF4Wm9vbSA+PSB0aGlzLnRyYW5zZm9ybS5taW5ab29tKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5tYXhab29tID0gbWF4Wm9vbTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRab29tKCkgPiBtYXhab29tKSB0aGlzLnNldFpvb20obWF4Wm9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1heGltdW0gYWxsb3dhYmxlIHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtYXhab29tXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWF4Wm9vbSA9IG1hcC5nZXRNYXhab29tKCk7XG4gICAgICovXG4gICAgZ2V0TWF4Wm9vbSgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtaW5pbXVtIHBpdGNoLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHBpdGNoIGlzIGxvd2VyIHRoYW4gdGhlIG5ldyBtaW5pbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCBwaXRjaCB0byB0aGUgbmV3IG1pbmltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1pblBpdGNoIFRoZSBtaW5pbXVtIHBpdGNoIHRvIHNldCAoMC02MCkuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1pbmltdW0gcGl0Y2ggKGkuZS4gc2V0cyBpdCB0byAwKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRNaW5QaXRjaChtaW5QaXRjaD86ID9udW1iZXIpIHtcblxuICAgICAgICBtaW5QaXRjaCA9IG1pblBpdGNoID09PSBudWxsIHx8IG1pblBpdGNoID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWluUGl0Y2ggOiBtaW5QaXRjaDtcblxuICAgICAgICBpZiAobWluUGl0Y2ggPCBkZWZhdWx0TWluUGl0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtkZWZhdWx0TWluUGl0Y2h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluUGl0Y2ggPj0gZGVmYXVsdE1pblBpdGNoICYmIG1pblBpdGNoIDw9IHRoaXMudHJhbnNmb3JtLm1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaCA9IG1pblBpdGNoO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBpdGNoKCkgPCBtaW5QaXRjaCkgdGhpcy5zZXRQaXRjaChtaW5QaXRjaCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAke2RlZmF1bHRNaW5QaXRjaH0gYW5kIHRoZSBjdXJyZW50IG1heFBpdGNoLCBpbmNsdXNpdmVgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtaW5pbXVtIGFsbG93YWJsZSBwaXRjaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1pblBpdGNoXG4gICAgICovXG4gICAgZ2V0TWluUGl0Y2goKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaDsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1heGltdW0gcGl0Y2guXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2ggaXMgaGlnaGVyIHRoYW4gdGhlIG5ldyBtYXhpbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCBwaXRjaCB0byB0aGUgbmV3IG1heGltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFBpdGNoIFRoZSBtYXhpbXVtIHBpdGNoIHRvIHNldC5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWF4aW11bSBwaXRjaCAoc2V0cyBpdCB0byA2MCkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TWF4UGl0Y2gobWF4UGl0Y2g/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWF4UGl0Y2ggPSBtYXhQaXRjaCA9PT0gbnVsbCB8fCBtYXhQaXRjaCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1heFBpdGNoIDogbWF4UGl0Y2g7XG5cbiAgICAgICAgaWYgKG1heFBpdGNoID4gZGVmYXVsdE1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1heFBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1heFBpdGNoID49IHRoaXMudHJhbnNmb3JtLm1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaCA9IG1heFBpdGNoO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBpdGNoKCkgPiBtYXhQaXRjaCkgdGhpcy5zZXRQaXRjaChtYXhQaXRjaCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblBpdGNoYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWF4aW11bSBhbGxvd2FibGUgcGl0Y2guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtYXhQaXRjaFxuICAgICAqL1xuICAgIGdldE1heFBpdGNoKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIGByZW5kZXJXb3JsZENvcGllc2AuIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAgICAgKiAtIFdoZW4gdGhlIG1hcCBpcyB6b29tZWQgb3V0IGZhciBlbm91Z2ggdGhhdCBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgd29ybGQgZG9lcyBub3QgZmlsbCB0aGUgbWFwJ3MgZW50aXJlXG4gICAgICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gICAgICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gICAgICogbWFwIGFuZCB0aGUgb3RoZXIgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgbWFwKSBhdCBldmVyeSB6b29tIGxldmVsLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHdvcmxkQ29waWVzUmVuZGVyZWQgPSBtYXAuZ2V0UmVuZGVyV29ybGRDb3BpZXMoKTtcbiAgICAgKiBAc2VlIFtSZW5kZXIgd29ybGQgY29waWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9yZW5kZXItd29ybGQtY29waWVzLylcbiAgICAgKi9cbiAgICBnZXRSZW5kZXJXb3JsZENvcGllcygpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBgcmVuZGVyV29ybGRDb3BpZXNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllcyBJZiBgdHJ1ZWAsIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgd29ybGQgd2lsbCBiZSByZW5kZXJlZCBzaWRlIGJ5IHNpZGUgYmV5b25kIC0xODAgYW5kIDE4MCBkZWdyZWVzIGxvbmdpdHVkZS4gSWYgc2V0IHRvIGBmYWxzZWA6XG4gICAgICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICAgICAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICAgICAqIC0gRmVhdHVyZXMgdGhhdCBjcm9zcyAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUgd2lsbCBiZSBjdXQgaW4gdHdvICh3aXRoIG9uZSBwb3J0aW9uIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZVxuICAgICAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIGB1bmRlZmluZWRgIGlzIHRyZWF0ZWQgYXMgYHRydWVgLCBgbnVsbGAgaXMgdHJlYXRlZCBhcyBgZmFsc2VgLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFJlbmRlcldvcmxkQ29waWVzKHRydWUpO1xuICAgICAqIEBzZWUgW1JlbmRlciB3b3JsZCBjb3BpZXNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3JlbmRlci13b3JsZC1jb3BpZXMvKVxuICAgICAqL1xuICAgIHNldFJlbmRlcldvcmxkQ29waWVzKHJlbmRlcldvcmxkQ29waWVzPzogP2Jvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUG9pbnR9IHJlcHJlc2VudGluZyBwaXhlbCBjb29yZGluYXRlcywgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGBjb250YWluZXJgLFxuICAgICAqIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nbGF0IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gdG8gcHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IFRoZSB7QGxpbmsgUG9pbnR9IGNvcnJlc3BvbmRpbmcgdG8gYGxuZ2xhdGAsIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBgY29udGFpbmVyYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZGluYXRlID0gWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddO1xuICAgICAqIHZhciBwb2ludCA9IG1hcC5wcm9qZWN0KGNvb3JkaW5hdGUpO1xuICAgICAqL1xuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgTG5nTGF0fSByZXByZXNlbnRpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIHRoYXQgY29ycmVzcG9uZFxuICAgICAqIHRvIHRoZSBzcGVjaWZpZWQgcGl4ZWwgY29vcmRpbmF0ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gcG9pbnQgVGhlIHBpeGVsIGNvb3JkaW5hdGVzIHRvIHVucHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUge0BsaW5rIExuZ0xhdH0gY29ycmVzcG9uZGluZyB0byBgcG9pbnRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBnZXQgdGhlIGdlb2dyYXBoaWMgY29vcmRpbmF0ZS5cbiAgICAgKiAgIHZhciBjb29yZGluYXRlID0gbWFwLnVucHJvamVjdChlLnBvaW50KTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB1bnByb2plY3QocG9pbnQ6IFBvaW50TGlrZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihQb2ludC5jb252ZXJ0KHBvaW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgcGFubmluZywgem9vbWluZywgcm90YXRpbmcsIG9yIHBpdGNoaW5nIGR1ZSB0byBhIGNhbWVyYSBhbmltYXRpb24gb3IgdXNlciBnZXN0dXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYXAgaXMgbW92aW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGlzTW92aW5nID0gbWFwLmlzTW92aW5nKCk7XG4gICAgICovXG4gICAgaXNNb3ZpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3ZpbmcgfHxcbiAgICAgICAgICAgIHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpIHx8XG4gICAgICAgICAgICB0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKSB8fFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgem9vbWluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFwIGlzIHpvb21pbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgaXNab29taW5nID0gbWFwLmlzWm9vbWluZygpO1xuICAgICAqL1xuICAgIGlzWm9vbWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvb21pbmcgfHxcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcCBpcyByb3RhdGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFwIGlzIHJvdGF0aW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmlzUm90YXRpbmcoKTtcbiAgICAgKi9cbiAgICBpc1JvdGF0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpbmcgfHxcbiAgICAgICAgICAgIHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIF9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlb3ZlcicpIHtcbiAgICAgICAgICAgIGxldCBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtb3VzZW1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50LCB7ZmVhdHVyZXN9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7bW91c2Vtb3ZlLCBtb3VzZW91dH19O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb3VzZWxlYXZlJyB8fCB0eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICBsZXQgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbW91c2Vtb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbW91c2VvdXQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtsYXllcjogbGF5ZXJJZCwgbGlzdGVuZXIsIGRlbGVnYXRlczoge21vdXNlbW92ZSwgbW91c2VvdXR9fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIG11dGF0ZSB0aGUgb3JpZ2luYWwgZXZlbnQsIHNvIHRoYXQgcHJldmVudERlZmF1bHQgd29ya3MgYXMgZXhwZWN0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGUuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUuZmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHtbdHlwZV06IGRlbGVnYXRlfX07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIGV2ZW50cyBvZiBhIHNwZWNpZmllZCB0eXBlLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9uXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGFkZCBhIGxpc3RlbiBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAgIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIGBmaXJlYCxcbiAgICAgKiAgIGV4dGVuZGVkIHdpdGggYHRhcmdldGAgYW5kIGB0eXBlYCBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciBldmVudHMgb2YgYSBzcGVjaWZpZWQgdHlwZSBvY2N1cnJpbmcgb24gZmVhdHVyZXMgaW4gYSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yOyBvbmUgb2YgYCdtb3VzZWRvd24nYCwgYCdtb3VzZXVwJ2AsIGAnY2xpY2snYCwgYCdkYmxjbGljaydgLFxuICAgICAqIGAnbW91c2Vtb3ZlJ2AsIGAnbW91c2VlbnRlcidgLCBgJ21vdXNlbGVhdmUnYCwgYCdtb3VzZW92ZXInYCwgYCdtb3VzZW91dCdgLCBgJ2NvbnRleHRtZW51J2AsIGAndG91Y2hzdGFydCdgLFxuICAgICAqIGAndG91Y2hlbmQnYCwgb3IgYCd0b3VjaGNhbmNlbCdgLiBgbW91c2VlbnRlcmAgYW5kIGBtb3VzZW92ZXJgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBlbnRlcnNcbiAgICAgKiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gb3V0c2lkZSB0aGF0IGxheWVyIG9yIG91dHNpZGUgdGhlIG1hcCBjYW52YXMuIGBtb3VzZWxlYXZlYFxuICAgICAqIGFuZCBgbW91c2VvdXRgIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciwgb3IgbGVhdmVzXG4gICAgICogdGhlIG1hcCBjYW52YXMuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIGEgc3R5bGUgbGF5ZXIuIE9ubHkgZXZlbnRzIHdob3NlIGxvY2F0aW9uIGlzIHdpdGhpbiBhIHZpc2libGVcbiAgICAgKiBmZWF0dXJlIGluIHRoaXMgbGF5ZXIgd2lsbCB0cmlnZ2VyIHRoZSBsaXN0ZW5lci4gVGhlIGV2ZW50IHdpbGwgaGF2ZSBhIGBmZWF0dXJlc2AgcHJvcGVydHkgY29udGFpbmluZ1xuICAgICAqIGFuIGFycmF5IG9mIHRoZSBtYXRjaGluZyBmZWF0dXJlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIG9uKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vbih0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gdGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodHlwZSwgbGF5ZXJJZCwgbGlzdGVuZXIpO1xuXG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyA9IHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdIHx8IFtdO1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0ucHVzaChkZWxlZ2F0ZWRMaXN0ZW5lcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMub24oKGV2ZW50OiBhbnkpLCBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXNbZXZlbnRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9uY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gYWRkIGEgbGlzdGVuZXIgZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlIG9jY3VycmluZyBvbiBmZWF0dXJlcyBpbiBhIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3I7IG9uZSBvZiBgJ21vdXNlZG93bidgLCBgJ21vdXNldXAnYCwgYCdjbGljaydgLCBgJ2RibGNsaWNrJ2AsXG4gICAgICogYCdtb3VzZW1vdmUnYCwgYCdtb3VzZWVudGVyJ2AsIGAnbW91c2VsZWF2ZSdgLCBgJ21vdXNlb3ZlcidgLCBgJ21vdXNlb3V0J2AsIGAnY29udGV4dG1lbnUnYCwgYCd0b3VjaHN0YXJ0J2AsXG4gICAgICogYCd0b3VjaGVuZCdgLCBvciBgJ3RvdWNoY2FuY2VsJ2AuIGBtb3VzZWVudGVyYCBhbmQgYG1vdXNlb3ZlcmAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGVudGVyc1xuICAgICAqIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZnJvbSBvdXRzaWRlIHRoYXQgbGF5ZXIgb3Igb3V0c2lkZSB0aGUgbWFwIGNhbnZhcy4gYG1vdXNlbGVhdmVgXG4gICAgICogYW5kIGBtb3VzZW91dGAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGxlYXZlcyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLCBvciBsZWF2ZXNcbiAgICAgKiB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgYSBzdHlsZSBsYXllci4gT25seSBldmVudHMgd2hvc2UgbG9jYXRpb24gaXMgd2l0aGluIGEgdmlzaWJsZVxuICAgICAqIGZlYXR1cmUgaW4gdGhpcyBsYXllciB3aWxsIHRyaWdnZXIgdGhlIGxpc3RlbmVyLiBUaGUgZXZlbnQgd2lsbCBoYXZlIGEgYGZlYXR1cmVzYCBwcm9wZXJ0eSBjb250YWluaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIG1hdGNoaW5nIGZlYXR1cmVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICBvbmNlKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcblxuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9uY2UodHlwZSwgbGF5ZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxlZ2F0ZWRMaXN0ZW5lciA9IHRoaXMuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHR5cGUsIGxheWVySWQsIGxpc3RlbmVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IGluIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlcykge1xuICAgICAgICAgICAgdGhpcy5vbmNlKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBgTWFwI29uYC5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbmFtZSBvZmZcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiBwcmV2aW91c2x5IGluc3RhbGxlZCBhcyBhIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBmb3IgbGF5ZXItc3BlY2lmaWMgZXZlbnRzIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBgTWFwI29uYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgbGF5ZXIgSUQgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiBwcmV2aW91c2x5IGluc3RhbGxlZCBhcyBhIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIG9mZih0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIub2ZmKHR5cGUsIGxheWVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlRGVsZWdhdGVkTGlzdGVuZXIgPSAoZGVsZWdhdGVkTGlzdGVuZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBkZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRMaXN0ZW5lci5sYXllciA9PT0gbGF5ZXJJZCAmJiBkZWxlZ2F0ZWRMaXN0ZW5lci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMgJiYgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICByZW1vdmVEZWxlZ2F0ZWRMaXN0ZW5lcih0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMilcbiAgICAgKiByZXByZXNlbnRpbmcgdmlzaWJsZSBmZWF0dXJlcyB0aGF0IHNhdGlzZnkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZXxBcnJheTxQb2ludExpa2U+fSBbZ2VvbWV0cnldIC0gVGhlIGdlb21ldHJ5IG9mIHRoZSBxdWVyeSByZWdpb246XG4gICAgICogZWl0aGVyIGEgc2luZ2xlIHBvaW50IG9yIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBkZXNjcmliaW5nIGEgYm91bmRpbmcgYm94LlxuICAgICAqIE9taXR0aW5nIHRoaXMgcGFyYW1ldGVyIChpLmUuIGNhbGxpbmcge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IHdpdGggemVybyBhcmd1bWVudHMsXG4gICAgICogb3Igd2l0aCBvbmx5IGEgYG9wdGlvbnNgIGFyZ3VtZW50KSBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgYSBib3VuZGluZyBib3ggZW5jb21wYXNzaW5nIHRoZSBlbnRpcmVcbiAgICAgKiBtYXAgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtvcHRpb25zLmxheWVyc10gQW4gYXJyYXkgb2YgW3N0eWxlIGxheWVyIElEc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLWlkKSBmb3IgdGhlIHF1ZXJ5IHRvIGluc3BlY3QuXG4gICAgICogICBPbmx5IGZlYXR1cmVzIHdpdGhpbiB0aGVzZSBsYXllcnMgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgbGF5ZXJzIHdpbGwgYmUgY2hlY2tlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5maWx0ZXJdIEEgW2ZpbHRlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLyNmaWx0ZXIpXG4gICAgICogICB0byBsaW1pdCBxdWVyeSByZXN1bHRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgW29wdGlvbnMuZmlsdGVyXSBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbZmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMikuXG4gICAgICpcbiAgICAgKiBUaGUgYHByb3BlcnRpZXNgIHZhbHVlIG9mIGVhY2ggcmV0dXJuZWQgZmVhdHVyZSBvYmplY3QgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgb2YgaXRzIHNvdXJjZSBmZWF0dXJlLiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBvbmx5XG4gICAgICogc3RyaW5nIGFuZCBudW1lcmljIHByb3BlcnR5IHZhbHVlcyBhcmUgc3VwcG9ydGVkIChpLmUuIGBudWxsYCwgYEFycmF5YCwgYW5kIGBPYmplY3RgIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCkuXG4gICAgICpcbiAgICAgKiBFYWNoIGZlYXR1cmUgaW5jbHVkZXMgdG9wLWxldmVsIGBsYXllcmAsIGBzb3VyY2VgLCBhbmQgYHNvdXJjZUxheWVyYCBwcm9wZXJ0aWVzLiBUaGUgYGxheWVyYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcbiAgICAgKiByZXByZXNlbnRpbmcgdGhlIHN0eWxlIGxheWVyIHRvICB3aGljaCB0aGUgZmVhdHVyZSBiZWxvbmdzLiBMYXlvdXQgYW5kIHBhaW50IHByb3BlcnRpZXMgaW4gdGhpcyBvYmplY3QgY29udGFpbiB2YWx1ZXNcbiAgICAgKiB3aGljaCBhcmUgZnVsbHkgZXZhbHVhdGVkIGZvciB0aGUgZ2l2ZW4gem9vbSBsZXZlbCBhbmQgZmVhdHVyZS5cbiAgICAgKlxuICAgICAqIE9ubHkgZmVhdHVyZXMgdGhhdCBhcmUgY3VycmVudGx5IHJlbmRlcmVkIGFyZSBpbmNsdWRlZC4gU29tZSBmZWF0dXJlcyB3aWxsICoqbm90KiogYmUgaW5jbHVkZWQsIGxpa2U6XG4gICAgICpcbiAgICAgKiAtIEZlYXR1cmVzIGZyb20gbGF5ZXJzIHdob3NlIGB2aXNpYmlsaXR5YCBwcm9wZXJ0eSBpcyBgXCJub25lXCJgLlxuICAgICAqIC0gRmVhdHVyZXMgZnJvbSBsYXllcnMgd2hvc2Ugem9vbSByYW5nZSBleGNsdWRlcyB0aGUgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqIC0gU3ltYm9sIGZlYXR1cmVzIHRoYXQgaGF2ZSBiZWVuIGhpZGRlbiBkdWUgdG8gdGV4dCBvciBpY29uIGNvbGxpc2lvbi5cbiAgICAgKlxuICAgICAqIEZlYXR1cmVzIGZyb20gYWxsIG90aGVyIGxheWVycyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBmZWF0dXJlcyB0aGF0IG1heSBoYXZlIG5vIHZpc2libGVcbiAgICAgKiBjb250cmlidXRpb24gdG8gdGhlIHJlbmRlcmVkIHJlc3VsdDsgZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIGxheWVyJ3Mgb3BhY2l0eSBvciBjb2xvciBhbHBoYSBjb21wb25lbnQgaXMgc2V0IHRvXG4gICAgICogMC5cbiAgICAgKlxuICAgICAqIFRoZSB0b3Btb3N0IHJlbmRlcmVkIGZlYXR1cmUgYXBwZWFycyBmaXJzdCBpbiB0aGUgcmV0dXJuZWQgYXJyYXksIGFuZCBzdWJzZXF1ZW50IGZlYXR1cmVzIGFyZSBzb3J0ZWQgYnlcbiAgICAgKiBkZXNjZW5kaW5nIHotb3JkZXIuIEZlYXR1cmVzIHRoYXQgYXJlIHJlbmRlcmVkIG11bHRpcGxlIHRpbWVzIChkdWUgdG8gd3JhcHBpbmcgYWNyb3NzIHRoZSBhbnRpbWVyaWRpYW4gYXQgbG93XG4gICAgICogem9vbSBsZXZlbHMpIGFyZSByZXR1cm5lZCBvbmx5IG9uY2UgKHRob3VnaCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY2F2ZWF0KS5cbiAgICAgKlxuICAgICAqIEJlY2F1c2UgZmVhdHVyZXMgY29tZSBmcm9tIHRpbGVkIHZlY3RvciBkYXRhIG9yIEdlb0pTT04gZGF0YSB0aGF0IGlzIGNvbnZlcnRlZCB0byB0aWxlcyBpbnRlcm5hbGx5LCBmZWF0dXJlXG4gICAgICogZ2VvbWV0cmllcyBtYXkgYmUgc3BsaXQgb3IgZHVwbGljYXRlZCBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzIGFuZCwgYXMgYSByZXN1bHQsIGZlYXR1cmVzIG1heSBhcHBlYXIgbXVsdGlwbGVcbiAgICAgKiB0aW1lcyBpbiBxdWVyeSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBpcyBhIGhpZ2h3YXkgcnVubmluZyB0aHJvdWdoIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgYSBxdWVyeS5cbiAgICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgd2lsbCBiZSB0aG9zZSBwYXJ0cyBvZiB0aGUgaGlnaHdheSB0aGF0IGxpZSB3aXRoaW4gdGhlIG1hcCB0aWxlcyBjb3ZlcmluZyB0aGUgYm91bmRpbmdcbiAgICAgKiByZWN0YW5nbGUsIGV2ZW4gaWYgdGhlIGhpZ2h3YXkgZXh0ZW5kcyBpbnRvIG90aGVyIHRpbGVzLCBhbmQgdGhlIHBvcnRpb24gb2YgdGhlIGhpZ2h3YXkgd2l0aGluIGVhY2ggbWFwIHRpbGVcbiAgICAgKiB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgZmVhdHVyZS4gU2ltaWxhcmx5LCBhIHBvaW50IGZlYXR1cmUgbmVhciBhIHRpbGUgYm91bmRhcnkgbWF5IGFwcGVhciBpbiBtdWx0aXBsZVxuICAgICAqIHRpbGVzIGR1ZSB0byB0aWxlIGJ1ZmZlcmluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgYXQgYSBwb2ludFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbMjAsIDM1XSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgc3RhdGljIGJvdW5kaW5nIGJveFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbWzEwLCAyMF0sIFszMCwgNTBdXSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94IGFyb3VuZCBhIHBvaW50XG4gICAgICogdmFyIHdpZHRoID0gMTA7XG4gICAgICogdmFyIGhlaWdodCA9IDIwO1xuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoW1xuICAgICAqICAgW3BvaW50LnggLSB3aWR0aCAvIDIsIHBvaW50LnkgLSBoZWlnaHQgLyAyXSxcbiAgICAgKiAgIFtwb2ludC54ICsgd2lkdGggLyAyLCBwb2ludC55ICsgaGVpZ2h0IC8gMl1cbiAgICAgKiBdLCB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFF1ZXJ5IGFsbCByZW5kZXJlZCBmZWF0dXJlcyBmcm9tIGEgc2luZ2xlIGxheWVyXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICogQHNlZSBbR2V0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqL1xuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeT86IFBvaW50TGlrZSB8IFtQb2ludExpa2UsIFBvaW50TGlrZV0sIG9wdGlvbnM/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcmFtZXRlciBjYW4gYmUgb21pdHRlZCBlbnRpcmVseSwgbWFraW5nIHRoaXMgZWZmZWN0aXZlbHkgYW4gb3ZlcmxvYWRlZCBtZXRob2RcbiAgICAgICAgLy8gd2l0aCB0d28gc2lnbmF0dXJlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeTogUG9pbnRMaWtlIHwgW1BvaW50TGlrZSwgUG9pbnRMaWtlXSwgb3B0aW9ucz86IE9iamVjdClcbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhvcHRpb25zPzogT2JqZWN0KVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBubyB3YXkgdG8gZXhwcmVzcyB0aGF0IGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggYm90aCBmbG93IGFuZCBkb2N1bWVudGF0aW9uLmpzLlxuICAgICAgICAvLyBSZWxhdGVkOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTU1NlxuXG4gICAgICAgIGlmICghdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkICYmICEoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCkgJiYgIUFycmF5LmlzQXJyYXkoZ2VvbWV0cnkpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gKGdlb21ldHJ5OiBPYmplY3QpO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9tZXRyeSB8fCBbWzAsIDBdLCBbdGhpcy50cmFuc2Zvcm0ud2lkdGgsIHRoaXMudHJhbnNmb3JtLmhlaWdodF1dO1xuXG4gICAgICAgIGxldCBxdWVyeUdlb21ldHJ5O1xuICAgICAgICBpZiAoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCB8fCB0eXBlb2YgZ2VvbWV0cnlbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBxdWVyeUdlb21ldHJ5ID0gW1BvaW50LmNvbnZlcnQoZ2VvbWV0cnkpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRsID0gUG9pbnQuY29udmVydChnZW9tZXRyeVswXSk7XG4gICAgICAgICAgICBjb25zdCBiciA9IFBvaW50LmNvbnZlcnQoZ2VvbWV0cnlbMV0pO1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSA9IFt0bCwgbmV3IFBvaW50KGJyLngsIHRsLnkpLCBiciwgbmV3IFBvaW50KHRsLngsIGJyLnkpLCB0bF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMocXVlcnlHZW9tZXRyeSwgb3B0aW9ucywgdGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpXG4gICAgICogcmVwcmVzZW50aW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRoYXQgc2F0aXNmeSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VJZCBUaGUgSUQgb2YgdGhlIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1ldGVyc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbWV0ZXJzLnNvdXJjZUxheWVyXSBUaGUgbmFtZSBvZiB0aGUgW3NvdXJjZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zb3VyY2UtbGF5ZXIvKVxuICAgICAqICAgdG8gcXVlcnkuICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuKiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbWV0ZXJzLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvI2ZpbHRlcilcbiAgICAgKiAgIHRvIGxpbWl0IHF1ZXJ5IHJlc3VsdHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcGFyYW1ldGVycy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBbcGFyYW1ldGVycy5maWx0ZXJdIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKS5cbiAgICAgKlxuICAgICAqIEluIGNvbnRyYXN0IHRvIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBmZWF0dXJlcyBtYXRjaGluZyB0aGUgcXVlcnkgcGFyYW1ldGVycyxcbiAgICAgKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSByZW5kZXJlZCBieSB0aGUgY3VycmVudCBzdHlsZSAoaS5lLiB2aXNpYmxlKS4gVGhlIGRvbWFpbiBvZiB0aGUgcXVlcnkgaW5jbHVkZXMgYWxsIGN1cnJlbnRseS1sb2FkZWRcbiAgICAgKiB2ZWN0b3IgdGlsZXMgYW5kIEdlb0pTT04gc291cmNlIHRpbGVzOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRpbGVzIG91dHNpZGUgdGhlIGN1cnJlbnRseVxuICAgICAqIHZpc2libGUgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBCZWNhdXNlIGZlYXR1cmVzIGNvbWUgZnJvbSB0aWxlZCB2ZWN0b3IgZGF0YSBvciBHZW9KU09OIGRhdGEgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gdGlsZXMgaW50ZXJuYWxseSwgZmVhdHVyZVxuICAgICAqIGdlb21ldHJpZXMgbWF5IGJlIHNwbGl0IG9yIGR1cGxpY2F0ZWQgYWNyb3NzIHRpbGUgYm91bmRhcmllcyBhbmQsIGFzIGEgcmVzdWx0LCBmZWF0dXJlcyBtYXkgYXBwZWFyIG11bHRpcGxlXG4gICAgICogdGltZXMgaW4gcXVlcnkgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgaXMgYSBoaWdod2F5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIGEgcXVlcnkuXG4gICAgICogVGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHdpbGwgYmUgdGhvc2UgcGFydHMgb2YgdGhlIGhpZ2h3YXkgdGhhdCBsaWUgd2l0aGluIHRoZSBtYXAgdGlsZXMgY292ZXJpbmcgdGhlIGJvdW5kaW5nXG4gICAgICogcmVjdGFuZ2xlLCBldmVuIGlmIHRoZSBoaWdod2F5IGV4dGVuZHMgaW50byBvdGhlciB0aWxlcywgYW5kIHRoZSBwb3J0aW9uIG9mIHRoZSBoaWdod2F5IHdpdGhpbiBlYWNoIG1hcCB0aWxlXG4gICAgICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIGZlYXR1cmUuIFNpbWlsYXJseSwgYSBwb2ludCBmZWF0dXJlIG5lYXIgYSB0aWxlIGJvdW5kYXJ5IG1heSBhcHBlYXIgaW4gbXVsdGlwbGVcbiAgICAgKiB0aWxlcyBkdWUgdG8gdGlsZSBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIGluIG9uZSBzb3VyY2UgbGF5ZXIgaW4gYSB2ZWN0b3Igc291cmNlXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5U291cmNlRmVhdHVyZXMoJ3lvdXItc291cmNlLWlkJywge1xuICAgICAqICAgc291cmNlTGF5ZXI6ICd5b3VyLXNvdXJjZS1sYXllcidcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyBjb250YWluaW5nIHNpbWlsYXIgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeS1zaW1pbGFyLWZlYXR1cmVzLylcbiAgICAgKi9cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlkOiBzdHJpbmcsIHBhcmFtZXRlcnM6ID97c291cmNlTGF5ZXI6ID9zdHJpbmcsIGZpbHRlcjogP0FycmF5PGFueT4sIHZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJZCwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbWFwJ3MgTWFwYm94IHN0eWxlIG9iamVjdCB3aXRoIGEgbmV3IHZhbHVlLlxuICAgICAqXG4gICAgICogSWYgYSBzdHlsZSBpcyBhbHJlYWR5IHNldCB3aGVuIHRoaXMgaXMgdXNlZCBhbmQgb3B0aW9ucy5kaWZmIGlzIHNldCB0byB0cnVlLCB0aGUgbWFwIHJlbmRlcmVyIHdpbGwgYXR0ZW1wdCB0byBjb21wYXJlIHRoZSBnaXZlbiBzdHlsZVxuICAgICAqIGFnYWluc3QgdGhlIG1hcCdzIGN1cnJlbnQgc3RhdGUgYW5kIHBlcmZvcm0gb25seSB0aGUgY2hhbmdlcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgbWFwIHN0eWxlIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBDaGFuZ2VzIGluIHNwcml0ZXNcbiAgICAgKiAoaW1hZ2VzIHVzZWQgZm9yIGljb25zIGFuZCBwYXR0ZXJucykgYW5kIGdseXBocyAoZm9udHMgZm9yIGxhYmVsIHRleHQpICoqY2Fubm90KiogYmUgZGlmZmVkLiBJZiB0aGUgc3ByaXRlcyBvciBmb250cyB1c2VkIGluIHRoZSBjdXJyZW50XG4gICAgICogc3R5bGUgYW5kIHRoZSBnaXZlbiBzdHlsZSBhcmUgZGlmZmVyZW50IGluIGFueSB3YXksIHRoZSBtYXAgcmVuZGVyZXIgd2lsbCBmb3JjZSBhIGZ1bGwgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZSBhbmQgYnVpbGRpbmdcbiAgICAgKiB0aGUgZ2l2ZW4gb25lIGZyb20gc2NyYXRjaC5cbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0eWxlIEEgSlNPTiBvYmplY3QgY29uZm9ybWluZyB0byB0aGUgc2NoZW1hIGRlc2NyaWJlZCBpbiB0aGVcbiAgICAgKiAgIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyksIG9yIGEgVVJMIHRvIHN1Y2ggSlNPTi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlmZj10cnVlXSBJZiBmYWxzZSwgZm9yY2UgYSAnZnVsbCcgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZVxuICAgICAqICAgYW5kIGJ1aWxkaW5nIHRoZSBnaXZlbiBvbmUgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGEgZGlmZi1iYXNlZCB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAgICAgKiAgIGZvbnQtZmFtaWx5IGZvciBsb2NhbGx5IG92ZXJyaWRpbmcgZ2VuZXJhdGlvbiBvZiBnbHlwaHMgaW4gdGhlICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywgJ0hpcmFnYW5hJywgJ0thdGFrYW5hJyBhbmQgJ0hhbmd1bCBTeWxsYWJsZXMnIHJhbmdlcy5cbiAgICAgKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICAgICAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuXG4gICAgICogICBGb3JjZXMgYSBmdWxsIHVwZGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFN0eWxlKFwibWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMVwiKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NoYW5nZSBhIG1hcCdzIHN0eWxlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldHN0eWxlLylcbiAgICAgKi9cbiAgICBzZXRTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKChvcHRpb25zLmRpZmYgIT09IGZhbHNlICYmIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID09PSB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpICYmIHRoaXMuc3R5bGUgJiYgc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZmZTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRVSVN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLl9sb2NhbGVba2V5XTtcbiAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgVUkgc3RyaW5nICcke2tleX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIF91cGRhdGVTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gbmV3IFN0eWxlKHRoaXMsIG9wdGlvbnMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRVUkwoc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkSlNPTihzdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfbGF6eUluaXRFbXB0eVN0eWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgU3R5bGUodGhpcywge30pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkRW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9kaWZmU3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZywgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChzdHlsZSk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5TdHlsZSk7XG4gICAgICAgICAgICBnZXRKU09OKHJlcXVlc3QsIChlcnJvcjogP0Vycm9yLCBqc29uOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWZmKGpzb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURpZmYoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHlsZS5zZXRTdGF0ZShzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAke2UubWVzc2FnZSB8fCBlLmVycm9yIHx8IGV9LiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBNYXBib3ggc3R5bGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWNyZWF0ZSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVKc29uID0gbWFwLmdldFN0eWxlKCk7XG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRTdHlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAncyBzdHlsZSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3R5bGUgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVMb2FkU3RhdHVzID0gbWFwLmlzU3R5bGVMb2FkZWQoKTtcbiAgICAgKi9cbiAgICBpc1N0eWxlTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB3YXJuT25jZSgnVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNvdXJjZSB0byB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYWRkLiBNdXN0IG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCwgY29uZm9ybWluZyB0byB0aGVcbiAgICAgKiBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzIFtzb3VyY2UgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgb3JcbiAgICAgKiB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30uXG4gICAgICogQGZpcmVzIHNvdXJjZS5hZGRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICB0eXBlOiAndmVjdG9yJyxcbiAgICAgKiAgIHVybDogJ21hcGJveDovL215dXNlcm5hbWUudGlsZXNldGlkJ1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmFkZFNvdXJjZSgnbXktZGF0YScsIHtcbiAgICAgKiAgIFwidHlwZVwiOiBcImdlb2pzb25cIixcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAgICAgKiAgICAgXCJnZW9tZXRyeVwiOiB7XG4gICAgICogICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAgICAgKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFstNzcuMDMyMywgMzguOTEzMV1cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgKiAgICAgICBcInRpdGxlXCI6IFwiTWFwYm94IERDXCIsXG4gICAgICogICAgICAgXCJtYXJrZXItc3ltYm9sXCI6IFwibW9udW1lbnRcIlxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBWZWN0b3Igc291cmNlOiBbU2hvdyBhbmQgaGlkZSBsYXllcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RvZ2dsZS1sYXllcnMvKVxuICAgICAqIEBzZWUgR2VvSlNPTiBzb3VyY2U6IFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgUmFzdGVyIERFTSBzb3VyY2U6IFtBZGQgaGlsbHNoYWRpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hpbGxzaGFkZS8pXG4gICAgICovXG4gICAgYWRkU291cmNlKGlkOiBzdHJpbmcsIHNvdXJjZTogU291cmNlU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZS5hZGRTb3VyY2UoaWQsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb3VyY2UgaXMgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNvdXJjZSBpcyBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc291cmNlTG9hZGVkID0gbWFwLmlzU291cmNlTG9hZGVkKCdiYXRoeW1ldHJ5LWRhdGEnKTtcbiAgICAgKi9cbiAgICBpc1NvdXJjZUxvYWRlZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICcke2lkfSdgKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFsbCB0aWxlcyBpbiB0aGUgdmlld3BvcnQgZnJvbSBhbGwgc291cmNlcyBvblxuICAgICAqIHRoZSBzdHlsZSBhcmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIHRpbGVzIGFyZSBsb2FkZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgdGlsZXNMb2FkZWQgPSBtYXAuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICAgKi9cblxuICAgIGFyZVRpbGVzTG9hZGVkKCkge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVzID0gc291cmNlLl90aWxlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBpbiB0aWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1t0XTtcbiAgICAgICAgICAgICAgICBpZiAoISh0aWxlLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aWxlLnN0YXRlID09PSAnZXJyb3JlZCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtjdXN0b20gc291cmNlIHR5cGVdKCNDdXN0b20gU291cmNlcyksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoXG4gICAgICoge0BsaW5rIE1hcCNhZGRTb3VyY2V9LlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSB0eXBlOyBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3RzIHVzZSB0aGlzIG5hbWUgaW4gdGhlIGB7dHlwZTogLi4ufWAgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gU291cmNlVHlwZSBBIHtAbGluayBTb3VyY2V9IGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aGVuIHRoZSBzb3VyY2UgdHlwZSBpcyByZWFkeSBvciB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqL1xuICAgIGFkZFNvdXJjZVR5cGUobmFtZTogc3RyaW5nLCBTb3VyY2VUeXBlOiBhbnksIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZShuYW1lLCBTb3VyY2VUeXBlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHNvdXJjZSBmcm9tIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIHNvdXJjZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAucmVtb3ZlU291cmNlKCdiYXRoeW1ldHJ5LWRhdGEnKTtcbiAgICAgKi9cbiAgICByZW1vdmVTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZShpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCBpbiB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgc3R5bGUgc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgYHVuZGVmaW5lZGBcbiAgICAgKiAgIGlmIHRoZSBJRCBjb3JyZXNwb25kcyB0byBubyBleGlzdGluZyBzb3VyY2VzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHNvdXJjZU9iamVjdCA9IG1hcC5nZXRTb3VyY2UoJ3BvaW50cycpO1xuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqIEBzZWUgW0FkZCBsaXZlIHJlYWx0aW1lIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS1nZW9qc29uLylcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UoaWQpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBBZGQgYW4gaW1hZ2UgdG8gdGhlIHN0eWxlLiBUaGlzIGltYWdlIGNhbiBiZSBkaXNwbGF5ZWQgb24gdGhlIG1hcCBsaWtlIGFueSBvdGhlciBpY29uIGluIHRoZSBzdHlsZSdzXG4gICAgICogW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSB1c2luZyB0aGUgaW1hZ2UncyBJRCB3aXRoXG4gICAgICogW2BpY29uLWltYWdlYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheW91dC1zeW1ib2wtaWNvbi1pbWFnZSksXG4gICAgICogW2BiYWNrZ3JvdW5kLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLXBhdHRlcm4pLFxuICAgICAqIFtgZmlsbC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWZpbGwtZmlsbC1wYXR0ZXJuKSxcbiAgICAgKiBvciBbYGxpbmUtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1saW5lLWxpbmUtcGF0dGVybikuXG4gICAgICogQSB7QGxpbmsgTWFwI2Vycm9yfSBldmVudCB3aWxsIGJlIGZpcmVkIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHNwcml0ZSB0byBhZGQgdGhpcyBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgYXMgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYFxuICAgICAqIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMucGl4ZWxSYXRpbyBUaGUgcmF0aW8gb2YgcGl4ZWxzIGluIHRoZSBpbWFnZSB0byBwaHlzaWNhbCBwaXhlbHMgb24gdGhlIHNjcmVlblxuICAgICAqIEBwYXJhbSBvcHRpb25zLnNkZiBXaGV0aGVyIHRoZSBpbWFnZSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gU0RGIGltYWdlXG4gICAgICogQHBhcmFtIG9wdGlvbnMuY29udGVudCAgYFt4MSwgeTEsIHgyLCB5Ml1gICBJZiBgaWNvbi10ZXh0LWZpdGAgaXMgdXNlZCBpbiBhIGxheWVyIHdpdGggdGhpcyBpbWFnZSwgdGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcGFydCBvZiB0aGUgaW1hZ2UgdGhhdCBjYW4gYmUgY292ZXJlZCBieSB0aGUgY29udGVudCBpbiBgdGV4dC1maWVsZGAuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc3RyZXRjaFggIGBbW3gxLCB4Ml0sIC4uLl1gIElmIGBpY29uLXRleHQtZml0YCBpcyB1c2VkIGluIGEgbGF5ZXIgd2l0aCB0aGlzIGltYWdlLCB0aGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwYXJ0KHMpIG9mIHRoZSBpbWFnZSB0aGF0IGNhbiBiZSBzdHJldGNoZWQgaG9yaXpvbnRhbGx5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnN0cmV0Y2hZICBgW1t5MSwgeTJdLCAuLi5dYCBJZiBgaWNvbi10ZXh0LWZpdGAgaXMgdXNlZCBpbiBhIGxheWVyIHdpdGggdGhpcyBpbWFnZSwgdGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcGFydChzKSBvZiB0aGUgaW1hZ2UgdGhhdCBjYW4gYmUgc3RyZXRjaGVkIHZlcnRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIHRoZSBzdHlsZSdzIHNwcml0ZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYW4gaW1hZ2Ugd2l0aCBJRCAnY2F0JyxcbiAgICAgKiAvLyBhZGQgdGhlIGltYWdlICdjYXQtaWNvbi5wbmcnIHRvIHRoZSBzdHlsZSdzIHNwcml0ZSB3aXRoIHRoZSBJRCAnY2F0Jy5cbiAgICAgKiBtYXAubG9hZEltYWdlKCdodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzYvNjAvQ2F0X3NpbGhvdWV0dGUuc3ZnLzQwMHB4LUNhdF9zaWxob3VldHRlLnN2Zy5wbmcnLCBmdW5jdGlvbihlcnJvciwgaW1hZ2UpIHtcbiAgICAgKiAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAqICAgIGlmICghbWFwLmhhc0ltYWdlKCdjYXQnKSkgbWFwLmFkZEltYWdlKCdjYXQnLCBpbWFnZSk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIC8vIEFkZCBhIHN0cmV0Y2hhYmxlIGltYWdlIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgaWNvbi10ZXh0LWZpdGBcbiAgICAgKiAvLyBJbiB0aGlzIGV4YW1wbGUsIHRoZSBpbWFnZSBpcyA2MDBweCB3aWRlIGJ5IDQwMHB4IGhpZ2guXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy84Lzg5L0JsYWNrX2FuZF9XaGl0ZV9Cb3hlZF8lMjhib3JkZXJlZCUyOS5wbmcnLCBmdW5jdGlvbihlcnJvciwgaW1hZ2UpIHtcbiAgICAgKiAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAqICAgIGlmICghbWFwLmhhc0ltYWdlKCdib3JkZXItaW1hZ2UnKSkge1xuICAgICAqICAgICAgbWFwLmFkZEltYWdlKCdib3JkZXItaW1hZ2UnLCBpbWFnZSwge1xuICAgICAqICAgICAgICAgIGNvbnRlbnQ6IFsxNiwgMTYsIDMwMCwgMzg0XSwgLy8gcGxhY2UgdGV4dCBvdmVyIGxlZnQgaGFsZiBvZiBpbWFnZSwgYXZvaWRpbmcgdGhlIDE2cHggYm9yZGVyXG4gICAgICogICAgICAgICAgc3RyZXRjaFg6IFtbMTYsIDU4NF1dLCAvLyBzdHJldGNoIGV2ZXJ5dGhpbmcgaG9yaXpvbnRhbGx5IGV4Y2VwdCB0aGUgMTZweCBib3JkZXJcbiAgICAgKiAgICAgICAgICBzdHJldGNoWTogW1sxNiwgMzg0XV0sIC8vIHN0cmV0Y2ggZXZlcnl0aGluZyB2ZXJ0aWNhbGx5IGV4Y2VwdCB0aGUgMTZweCBib3JkZXJcbiAgICAgKiAgICAgIH0pO1xuICAgICAqICAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqXG4gICAgICogQHNlZSBVc2UgYEhUTUxJbWFnZUVsZW1lbnRgOiBbQWRkIGFuIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UvKVxuICAgICAqIEBzZWUgVXNlIGBJbWFnZURhdGFgOiBbQWRkIGEgZ2VuZXJhdGVkIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UtZ2VuZXJhdGVkLylcbiAgICAgKi9cbiAgICBhZGRJbWFnZShpZDogc3RyaW5nLFxuICAgICAgICAgICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXAgfCBJbWFnZURhdGEgfCB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheX0gfCBTdHlsZUltYWdlSW50ZXJmYWNlLFxuICAgICAgICAgICAgIHtwaXhlbFJhdGlvID0gMSwgc2RmID0gZmFsc2UsIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH06ICRTaGFwZTxTdHlsZUltYWdlTWV0YWRhdGE+ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSAwO1xuXG4gICAgICAgIGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgKEltYWdlQml0bWFwICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApKSB7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBicm93c2VyLmdldEltYWdlRGF0YShpbWFnZSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmFkZEltYWdlKGlkLCB7ZGF0YTogbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0sIGRhdGEpLCBwaXhlbFJhdGlvLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnQsIHNkZiwgdmVyc2lvbn0pO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlLndpZHRoID09PSB1bmRlZmluZWQgfHwgaW1hZ2UuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAuYWRkSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsICcgK1xuICAgICAgICAgICAgICAgICdvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgJykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGltYWdlO1xuICAgICAgICAgICAgY29uc3QgdXNlckltYWdlID0gKChpbWFnZTogYW55KTogU3R5bGVJbWFnZUludGVyZmFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYWRkSW1hZ2UoaWQsIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBuZXcgUkdCQUltYWdlKHt3aWR0aCwgaGVpZ2h0fSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpLFxuICAgICAgICAgICAgICAgIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgc3RyZXRjaFgsXG4gICAgICAgICAgICAgICAgc3RyZXRjaFksXG4gICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICBzZGYsXG4gICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICB1c2VySW1hZ2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodXNlckltYWdlLm9uQWRkKSB7XG4gICAgICAgICAgICAgICAgdXNlckltYWdlLm9uQWRkKHRoaXMsIGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgaW1hZ2UgaW4gYSBzdHlsZS4gVGhpcyBpbWFnZSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBtYXAgbGlrZSBhbnkgb3RoZXIgaWNvbiBpbiB0aGUgc3R5bGUnc1xuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgdXNpbmcgdGhlIGltYWdlJ3MgSUQgd2l0aFxuICAgICAqIFtgaWNvbi1pbWFnZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXlvdXQtc3ltYm9sLWljb24taW1hZ2UpLFxuICAgICAqIFtgYmFja2dyb3VuZC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWJhY2tncm91bmQtYmFja2dyb3VuZC1wYXR0ZXJuKSxcbiAgICAgKiBbYGZpbGwtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1maWxsLWZpbGwtcGF0dGVybiksXG4gICAgICogb3IgW2BsaW5lLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtbGluZS1saW5lLXBhdHRlcm4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBhcyBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgXG4gICAgICogcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHN0eWxlJ3Mgc3ByaXRlLFxuICAgICAqIC8vIHJlcGxhY2UgdGhhdCBpbWFnZSB3aXRoIGEgbmV3IGltYWdlLCAnb3RoZXItY2F0LWljb24ucG5nJy5cbiAgICAgKiBpZiAobWFwLmhhc0ltYWdlKCdjYXQnKSkgbWFwLnVwZGF0ZUltYWdlKCdjYXQnLCAnLi9vdGhlci1jYXQtaWNvbi5wbmcnKTtcbiAgICAgKi9cbiAgICB1cGRhdGVJbWFnZShpZDogc3RyaW5nLFxuICAgICAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwIHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSkge1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW1hZ2UgPSB0aGlzLnN0eWxlLmdldEltYWdlKGlkKTtcbiAgICAgICAgaWYgKCFleGlzdGluZ0ltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpID8gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpIDogaW1hZ2U7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGltYWdlRGF0YTtcblxuICAgICAgICBpZiAod2lkdGggPT09IHVuZGVmaW5lZCB8fCBoZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHRvIG1hcC51cGRhdGVJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgJyArXG4gICAgICAgICAgICAgICAgJ29yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICE9PSBleGlzdGluZ0ltYWdlLmRhdGEud2lkdGggfHwgaGVpZ2h0ICE9PSBleGlzdGluZ0ltYWdlLmRhdGEuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvcHkgPSAhKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpO1xuICAgICAgICBleGlzdGluZ0ltYWdlLmRhdGEucmVwbGFjZShkYXRhLCBjb3B5KTtcblxuICAgICAgICB0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGlkLCBleGlzdGluZ0ltYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBhbiBpbWFnZSB3aXRoIGEgc3BlY2lmaWMgSUQgZXhpc3RzIGluIHRoZSBzdHlsZS4gVGhpcyBjaGVja3MgYm90aCBpbWFnZXNcbiAgICAgKiBpbiB0aGUgc3R5bGUncyBvcmlnaW5hbCBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIGFuZCBhbnkgaW1hZ2VzXG4gICAgICogdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgTWFwI2FkZEltYWdlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBpbWFnZSBleGlzdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBDaGVjayBpZiBhbiBpbWFnZSB3aXRoIHRoZSBJRCAnY2F0JyBleGlzdHMgaW5cbiAgICAgKiAvLyB0aGUgc3R5bGUncyBzcHJpdGUuXG4gICAgICogdmFyIGNhdEljb25FeGlzdHMgPSBtYXAuaGFzSW1hZ2UoJ2NhdCcpO1xuICAgICAqL1xuICAgIGhhc0ltYWdlKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZCcpKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISF0aGlzLnN0eWxlLmdldEltYWdlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gaW1hZ2UgZnJvbSBhIHN0eWxlLiBUaGlzIGNhbiBiZSBhbiBpbWFnZSBmcm9tIHRoZSBzdHlsZSdzIG9yaWdpbmFsXG4gICAgICogW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSBvciBhbnkgaW1hZ2VzXG4gICAgICogdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgTWFwI2FkZEltYWdlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhbiBpbWFnZSB3aXRoIHRoZSBJRCAnY2F0JyBleGlzdHMgaW5cbiAgICAgKiAvLyB0aGUgc3R5bGUncyBzcHJpdGUsIHJlbW92ZSBpdC5cbiAgICAgKiBpZiAobWFwLmhhc0ltYWdlKCdjYXQnKSkgbWFwLnJlbW92ZUltYWdlKCdjYXQnKTtcbiAgICAgKi9cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlSW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYW4gaW1hZ2UgZnJvbSBhbiBleHRlcm5hbCBVUkwgdG8gYmUgdXNlZCB3aXRoIHtAbGluayBNYXAjYWRkSW1hZ2V9LiBFeHRlcm5hbFxuICAgICAqIGRvbWFpbnMgbXVzdCBzdXBwb3J0IFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0FjY2Vzc19jb250cm9sX0NPUlMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIG9mIHRoZSBpbWFnZSBmaWxlLiBJbWFnZSBmaWxlIG11c3QgYmUgaW4gcG5nLCB3ZWJwLCBvciBqcGcgZm9ybWF0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEV4cGVjdGluZyBgY2FsbGJhY2soZXJyb3IsIGRhdGEpYC4gQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWQgb3Igd2l0aCBhbiBlcnJvciBhcmd1bWVudCBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTG9hZCBhbiBpbWFnZSBmcm9tIGFuIGV4dGVybmFsIFVSTC5cbiAgICAgKiBtYXAubG9hZEltYWdlKCdodHRwOi8vcGxhY2VraXR0ZW4uY29tLzUwLzUwJywgZnVuY3Rpb24oZXJyb3IsIGltYWdlKSB7XG4gICAgICogICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAqICAgLy8gQWRkIHRoZSBsb2FkZWQgaW1hZ2UgdG8gdGhlIHN0eWxlJ3Mgc3ByaXRlIHdpdGggdGhlIElEICdraXR0ZW4nLlxuICAgICAqICAgbWFwLmFkZEltYWdlKCdraXR0ZW4nLCBpbWFnZSk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtBZGQgYW4gaWNvbiB0byB0aGUgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS8pXG4gICAgICovXG4gICAgbG9hZEltYWdlKHVybDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgZ2V0SW1hZ2UodGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5JbWFnZSksIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgYW4gQXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBJRHMgb2YgYWxsIGltYWdlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBtYXAuXG4gICAgKiBUaGlzIGluY2x1ZGVzIGJvdGggaW1hZ2VzIGZyb20gdGhlIHN0eWxlJ3Mgb3JpZ2luYWwgW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKVxuICAgICogYW5kIGFueSBpbWFnZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYXQgcnVudGltZSB1c2luZyB7QGxpbmsgTWFwI2FkZEltYWdlfS5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gQXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgc3ByaXRlcy9pbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICpcbiAgICAqIEBleGFtcGxlXG4gICAgKiB2YXIgYWxsSW1hZ2VzID0gbWFwLmxpc3RJbWFnZXMoKTtcbiAgICAqXG4gICAgKi9cbiAgICBsaXN0SW1hZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5saXN0SW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIFtNYXBib3ggc3R5bGUgbGF5ZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllcnMpXG4gICAgICogdG8gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQSBsYXllciBkZWZpbmVzIGhvdyBkYXRhIGZyb20gYSBzcGVjaWZpZWQgc291cmNlIHdpbGwgYmUgc3R5bGVkLiBSZWFkIG1vcmUgYWJvdXQgbGF5ZXIgdHlwZXNcbiAgICAgKiBhbmQgYXZhaWxhYmxlIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydGllcyBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyIFRoZSBzdHlsZSBsYXllciB0byBhZGQsIGNvbmZvcm1pbmcgdG8gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiAgIFtsYXllciBkZWZpbml0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIGEgY2lyY2xlIGxheWVyIHdpdGggYSB2ZWN0b3Igc291cmNlLlxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3BvaW50cy1vZi1pbnRlcmVzdCcsXG4gICAgICogICBzb3VyY2U6IHtcbiAgICAgKiAgICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICAgIHVybDogJ21hcGJveDovL21hcGJveC5tYXBib3gtc3RyZWV0cy12OCdcbiAgICAgKiAgIH0sXG4gICAgICogICAnc291cmNlLWxheWVyJzogJ3BvaV9sYWJlbCcsXG4gICAgICogICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgKiAgIHBhaW50OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIHBhaW50IHByb3BlcnRpZXNcbiAgICAgKiAgIH0sXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gbGF5b3V0IHByb3BlcnRpZXNcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhbmQgc3R5bGUgY2x1c3RlcnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2x1c3Rlci8pXG4gICAgICogQHNlZSBbQWRkIGEgdmVjdG9yIHRpbGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3ZlY3Rvci1zb3VyY2UvKVxuICAgICAqIEBzZWUgW0FkZCBhIFdNUyBzb3VyY2VdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvd21zLylcbiAgICAgKi9cbiAgICBhZGRMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICB0aGlzLnN0eWxlLmFkZExheWVyKGxheWVyLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBsYXllciB0byBhIGRpZmZlcmVudCB6LXBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqICAgSWYgdGhpcyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIE1vdmUgYSBsYXllciB3aXRoIElEICdsYWJlbCcgYmVmb3JlIHRoZSBsYXllciB3aXRoIElEICd3YXRlcndheXMnLlxuICAgICAqIG1hcC5tb3ZlTGF5ZXIoJ2xhYmVsJywgJ3dhdGVyd2F5cycpO1xuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLm1vdmVMYXllcihpZCwgYmVmb3JlSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYSBsYXllciB3aXRoIElEICdzdGF0ZS1kYXRhJyBleGlzdHMsIHJlbW92ZSBpdC5cbiAgICAgKiBpZiAobWFwLmdldExheWVyKCdzdGF0ZS1kYXRhJykpIG1hcC5yZW1vdmVMYXllcignc3RhdGUtZGF0YScpO1xuICAgICAqL1xuICAgIHJlbW92ZUxheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVMYXllcihpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF5ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7P09iamVjdH0gVGhlIGxheWVyIHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgYHVuZGVmaW5lZGBcbiAgICAgKiAgIGlmIHRoZSBJRCBjb3JyZXNwb25kcyB0byBubyBleGlzdGluZyBsYXllcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzdGF0ZURhdGFMYXllciA9IG1hcC5nZXRMYXllcignc3RhdGUtZGF0YScpO1xuICAgICAqXG4gICAgICogQHNlZSBbRmlsdGVyIHN5bWJvbHMgYnkgdG9nZ2xpbmcgYSBsaXN0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1tYXJrZXJzLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgc3ltYm9scyBieSB0ZXh0IGlucHV0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1tYXJrZXJzLWJ5LWlucHV0LylcbiAgICAgKi9cbiAgICBnZXRMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheWVyKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB6b29tIGV4dGVudCBmb3IgdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci4gVGhlIHpvb20gZXh0ZW50IGluY2x1ZGVzIHRoZVxuICAgICAqIFttaW5pbXVtIHpvb20gbGV2ZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllci1taW56b29tKVxuICAgICAqIGFuZCBbbWF4aW11bSB6b29tIGxldmVsXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXItbWF4em9vbSkpXG4gICAgICogYXQgd2hpY2ggdGhlIGxheWVyIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBOb3RlOiBGb3Igc3R5bGUgbGF5ZXJzIHVzaW5nIHZlY3RvciBzb3VyY2VzLCBzdHlsZSBsYXllcnMgY2Fubm90IGJlIHJlbmRlcmVkIGF0IHpvb20gbGV2ZWxzIGxvd2VyIHRoYW4gdGhlXG4gICAgICogbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBfc291cmNlIGxheWVyXyBiZWNhdXNlIHRoZSBkYXRhIGRvZXMgbm90IGV4aXN0IGF0IHRob3NlIHpvb20gbGV2ZWxzLiBJZiB0aGUgbWluaW11bVxuICAgICAqIHpvb20gbGV2ZWwgb2YgdGhlIHNvdXJjZSBsYXllciBpcyBoaWdoZXIgdGhhbiB0aGUgbWluaW11bSB6b29tIGxldmVsIGRlZmluZWQgaW4gdGhlIHN0eWxlIGxheWVyLCB0aGUgc3R5bGVcbiAgICAgKiBsYXllciB3aWxsIG5vdCBiZSByZW5kZXJlZCBhdCBhbGwgem9vbSBsZXZlbHMgaW4gdGhlIHpvb20gcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHdoaWNoIHRoZSB6b29tIGV4dGVudCB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnpvb20gVGhlIG1pbmltdW0gem9vbSB0byBzZXQgKDAtMjQpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXh6b29tIFRoZSBtYXhpbXVtIHpvb20gdG8gc2V0ICgwLTI0KS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldExheWVyWm9vbVJhbmdlKCdteS1sYXllcicsIDIsIDUpO1xuICAgICAqXG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZDogc3RyaW5nLCBtaW56b29tOiBudW1iZXIsIG1heHpvb206IG51bWJlcikge1xuICAgICAgICB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKGxheWVySWQsIG1pbnpvb20sIG1heHpvb20pO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlciBmb3IgdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gd2hpY2ggdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheSB8IG51bGwgfCB1bmRlZmluZWR9IGZpbHRlciBUaGUgZmlsdGVyLCBjb25mb3JtaW5nIHRvIHRoZSBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzXG4gICAgICogICBbZmlsdGVyIGRlZmluaXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2xheWVycy8jZmlsdGVyKS4gIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYW55IGV4aXN0aW5nIGZpbHRlciBmcm9tIHRoZSBsYXllci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZmlsdGVyIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0RmlsdGVyKCdteS1sYXllcicsIFsnPT0nLCAnbmFtZScsICdVU0EnXSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyBjb250YWluaW5nIHNpbWlsYXIgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeS1zaW1pbGFyLWZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSB0aW1lbGluZSBhbmltYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGltZWxpbmUtYW5pbWF0aW9uLylcbiAgICAgKi9cbiAgICBzZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nLCBmaWx0ZXI6ID9GaWx0ZXJTcGVjaWZpY2F0aW9uLCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRGaWx0ZXIobGF5ZXJJZCwgZmlsdGVyLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXIgYXBwbGllZCB0byB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBzdHlsZSBsYXllciB3aG9zZSBmaWx0ZXIgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGxheWVyJ3MgZmlsdGVyLlxuICAgICAqL1xuICAgIGdldEZpbHRlcihsYXllcklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKGxheWVySWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgcGFpbnQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gc2V0IHRoZSBwYWludCBwcm9wZXJ0eSBpbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFpbnQgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYWludCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogICBNdXN0IGJlIG9mIGEgdHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3BlcnR5LCBhcyBkZWZpbmVkIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiBgdmFsdWVgIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFBhaW50UHJvcGVydHkoJ215LWxheWVyJywgJ2ZpbGwtY29sb3InLCAnI2ZhYWZlZScpO1xuICAgICAqIEBzZWUgW0NoYW5nZSBhIGxheWVyJ3MgY29sb3Igd2l0aCBidXR0b25zXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NvbG9yLXN3aXRjaGVyLylcbiAgICAgKiBAc2VlIFtBZGp1c3QgYSBsYXllcidzIG9wYWNpdHldKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRqdXN0LWxheWVyLW9wYWNpdHkvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBwYWludCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBnZXQgdGhlIHBhaW50IHByb3BlcnR5IGZyb20uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgYSBwYWludCBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHBhaW50IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eShsYXllcklkLCBuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGxheW91dCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBzZXQgdGhlIGxheW91dCBwcm9wZXJ0eSBpbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5LiBNdXN0IGJlIG9mIGEgdHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHByb3BlcnR5LCBhcyBkZWZpbmVkIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiBgdmFsdWVgIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldExheW91dFByb3BlcnR5KCdteS1sYXllcicsICd2aXNpYmlsaXR5JywgJ25vbmUnKTtcbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFueSBjb21iaW5hdGlvbiBvZiBsaWdodCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGlnaHQgTGlnaHQgcHJvcGVydGllcyB0byBzZXQuIE11c3QgY29uZm9ybSB0byB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNsaWdodCkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGZpbHRlciBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRMaWdodChsaWdodDogTGlnaHRTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMaWdodChsaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxpZ2h0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGxpZ2h0IExpZ2h0IHByb3BlcnRpZXMgb2YgdGhlIHN0eWxlLlxuICAgICAqL1xuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUuIFRoZSBgc3RhdGVgIG9iamVjdCBpcyBtZXJnZWQgaW4gd2l0aCB0aGUgZXhpc3Rpbmcgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGlkYCBhdHRyaWJ1dGUsIHdoaWNoIG11c3QgYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyB0aGF0IGNhbiBiZVxuICAgICAqIGNhc3QgdG8gYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlIEZlYXR1cmUgaWRlbnRpZmllci4gRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb21cbiAgICAgKiB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gb3IgZXZlbnQgaGFuZGxlcnMgY2FuIGJlIHVzZWQgYXMgZmVhdHVyZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gZmVhdHVyZS5pZCBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmUuc291cmNlIFRoZSBJZCBvZiB0aGUgdmVjdG9yIHNvdXJjZSBvciBHZW9KU09OIHNvdXJjZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmZWF0dXJlLnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIHRoZSBzb3VyY2VMYXllciBpc1xuICAgICAqICByZXF1aXJlZC4qXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIEEgc2V0IG9mIGtleS12YWx1ZSBwYWlycy4gVGhlIHZhbHVlcyBzaG91bGQgYmUgdmFsaWQgSlNPTiB0eXBlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBgZmVhdHVyZS5pZGAgYXR0cmlidXRlIG9uIGRhdGEgc2V0cy4gRm9yIEdlb0pTT04gc291cmNlcyB3aXRob3V0XG4gICAgICogZmVhdHVyZSBpZHMsIHNldCB0aGUgYGdlbmVyYXRlSWRgIG9wdGlvbiBpbiB0aGUgYEdlb0pTT05Tb3VyY2VTcGVjaWZpY2F0aW9uYCB0byBhdXRvLWFzc2lnbiB0aGVtLiBUaGlzXG4gICAgICogb3B0aW9uIGFzc2lnbnMgaWRzIGJhc2VkIG9uIGEgZmVhdHVyZSdzIGluZGV4IGluIHRoZSBzb3VyY2UgZGF0YS4gSWYgeW91IGNoYW5nZSBmZWF0dXJlIGRhdGEgdXNpbmdcbiAgICAgKiBgbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpLnNldERhdGEoLi4pYCwgeW91IG1heSBuZWVkIHRvIHJlLWFwcGx5IHN0YXRlIHRha2luZyBpbnRvIGFjY291bnQgdXBkYXRlZCBgaWRgIHZhbHVlcy5cbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBob3ZlciBlZmZlY3RdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUsIHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGZlYXR1cmUgc3RhdGUsIHNldHRpbmcgaXQgYmFjayB0byB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSWYgb25seVxuICAgICAqIHNvdXJjZSBpcyBzcGVjaWZpZWQsIHJlbW92ZXMgYWxsIHN0YXRlcyBvZiB0aGF0IHNvdXJjZS4gSWZcbiAgICAgKiB0YXJnZXQuaWQgaXMgYWxzbyBzcGVjaWZpZWQsIHJlbW92ZXMgYWxsIGtleXMgZm9yIHRoYXQgZmVhdHVyZSdzIHN0YXRlLlxuICAgICAqIElmIGtleSBpcyBhbHNvIHNwZWNpZmllZCwgcmVtb3ZlcyB0aGF0IGtleSBmcm9tIHRoYXQgZmVhdHVyZSdzIHN0YXRlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBpZGAgYXR0cmlidXRlLCB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmVcbiAgICAgKiBjYXN0IHRvIGFuIGludGVnZXIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBJZGVudGlmaWVyIG9mIHdoZXJlIHRvIHNldCBzdGF0ZTogY2FuIGJlIGEgc291cmNlLCBhIGZlYXR1cmUsIG9yIGEgc3BlY2lmaWMga2V5IG9mIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb20ge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IHRhcmdldC5pZCAob3B0aW9uYWwpIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS4gT3B0aW9uYWwgaWYga2V5IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldC5zb3VyY2UgVGhlIElkIG9mIHRoZSB2ZWN0b3Igc291cmNlIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldC5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGUgc291cmNlTGF5ZXIgaXNcbiAgICAgKiAgcmVxdWlyZWQuKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgKG9wdGlvbmFsKSBUaGUga2V5IGluIHRoZSBmZWF0dXJlIHN0YXRlIHRvIHJlc2V0LlxuICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0LCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhdGUgb2YgYSBmZWF0dXJlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBpZGAgYXR0cmlidXRlLCB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmVcbiAgICAgKiBjYXN0IHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZSBGZWF0dXJlIGlkZW50aWZpZXIuIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tXG4gICAgICoge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZlYXR1cmUuaWQgVW5pcXVlIGlkIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlLnNvdXJjZSBUaGUgSWQgb2YgdGhlIHZlY3RvciBzb3VyY2Ugb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZS5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGUgc291cmNlTGF5ZXIgaXNcbiAgICAgKiAgcmVxdWlyZWQuKlxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqL1xuICAgIGdldEZlYXR1cmVTdGF0ZShmZWF0dXJlOiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcjsgfSk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldEZlYXR1cmVTdGF0ZShmZWF0dXJlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjb250YWluaW5nIEhUTUwgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIG1hcCdzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBnZXRDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGFkZCBub24tR0wgb3ZlcmxheXMgdG8gdGhlIG1hcCwgeW91IHNob3VsZCBhcHBlbmQgdGhlbSB0byB0aGlzIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIGV2ZW50IGJpbmRpbmdzIGZvciBtYXAgaW50ZXJhY3Rpdml0eSAoc3VjaCBhcyBwYW5uaW5nIGFuZCB6b29taW5nKSBhcmVcbiAgICAgKiBhdHRhY2hlZC4gSXQgd2lsbCByZWNlaXZlIGJ1YmJsZWQgZXZlbnRzIGZyb20gY2hpbGQgZWxlbWVudHMgc3VjaCBhcyB0aGUgYDxjYW52YXM+YCwgYnV0IG5vdCBmcm9tXG4gICAgICogbWFwIGNvbnRyb2xzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgY29udGFpbmVyIG9mIHRoZSBtYXAncyBgPGNhbnZhcz5gLlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICovXG4gICAgZ2V0Q2FudmFzQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzQ29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIG1hcCdzIGA8Y2FudmFzPmAgZWxlbWVudC5cbiAgICAgKiBAc2VlIFtNZWFzdXJlIGRpc3RhbmNlc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9tZWFzdXJlLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqIEBzZWUgW0NlbnRlciB0aGUgbWFwIG9uIGEgY2xpY2tlZCBzeW1ib2xdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2VudGVyLW9uLXN5bWJvbC8pXG4gICAgICovXG4gICAgZ2V0Q2FudmFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FudmFzO1xuICAgIH1cblxuICAgIF9jb250YWluZXJEaW1lbnNpb25zKCkge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCB8fCA0MDA7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IHx8IDMwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbd2lkdGgsIGhlaWdodF07XG4gICAgfVxuXG4gICAgX2RldGVjdE1pc3NpbmdDU1MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkQ29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gICAgICAgIGlmIChjb21wdXRlZENvbG9yICE9PSAncmdiKDI1MCwgMTI4LCAxMTQpJykge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ1RoaXMgcGFnZSBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgQ1NTIGRlY2xhcmF0aW9ucyBmb3IgJyArXG4gICAgICAgICAgICAgICAgJ01hcGJveCBHTCBKUywgd2hpY2ggbWF5IGNhdXNlIHRoZSBtYXAgdG8gZGlzcGxheSBpbmNvcnJlY3RseS4gJyArXG4gICAgICAgICAgICAgICAgJ1BsZWFzZSBlbnN1cmUgeW91ciBwYWdlIGluY2x1ZGVzIG1hcGJveC1nbC5jc3MsIGFzIGRlc2NyaWJlZCAnICtcbiAgICAgICAgICAgICAgICAnaW4gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zZXR1cENvbnRhaW5lcigpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtbWFwJyk7XG5cbiAgICAgICAgY29uc3QgbWlzc2luZ0NTU0NhbmFyeSA9IHRoaXMuX21pc3NpbmdDU1NDYW5hcnkgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY2FuYXJ5JywgY29udGFpbmVyKTtcbiAgICAgICAgbWlzc2luZ0NTU0NhbmFyeS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHRoaXMuX2RldGVjdE1pc3NpbmdDU1MoKTtcblxuICAgICAgICBjb25zdCBjYW52YXNDb250YWluZXIgPSB0aGlzLl9jYW52YXNDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lcicsIGNvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWludGVyYWN0aXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYW52YXMgPSBET00uY3JlYXRlKCdjYW52YXMnLCAnbWFwYm94Z2wtY2FudmFzJywgY2FudmFzQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLl9jb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLl9jb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICB0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ01hcCcpO1xuXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNhbnZhcyhkaW1lbnNpb25zWzBdLCBkaW1lbnNpb25zWzFdKTtcblxuICAgICAgICBjb25zdCBjb250cm9sQ29udGFpbmVyID0gdGhpcy5fY29udHJvbENvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lcicsIGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuX2NvbnRyb2xQb3NpdGlvbnMgPSB7fTtcbiAgICAgICAgWyd0b3AtbGVmdCcsICd0b3AtcmlnaHQnLCAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0J10uZm9yRWFjaCgocG9zaXRpb25OYW1lKSA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbnNbcG9zaXRpb25OYW1lXSA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsLSR7cG9zaXRpb25OYW1lfWAsIGNvbnRyb2xDb250YWluZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzaXplQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBpeGVsUmF0aW8gPSBicm93c2VyLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblxuICAgICAgICAvLyBSZXF1ZXN0IHRoZSByZXF1aXJlZCBjYW52YXMgc2l6ZSB0YWtpbmcgdGhlIHBpeGVscmF0aW8gaW50byBhY2NvdW50LlxuICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBwaXhlbFJhdGlvICogd2lkdGg7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBwaXhlbFJhdGlvICogaGVpZ2h0O1xuXG4gICAgICAgIC8vIE1haW50YWluIHRoZSBzYW1lIGNhbnZhcyBzaXplLCBwb3RlbnRpYWxseSBkb3duc2NhbGluZyBpdCBmb3IgSGlEUEkgZGlzcGxheXNcbiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBfc2V0dXBQYWludGVyKCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0ZW5kKHt9LCBpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LFxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuX2FudGlhbGlhcyB8fCBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICB0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgYXR0cmlidXRlcyk7XG5cbiAgICAgICAgaWYgKCFnbCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wnKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWludGVyID0gbmV3IFBhaW50ZXIoZ2wsIHRoaXMudHJhbnNmb3JtKTtcblxuICAgICAgICB3ZWJwU3VwcG9ydGVkLnRlc3RTdXBwb3J0KGdsKTtcbiAgICB9XG5cbiAgICBfY29udGV4dExvc3QoZXZlbnQ6ICopIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd3ZWJnbGNvbnRleHRsb3N0Jywge29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkpO1xuICAgIH1cblxuICAgIF9jb250ZXh0UmVzdG9yZWQoZXZlbnQ6ICopIHtcbiAgICAgICAgdGhpcy5fc2V0dXBQYWludGVyKCk7XG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHtvcmlnaW5hbEV2ZW50OiBldmVudH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHN0eWxlIGlzIG5vdCB5ZXQgZnVsbHkgbG9hZGVkLFxuICAgICAqIG9yIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIHRvIHRoZSBzb3VyY2VzIG9yIHN0eWxlIHRoYXRcbiAgICAgKiBoYXMgbm90IHlldCBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKi9cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fc3R5bGVEaXJ0eSAmJiAhdGhpcy5fc291cmNlc0RpcnR5ICYmICEhdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGlzIG1hcCdzIHN0eWxlIGFuZCBzb3VyY2VzLCBhbmQgcmUtcmVuZGVyIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVN0eWxlIG1hcmsgdGhlIG1hcCdzIHN0eWxlIGZvciByZXByb2Nlc3NpbmcgYXNcbiAgICAgKiB3ZWxsIGFzIGl0cyBzb3VyY2VzXG4gICAgICogQHJldHVybnMge01hcH0gdGhpc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VwZGF0ZSh1cGRhdGVTdHlsZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0eWxlKSByZXR1cm4gdGhpcztcblxuICAgICAgICB0aGlzLl9zdHlsZURpcnR5ID0gdGhpcy5fc3R5bGVEaXJ0eSB8fCB1cGRhdGVTdHlsZTtcbiAgICAgICAgdGhpcy5fc291cmNlc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcXVlc3QgdGhhdCB0aGUgZ2l2ZW4gY2FsbGJhY2sgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBuZXh0IHJlbmRlclxuICAgICAqIGZyYW1lLiAgU2NoZWR1bGUgYSByZW5kZXIgZnJhbWUgaWYgb25lIGlzIG5vdCBhbHJlYWR5IHNjaGVkdWxlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBpZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbGJhY2tcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZXF1ZXN0UmVuZGVyRnJhbWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBUYXNrSUQge1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQoY2FsbGJhY2spO1xuICAgIH1cblxuICAgIF9jYW5jZWxSZW5kZXJGcmFtZShpZDogVGFza0lEKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGwgd2hlbiBhIChyZS0pcmVuZGVyIG9mIHRoZSBtYXAgaXMgcmVxdWlyZWQ6XG4gICAgICogLSBUaGUgc3R5bGUgaGFzIGNoYW5nZWQgKGBzZXRQYWludFByb3BlcnR5KClgLCBldGMuKVxuICAgICAqIC0gU291cmNlIGRhdGEgaGFzIGNoYW5nZWQgKGUuZy4gdGlsZXMgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nKVxuICAgICAqIC0gVGhlIG1hcCBoYXMgaXMgbW92aW5nIChvciBqdXN0IGZpbmlzaGVkIG1vdmluZylcbiAgICAgKiAtIEEgdHJhbnNpdGlvbiBpcyBpbiBwcm9ncmVzc1xuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gdGhpc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlcigpIHtcbiAgICAgICAgbGV0IGdwdVRpbWVyLCBmcmFtZVN0YXJ0VGltZSA9IDA7XG4gICAgICAgIGNvbnN0IGV4dFRpbWVyUXVlcnkgPSB0aGlzLnBhaW50ZXIuY29udGV4dC5leHRUaW1lclF1ZXJ5O1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5zKCdncHUtdGltaW5nLWZyYW1lJykpIHtcbiAgICAgICAgICAgIGdwdVRpbWVyID0gZXh0VGltZXJRdWVyeS5jcmVhdGVRdWVyeUVYVCgpO1xuICAgICAgICAgICAgZXh0VGltZXJRdWVyeS5iZWdpblF1ZXJ5RVhUKGV4dFRpbWVyUXVlcnkuVElNRV9FTEFQU0VEX0VYVCwgZ3B1VGltZXIpO1xuICAgICAgICAgICAgZnJhbWVTdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBjdXN0b20gbGF5ZXIgbWF5IGhhdmUgdXNlZCB0aGUgY29udGV4dCBhc3luY2hyb25vdXNseS4gTWFyayB0aGUgc3RhdGUgYXMgZGlydHkuXG4gICAgICAgIHRoaXMucGFpbnRlci5jb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKCk7XG5cbiAgICAgICAgbGV0IGNyb3NzRmFkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgLy8gSWYgdGhlIHN0eWxlIGhhcyBjaGFuZ2VkLCB0aGUgbWFwIGlzIGJlaW5nIHpvb21lZCwgb3IgYSB0cmFuc2l0aW9uIG9yIGZhZGUgaXMgaW4gcHJvZ3Jlc3M6XG4gICAgICAgIC8vICAtIEFwcGx5IHN0eWxlIGNoYW5nZXMgKGluIGEgYmF0Y2gpXG4gICAgICAgIC8vICAtIFJlY2FsY3VsYXRlIHBhaW50IHByb3BlcnRpZXMuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmIHRoaXMuX3N0eWxlRGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMudHJhbnNmb3JtLnpvb207XG4gICAgICAgICAgICBjb25zdCBub3cgPSBicm93c2VyLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUoem9vbSwgbm93KTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh6b29tLCB7XG4gICAgICAgICAgICAgICAgbm93LFxuICAgICAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogdGhpcy5fZmFkZUR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHpvb21IaXN0b3J5OiB0aGlzLnN0eWxlLnpvb21IaXN0b3J5LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZmFjdG9yID0gcGFyYW1ldGVycy5jcm9zc0ZhZGluZ0ZhY3RvcigpO1xuICAgICAgICAgICAgaWYgKGZhY3RvciAhPT0gMSB8fCBmYWN0b3IgIT09IHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yKSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NGYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gZmFjdG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0eWxlLnVwZGF0ZShwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBfcmVuZGVyIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gaW4tcHJvZ3Jlc3MgcGFpbnRcbiAgICAgICAgLy8gdHJhbnNpdGlvbiwgdXBkYXRlIHNvdXJjZSBjYWNoZXMgdG8gY2hlY2sgZm9yIGFuZCBsb2FkIGFueSB0aWxlcyB3ZVxuICAgICAgICAvLyBuZWVkIGZvciB0aGUgY3VycmVudCB0cmFuc2Zvcm1cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgdGhpcy5fc291cmNlc0RpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX3VwZGF0ZVNvdXJjZXModGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGxhY2VtZW50RGlydHkgPSB0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLCB0aGlzLnNob3dDb2xsaXNpb25Cb3hlcywgdGhpcy5fZmFkZUR1cmF0aW9uLCB0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnMpO1xuXG4gICAgICAgIC8vIEFjdHVhbGx5IGRyYXdcbiAgICAgICAgdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLCB7XG4gICAgICAgICAgICBzaG93VGlsZUJvdW5kYXJpZXM6IHRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLFxuICAgICAgICAgICAgc2hvd092ZXJkcmF3SW5zcGVjdG9yOiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IsXG4gICAgICAgICAgICByb3RhdGluZzogdGhpcy5pc1JvdGF0aW5nKCksXG4gICAgICAgICAgICB6b29taW5nOiB0aGlzLmlzWm9vbWluZygpLFxuICAgICAgICAgICAgbW92aW5nOiB0aGlzLmlzTW92aW5nKCksXG4gICAgICAgICAgICBmYWRlRHVyYXRpb246IHRoaXMuX2ZhZGVEdXJhdGlvbixcbiAgICAgICAgICAgIHNob3dQYWRkaW5nOiB0aGlzLnNob3dQYWRkaW5nLFxuICAgICAgICAgICAgZ3B1VGltaW5nOiAhIXRoaXMubGlzdGVucygnZ3B1LXRpbWluZy1sYXllcicpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyZW5kZXInKSk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZGVkKCkgJiYgIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIFBlcmZvcm1hbmNlVXRpbHMubWFyayhQZXJmb3JtYW5jZU1hcmtlcnMubG9hZCk7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdsb2FkJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKSB8fCBjcm9zc0ZhZGluZykpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgIXRoaXMuX3BsYWNlbWVudERpcnR5KSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBubyBmYWRlIG9wZXJhdGlvbnMgYXJlIGluIHByb2dyZXNzLCB3ZSBjYW4gcmVsZWFzZVxuICAgICAgICAgICAgLy8gYWxsIHRpbGVzIGhlbGQgZm9yIGZhZGluZy4gSWYgd2UgZGlkbid0IGRvIHRoaXMsIHRoZSB0aWxlc1xuICAgICAgICAgICAgLy8gd291bGQganVzdCBzaXQgaW4gdGhlIFNvdXJjZUNhY2hlcyB1bnRpbCB0aGUgbmV4dCByZW5kZXJcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctZnJhbWUnKSkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ1BVVGltZSA9IGJyb3dzZXIubm93KCkgLSBmcmFtZVN0YXJ0VGltZTtcbiAgICAgICAgICAgIGV4dFRpbWVyUXVlcnkuZW5kUXVlcnlFWFQoZXh0VGltZXJRdWVyeS5USU1FX0VMQVBTRURfRVhULCBncHVUaW1lcik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJHUFVUaW1lID0gZXh0VGltZXJRdWVyeS5nZXRRdWVyeU9iamVjdEVYVChncHVUaW1lciwgZXh0VGltZXJRdWVyeS5RVUVSWV9SRVNVTFRfRVhUKSAvICgxMDAwICogMTAwMCk7XG4gICAgICAgICAgICAgICAgZXh0VGltZXJRdWVyeS5kZWxldGVRdWVyeUVYVChncHVUaW1lcik7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZ3B1LXRpbWluZy1mcmFtZScsIHtcbiAgICAgICAgICAgICAgICAgICAgY3B1VGltZTogcmVuZGVyQ1BVVGltZSxcbiAgICAgICAgICAgICAgICAgICAgZ3B1VGltZTogcmVuZGVyR1BVVGltZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sIDUwKTsgLy8gV2FpdCA1MG1zIHRvIGdpdmUgdGltZSBmb3IgYWxsIEdQVSBjYWxscyB0byBmaW5pc2ggYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5saXN0ZW5zKCdncHUtdGltaW5nLWxheWVyJykpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0dGluZyB0aGUgUGFpbnRlcidzIHBlci1sYXllciB0aW1pbmcgcXVlcmllcyBoZXJlIGFsbG93cyB1cyB0byBpc29sYXRlXG4gICAgICAgICAgICAvLyB0aGUgcXVlcmllcyB0byBpbmRpdmlkdWFsIGZyYW1lcy5cbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTGF5ZXJRdWVyaWVzID0gdGhpcy5wYWludGVyLmNvbGxlY3RHcHVUaW1lcnMoKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRMYXllclRpbWVzID0gdGhpcy5wYWludGVyLnF1ZXJ5R3B1VGltZXJzKGZyYW1lTGF5ZXJRdWVyaWVzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2dwdS10aW1pbmctbGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyVGltZXM6IHJlbmRlcmVkTGF5ZXJUaW1lc1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sIDUwKTsgLy8gV2FpdCA1MG1zIHRvIGdpdmUgdGltZSBmb3IgYWxsIEdQVSBjYWxscyB0byBmaW5pc2ggYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY2hlZHVsZSBhbm90aGVyIHJlbmRlciBmcmFtZSBpZiBpdCdzIG5lZWRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggYF9zdHlsZURpcnR5YCBhbmQgYF9zb3VyY2VzRGlydHlgIGFyZSByZXNldCBpbiB0aGlzXG4gICAgICAgIC8vIG1ldGhvZCwgc3luY2hyb25vdXMgZXZlbnRzIGZpcmVkIGR1cmluZyBTdHlsZSN1cGRhdGUgb3JcbiAgICAgICAgLy8gU3R5bGUjX3VwZGF0ZVNvdXJjZXMgY291bGQgaGF2ZSBjYXVzZWQgdGhlbSB0byBiZSBzZXQgYWdhaW4uXG4gICAgICAgIGNvbnN0IHNvbWV0aGluZ0RpcnR5ID0gdGhpcy5fc291cmNlc0RpcnR5IHx8IHRoaXMuX3N0eWxlRGlydHkgfHwgdGhpcy5fcGxhY2VtZW50RGlydHk7XG4gICAgICAgIGlmIChzb21ldGhpbmdEaXJ0eSB8fCB0aGlzLl9yZXBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNNb3ZpbmcoKSAmJiB0aGlzLmxvYWRlZCgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2Z1bGx5TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbHlMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlVXRpbHMubWFyayhQZXJmb3JtYW5jZU1hcmtlcnMuZnVsbExvYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnaWRsZScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFuIHVwIGFuZCByZWxlYXNlIGFsbCBpbnRlcm5hbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFwLlxuICAgICAqXG4gICAgICogVGhpcyBpbmNsdWRlcyBET00gZWxlbWVudHMsIGV2ZW50IGJpbmRpbmdzLCB3ZWIgd29ya2VycywgYW5kIFdlYkdMIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgbWFwIGFuZCB3aXNoIHRvIGVuc3VyZSB0aGF0IGl0IG5vXG4gICAgICogbG9uZ2VyIGNvbnN1bWVzIGJyb3dzZXIgcmVzb3VyY2VzLiBBZnRlcndhcmRzLCB5b3UgbXVzdCBub3QgY2FsbCBhbnkgb3RoZXJcbiAgICAgKiBtZXRob2RzIG9uIHRoZSBtYXAuXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5faGFzaCkgdGhpcy5faGFzaC5yZW1vdmUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5fY29udHJvbHMpIGNvbnRyb2wub25SZW1vdmUodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wYWludGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZXRTdHlsZShudWxsKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCB0aGlzLl9vbldpbmRvd09ubGluZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9sb3NlX2NvbnRleHQnKTtcbiAgICAgICAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fY2FudmFzQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLW1hcCcpO1xuXG4gICAgICAgIFBlcmZvcm1hbmNlVXRpbHMuY2xlYXJNZXRyaWNzKCk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JlbW92ZScpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSByZW5kZXJpbmcgb2YgYSBzaW5nbGUgZnJhbWUuIFVzZSB0aGlzIG1ldGhvZCB3aXRoIGN1c3RvbSBsYXllcnMgdG9cbiAgICAgKiByZXBhaW50IHRoZSBtYXAgd2hlbiB0aGUgbGF5ZXIgY2hhbmdlcy4gQ2FsbGluZyB0aGlzIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB0aGVcbiAgICAgKiBuZXh0IGZyYW1lIGlzIHJlbmRlcmVkIHdpbGwgc3RpbGwgcmVzdWx0IGluIG9ubHkgYSBzaW5nbGUgZnJhbWUgYmVpbmcgcmVuZGVyZWQuXG4gICAgICovXG4gICAgdHJpZ2dlclJlcGFpbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmICF0aGlzLl9mcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBicm93c2VyLmZyYW1lKChwYWludFN0YXJ0VGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLmZyYW1lKHBhaW50U3RhcnRUaW1lc3RhbXApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uV2luZG93T25saW5lKCkge1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICBfb25XaW5kb3dSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFja1Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoe29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkuX3VwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYW4gb3V0bGluZVxuICAgICAqIGFyb3VuZCBlYWNoIHRpbGUgYW5kIHRoZSB0aWxlIElELiBUaGVzZSB0aWxlIGJvdW5kYXJpZXMgYXJlIHVzZWZ1bCBmb3JcbiAgICAgKiBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgdW5jb21wcmVzc2VkIGZpbGUgc2l6ZSBvZiB0aGUgZmlyc3QgdmVjdG9yIHNvdXJjZSBpcyBkcmF3biBpbiB0aGUgdG9wIGxlZnRcbiAgICAgKiBjb3JuZXIgb2YgZWFjaCB0aWxlLCBuZXh0IHRvIHRoZSB0aWxlIElELlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd1RpbGVCb3VuZGFyaWVzXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93VGlsZUJvdW5kYXJpZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dUaWxlQm91bmRhcmllczsgfVxuICAgIHNldCBzaG93VGlsZUJvdW5kYXJpZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcyA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHdpbGwgdmlzdWFsaXplXG4gICAgICogdGhlIHBhZGRpbmcgb2Zmc2V0cy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNob3dQYWRkaW5nXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93UGFkZGluZygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd1BhZGRpbmc7IH1cbiAgICBzZXQgc2hvd1BhZGRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dQYWRkaW5nID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93UGFkZGluZyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsIHJlbmRlciBib3hlc1xuICAgICAqIGFyb3VuZCBhbGwgc3ltYm9scyBpbiB0aGUgZGF0YSBzb3VyY2UsIHJldmVhbGluZyB3aGljaCBzeW1ib2xzXG4gICAgICogd2VyZSByZW5kZXJlZCBvciB3aGljaCB3ZXJlIGhpZGRlbiBkdWUgdG8gY29sbGlzaW9ucy5cbiAgICAgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd0NvbGxpc2lvbkJveGVzXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93Q29sbGlzaW9uQm94ZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlczsgfVxuICAgIHNldCBzaG93Q29sbGlzaW9uQm94ZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID0gdmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSB0dXJuIGNvbGxpc2lvbiBib3hlcyBvbiB3ZSBoYXZlIHRvIGdlbmVyYXRlIHRoZW0gZm9yIGV4aXN0aW5nIHRpbGVzXG4gICAgICAgICAgICAvLyBXaGVuIHdlIHR1cm4gdGhlbSBvZmYsIHRoZXJlJ3Mgbm8gY29zdCB0byBsZWF2aW5nIGV4aXN0aW5nIGJveGVzIGluIHBsYWNlXG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNhbGwgYW4gdXBkYXRlIHRvIHJlbW92ZSBjb2xsaXNpb24gYm94ZXNcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCBzaG91bGQgY29sb3ItY29kZVxuICAgICAqIGVhY2ggZnJhZ21lbnQgdG8gc2hvdyBob3cgbWFueSB0aW1lcyBpdCBoYXMgYmVlbiBzaGFkZWQuXG4gICAgICogV2hpdGUgZnJhZ21lbnRzIGhhdmUgYmVlbiBzaGFkZWQgOCBvciBtb3JlIHRpbWVzLlxuICAgICAqIEJsYWNrIGZyYWdtZW50cyBoYXZlIGJlZW4gc2hhZGVkIDAgdGltZXMuXG4gICAgICogVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNob3dPdmVyZHJhd1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgc2hvd092ZXJkcmF3SW5zcGVjdG9yKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I7IH1cbiAgICBzZXQgc2hvd092ZXJkcmF3SW5zcGVjdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsXG4gICAgICogY29udGludW91c2x5IHJlcGFpbnQuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBhbmFseXppbmcgcGVyZm9ybWFuY2UuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXBhaW50XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCByZXBhaW50KCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9yZXBhaW50OyB9XG4gICAgc2V0IHJlcGFpbnQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcGFpbnQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXBhaW50ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2hvdyB2ZXJ0aWNlc1xuICAgIGdldCB2ZXJ0aWNlcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fdmVydGljZXM7IH1cbiAgICBzZXQgdmVydGljZXModmFsdWU6IGJvb2xlYW4pIHsgdGhpcy5fdmVydGljZXMgPSB2YWx1ZTsgdGhpcy5fdXBkYXRlKCk7IH1cblxuICAgIC8vIGZvciBjYWNoZSBicm93c2VyIHRlc3RzXG4gICAgX3NldENhY2hlTGltaXRzKGxpbWl0OiBudW1iZXIsIGNoZWNrVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICAgICAgc2V0Q2FjaGVMaW1pdHMobGltaXQsIGNoZWNrVGhyZXNob2xkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVyc2lvbiBvZiBNYXBib3ggR0wgSlMgaW4gdXNlIGFzIHNwZWNpZmllZCBpbiBwYWNrYWdlLmpzb24sIENIQU5HRUxPRy5tZCwgYW5kIHRoZSBHaXRIdWIgcmVsZWFzZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZlcnNpb25cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQHZhciB7c3RyaW5nfSB2ZXJzaW9uXG4gICAgICovXG5cbiAgICBnZXQgdmVyc2lvbigpOiBzdHJpbmcgeyByZXR1cm4gdmVyc2lvbjsgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXA7XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGludGVyYWN0aXZlIGNvbnRyb2xzIGFkZGVkIHRvIHRoZSBtYXAuIFRoaXMgaXMgYVxuICogc3BlY2lmaWNhdGlvbiBmb3IgaW1wbGVtZW50ZXJzIHRvIG1vZGVsOiBpdCBpcyBub3RcbiAqIGFuIGV4cG9ydGVkIG1ldGhvZCBvciBjbGFzcy5cbiAqXG4gKiBDb250cm9scyBtdXN0IGltcGxlbWVudCBgb25BZGRgIGFuZCBgb25SZW1vdmVgLCBhbmQgbXVzdCBvd24gYW5cbiAqIGVsZW1lbnQsIHdoaWNoIGlzIG9mdGVuIGEgYGRpdmAgZWxlbWVudC4gVG8gdXNlIE1hcGJveCBHTCBKUydzXG4gKiBkZWZhdWx0IGNvbnRyb2wgc3R5bGluZywgYWRkIHRoZSBgbWFwYm94Z2wtY3RybGAgY2xhc3MgdG8geW91ciBjb250cm9sJ3NcbiAqIG5vZGUuXG4gKlxuICogQGludGVyZmFjZSBJQ29udHJvbFxuICogQGV4YW1wbGVcbiAqIC8vIENvbnRyb2wgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBIZWxsb1dvcmxkQ29udHJvbCB7XG4gKiAgICAgb25BZGQobWFwKSB7XG4gKiAgICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAqICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAnbWFwYm94Z2wtY3RybCc7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci50ZXh0Q29udGVudCA9ICdIZWxsbywgd29ybGQnO1xuICogICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICogICAgIH1cbiAqXG4gKiAgICAgb25SZW1vdmUoKSB7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gKiAgICAgICAgIHRoaXMuX21hcCA9IHVuZGVmaW5lZDtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogLy8gQ29udHJvbCBpbXBsZW1lbnRlZCBhcyBFUzUgcHJvdG90eXBpY2FsIGNsYXNzXG4gKiBmdW5jdGlvbiBIZWxsb1dvcmxkQ29udHJvbCgpIHsgfVxuICpcbiAqIEhlbGxvV29ybGRDb250cm9sLnByb3RvdHlwZS5vbkFkZCA9IGZ1bmN0aW9uKG1hcCkge1xuICogICAgIHRoaXMuX21hcCA9IG1hcDtcbiAqICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gJ21hcGJveGdsLWN0cmwnO1xuICogICAgIHRoaXMuX2NvbnRhaW5lci50ZXh0Q29udGVudCA9ICdIZWxsbywgd29ybGQnO1xuICogICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gKiB9O1xuICpcbiAqIEhlbGxvV29ybGRDb250cm9sLnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAqICAgICAgdGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAqICAgICAgdGhpcy5fbWFwID0gdW5kZWZpbmVkO1xuICogfTtcbiAqL1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY29udHJvbCBvbiB0aGUgbWFwIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVyc1xuICogYW5kIHJlc291cmNlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHtAbGluayBNYXAjYWRkQ29udHJvbH1cbiAqIGludGVybmFsbHkuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgdGhlIE1hcCB0aGlzIGNvbnRyb2wgd2lsbCBiZSBhZGRlZCB0b1xuICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgY29udHJvbCdzIGNvbnRhaW5lciBlbGVtZW50LiBUaGlzIHNob3VsZFxuICogYmUgY3JlYXRlZCBieSB0aGUgY29udHJvbCBhbmQgcmV0dXJuZWQgYnkgb25BZGQgd2l0aG91dCBiZWluZyBhdHRhY2hlZFxuICogdG8gdGhlIERPTTogdGhlIG1hcCB3aWxsIGluc2VydCB0aGUgY29udHJvbCdzIGVsZW1lbnQgaW50byB0aGUgRE9NXG4gKiBhcyBuZWNlc3NhcnkuXG4gKi9cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgY29udHJvbCBvbiB0aGUgbWFwIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIGRldGFjaCBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCByZXNvdXJjZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB7QGxpbmsgTWFwI3JlbW92ZUNvbnRyb2x9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uUmVtb3ZlXG4gKiBAcGFyYW0ge01hcH0gbWFwIHRoZSBNYXAgdGhpcyBjb250cm9sIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfSB0aGVyZSBpcyBubyByZXF1aXJlZCByZXR1cm4gdmFsdWUgZm9yIHRoaXMgbWV0aG9kXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbGx5IHByb3ZpZGUgYSBkZWZhdWx0IHBvc2l0aW9uIGZvciB0aGlzIGNvbnRyb2wuIElmIHRoaXMgbWV0aG9kXG4gKiBpcyBpbXBsZW1lbnRlZCBhbmQge0BsaW5rIE1hcCNhZGRDb250cm9sfSBpcyBjYWxsZWQgd2l0aG91dCB0aGUgYHBvc2l0aW9uYFxuICogcGFyYW1ldGVyLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0RGVmYXVsdFBvc2l0aW9uIHdpbGwgYmUgdXNlZCBhcyB0aGVcbiAqIGNvbnRyb2wncyBwb3NpdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBnZXREZWZhdWx0UG9zaXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IGEgY29udHJvbCBwb3NpdGlvbiwgb25lIG9mIHRoZSB2YWx1ZXMgdmFsaWQgaW4gYWRkQ29udHJvbC5cbiAqL1xuXG4vKipcbiAqIEEgW2BQb2ludGAgZ2VvbWV0cnldKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvcG9pbnQtZ2VvbWV0cnkpIG9iamVjdCwgd2hpY2ggaGFzXG4gKiBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBzY3JlZW4gY29vcmRpbmF0ZXMgaW4gcGl4ZWxzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvaW50XG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBQb2ludH0gb3IgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIGB4YCBhbmQgYHlgIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gKlxuICogQHR5cGVkZWYgeyhQb2ludCB8IEFycmF5PG51bWJlcj4pfSBQb2ludExpa2VcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBEcmFnUm90YXRlSGFuZGxlciBmcm9tICcuLi9oYW5kbGVyL2RyYWdfcm90YXRlJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBzaG93Q29tcGFzcz86IGJvb2xlYW4sXG4gICAgc2hvd1pvb20/OiBib29sZWFuLFxuICAgIHZpc3VhbGl6ZVBpdGNoPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgc2hvd0NvbXBhc3M6IHRydWUsXG4gICAgc2hvd1pvb206IHRydWUsXG4gICAgdmlzdWFsaXplUGl0Y2g6IGZhbHNlXG59O1xuXG4vKipcbiAqIEEgYE5hdmlnYXRpb25Db250cm9sYCBjb250cm9sIGNvbnRhaW5zIHpvb20gYnV0dG9ucyBhbmQgYSBjb21wYXNzLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd0NvbXBhc3M9dHJ1ZV0gSWYgYHRydWVgIHRoZSBjb21wYXNzIGJ1dHRvbiBpcyBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd1pvb209dHJ1ZV0gSWYgYHRydWVgIHRoZSB6b29tLWluIGFuZCB6b29tLW91dCBidXR0b25zIGFyZSBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudmlzdWFsaXplUGl0Y2g9ZmFsc2VdIElmIGB0cnVlYCB0aGUgcGl0Y2ggaXMgdmlzdWFsaXplZCBieSByb3RhdGluZyBYLWF4aXMgb2YgY29tcGFzcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbmF2ID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gKiBtYXAuYWRkQ29udHJvbChuYXYsICd0b3AtbGVmdCcpO1xuICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAqIEBzZWUgW0FkZCBhIHRoaXJkIHBhcnR5IHZlY3RvciB0aWxlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aGlyZC1wYXJ0eS8pXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfem9vbUluQnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfem9vbU91dEJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgX2NvbXBhc3M6IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9jb21wYXNzSWNvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2hhbmRsZXI6IERyYWdSb3RhdGVIYW5kbGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwJyk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgICAgICdfc2V0QnV0dG9uVGl0bGUnLFxuICAgICAgICAgICAgICAgICdfdXBkYXRlWm9vbUJ1dHRvbnMnXG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbignbWFwYm94Z2wtY3RybC16b29tLWluJywgKGUpID0+IHRoaXMuX21hcC56b29tSW4oe30sIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCB0aGlzLl96b29tSW5CdXR0b24pLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtem9vbS1vdXQnLCAoZSkgPT4gdGhpcy5fbWFwLnpvb21PdXQoe30sIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCB0aGlzLl96b29tT3V0QnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAgICAgJ19yb3RhdGVDb21wYXNzQXJyb3cnXG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3MgPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtY29tcGFzcycsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAucmVzZXROb3J0aFBpdGNoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZXNldE5vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzc0ljb24gPSBET00uY3JlYXRlKCdzcGFuJywgJ21hcGJveGdsLWN0cmwtaWNvbicsIHRoaXMuX2NvbXBhc3MpO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzc0ljb24uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVpvb21CdXR0b25zKCkge1xuICAgICAgICBjb25zdCB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcbiAgICAgICAgdGhpcy5fem9vbUluQnV0dG9uLmRpc2FibGVkID0gem9vbSA9PT0gdGhpcy5fbWFwLmdldE1heFpvb20oKTtcbiAgICAgICAgdGhpcy5fem9vbU91dEJ1dHRvbi5kaXNhYmxlZCA9IHpvb20gPT09IHRoaXMuX21hcC5nZXRNaW5ab29tKCk7XG4gICAgfVxuXG4gICAgX3JvdGF0ZUNvbXBhc3NBcnJvdygpIHtcbiAgICAgICAgY29uc3Qgcm90YXRlID0gdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoID9cbiAgICAgICAgICAgIGBzY2FsZSgkezEgLyBNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoICogKE1hdGguUEkgLyAxODApKSwgMC41KX0pIHJvdGF0ZVgoJHt0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNofWRlZykgcm90YXRlWigke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWAgOlxuICAgICAgICAgICAgYHJvdGF0ZSgke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWA7XG5cbiAgICAgICAgdGhpcy5fY29tcGFzc0ljb24uc3R5bGUudHJhbnNmb3JtID0gcm90YXRlO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbUluQnV0dG9uLCAnWm9vbUluJyk7XG4gICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tT3V0QnV0dG9uLCAnWm9vbU91dCcpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd6b29tJywgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl9jb21wYXNzLCAnUmVzZXRCZWFyaW5nJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdwaXRjaCcsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3JvdGF0ZScsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3coKTtcbiAgICAgICAgICAgIC8vIFRlbXBvcmFyeSBmaXggd2l0aCBjbGlja1RvbGVyYW5jZSAoaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC85MDE1KVxuICAgICAgICAgICAgdGhpcy5faGFuZGxlciA9IG5ldyBEcmFnUm90YXRlSGFuZGxlcihtYXAsIHtidXR0b246ICdsZWZ0JywgZWxlbWVudDogdGhpcy5fY29tcGFzcywgY2xpY2tUb2xlcmFuY2U6IG1hcC5kcmFnUm90YXRlLl9jbGlja1RvbGVyYW5jZX0pO1xuICAgICAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywgJ21vdXNlZG93bicsIHRoaXMuX2hhbmRsZXIub25Nb3VzZURvd24pO1xuICAgICAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywgJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dab29tKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tJywgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdwaXRjaCcsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdyb3RhdGUnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywgJ21vdXNlZG93bicsIHRoaXMuX2hhbmRsZXIub25Nb3VzZURvd24pO1xuICAgICAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywgJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duLCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIuZGlzYWJsZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hhbmRsZXI7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgIH1cblxuICAgIF9jcmVhdGVCdXR0b24oY2xhc3NOYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBtaXhlZCkge1xuICAgICAgICBjb25zdCBhID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgY2xhc3NOYW1lLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBhLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZuKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgX3NldEJ1dHRvblRpdGxlKGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQsIHRpdGxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZyhgTmF2aWdhdGlvbkNvbnRyb2wuJHt0aXRsZX1gKTtcbiAgICAgICAgYnV0dG9uLnRpdGxlID0gc3RyO1xuICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3RyKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuXG4vKipcbiAqIEdpdmVuIGEgTG5nTGF0LCBwcmlvciBwcm9qZWN0ZWQgcG9zaXRpb24sIGFuZCBhIHRyYW5zZm9ybSwgcmV0dXJuIGEgbmV3IExuZ0xhdCBzaGlmdGVkXG4gKiBuIMODwpcgMzYww4LCsCBlYXN0IG9yIHdlc3QgZm9yIHNvbWUgbiDDosKJwqUgMCBzdWNoIHRoYXQ6XG4gKlxuICogKiB0aGUgcHJvamVjdGVkIGxvY2F0aW9uIG9mIHRoZSByZXN1bHQgaXMgb24gc2NyZWVuLCBpZiBwb3NzaWJsZSwgYW5kIHNlY29uZGFyaWx5OlxuICogKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwcm9qZWN0ZWQgbG9jYXRpb24gb2YgdGhlIHJlc3VsdCBhbmQgdGhlIHByaW9yIHBvc2l0aW9uXG4gKiAgIGlzIG1pbmltaXplZC5cbiAqXG4gKiBUaGUgb2JqZWN0IGlzIHRvIHByZXNlcnZlIHBlcmNlaXZlZCBvYmplY3QgY29uc3RhbmN5IGZvciBQb3B1cHMgYW5kIE1hcmtlcnMgYXMgbXVjaCBhc1xuICogcG9zc2libGU7IHRoZXkgc2hvdWxkIGF2b2lkIHNoaWZ0aW5nIGxhcmdlIGRpc3RhbmNlcyBhY3Jvc3MgdGhlIHNjcmVlbiwgZXZlbiB3aGVuIHRoZVxuICogbWFwIGNlbnRlciBjaGFuZ2VzIGJ5IMOCwrEzNjDDgsKwIGR1ZSB0byBhdXRvbWF0aWMgd3JhcHBpbmcsIGFuZCB3aGVuIGFib3V0IHRvIGdvIG9mZiBzY3JlZW4sXG4gKiBzaG91bGQgd3JhcCBqdXN0IGVub3VnaCB0byBhdm9pZCBkb2luZyBzby5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsbmdMYXQ6IExuZ0xhdCwgcHJpb3JQb3M6ID9Qb2ludCwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pOiBMbmdMYXQge1xuICAgIGxuZ0xhdCA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZywgbG5nTGF0LmxhdCk7XG5cbiAgICAvLyBGaXJzdCwgdHJ5IHNoaWZ0aW5nIG9uZSB3b3JsZCBpbiBlaXRoZXIgZGlyZWN0aW9uLCBhbmQgc2VlIGlmIGVpdGhlciBpcyBjbG9zZXIgdG8gdGhlXG4gICAgLy8gcHJpb3IgcG9zaXRpb24uIFRoaXMgcHJlc2VydmVzIG9iamVjdCBjb25zdGFuY3kgd2hlbiB0aGUgbWFwIGNlbnRlciBpcyBhdXRvLXdyYXBwZWRcbiAgICAvLyBkdXJpbmcgYW5pbWF0aW9ucy5cbiAgICBpZiAocHJpb3JQb3MpIHtcbiAgICAgICAgY29uc3QgbGVmdCAgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcgLSAzNjAsIGxuZ0xhdC5sYXQpO1xuICAgICAgICBjb25zdCByaWdodCA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZyArIDM2MCwgbG5nTGF0LmxhdCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobG5nTGF0KS5kaXN0U3FyKHByaW9yUG9zKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxlZnQpLmRpc3RTcXIocHJpb3JQb3MpIDwgZGVsdGEpIHtcbiAgICAgICAgICAgIGxuZ0xhdCA9IGxlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQocmlnaHQpLmRpc3RTcXIocHJpb3JQb3MpIDwgZGVsdGEpIHtcbiAgICAgICAgICAgIGxuZ0xhdCA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2Vjb25kLCB3cmFwIHRvd2FyZCB0aGUgY2VudGVyIHVudGlsIHRoZSBuZXcgcG9zaXRpb24gaXMgb24gc2NyZWVuLCBvciB3ZSBjYW4ndCBnZXRcbiAgICAvLyBhbnkgY2xvc2VyLlxuICAgIHdoaWxlIChNYXRoLmFicyhsbmdMYXQubG5nIC0gdHJhbnNmb3JtLmNlbnRlci5sbmcpID4gMTgwKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxuZ0xhdCk7XG4gICAgICAgIGlmIChwb3MueCA+PSAwICYmIHBvcy55ID49IDAgJiYgcG9zLnggPD0gdHJhbnNmb3JtLndpZHRoICYmIHBvcy55IDw9IHRyYW5zZm9ybS5oZWlnaHQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsbmdMYXQubG5nID4gdHJhbnNmb3JtLmNlbnRlci5sbmcpIHtcbiAgICAgICAgICAgIGxuZ0xhdC5sbmcgLT0gMzYwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG5nTGF0LmxuZyArPSAzNjA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG5nTGF0O1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IHR5cGUgQW5jaG9yID1cbiAgICB8ICdjZW50ZXInXG4gICAgfCAndG9wJ1xuICAgIHwgJ2JvdHRvbSdcbiAgICB8ICdsZWZ0J1xuICAgIHwgJ3JpZ2h0J1xuICAgIHwgJ3RvcC1sZWZ0J1xuICAgIHwgJ3RvcC1yaWdodCdcbiAgICB8ICdib3R0b20tbGVmdCdcbiAgICB8ICdib3R0b20tcmlnaHQnO1xuXG5leHBvcnQgY29uc3QgYW5jaG9yVHJhbnNsYXRlOiB7W186IEFuY2hvcl06IHN0cmluZ30gPSB7XG4gICAgJ2NlbnRlcic6ICd0cmFuc2xhdGUoLTUwJSwtNTAlKScsXG4gICAgJ3RvcCc6ICd0cmFuc2xhdGUoLTUwJSwwKScsXG4gICAgJ3RvcC1sZWZ0JzogJ3RyYW5zbGF0ZSgwLDApJyxcbiAgICAndG9wLXJpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwwKScsXG4gICAgJ2JvdHRvbSc6ICd0cmFuc2xhdGUoLTUwJSwtMTAwJSknLFxuICAgICdib3R0b20tbGVmdCc6ICd0cmFuc2xhdGUoMCwtMTAwJSknLFxuICAgICdib3R0b20tcmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLC0xMDAlKScsXG4gICAgJ2xlZnQnOiAndHJhbnNsYXRlKDAsLTUwJSknLFxuICAgICdyaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsLTUwJSknXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBbmNob3JDbGFzcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYW5jaG9yOiBBbmNob3IsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYW5jaG9yVHJhbnNsYXRlKSB7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoYG1hcGJveGdsLSR7cHJlZml4fS1hbmNob3ItJHtrZXl9YCk7XG4gICAgfVxuICAgIGNsYXNzTGlzdC5hZGQoYG1hcGJveGdsLSR7cHJlZml4fS1hbmNob3ItJHthbmNob3J9YCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgc21hcnRXcmFwIGZyb20gJy4uL3V0aWwvc21hcnRfd3JhcCc7XG5pbXBvcnQge2JpbmRBbGwsIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7dHlwZSBBbmNob3IsIGFuY2hvclRyYW5zbGF0ZSwgYXBwbHlBbmNob3JDbGFzc30gZnJvbSAnLi9hbmNob3InO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSBQb3B1cCBmcm9tICcuL3BvcHVwJztcbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tIFwiLi4vZ2VvL2xuZ19sYXRcIjtcbmltcG9ydCB0eXBlIHtNYXBNb3VzZUV2ZW50LCBNYXBUb3VjaEV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7UG9pbnRMaWtlfSBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCxcbiAgICBvZmZzZXQ/OiBQb2ludExpa2UsXG4gICAgYW5jaG9yPzogQW5jaG9yLFxuICAgIGNvbG9yPzogc3RyaW5nLFxuICAgIGRyYWdnYWJsZT86IGJvb2xlYW4sXG4gICAgcm90YXRpb24/OiBudW1iZXIsXG4gICAgcm90YXRpb25BbGlnbm1lbnQ/OiBzdHJpbmcsXG4gICAgcGl0Y2hBbGlnbm1lbnQ/OiBzdHJpbmdcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcmtlciBjb21wb25lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtvcHRpb25zLmVsZW1lbnRdIERPTSBlbGVtZW50IHRvIHVzZSBhcyBhIG1hcmtlci4gVGhlIGRlZmF1bHQgaXMgYSBsaWdodCBibHVlLCBkcm9wbGV0LXNoYXBlZCBTVkcgbWFya2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuY2hvcj0nY2VudGVyJ10gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgcGFydCBvZiB0aGUgTWFya2VyIHRoYXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgY2xvc2VzdCB0byB0aGUgY29vcmRpbmF0ZSBzZXQgdmlhIHtAbGluayBNYXJrZXIjc2V0TG5nTGF0fS5cbiAqICAgT3B0aW9ucyBhcmUgYCdjZW50ZXInYCwgYCd0b3AnYCwgYCdib3R0b20nYCwgYCdsZWZ0J2AsIGAncmlnaHQnYCwgYCd0b3AtbGVmdCdgLCBgJ3RvcC1yaWdodCdgLCBgJ2JvdHRvbS1sZWZ0J2AsIGFuZCBgJ2JvdHRvbS1yaWdodCdgLlxuICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldF0gVGhlIG9mZnNldCBpbiBwaXhlbHMgYXMgYSB7QGxpbmsgUG9pbnRMaWtlfSBvYmplY3QgdG8gYXBwbHkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjZW50ZXIuIE5lZ2F0aXZlcyBpbmRpY2F0ZSBsZWZ0IGFuZCB1cC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb2xvcj0nIzNGQjFDRSddIFRoZSBjb2xvciB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IG1hcmtlciBpZiBvcHRpb25zLmVsZW1lbnQgaXMgbm90IHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpcyBsaWdodCBibHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kcmFnZ2FibGU9ZmFsc2VdIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGEgbWFya2VyIGlzIGFibGUgdG8gYmUgZHJhZ2dlZCB0byBhIG5ldyBwb3NpdGlvbiBvbiB0aGUgbWFwLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnJvdGF0aW9uPTBdIFRoZSByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIGluIGRlZ3JlZXMsIHJlbGF0aXZlIHRvIGl0cyByZXNwZWN0aXZlIGByb3RhdGlvbkFsaWdubWVudGAgc2V0dGluZy4gQSBwb3NpdGl2ZSB2YWx1ZSB3aWxsIHJvdGF0ZSB0aGUgbWFya2VyIGNsb2Nrd2lzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5waXRjaEFsaWdubWVudD0nYXV0byddIGBtYXBgIGFsaWducyB0aGUgYE1hcmtlcmAgdG8gdGhlIHBsYW5lIG9mIHRoZSBtYXAuIGB2aWV3cG9ydGAgYWxpZ25zIHRoZSBgTWFya2VyYCB0byB0aGUgcGxhbmUgb2YgdGhlIHZpZXdwb3J0LiBgYXV0b2AgYXV0b21hdGljYWxseSBtYXRjaGVzIHRoZSB2YWx1ZSBvZiBgcm90YXRpb25BbGlnbm1lbnRgLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnJvdGF0aW9uQWxpZ25tZW50PSdhdXRvJ10gYG1hcGAgYWxpZ25zIHRoZSBgTWFya2VyYCdzIHJvdGF0aW9uIHJlbGF0aXZlIHRvIHRoZSBtYXAsIG1haW50YWluaW5nIGEgYmVhcmluZyBhcyB0aGUgbWFwIHJvdGF0ZXMuIGB2aWV3cG9ydGAgYWxpZ25zIHRoZSBgTWFya2VyYCdzIHJvdGF0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCwgYWdub3N0aWMgdG8gbWFwIHJvdGF0aW9ucy4gYGF1dG9gIGlzIGVxdWl2YWxlbnQgdG8gYHZpZXdwb3J0YC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFya2VyID0gbmV3IG1hcGJveGdsLk1hcmtlcigpXG4gKiAgIC5zZXRMbmdMYXQoWzMwLjUsIDUwLjVdKVxuICogICAuYWRkVG8obWFwKTtcbiAqIEBzZWUgW0FkZCBjdXN0b20gaWNvbnMgd2l0aCBNYXJrZXJzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2N1c3RvbS1tYXJrZXItaWNvbnMvKVxuICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIE1hcmtlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtbWFya2VyLylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFya2VyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9hbmNob3I6IEFuY2hvcjtcbiAgICBfb2Zmc2V0OiBQb2ludDtcbiAgICBfZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgX3BvcHVwOiA/UG9wdXA7XG4gICAgX2xuZ0xhdDogTG5nTGF0O1xuICAgIF9wb3M6ID9Qb2ludDtcbiAgICBfY29sb3I6ID9zdHJpbmc7XG4gICAgX2RlZmF1bHRNYXJrZXI6IGJvb2xlYW47XG4gICAgX2RyYWdnYWJsZTogYm9vbGVhbjtcbiAgICBfc3RhdGU6ICdpbmFjdGl2ZScgfCAncGVuZGluZycgfCAnYWN0aXZlJzsgLy8gdXNlZCBmb3IgaGFuZGxpbmcgZHJhZyBldmVudHNcbiAgICBfcG9zaXRpb25EZWx0YTogP251bWJlcjtcbiAgICBfcm90YXRpb246IG51bWJlcjtcbiAgICBfcGl0Y2hBbGlnbm1lbnQ6IHN0cmluZztcbiAgICBfcm90YXRpb25BbGlnbm1lbnQ6IHN0cmluZztcbiAgICBfb3JpZ2luYWxUYWJJbmRleDogP3N0cmluZzsgLy8gb3JpZ2luYWwgdGFiaW5kZXggb2YgX2VsZW1lbnRcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBPcHRpb25zLCBsZWdhY3lPcHRpb25zPzogT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAtLSB0aGUgY29uc3RydWN0b3IgdXNlZCB0byBhY2NlcHQgdGhlIGVsZW1lbnQgYXMgYVxuICAgICAgICAvLyByZXF1aXJlZCBmaXJzdCBhcmd1bWVudCwgYmVmb3JlIGl0IHdhcyBtYWRlIG9wdGlvbmFsLlxuICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCB8fCBsZWdhY3lPcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtlbGVtZW50OiBvcHRpb25zfSwgbGVnYWN5T3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfdXBkYXRlJyxcbiAgICAgICAgICAgICdfb25Nb3ZlJyxcbiAgICAgICAgICAgICdfb25VcCcsXG4gICAgICAgICAgICAnX2FkZERyYWdIYW5kbGVyJyxcbiAgICAgICAgICAgICdfb25NYXBDbGljaycsXG4gICAgICAgICAgICAnX29uS2V5UHJlc3MnXG4gICAgICAgIF0sIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2FuY2hvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hbmNob3IgfHwgJ2NlbnRlcic7XG4gICAgICAgIHRoaXMuX2NvbG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yIHx8ICcjM0ZCMUNFJztcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gb3B0aW9ucyAmJiBvcHRpb25zLmRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAnaW5hY3RpdmUnO1xuICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb3RhdGlvbiB8fCAwO1xuICAgICAgICB0aGlzLl9yb3RhdGlvbkFsaWdubWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb3RhdGlvbkFsaWdubWVudCB8fCAnYXV0byc7XG4gICAgICAgIHRoaXMuX3BpdGNoQWxpZ25tZW50ID0gb3B0aW9ucyAmJiBvcHRpb25zLnBpdGNoQWxpZ25tZW50ICYmIG9wdGlvbnMucGl0Y2hBbGlnbm1lbnQgIT09ICdhdXRvJyA/ICBvcHRpb25zLnBpdGNoQWxpZ25tZW50IDogdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRNYXJrZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTWFwIG1hcmtlcicpO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgZGVmYXVsdCBtYXAgbWFya2VyIFNWR1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICdoZWlnaHQnLCAnNDFweCcpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsICcyN3B4Jyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3ZpZXdCb3gnLCAnMCAwIDI3IDQxJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckxhcmdlID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlJywgJ25vbmUnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2Utd2lkdGgnLCAnMScpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnbm9uZScpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdldmVub2RkJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2UxID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBwYWdlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbC1ydWxlJywgJ25vbnplcm8nKTtcblxuICAgICAgICAgICAgY29uc3Qgc2hhZG93ID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBzaGFkb3cuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMy4wLCAyOS4wKScpO1xuICAgICAgICAgICAgc2hhZG93LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyMwMDAwMDAnKTtcblxuICAgICAgICAgICAgY29uc3QgZWxsaXBzZXMgPSBbXG4gICAgICAgICAgICAgICAgeydyeCc6ICcxMC41JywgJ3J5JzogJzUuMjUwMDIyNzMnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzEwLjUnLCAncnknOiAnNS4yNTAwMjI3Myd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnOS41JywgJ3J5JzogJzQuNzcyNzUwMDcnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzguNScsICdyeSc6ICc0LjI5NTQ5OTM2J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc3LjUnLCAncnknOiAnMy44MTgyMjMwOCd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNi41JywgJ3J5JzogJzMuMzQwOTQ2NzknfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzUuNScsICdyeSc6ICcyLjg2MzY3MDUxJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc0LjUnLCAncnknOiAnMi4zODYzNjg2NCd9XG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2YgZWxsaXBzZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGxpcHNlID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdlbGxpcHNlJyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjA0Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3gnLCAnMTAuNScpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuODAwMjkwMDgnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyeCcsIGRhdGFbJ3J4J10pO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3J5JywgZGF0YVsncnknXSk7XG4gICAgICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGVsbGlwc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgdGhpcy5fY29sb3IpO1xuXG4gICAgICAgICAgICBjb25zdCBiZ1BhdGggPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGJnUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsICdNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaJyk7XG5cbiAgICAgICAgICAgIGJhY2tncm91bmQuYXBwZW5kQ2hpbGQoYmdQYXRoKTtcblxuICAgICAgICAgICAgY29uc3QgYm9yZGVyID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBib3JkZXIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4yNScpO1xuICAgICAgICAgICAgYm9yZGVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyMwMDAwMDAnKTtcblxuICAgICAgICAgICAgY29uc3QgYm9yZGVyUGF0aCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9yZGVyUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsICdNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWicpO1xuXG4gICAgICAgICAgICBib3JkZXIuYXBwZW5kQ2hpbGQoYm9yZGVyUGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1ha2kgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIG1ha2kuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoNi4wLCA3LjApJyk7XG4gICAgICAgICAgICBtYWtpLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyNGRkZGRkYnKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlQ29udGFpbmVyID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoOC4wLCA4LjApJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZTEgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2NpcmNsZScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyJywgJzUuNDk5OTk2MicpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUyID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnI0ZGRkZGRicpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3gnLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNS40OTk5OTYyJyk7XG5cbiAgICAgICAgICAgIGNpcmNsZUNvbnRhaW5lci5hcHBlbmRDaGlsZChjaXJjbGUxKTtcbiAgICAgICAgICAgIGNpcmNsZUNvbnRhaW5lci5hcHBlbmRDaGlsZChjaXJjbGUyKTtcblxuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQoc2hhZG93KTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGJhY2tncm91bmQpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQoYm9yZGVyKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKG1ha2kpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQoY2lyY2xlQ29udGFpbmVyKTtcblxuICAgICAgICAgICAgc3ZnLmFwcGVuZENoaWxkKHBhZ2UxKTtcblxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChzdmcpO1xuXG4gICAgICAgICAgICAvLyBpZiBubyBlbGVtZW50IGFuZCBubyBvZmZzZXQgb3B0aW9uIGdpdmVuIGFwcGx5IGFuIG9mZnNldCBmb3IgdGhlIGRlZmF1bHQgbWFya2VyXG4gICAgICAgICAgICAvLyB0aGUgLTE0IGFzIHRoZSB5IHZhbHVlIG9mIHRoZSBkZWZhdWx0IG1hcmtlciBvZmZzZXQgd2FzIGRldGVybWluZWQgYXMgZm9sbG93c1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoZSBtYXJrZXIgdGlwIGlzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIHNoYWRvdyBlbGxpcHNlIGZyb20gdGhlIGRlZmF1bHQgc3ZnXG4gICAgICAgICAgICAvLyB0aGUgeSB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBzaGFkb3cgZWxsaXBzZSByZWxhdGl2ZSB0byB0aGUgc3ZnIHRvcCBsZWZ0IGlzIFwic2hhZG93IHRyYW5zZm9ybSB0cmFuc2xhdGUteSAoMjkuMCkgKyBlbGxpcHNlIGN5ICg1LjgwMDI5MDA4KVwiXG4gICAgICAgICAgICAvLyBvZmZzZXQgdG8gdGhlIHN2ZyBjZW50ZXIgXCJoZWlnaHQgKDQxIC8gMilcIiBnaXZlcyAoMjkuMCArIDUuODAwMjkwMDgpIC0gKDQxIC8gMikgYW5kIHJvdW5kZWQgZm9yIGFuIGludGVnZXIgcGl4ZWwgb2Zmc2V0IGdpdmVzIDE0XG4gICAgICAgICAgICAvLyBuZWdhdGl2ZSBpcyB1c2VkIHRvIG1vdmUgdGhlIG1hcmtlciB1cCBmcm9tIHRoZSBjZW50ZXIgc28gdGhlIHRpcCBpcyBhdCB0aGUgTWFya2VyIGxuZ0xhdFxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zICYmIG9wdGlvbnMub2Zmc2V0IHx8IFswLCAtMTRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQgfHwgWzAsIDBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtbWFya2VyJyk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gcHJldmVudCBmb2N1c2luZyBvbiBjbGlja1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IHtcbiAgICAgICAgICAgIC8vIHJldmVydCB0aGUgZGVmYXVsdCBzY3JvbGxpbmcgYWN0aW9uIG9mIHRoZSBjb250YWluZXJcbiAgICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy5fbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICAgICAgZWwuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgIGVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlBbmNob3JDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl9hbmNob3IsICdtYXJrZXInKTtcblxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0YWNoZXMgdGhlIG1hcmtlciB0byBhIG1hcFxuICAgICAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcGJveCBHTCBKUyBtYXAgdG8gYWRkIHRoZSBtYXJrZXIgdG8uXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIG1hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIG1hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIHRoaXMuc2V0RHJhZ2dhYmxlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIC8vIElmIHdlIGF0dGFjaGVkIHRoZSBgY2xpY2tgIGxpc3RlbmVyIHRvIHRoZSBtYXJrZXIgZWxlbWVudCwgdGhlIHBvcHVwXG4gICAgICAgIC8vIHdvdWxkIGNsb3NlIG9uY2UgdGhlIGV2ZW50IHByb3BvZ2F0ZWQgdG8gYG1hcGAgZHVlIHRvIHRoZVxuICAgICAgICAvLyBgUG9wdXAjX29uQ2xpY2tDbG9zZWAgbGlzdGVuZXIuXG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLl9vbk1hcENsaWNrKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBtYXJrZXIgZnJvbSBhIG1hcFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKS5hZGRUbyhtYXApO1xuICAgICAqIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fb25NYXBDbGljayk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNldXAnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB0aGlzLl9wb3B1cC5yZW1vdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgbG9uZ2l0dWRlIG9mIHRoZSByZXN1bHQgbWF5IGRpZmZlciBieSBhIG11bHRpcGxlIG9mIDM2MCBkZWdyZWVzIGZyb20gdGhlIGxvbmdpdHVkZSBwcmV2aW91c2x5XG4gICAgICogc2V0IGJ5IGBzZXRMbmdMYXRgIGJlY2F1c2UgYE1hcmtlcmAgd3JhcHMgdGhlIGFuY2hvciBsb25naXR1ZGUgYWNyb3NzIGNvcGllcyBvZiB0aGUgd29ybGQgdG8ga2VlcFxuICAgICAqIHRoZSBtYXJrZXIgb24gc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gQSB7QGxpbmsgTG5nTGF0fSBkZXNjcmliaW5nIHRoZSBtYXJrZXIncyBsb2NhdGlvbi5cbiAgICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgcG9zaXRpb24gYW5kIG1vdmUgaXQuXG4gICAgICogQHBhcmFtIHtMbmdMYXR9IGxuZ2xhdCBBIHtAbGluayBMbmdMYXR9IGRlc2NyaWJpbmcgd2hlcmUgdGhlIG1hcmtlciBzaG91bGQgYmUgbG9jYXRlZC5cbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRMbmdMYXQobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCk7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkgdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgTWFya2VyYCdzIEhUTUwgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBhIFBvcHVwIHRvIHRoZSBNYXJrZXJcbiAgICAgKiBAcGFyYW0gcG9wdXAgYW4gaW5zdGFuY2Ugb2YgdGhlIGBQb3B1cGAgY2xhc3MuIElmIHVuZGVmaW5lZCBvciBudWxsLCBhbnkgcG9wdXBcbiAgICAgKiBzZXQgb24gdGhpcyBgTWFya2VyYCBpbnN0YW5jZSBpcyB1bnNldFxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFBvcHVwKHBvcHVwOiA/UG9wdXApIHtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleVByZXNzKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9vcmlnaW5hbFRhYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9wdXApIHtcbiAgICAgICAgICAgIGlmICghKCdvZmZzZXQnIGluIHBvcHVwLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VySGVpZ2h0ID0gNDEgLSAoNS44IC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VyUmFkaXVzID0gMTMuNTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lYXJPZmZzZXQgPSBNYXRoLnNxcnQoTWF0aC5wb3cobWFya2VyUmFkaXVzLCAyKSAvIDIpO1xuICAgICAgICAgICAgICAgIHBvcHVwLm9wdGlvbnMub2Zmc2V0ID0gdGhpcy5fZGVmYXVsdE1hcmtlciA/IHtcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcC1sZWZ0JzogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAndG9wLXJpZ2h0JzogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAnYm90dG9tJzogWzAsIC1tYXJrZXJIZWlnaHRdLFxuICAgICAgICAgICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBbbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IFstbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ2xlZnQnOiBbbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXSxcbiAgICAgICAgICAgICAgICAgICAgJ3JpZ2h0JzogWy1tYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdXG4gICAgICAgICAgICAgICAgfSA6IHRoaXMuX29mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gcG9wdXA7XG4gICAgICAgICAgICBpZiAodGhpcy5fbG5nTGF0KSB0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KTtcblxuICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxUYWJJbmRleCA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vcmlnaW5hbFRhYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleVByZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9vbktleVByZXNzKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGUuY29kZTtcbiAgICAgICAgY29uc3QgbGVnYWN5Q29kZSA9IGUuY2hhckNvZGUgfHwgZS5rZXlDb2RlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChjb2RlID09PSAnU3BhY2UnKSB8fCAoY29kZSA9PT0gJ0VudGVyJykgfHxcbiAgICAgICAgICAgIChsZWdhY3lDb2RlID09PSAzMikgfHwgKGxlZ2FjeUNvZGUgPT09IDEzKSAvLyBzcGFjZSBvciBlbnRlclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbk1hcENsaWNrKGU6IE1hcE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGUub3JpZ2luYWxFdmVudC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCAmJiAodGFyZ2V0RWxlbWVudCA9PT0gZWxlbWVudCB8fCBlbGVtZW50LmNvbnRhaW5zKCh0YXJnZXRFbGVtZW50OiBhbnkpKSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFBvcHVwIGluc3RhbmNlIHRoYXQgaXMgYm91bmQgdG8gdGhlIE1hcmtlclxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gcG9wdXBcbiAgICAgKi9cbiAgICBnZXRQb3B1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIG9yIGNsb3NlcyB0aGUgYm91bmQgcG9wdXAsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHRvZ2dsZVBvcHVwKCkge1xuICAgICAgICBjb25zdCBwb3B1cCA9IHRoaXMuX3BvcHVwO1xuXG4gICAgICAgIGlmICghcG9wdXApIHJldHVybiB0aGlzO1xuICAgICAgICBlbHNlIGlmIChwb3B1cC5pc09wZW4oKSkgcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgIGVsc2UgcG9wdXAuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3VwZGF0ZShlPzoge3R5cGU6ICdtb3ZlJyB8ICdtb3ZlZW5kJ30pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgdGhpcy5fbG5nTGF0ID0gc21hcnRXcmFwKHRoaXMuX2xuZ0xhdCwgdGhpcy5fcG9zLCB0aGlzLl9tYXAudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BvcyA9IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpO1xuXG4gICAgICAgIGxldCByb3RhdGlvbiA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGlvbkFsaWdubWVudCA9PT0gXCJ2aWV3cG9ydFwiIHx8IHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgcm90YXRpb24gPSBgcm90YXRlWigke3RoaXMuX3JvdGF0aW9ufWRlZylgO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID09PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICByb3RhdGlvbiA9IGByb3RhdGVaKCR7dGhpcy5fcm90YXRpb24gLSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpfWRlZylgO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBpdGNoID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoQWxpZ25tZW50ID09PSBcInZpZXdwb3J0XCIgfHwgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICBwaXRjaCA9IFwicm90YXRlWCgwZGVnKVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3BpdGNoQWxpZ25tZW50ID09PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICBwaXRjaCA9IGByb3RhdGVYKCR7dGhpcy5fbWFwLmdldFBpdGNoKCl9ZGVnKWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWNhdXNlIHJvdW5kaW5nIHRoZSBjb29yZGluYXRlcyBhdCBldmVyeSBgbW92ZWAgZXZlbnQgY2F1c2VzIHN0dXR0ZXJlZCB6b29taW5nXG4gICAgICAgIC8vIHdlIG9ubHkgcm91bmQgdGhlbSB3aGVuIF91cGRhdGUgaXMgY2FsbGVkIHdpdGggYG1vdmVlbmRgIG9yIHdoZW4gaXRzIGNhbGxlZCB3aXRoXG4gICAgICAgIC8vIG5vIGFyZ3VtZW50cyAod2hlbiB0aGUgTWFya2VyIGlzIGluaXRpYWxpemVkIG9yIE1hcmtlciNzZXRMbmdMYXQgaXMgaW52b2tlZCkuXG4gICAgICAgIGlmICghZSB8fCBlLnR5cGUgPT09IFwibW92ZWVuZFwiKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3MgPSB0aGlzLl9wb3Mucm91bmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCwgYCR7YW5jaG9yVHJhbnNsYXRlW3RoaXMuX2FuY2hvcl19IHRyYW5zbGF0ZSgke3RoaXMuX3Bvcy54fXB4LCAke3RoaXMuX3Bvcy55fXB4KSAke3BpdGNofSAke3JvdGF0aW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWFya2VyJ3Mgb2Zmc2V0LlxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gVGhlIG1hcmtlcidzIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgZ2V0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG9mZnNldCBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IG9mZnNldCBUaGUgb2Zmc2V0IGluIHBpeGVscyBhcyBhIHtAbGluayBQb2ludExpa2V9IG9iamVjdCB0byBhcHBseSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCdzIGNlbnRlci4gTmVnYXRpdmVzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE9mZnNldChvZmZzZXQ6IFBvaW50TGlrZSkge1xuICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9mZnNldCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3BvcyA9IGUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpO1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSB0aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3Bvcyk7XG4gICAgICAgIHRoaXMuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIC8vIHN1cHByZXNzIGNsaWNrIGV2ZW50IHNvIHRoYXQgcG9wdXBzIGRvbid0IHRvZ2dsZSBvbiBkcmFnXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblxuICAgICAgICAvLyBtYWtlIHN1cmUgZHJhZ3N0YXJ0IG9ubHkgZmlyZXMgb24gdGhlIGZpcnN0IG1vdmUgZXZlbnQgYWZ0ZXIgbW91c2Vkb3duLlxuICAgICAgICAvLyB0aGlzIGNhbid0IGJlIG9uIG1vdXNlZG93biBiZWNhdXNlIHRoYXQgZXZlbnQgZG9lc24ndCBuZWNlc3NhcmlseVxuICAgICAgICAvLyBpbXBseSB0aGF0IGEgZHJhZyBpcyBhYm91dCB0byBoYXBwZW4uXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdhY3RpdmUnO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV2ZW50IGRyYWdzdGFydFxuICAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCBpcyBiZWluZyBkcmFnZ2VkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdzdGFydCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGlsZSBkcmFnZ2luZ1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgZHJhZ1xuICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWcnKSk7XG4gICAgfVxuXG4gICAgX29uVXAoKSB7XG4gICAgICAgIC8vIHJldmVydCB0byBub3JtYWwgcG9pbnRlciBldmVudCBoYW5kbGluZ1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uRGVsdGEgPSBudWxsO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuXG4gICAgICAgIC8vIG9ubHkgZmlyZSBkcmFnZW5kIGlmIGl0IHdhcyBwcmVjZWRlZCBieSBhdCBsZWFzdCBvbmUgZHJhZyBldmVudFxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIGZpbmlzaGVkIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgICpcbiAgICAgICAgICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCB3YXMgZHJhZ2dlZFxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdlbmQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdpbmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgX2FkZERyYWdIYW5kbGVyKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNvbnRhaW5zKChlLm9yaWdpbmFsRXZlbnQudGFyZ2V0OiBhbnkpKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2xpY2sgcG9pbnRcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbWFya2VyIHBvc2l0aW9uLCB3aXRoIHRoZSBvZmZzZXQgYWNjb3VudGVkIGZvci4gVGhlbiB3ZVxuICAgICAgICAgICAgLy8gY2FuIHN1YnRyYWN0IHRoaXMgZGlzdGFuY2UgZnJvbSB0aGUgbW91c2Vtb3ZlIGV2ZW50J3MgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IG1hcmtlciBwb3NpdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBtYXJrZXIgJ2p1bXBzJyB0byB0aGUgY2xpY2sgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIGEgamFycmluZyBVWCBlZmZlY3QuXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkRlbHRhID0gZS5wb2ludC5zdWIodGhpcy5fcG9zKS5hZGQodGhpcy5fb2Zmc2V0KTtcblxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub25jZSgnbW91c2V1cCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgZHJhZ2dhYmxlYCBwcm9wZXJ0eSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkQmVEcmFnZ2FibGU9ZmFsc2VdIFR1cm5zIGRyYWcgZnVuY3Rpb25hbGl0eSBvbi9vZmZcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXREcmFnZ2FibGUoc2hvdWxkQmVEcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gISFzaG91bGRCZURyYWdnYWJsZTsgLy8gY29udmVydCBwb3NzaWJsZSB1bmRlZmluZWQgdmFsdWUgdG8gZmFsc2VcblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBtYXAgbWF5IG5vdCBleGlzdCB5ZXRcbiAgICAgICAgLy8gZS5nLiB3aGVuIHNldERyYWdnYWJsZSBpcyBjYWxsZWQgYmVmb3JlIGFkZFRvXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRCZURyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcmtlciBjYW4gYmUgZHJhZ2dlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYXJrZXIgaXMgZHJhZ2dhYmxlLlxuICAgICAqL1xuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdGF0aW9uPTBdIFRoZSByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChjbG9ja3dpc2UsIGluIGRlZ3JlZXMpLCByZWxhdGl2ZSB0byBpdHMgcmVzcGVjdGl2ZSB7QGxpbmsgTWFya2VyI3JvdGF0aW9uQWxpZ25tZW50fSBzZXR0aW5nLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChpbiBkZWdyZWVzKS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyLlxuICAgICAqL1xuICAgIGdldFJvdGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpZ25tZW50PSdhdXRvJ10gU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uQWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID0gYWxpZ25tZW50IHx8ICdhdXRvJztcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHJvdGF0aW9uYWwgYWxpZ25tZW50IG9mIHRoZSBtYXJrZXIuXG4gICAgICovXG4gICAgZ2V0Um90YXRpb25BbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcGl0Y2hBbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbm1lbnRdIFNldHMgdGhlIGBwaXRjaEFsaWdubWVudGAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci4gSWYgYWxpZ25tZW50IGlzICdhdXRvJywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IG1hdGNoIGByb3RhdGlvbkFsaWdubWVudGAuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2hBbGlnbm1lbnQoYWxpZ25tZW50OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPSBhbGlnbm1lbnQgJiYgYWxpZ25tZW50ICE9PSAnYXV0bycgPyBhbGlnbm1lbnQgOiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHBpdGNoQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHBpdGNoIGFsaWdubWVudCBvZiB0aGUgbWFya2VyIGluIGRlZ3JlZXMuXG4gICAgICovXG4gICAgZ2V0UGl0Y2hBbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaEFsaWdubWVudDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuLi9tYXJrZXInO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25PcHRpb25zLCBDYW1lcmFPcHRpb25zfSBmcm9tICcuLi9jYW1lcmEnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zPzogUG9zaXRpb25PcHRpb25zLFxuICAgIGZpdEJvdW5kc09wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucyxcbiAgICB0cmFja1VzZXJMb2NhdGlvbj86IGJvb2xlYW4sXG4gICAgc2hvd0FjY3VyYWN5Q2lyY2xlPzogYm9vbGVhbixcbiAgICBzaG93VXNlckxvY2F0aW9uPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2UsXG4gICAgICAgIG1heGltdW1BZ2U6IDAsXG4gICAgICAgIHRpbWVvdXQ6IDYwMDAgLyogNiBzZWMgKi9cbiAgICB9LFxuICAgIGZpdEJvdW5kc09wdGlvbnM6IHtcbiAgICAgICAgbWF4Wm9vbTogMTVcbiAgICB9LFxuICAgIHRyYWNrVXNlckxvY2F0aW9uOiBmYWxzZSxcbiAgICBzaG93QWNjdXJhY3lDaXJjbGU6IHRydWUsXG4gICAgc2hvd1VzZXJMb2NhdGlvbjogdHJ1ZVxufTtcblxubGV0IHN1cHBvcnRzR2VvbG9jYXRpb247XG5cbmZ1bmN0aW9uIGNoZWNrR2VvbG9jYXRpb25TdXBwb3J0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHN1cHBvcnRzR2VvbG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcblxuICAgIH0gZWxzZSBpZiAod2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5hdmlnYXRvci5wZXJtaXNzaW9ucyBoYXMgaW5jb21wbGV0ZSBicm93c2VyIHN1cHBvcnRcbiAgICAgICAgLy8gaHR0cDovL2Nhbml1c2UuY29tLyNmZWF0PXBlcm1pc3Npb25zLWFwaVxuICAgICAgICAvLyBUZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIGJyb3dzZXIgZGlzYWJsZXMgR2VvbG9jYXRpb24gYmVjYXVzZSBvZiBhblxuICAgICAgICAvLyBpbnNlY3VyZSBvcmlnaW5cbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTogJ2dlb2xvY2F0aW9uJ30pLnRoZW4oKHApID0+IHtcbiAgICAgICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSBwLnN0YXRlICE9PSAnZGVuaWVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSAhIXdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb247XG4gICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgIH1cbn1cblxubGV0IG51bWJlck9mV2F0Y2hlcyA9IDA7XG5sZXQgbm9UaW1lb3V0ID0gZmFsc2U7XG5cbi8qKlxuICogQSBgR2VvbG9jYXRlQ29udHJvbGAgY29udHJvbCBwcm92aWRlcyBhIGJ1dHRvbiB0aGF0IHVzZXMgdGhlIGJyb3dzZXIncyBnZW9sb2NhdGlvblxuICogQVBJIHRvIGxvY2F0ZSB0aGUgdXNlciBvbiB0aGUgbWFwLlxuICpcbiAqIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBnZW9sb2NhdGlvbixcbiAqIGFuZCBzb21lIHVzZXJzIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlLiBHZW9sb2NhdGlvbiBzdXBwb3J0IGZvciBtb2Rlcm5cbiAqIGJyb3dzZXJzIGluY2x1ZGluZyBDaHJvbWUgcmVxdWlyZXMgc2l0ZXMgdG8gYmUgc2VydmVkIG92ZXIgSFRUUFMuIElmXG4gKiBnZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgbm90XG4gKiBiZSB2aXNpYmxlLlxuICpcbiAqIFRoZSB6b29tIGxldmVsIGFwcGxpZWQgd2lsbCBkZXBlbmQgb24gdGhlIGFjY3VyYWN5IG9mIHRoZSBnZW9sb2NhdGlvbiBwcm92aWRlZCBieSB0aGUgZGV2aWNlLlxuICpcbiAqIFRoZSBHZW9sb2NhdGVDb250cm9sIGhhcyB0d28gbW9kZXMuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYGZhbHNlYCAoZGVmYXVsdCkgdGhlIGNvbnRyb2wgYWN0cyBhcyBhIGJ1dHRvbiwgd2hpY2ggd2hlbiBwcmVzc2VkIHdpbGwgc2V0IHRoZSBtYXAncyBjYW1lcmEgdG8gdGFyZ2V0IHRoZSB1c2VyIGxvY2F0aW9uLiBJZiB0aGUgdXNlciBtb3ZlcywgdGhlIG1hcCB3b24ndCB1cGRhdGUuIFRoaXMgaXMgbW9zdCBzdWl0ZWQgZm9yIHRoZSBkZXNrdG9wLiBJZiBgdHJhY2tVc2VyTG9jYXRpb25gIGlzIGB0cnVlYCB0aGUgY29udHJvbCBhY3RzIGFzIGEgdG9nZ2xlIGJ1dHRvbiB0aGF0IHdoZW4gYWN0aXZlIHRoZSB1c2VyJ3MgbG9jYXRpb24gaXMgYWN0aXZlbHkgbW9uaXRvcmVkIGZvciBjaGFuZ2VzLiBJbiB0aGlzIG1vZGUgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHRocmVlIGludGVyYWN0aW9uIHN0YXRlczpcbiAqICogYWN0aXZlIC0gdGhlIG1hcCdzIGNhbWVyYSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgYXMgdGhlIHVzZXIncyBsb2NhdGlvbiBjaGFuZ2VzLCBrZWVwaW5nIHRoZSBsb2NhdGlvbiBkb3QgaW4gdGhlIGNlbnRlci4gSW5pdGlhbCBzdGF0ZSBhbmQgdXBvbiBjbGlja2luZyB0aGUgYEdlb2xvY2F0ZUNvbnRyb2xgIGJ1dHRvbi5cbiAqICogcGFzc2l2ZSAtIHRoZSB1c2VyJ3MgbG9jYXRpb24gZG90IGF1dG9tYXRpY2FsbHkgdXBkYXRlcywgYnV0IHRoZSBtYXAncyBjYW1lcmEgZG9lcyBub3QuIE9jY3VycyB1cG9uIHRoZSB1c2VyIGluaXRpYXRpbmcgYSBtYXAgbW92ZW1lbnQuXG4gKiAqIGRpc2FibGVkIC0gb2NjdXJzIGlmIEdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGUsIGRpc2FibGVkIG9yIGRlbmllZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmFjdGlvbiBzdGF0ZXMgY2FuJ3QgYmUgY29udHJvbGxlZCBwcm9ncmFtbWF0aWNhbGx5LCByYXRoZXIgdGhleSBhcmUgc2V0IGJhc2VkIG9uIHVzZXIgaW50ZXJhY3Rpb25zLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wb3NpdGlvbk9wdGlvbnM9e2VuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2UsIHRpbWVvdXQ6IDYwMDB9XSBBIEdlb2xvY2F0aW9uIEFQSSBbUG9zaXRpb25PcHRpb25zXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUG9zaXRpb25PcHRpb25zKSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZml0Qm91bmRzT3B0aW9ucz17bWF4Wm9vbTogMTV9XSBBIFtgZml0Qm91bmRzYF0oI21hcCNmaXRib3VuZHMpIG9wdGlvbnMgb2JqZWN0IHRvIHVzZSB3aGVuIHRoZSBtYXAgaXMgcGFubmVkIGFuZCB6b29tZWQgdG8gdGhlIHVzZXIncyBsb2NhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGEgYG1heFpvb21gIG9mIDE1IHRvIGxpbWl0IGhvdyBmYXIgdGhlIG1hcCB3aWxsIHpvb20gaW4gZm9yIHZlcnkgYWNjdXJhdGUgbG9jYXRpb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uPWZhbHNlXSBJZiBgdHJ1ZWAgdGhlIEdlb2xvY2F0ZSBDb250cm9sIGJlY29tZXMgYSB0b2dnbGUgYnV0dG9uIGFuZCB3aGVuIGFjdGl2ZSB0aGUgbWFwIHdpbGwgcmVjZWl2ZSB1cGRhdGVzIHRvIHRoZSB1c2VyJ3MgbG9jYXRpb24gYXMgaXQgY2hhbmdlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGU9dHJ1ZV0gQnkgZGVmYXVsdCwgaWYgc2hvd1VzZXJMb2NhdGlvbiBpcyBgdHJ1ZWAsIGEgdHJhbnNwYXJlbnQgY2lyY2xlIHdpbGwgYmUgZHJhd24gYXJvdW5kIHRoZSB1c2VyIGxvY2F0aW9uIGluZGljYXRpbmcgdGhlIGFjY3VyYWN5ICg5NSUgY29uZmlkZW5jZSBsZXZlbCkgb2YgdGhlIHVzZXIncyBsb2NhdGlvbi4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZS4gQWx3YXlzIGRpc2FibGVkIHdoZW4gc2hvd1VzZXJMb2NhdGlvbiBpcyBgZmFsc2VgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNob3dVc2VyTG9jYXRpb249dHJ1ZV0gQnkgZGVmYXVsdCBhIGRvdCB3aWxsIGJlIHNob3duIG9uIHRoZSBtYXAgYXQgdGhlIHVzZXIncyBsb2NhdGlvbi4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWVcbiAqICAgICB9LFxuICogICAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KSk7XG4gKiBAc2VlIFtMb2NhdGUgdGhlIHVzZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYXRlLXVzZXIvKVxuICovXG5jbGFzcyBHZW9sb2NhdGVDb250cm9sIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2RvdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9jaXJjbGVFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBfZ2VvbG9jYXRlQnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfZ2VvbG9jYXRpb25XYXRjaElEOiBudW1iZXI7XG4gICAgX3RpbWVvdXRJZDogP1RpbWVvdXRJRDtcbiAgICBfd2F0Y2hTdGF0ZTogJ09GRicgfCAnQUNUSVZFX0xPQ0snIHwgJ1dBSVRJTkdfQUNUSVZFJyB8ICdBQ1RJVkVfRVJST1InIHwgJ0JBQ0tHUk9VTkQnIHwgJ0JBQ0tHUk9VTkRfRVJST1InO1xuICAgIF9sYXN0S25vd25Qb3NpdGlvbjogYW55O1xuICAgIF91c2VyTG9jYXRpb25Eb3RNYXJrZXI6IE1hcmtlcjtcbiAgICBfYWNjdXJhY3lDaXJjbGVNYXJrZXI6IE1hcmtlcjtcbiAgICBfYWNjdXJhY3k6IG51bWJlcjtcbiAgICBfc2V0dXA6IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIG9uY2UgdGhlIGNvbnRyb2wgaGFzIGJlZW4gc2V0dXBcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uU3VjY2VzcycsXG4gICAgICAgICAgICAnX29uRXJyb3InLFxuICAgICAgICAgICAgJ19vblpvb20nLFxuICAgICAgICAgICAgJ19maW5pc2gnLFxuICAgICAgICAgICAgJ19zZXR1cFVJJyxcbiAgICAgICAgICAgICdfdXBkYXRlQ2FtZXJhJyxcbiAgICAgICAgICAgICdfdXBkYXRlTWFya2VyJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBgKTtcbiAgICAgICAgY2hlY2tHZW9sb2NhdGlvblN1cHBvcnQodGhpcy5fc2V0dXBVSSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBnZW9sb2NhdGlvbiB3YXRjaCBpZiBleGlzdHNcbiAgICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgbWFya2VycyBmcm9tIHRoZSBtYXBcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uICYmIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcikge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlICYmIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbScsIHRoaXMuX29uWm9vbSk7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIG51bWJlck9mV2F0Y2hlcyA9IDA7XG4gICAgICAgIG5vVGltZW91dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIF9pc091dE9mTWFwTWF4Qm91bmRzKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9tYXAuZ2V0TWF4Qm91bmRzKCk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gcG9zaXRpb24uY29vcmRzO1xuXG4gICAgICAgIHJldHVybiBib3VuZHMgJiYgKFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubG9uZ2l0dWRlIDwgYm91bmRzLmdldFdlc3QoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubG9uZ2l0dWRlID4gYm91bmRzLmdldEVhc3QoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubGF0aXR1ZGUgPCBib3VuZHMuZ2V0U291dGgoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubGF0aXR1ZGUgPiBib3VuZHMuZ2V0Tm9ydGgoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9zZXRFcnJvclN0YXRlKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0VSUk9SJztcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyB0dXJuIG1hcmtlciBncmV5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkRfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgLy8gdHVybiBtYXJrZXIgZ3JleVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYFVuZXhwZWN0ZWQgd2F0Y2hTdGF0ZSAke3RoaXMuX3dhdGNoU3RhdGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25TdWNjZXNzKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgICAgLy8gY29udHJvbCBoYXMgc2luY2UgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNPdXRPZk1hcE1heEJvdW5kcyhwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEVycm9yU3RhdGUoKTtcblxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnb3V0b2ZtYXhib3VuZHMnLCBwb3NpdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKCk7XG4gICAgICAgICAgICB0aGlzLl9maW5pc2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgcG9zaXRpb24gc28gdGhhdCBpZiB0aGUgc3RhdGUgaXMgQkFDS0dST1VORCBhbmQgdGhlIHVzZXJcbiAgICAgICAgICAgIC8vIGNsaWNrcyB0aGUgYnV0dG9uLCB3ZSBjYW4gbW92ZSB0byBBQ1RJVkVfTE9DSyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yXG4gICAgICAgICAgICAvLyB3YXRjaFBvc2l0aW9uIHRvIHRyaWdnZXIgX29uU3VjY2Vzc1xuICAgICAgICAgICAgdGhpcy5fbGFzdEtub3duUG9zaXRpb24gPSBwb3NpdGlvbjtcblxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl93YXRjaFN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdCQUNLR1JPVU5EJztcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHNob3dVc2VyTG9jYXRpb24gYW5kIHRoZSB3YXRjaCBzdGF0ZSBpc24ndCBvZmYgdGhlbiB1cGRhdGUgdGhlIG1hcmtlciBsb2NhdGlvblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5fd2F0Y2hTdGF0ZSAhPT0gJ09GRicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1hcmtlcihwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBpbiBub3JtYWwgbW9kZSAobm90IHdhdGNoIG1vZGUpLCBvciBpZiBpbiB3YXRjaCBtb2RlIGFuZCB0aGUgc3RhdGUgaXMgYWN0aXZlIHdhdGNoXG4gICAgICAgIC8vIHRoZW4gdXBkYXRlIHRoZSBjYW1lcmFcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24gfHwgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2FtZXJhKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZ2VvbG9jYXRlJywgcG9zaXRpb24pKTtcbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNhbWVyYShwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IExuZ0xhdChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xuICAgICAgICBjb25zdCByYWRpdXMgPSBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3k7XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZXh0ZW5kKHtiZWFyaW5nfSwgdGhpcy5vcHRpb25zLmZpdEJvdW5kc09wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXRCb3VuZHMoY2VudGVyLnRvQm91bmRzKHJhZGl1cyksIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGdlb2xvY2F0ZVNvdXJjZTogdHJ1ZSAvLyB0YWcgdGhpcyBjYW1lcmEgY2hhbmdlIHNvIGl0IHdvbid0IGNhdXNlIHRoZSBjb250cm9sIHRvIGNoYW5nZSB0byBiYWNrZ3JvdW5kIHN0YXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXJrZXIocG9zaXRpb246ID9Qb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IG5ldyBMbmdMYXQocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnNldExuZ0xhdChjZW50ZXIpLmFkZFRvKHRoaXMuX21hcCk7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KGNlbnRlcikuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5ID0gcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5O1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uICYmIHRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNpcmNsZVJhZGl1cygpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2NpcmNsZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5fbWFwLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuX21hcC51bnByb2plY3QoWzAsIHldKTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuX21hcC51bnByb2plY3QoWzEsIHldKTtcbiAgICAgICAgY29uc3QgbWV0ZXJzUGVyUGl4ZWwgPSBhLmRpc3RhbmNlVG8oYik7XG4gICAgICAgIGNvbnN0IGNpcmNsZURpYW1ldGVyID0gTWF0aC5jZWlsKDIuMCAqIHRoaXMuX2FjY3VyYWN5IC8gbWV0ZXJzUGVyUGl4ZWwpO1xuICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Y2lyY2xlRGlhbWV0ZXJ9cHhgO1xuICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2NpcmNsZURpYW1ldGVyfXB4YDtcbiAgICB9XG5cbiAgICBfb25ab29tKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25FcnJvcihlcnJvcjogUG9zaXRpb25FcnJvcikge1xuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgICAgLy8gY29udHJvbCBoYXMgc2luY2UgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIFBFUk1JU1NJT05fREVOSUVEXG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyV2F0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLmNvZGUgPT09IDMgJiYgbm9UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyByZXByZXNlbnRzIGEgZm9yY2VkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gdGhpcyB3YXMgdHJpZ2dlcmVkIHRvIGZvcmNlIGltbWVkaWF0ZSBnZW9sb2NhdGlvbiB3aGVuIGEgd2F0Y2ggaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy84MjE0XG4gICAgICAgICAgICAgICAgLy8gYW5kIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nZW9sb2NhdGlvbi1hcGkvI2V4YW1wbGUtNS1mb3JjaW5nLXRoZS11c2VyLWFnZW50LXRvLXJldHVybi1hLWZyZXNoLWNhY2hlZC1wb3NpdGlvblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3JTdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3dhdGNoU3RhdGUgIT09ICdPRkYnICYmIHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdlcnJvcicsIGVycm9yKSk7XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG4gICAgfVxuXG4gICAgX2ZpbmlzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZCkgeyBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKTsgfVxuICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgX3NldHVwVUkoc3VwcG9ydGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlOiBNb3VzZUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCBgbWFwYm94Z2wtY3RybC1nZW9sb2NhdGVgLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBET00uY3JlYXRlKCdzcGFuJywgYG1hcGJveGdsLWN0cmwtaWNvbmAsIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbikuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udHlwZSA9ICdidXR0b24nO1xuXG4gICAgICAgIGlmIChzdXBwb3J0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnR2VvbG9jYXRpb24gc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIHNvIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgYmUgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBzaG93VXNlckxvY2F0aW9uIGlzIGVuYWJsZWQsIGtlZXAgdGhlIEdlb2xvY2F0ZSBidXR0b24gZGlzYWJsZWQgdW50aWwgdGhlIGRldmljZSBsb2NhdGlvbiBtYXJrZXIgaXMgc2V0dXAgb24gdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RvdEVsZW1lbnQgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3QnKTtcblxuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyID0gbmV3IE1hcmtlcih0aGlzLl9kb3RFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY2lyY2xlRWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWFjY3VyYWN5LWNpcmNsZScpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIgPSBuZXcgTWFya2VyKHtlbGVtZW50OiB0aGlzLl9jaXJjbGVFbGVtZW50LCBwaXRjaEFsaWdubWVudDogJ21hcCd9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuXG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3pvb20nLCB0aGlzLl9vblpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLl9zZXR1cCA9IHRydWU7XG5cbiAgICAgICAgLy8gd2hlbiB0aGUgY2FtZXJhIGlzIGNoYW5nZWQgKGFuZCBpdCdzIG5vdCBhcyBhIHJlc3VsdCBvZiB0aGUgR2VvbG9jYXRpb24gQ29udHJvbCkgY2hhbmdlXG4gICAgICAgIC8vIHRoZSB3YXRjaCBtb2RlIHRvIGJhY2tncm91bmQgd2F0Y2gsIHNvIHRoYXQgdGhlIG1hcmtlciBpcyB1cGRhdGVkIGJ1dCBub3QgdGhlIGNhbWVyYS5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3Zlc3RhcnQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tUmVzaXplID0gZXZlbnQub3JpZ2luYWxFdmVudCAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09ICdyZXNpemUnO1xuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuZ2VvbG9jYXRlU291cmNlICYmIHRoaXMuX3dhdGNoU3RhdGUgPT09ICdBQ1RJVkVfTE9DSycgJiYgIWZyb21SZXNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdCQUNLR1JPVU5EJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uZW5kJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBhIGdlb2xvY2F0aW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgIGlmIGNhbGxlZCBiZWZvcmUgY29udHJvbCB3YXMgYWRkZWQgdG8gYSBtYXAsIG90aGVyd2lzZSByZXR1cm5zIGB0cnVlYC5cbiAgICAgKi9cbiAgICB0cmlnZ2VyKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3NldHVwKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnR2VvbG9jYXRlIGNvbnRyb2wgdHJpZ2dlcmVkIGJlZm9yZSBhZGRlZCB0byBhIG1hcCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB3YXRjaFN0YXRlIGFuZCBkbyBhbnkgb3V0Z29pbmcgc3RhdGUgY2xlYW51cFxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl93YXRjaFN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdPRkYnOlxuICAgICAgICAgICAgICAgIC8vIHR1cm4gb24gdGhlIEdlb2xvY2F0ZSBDb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdXQUlUSU5HX0FDVElWRSc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbnN0YXJ0JykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0VSUk9SJzpcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkRfRVJST1InOlxuICAgICAgICAgICAgICAgIC8vIHR1cm4gb2ZmIHRoZSBHZW9sb2NhdGUgQ29udHJvbFxuICAgICAgICAgICAgICAgIG51bWJlck9mV2F0Y2hlcy0tO1xuICAgICAgICAgICAgICAgIG5vVGltZW91dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnT0ZGJztcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25lbmQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0FDVElWRV9MT0NLJztcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIC8vIHNldCBjYW1lcmEgdG8gbGFzdCBrbm93biBsb2NhdGlvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbikgdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYFVuZXhwZWN0ZWQgd2F0Y2hTdGF0ZSAke3RoaXMuX3dhdGNoU3RhdGV9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGluY29taW5nIHN0YXRlIHNldHVwXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkRfRVJST1InOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ09GRic6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYFVuZXhwZWN0ZWQgd2F0Y2hTdGF0ZSAke3RoaXMuX3dhdGNoU3RhdGV9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1hbmFnZSBnZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uIC8gZ2VvbG9jYXRpb24uY2xlYXJXYXRjaFxuICAgICAgICAgICAgaWYgKHRoaXMuX3dhdGNoU3RhdGUgPT09ICdPRkYnICYmIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgd2F0Y2hQb3NpdGlvbiBhcyB3ZSd2ZSBjaGFuZ2VkIHRvIGFuIE9GRiBzdGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyV2F0Y2goKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbmFibGUgd2F0Y2hQb3NpdGlvbiBzaW5jZSB3YXRjaFN0YXRlIGlzIG5vdCBPRkYgYW5kIHRoZXJlIGlzIG5vIHdhdGNoUG9zaXRpb24gYWxyZWFkeSBydW5uaW5nXG5cbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICd0cnVlJyk7XG5cbiAgICAgICAgICAgICAgICBudW1iZXJPZldhdGNoZXMrKztcbiAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb25PcHRpb25zO1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZldhdGNoZXMgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uT3B0aW9ucyA9IHttYXhpbXVtQWdlOjYwMDAwMCwgdGltZW91dDowfTtcbiAgICAgICAgICAgICAgICAgICAgbm9UaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbk9wdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICBub1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPSB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU3VjY2VzcywgdGhpcy5fb25FcnJvciwgcG9zaXRpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX29uU3VjY2VzcywgdGhpcy5fb25FcnJvciwgdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIFRoaXMgdGltZW91dCBlbnN1cmVzIHRoYXQgd2Ugc3RpbGwgY2FsbCBmaW5pc2goKSBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBkZWNsaW5lcyB0byBzaGFyZSB0aGVpciBsb2NhdGlvbiBpbiBGaXJlZm94XG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwgMTAwMDAgLyogMTBzZWMgKi8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NsZWFyV2F0Y2goKSB7XG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuXG4gICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZW9sb2NhdGVDb250cm9sO1xuXG4vKiBHZW9sb2NhdGUgQ29udHJvbCBXYXRjaCBTdGF0ZXNcbiAqIFRoaXMgaXMgdGhlIHByaXZhdGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG4gKlxuICogT0ZGXG4gKiAgICBvZmYvaW5hY3RpdmVcbiAqIFdBSVRJTkdfQUNUSVZFXG4gKiAgICBHZW9sb2NhdGUgQ29udHJvbCB3YXMgY2xpY2tlZCBidXQgc3RpbGwgd2FpdGluZyBmb3IgR2VvbG9jYXRpb24gQVBJIHJlc3BvbnNlIHdpdGggdXNlciBsb2NhdGlvblxuICogQUNUSVZFX0xPQ0tcbiAqICAgIFNob3dpbmcgdGhlIHVzZXIgbG9jYXRpb24gYXMgYSBkb3QgQU5EIHRyYWNraW5nIHRoZSBjYW1lcmEgdG8gYmUgZml4ZWQgdG8gdGhlaXIgbG9jYXRpb24uIElmIHRoZWlyIGxvY2F0aW9uIGNoYW5nZXMgdGhlIG1hcCBtb3ZlcyB0byBmb2xsb3cuXG4gKiBBQ1RJVkVfRVJST1JcbiAqICAgIFRoZXJlIHdhcyBlbiBlcnJvciBmcm9tIHRoZSBHZW9sb2NhdGlvbiBBUEkgd2hpbGUgdHJ5aW5nIHRvIHNob3cgYW5kIHRyYWNrIHRoZSB1c2VyIGxvY2F0aW9uLlxuICogQkFDS0dST1VORFxuICogICAgU2hvd2luZyB0aGUgdXNlciBsb2NhdGlvbiBhcyBhIGRvdCBidXQgdGhlIGNhbWVyYSBkb2Vzbid0IGZvbGxvdyB0aGVpciBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQkFDS0dST1VORF9FUlJPUlxuICogICAgVGhlcmUgd2FzIGFuIGVycm9yIGZyb20gdGhlIEdlb2xvY2F0aW9uIEFQSSB3aGlsZSB0cnlpbmcgdG8gc2hvdyAoYnV0IG5vdCB0cmFjaykgdGhlIHVzZXIgbG9jYXRpb24uXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgc3VjY2Vzcy5cbiAqXG4gKiBAZXZlbnQgZ2VvbG9jYXRlXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9ufSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBhbiBlcnJvci5cbiAqXG4gKiBAZXZlbnQgZXJyb3JcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25FcnJvcn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uRXJyb3JdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbkVycm9yKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgb24gZWFjaCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gdXBkYXRlIHdoaWNoIHJldHVybmVkIGFzIHN1Y2Nlc3MgYnV0IHVzZXIgcG9zaXRpb24gaXMgb3V0IG9mIG1hcCBtYXhCb3VuZHMuXG4gKlxuICogQGV2ZW50IG91dG9mbWF4Ym91bmRzXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9ufSBkYXRhIFRoZSByZXR1cm5lZCBbUG9zaXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIEdlb2xvY2F0ZSBDb250cm9sIGNoYW5nZXMgdG8gdGhlIGFjdGl2ZSBsb2NrIHN0YXRlLCB3aGljaCBoYXBwZW5zIGVpdGhlciB1cG9uIGZpcnN0IG9idGFpbmluZyBhIHN1Y2Nlc3NmdWwgR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIGZvciB0aGUgdXNlciAoYSBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cpLCBvciB0aGUgdXNlciBjbGlja3MgdGhlIGdlb2xvY2F0ZSBidXR0b24gd2hlbiBpbiB0aGUgYmFja2dyb3VuZCBzdGF0ZSB3aGljaCB1c2VzIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uIHRvIHJlY2VudGVyIHRoZSBtYXAgYW5kIGVudGVyIGFjdGl2ZSBsb2NrIHN0YXRlIChubyBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cgdW5sZXNzIHRoZSB1c2VycydzIGxvY2F0aW9uIGNoYW5nZXMpLlxuICpcbiAqIEBldmVudCB0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgR2VvbG9jYXRlIENvbnRyb2wgY2hhbmdlcyB0byB0aGUgYmFja2dyb3VuZCBzdGF0ZSwgd2hpY2ggaGFwcGVucyB3aGVuIGEgdXNlciBjaGFuZ2VzIHRoZSBjYW1lcmEgZHVyaW5nIGFuIGFjdGl2ZSBwb3NpdGlvbiBsb2NrLiBUaGlzIG9ubHkgYXBwbGllcyB3aGVuIHRyYWNrVXNlckxvY2F0aW9uIGlzIHRydWUuIEluIHRoZSBiYWNrZ3JvdW5kIHN0YXRlLCB0aGUgZG90IG9uIHRoZSBtYXAgd2lsbCB1cGRhdGUgd2l0aCBsb2NhdGlvbiB1cGRhdGVzIGJ1dCB0aGUgY2FtZXJhIHdpbGwgbm90LlxuICpcbiAqIEBldmVudCB0cmFja3VzZXJsb2NhdGlvbmVuZFxuICogQG1lbWJlcm9mIEdlb2xvY2F0ZUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICpcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgVW5pdCA9ICdpbXBlcmlhbCcgfCAnbWV0cmljJyB8ICduYXV0aWNhbCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBtYXhXaWR0aD86IG51bWJlcixcbiAgICB1bml0PzogVW5pdDtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIG1heFdpZHRoOiAxMDAsXG4gICAgdW5pdDogJ21ldHJpYydcbn07XG5cbi8qKlxuICogQSBgU2NhbGVDb250cm9sYCBjb250cm9sIGRpc3BsYXlzIHRoZSByYXRpbyBvZiBhIGRpc3RhbmNlIG9uIHRoZSBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGlzdGFuY2Ugb24gdGhlIGdyb3VuZC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2lkdGg9JzEwMCddIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc2NhbGUgY29udHJvbCBpbiBwaXhlbHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdD0nbWV0cmljJ10gVW5pdCBvZiB0aGUgZGlzdGFuY2UgKGAnaW1wZXJpYWwnYCwgYCdtZXRyaWMnYCBvciBgJ25hdXRpY2FsJ2ApLlxuICogQGV4YW1wbGVcbiAqIHZhciBzY2FsZSA9IG5ldyBtYXBib3hnbC5TY2FsZUNvbnRyb2woe1xuICogICAgIG1heFdpZHRoOiA4MCxcbiAqICAgICB1bml0OiAnaW1wZXJpYWwnXG4gKiB9KTtcbiAqIG1hcC5hZGRDb250cm9sKHNjYWxlKTtcbiAqXG4gKiBzY2FsZS5zZXRVbml0KCdtZXRyaWMnKTtcbiAqL1xuY2xhc3MgU2NhbGVDb250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgb3B0aW9uczogT3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnc2V0VW5pdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1sZWZ0JztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKCkge1xuICAgICAgICB1cGRhdGVTY2FsZSh0aGlzLl9tYXAsIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUnLCBtYXAuZ2V0Q29udGFpbmVyKCkpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX29uTW92ZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzY2FsZSdzIHVuaXQgb2YgdGhlIGRpc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdW5pdCBVbml0IG9mIHRoZSBkaXN0YW5jZSAoYCdpbXBlcmlhbCdgLCBgJ21ldHJpYydgIG9yIGAnbmF1dGljYWwnYCkuXG4gICAgICovXG4gICAgc2V0VW5pdCh1bml0OiBVbml0KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51bml0ID0gdW5pdDtcbiAgICAgICAgdXBkYXRlU2NhbGUodGhpcy5fbWFwLCB0aGlzLl9jb250YWluZXIsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY2FsZUNvbnRyb2w7XG5cbmZ1bmN0aW9uIHVwZGF0ZVNjYWxlKG1hcCwgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgLy8gQSBob3Jpem9udGFsIHNjYWxlIGlzIGltYWdpbmVkIHRvIGJlIHByZXNlbnQgYXQgY2VudGVyIG9mIHRoZSBtYXBcbiAgICAvLyBjb250YWluZXIgd2l0aCBtYXhpbXVtIGxlbmd0aCAoRGVmYXVsdCkgYXMgMTAwcHguXG4gICAgLy8gVXNpbmcgc3BoZXJpY2FsIGxhdyBvZiBjb3NpbmVzIGFwcHJveGltYXRpb24sIHRoZSByZWFsIGRpc3RhbmNlIGlzXG4gICAgLy8gZm91bmQgYmV0d2VlbiB0aGUgdHdvIGNvb3JkaW5hdGVzLlxuICAgIGNvbnN0IG1heFdpZHRoID0gb3B0aW9ucyAmJiBvcHRpb25zLm1heFdpZHRoIHx8IDEwMDtcblxuICAgIGNvbnN0IHkgPSBtYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBtYXAudW5wcm9qZWN0KFswLCB5XSk7XG4gICAgY29uc3QgcmlnaHQgPSBtYXAudW5wcm9qZWN0KFttYXhXaWR0aCwgeV0pO1xuICAgIGNvbnN0IG1heE1ldGVycyA9IGxlZnQuZGlzdGFuY2VUbyhyaWdodCk7XG4gICAgLy8gVGhlIHJlYWwgZGlzdGFuY2UgY29ycmVzcG9uZGluZyB0byAxMDBweCBzY2FsZSBsZW5ndGggaXMgcm91bmRlZCBvZmYgdG9cbiAgICAvLyBuZWFyIHByZXR0eSBudW1iZXIgYW5kIHRoZSBzY2FsZSBsZW5ndGggZm9yIHRoZSBzYW1lIGlzIGZvdW5kIG91dC5cbiAgICAvLyBEZWZhdWx0IHVuaXQgb2YgdGhlIHNjYWxlIGlzIGJhc2VkIG9uIFVzZXIncyBsb2NhbGUuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0ID09PSAnaW1wZXJpYWwnKSB7XG4gICAgICAgIGNvbnN0IG1heEZlZXQgPSAzLjI4MDggKiBtYXhNZXRlcnM7XG4gICAgICAgIGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICAgICAgICAgICAgY29uc3QgbWF4TWlsZXMgPSBtYXhGZWV0IC8gNTI4MDtcbiAgICAgICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1pbGVzLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuTWlsZXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhGZWV0LCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuRmVldCcpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuaXQgPT09ICduYXV0aWNhbCcpIHtcbiAgICAgICAgY29uc3QgbWF4TmF1dGljYWxzID0gbWF4TWV0ZXJzIC8gMTg1MjtcbiAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TmF1dGljYWxzLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuTmF1dGljYWxNaWxlcycpKTtcbiAgICB9IGVsc2UgaWYgKG1heE1ldGVycyA+PSAxMDAwKSB7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1ldGVycyAvIDEwMDAsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5LaWxvbWV0ZXJzJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1ldGVycywgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLk1ldGVycycpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heERpc3RhbmNlLCB1bml0KSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBnZXRSb3VuZE51bShtYXhEaXN0YW5jZSk7XG4gICAgY29uc3QgcmF0aW8gPSBkaXN0YW5jZSAvIG1heERpc3RhbmNlO1xuICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke21heFdpZHRoICogcmF0aW99cHhgO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgJHtkaXN0YW5jZX0mbmJzcDske3VuaXR9YDtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjaW1hbFJvdW5kTnVtKGQpIHtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIE1hdGguY2VpbCgtTWF0aC5sb2coZCkgLyBNYXRoLkxOMTApKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChkICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuXG5mdW5jdGlvbiBnZXRSb3VuZE51bShudW0pIHtcbiAgICBjb25zdCBwb3cxMCA9IE1hdGgucG93KDEwLCAoYCR7TWF0aC5mbG9vcihudW0pfWApLmxlbmd0aCAtIDEpO1xuICAgIGxldCBkID0gbnVtIC8gcG93MTA7XG5cbiAgICBkID0gZCA+PSAxMCA/IDEwIDpcbiAgICAgICAgZCA+PSA1ID8gNSA6XG4gICAgICAgIGQgPj0gMyA/IDMgOlxuICAgICAgICBkID49IDIgPyAyIDpcbiAgICAgICAgZCA+PSAxID8gMSA6IGdldERlY2ltYWxSb3VuZE51bShkKTtcblxuICAgIHJldHVybiBwb3cxMCAqIGQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50XG59O1xuXG4vKipcbiAqIEEgYEZ1bGxzY3JlZW5Db250cm9sYCBjb250cm9sIGNvbnRhaW5zIGEgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWFwIGluIGFuZCBvdXQgb2YgZnVsbHNjcmVlbiBtb2RlLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gYGNvbnRhaW5lcmAgaXMgdGhlIFtjb21wYXRpYmxlIERPTSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZXF1ZXN0RnVsbFNjcmVlbiNDb21wYXRpYmxlX2VsZW1lbnRzKSB3aGljaCBzaG91bGQgYmUgbWFkZSBmdWxsIHNjcmVlbi4gQnkgZGVmYXVsdCwgdGhlIG1hcCBjb250YWluZXIgZWxlbWVudCB3aWxsIGJlIG1hZGUgZnVsbCBzY3JlZW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIG1hcC5hZGRDb250cm9sKG5ldyBtYXBib3hnbC5GdWxsc2NyZWVuQ29udHJvbCh7Y29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyl9KSk7XG4gKiBAc2VlIFtWaWV3IGEgZnVsbHNjcmVlbiBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZnVsbHNjcmVlbi8pXG4gKi9cblxuY2xhc3MgRnVsbHNjcmVlbkNvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udHJvbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2Z1bGxzY3JlZW46IGJvb2xlYW47XG4gICAgX2Z1bGxzY3JlZW5jaGFuZ2U6IHN0cmluZztcbiAgICBfZnVsbHNjcmVlbkJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnRnVsbCBzY3JlZW4gY29udHJvbCBcXCdjb250YWluZXJcXCcgbXVzdCBiZSBhIERPTSBlbGVtZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkNsaWNrRnVsbHNjcmVlbicsXG4gICAgICAgICAgICAnX2NoYW5nZUljb24nXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAoJ29uZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ2Z1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbm1vemZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdtb3pmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb253ZWJraXRmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ubXNmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnTVNGdWxsc2NyZWVuQ2hhbmdlJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX21hcC5nZXRDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBgKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBVSSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgd2Fybk9uY2UoJ1RoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAgPSAobnVsbDogYW55KTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbmFibGVkIHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldHVwVUkoKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCAoYG1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbmApLCB0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCBidXR0b24pLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgYnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVRpdGxlKCkge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2dldFRpdGxlKCk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICB9XG5cbiAgICBfZ2V0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKHRoaXMuX2lzRnVsbHNjcmVlbigpID8gJ0Z1bGxzY3JlZW5Db250cm9sLkV4aXQnIDogJ0Z1bGxzY3JlZW5Db250cm9sLkVudGVyJyk7XG4gICAgfVxuXG4gICAgX2lzRnVsbHNjcmVlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgX2NoYW5nZUljb24oKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxzY3JlZW5FbGVtZW50ID1cbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbGVtZW50O1xuXG4gICAgICAgIGlmICgoZnVsbHNjcmVlbkVsZW1lbnQgPT09IHRoaXMuX2NvbnRhaW5lcikgIT09IHRoaXMuX2Z1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSAhdGhpcy5fZnVsbHNjcmVlbjtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZShgbWFwYm94Z2wtY3RybC1zaHJpbmtgKTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZShgbWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuYCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUaXRsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uQ2xpY2tGdWxsc2NyZWVuKCkge1xuICAgICAgICBpZiAodGhpcy5faXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1bGxzY3JlZW5Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHNtYXJ0V3JhcCBmcm9tICcuLi91dGlsL3NtYXJ0X3dyYXAnO1xuaW1wb3J0IHt0eXBlIEFuY2hvciwgYW5jaG9yVHJhbnNsYXRlLCBhcHBseUFuY2hvckNsYXNzfSBmcm9tICcuL2FuY2hvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIG1heFdpZHRoOiBcIjI0MHB4XCJcbn07XG5cbmV4cG9ydCB0eXBlIE9mZnNldCA9IG51bWJlciB8IFBvaW50TGlrZSB8IHtbXzogQW5jaG9yXTogUG9pbnRMaWtlfTtcblxuZXhwb3J0IHR5cGUgUG9wdXBPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uPzogYm9vbGVhbixcbiAgICBjbG9zZU9uQ2xpY2s/OiBib29sZWFuLFxuICAgIGNsb3NlT25Nb3ZlPzogYm9vbGVhbixcbiAgICBhbmNob3I/OiBBbmNob3IsXG4gICAgb2Zmc2V0PzogT2Zmc2V0LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgICBtYXhXaWR0aD86IHN0cmluZ1xufTtcblxuLyoqXG4gKiBBIHBvcHVwIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlQnV0dG9uPXRydWVdIElmIGB0cnVlYCwgYSBjbG9zZSBidXR0b24gd2lsbCBhcHBlYXIgaW4gdGhlXG4gKiAgIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHBvcHVwLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jbG9zZU9uQ2xpY2s9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgcG9wdXAgd2lsbCBjbG9zZWQgd2hlbiB0aGVcbiAqICAgbWFwIGlzIGNsaWNrZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlT25Nb3ZlPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBwb3B1cCB3aWxsIGNsb3NlZCB3aGVuIHRoZVxuICogICBtYXAgbW92ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5jaG9yXSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHBhcnQgb2YgdGhlIFBvcHVwIHRoYXQgc2hvdWxkXG4gKiAgIGJlIHBvc2l0aW9uZWQgY2xvc2VzdCB0byB0aGUgY29vcmRpbmF0ZSBzZXQgdmlhIHtAbGluayBQb3B1cCNzZXRMbmdMYXR9LlxuICogICBPcHRpb25zIGFyZSBgJ2NlbnRlcidgLCBgJ3RvcCdgLCBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgYCdyaWdodCdgLCBgJ3RvcC1sZWZ0J2AsXG4gKiAgIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIElmIHVuc2V0IHRoZSBhbmNob3Igd2lsbCBiZVxuICogICBkeW5hbWljYWxseSBzZXQgdG8gZW5zdXJlIHRoZSBwb3B1cCBmYWxscyB3aXRoaW4gdGhlIG1hcCBjb250YWluZXIgd2l0aCBhIHByZWZlcmVuY2VcbiAqICAgZm9yIGAnYm90dG9tJ2AuXG4gKiBAcGFyYW0ge251bWJlcnxQb2ludExpa2V8T2JqZWN0fSBbb3B0aW9ucy5vZmZzZXRdIC1cbiAqICBBIHBpeGVsIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBwb3B1cCdzIGxvY2F0aW9uIHNwZWNpZmllZCBhczpcbiAqICAgLSBhIHNpbmdsZSBudW1iZXIgc3BlY2lmeWluZyBhIGRpc3RhbmNlIGZyb20gdGhlIHBvcHVwJ3MgbG9jYXRpb25cbiAqICAgLSBhIHtAbGluayBQb2ludExpa2V9IHNwZWNpZnlpbmcgYSBjb25zdGFudCBvZmZzZXRcbiAqICAgLSBhbiBvYmplY3Qgb2Yge0BsaW5rIFBvaW50fXMgc3BlY2lmaW5nIGFuIG9mZnNldCBmb3IgZWFjaCBhbmNob3IgcG9zaXRpb25cbiAqICBOZWdhdGl2ZSBvZmZzZXRzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNsYXNzTmFtZV0gU3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzcyBuYW1lcyB0byBhZGQgdG8gcG9wdXAgY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWF4V2lkdGg9JzI0MHB4J10gLVxuICogIEEgc3RyaW5nIHRoYXQgc2V0cyB0aGUgQ1NTIHByb3BlcnR5IG9mIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGgsIGVnIGAnMzAwcHgnYC5cbiAqICBUbyBlbnN1cmUgdGhlIHBvcHVwIHJlc2l6ZXMgdG8gZml0IGl0cyBjb250ZW50LCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgJ25vbmUnYC5cbiAqICBBdmFpbGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWF4LXdpZHRoXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlckhlaWdodCA9IDUwLCBtYXJrZXJSYWRpdXMgPSAxMCwgbGluZWFyT2Zmc2V0ID0gMjU7XG4gKiB2YXIgcG9wdXBPZmZzZXRzID0ge1xuICogICd0b3AnOiBbMCwgMF0sXG4gKiAgJ3RvcC1sZWZ0JzogWzAsMF0sXG4gKiAgJ3RvcC1yaWdodCc6IFswLDBdLFxuICogICdib3R0b20nOiBbMCwgLW1hcmtlckhlaWdodF0sXG4gKiAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gKiAgJ2JvdHRvbS1yaWdodCc6IFstbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAqICAnbGVmdCc6IFttYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdLFxuICogICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICogIH07XG4gKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoe29mZnNldDogcG9wdXBPZmZzZXRzLCBjbGFzc05hbWU6ICdteS1jbGFzcyd9KVxuICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICogICAuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKVxuICogICAuc2V0TWF4V2lkdGgoXCIzMDBweFwiKVxuICogICAuYWRkVG8obWFwKTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAqIEBzZWUgW0F0dGFjaCBhIHBvcHVwIHRvIGEgbWFya2VyIGluc3RhbmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wb3B1cC8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvcHVwIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IFBvcHVwT3B0aW9ucztcbiAgICBfY29udGVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2Nsb3NlQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfdGlwOiBIVE1MRWxlbWVudDtcbiAgICBfbG5nTGF0OiBMbmdMYXQ7XG4gICAgX3RyYWNrUG9pbnRlcjogYm9vbGVhbjtcbiAgICBfcG9zOiA/UG9pbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQb3B1cE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGUnLCAnX29uQ2xvc2UnLCAncmVtb3ZlJ10sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIHBvcHVwIHRvIGEgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwYm94IEdMIEpTIG1hcCB0byBhZGQgdGhlIHBvcHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdjbGljaycsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uTW92ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXAub24oJ3JlbW92ZScsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZW1vdmUnLCAoZSkgPT4geyB0aGlzLl91cGRhdGUoZS5wb2ludCk7IH0pO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZXVwJywgKGUpID0+IHsgdGhpcy5fdXBkYXRlKGUucG9pbnQpOyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBwb3B1cCBpcyBvcGVuZWQgbWFudWFsbHkgb3IgcHJvZ3JhbWF0aWNhbGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgb3BlblxuICAgICAgICAgKiBAbWVtYmVyb2YgUG9wdXBcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7UG9wdXB9IHBvcHVwIG9iamVjdCB0aGF0IHdhcyBvcGVuZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ29wZW4nKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcG9wdXAgaXMgb3BlbiwgYGZhbHNlYCBpZiBpdCBpcyBjbG9zZWQuXG4gICAgICovXG4gICAgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9tYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcG9wdXAgZnJvbSB0aGUgbWFwIGl0IGhhcyBiZWVuIGFkZGVkIHRvLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKS5hZGRUbyhtYXApO1xuICAgICAqIHBvcHVwLnJlbW92ZSgpO1xuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZW1vdmUnLCB0aGlzLnJlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgcG9wdXAgaXMgY2xvc2VkIG1hbnVhbGx5IG9yIHByb2dyYW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IGNsb3NlXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIGNsb3NlZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnY2xvc2UnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKlxuICAgICAqIFRoZSBsb25naXR1ZGUgb2YgdGhlIHJlc3VsdCBtYXkgZGlmZmVyIGJ5IGEgbXVsdGlwbGUgb2YgMzYwIGRlZ3JlZXMgZnJvbSB0aGUgbG9uZ2l0dWRlIHByZXZpb3VzbHlcbiAgICAgKiBzZXQgYnkgYHNldExuZ0xhdGAgYmVjYXVzZSBgUG9wdXBgIHdyYXBzIHRoZSBhbmNob3IgbG9uZ2l0dWRlIGFjcm9zcyBjb3BpZXMgb2YgdGhlIHdvcmxkIHRvIGtlZXBcbiAgICAgKiB0aGUgcG9wdXAgb24gc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICovXG4gICAgZ2V0TG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG5nTGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IsIGFuZCBtb3ZlcyB0aGUgcG9wdXAgdG8gaXQuIFJlcGxhY2VzIHRyYWNrUG9pbnRlcigpIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxuZ2xhdCBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIHRvIHNldCBhcyB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRMbmdMYXQobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCk7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdHJhY2tQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIHBvcHVwIGFuY2hvciB0byB0aGUgY3Vyc29yIHBvc2l0aW9uLCBvbiBzY3JlZW5zIHdpdGggYSBwb2ludGVyIGRldmljZSAod2lsbCBiZSBoaWRkZW4gb24gdG91Y2hzY3JlZW5zKS4gUmVwbGFjZXMgdGhlIHNldExuZ0xhdCBiZWhhdmlvci5cbiAgICAgKiBGb3IgbW9zdCB1c2UgY2FzZXMsIGBjbG9zZU9uQ2xpY2tgIGFuZCBgY2xvc2VCdXR0b25gIHNob3VsZCBhbHNvIGJlIHNldCB0byBgZmFsc2VgIGhlcmUuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICB0cmFja1BvaW50ZXIoKSB7XG4gICAgICAgIHRoaXMuX3RyYWNrUG9pbnRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgKGUpID0+IHsgdGhpcy5fdXBkYXRlKGUucG9pbnQpOyB9KTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignZHJhZycsIChlKSA9PiB7IHRoaXMuX3VwZGF0ZShlLnBvaW50KTsgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYFBvcHVwYCdzIEhUTUwgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byBhIHN0cmluZyBvZiB0ZXh0LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgW1RleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0KSBub2RlIGluIHRoZSBET00sXG4gICAgICogc28gaXQgY2Fubm90IGluc2VydCByYXcgSFRNTC4gVXNlIHRoaXMgbWV0aG9kIGZvciBzZWN1cml0eSBhZ2FpbnN0IFhTU1xuICAgICAqIGlmIHRoZSBwb3B1cCBjb250ZW50IGlzIHVzZXItcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCBUZXh0dWFsIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0VGV4dCgnSGVsbG8sIHdvcmxkIScpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKi9cbiAgICBzZXRUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHdpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIHRoZSBIVE1MIHByb3ZpZGVkIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBIVE1MIGZpbHRlcmluZyBvciBzYW5pdGl6YXRpb24sIGFuZCBtdXN0IGJlXG4gICAgICogdXNlZCBvbmx5IHdpdGggdHJ1c3RlZCBjb250ZW50LiBDb25zaWRlciB7QGxpbmsgUG9wdXAjc2V0VGV4dH0gaWZcbiAgICAgKiB0aGUgY29udGVudCBpcyBhbiB1bnRydXN0ZWQgdGV4dCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHRtbCBBIHN0cmluZyByZXByZXNlbnRpbmcgSFRNTCBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRIVE1MKGh0bWw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmcmFnID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7XG4gICAgICAgIGxldCBjaGlsZDtcbiAgICAgICAgdGVtcC5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY2hpbGQgPSB0ZW1wLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChmcmFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZ2V0TWF4V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIgJiYgdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aC4gVGhpcyBpcyBzZXR0aW5nIHRoZSBDU1MgcHJvcGVydHkgYG1heC13aWR0aGAuXG4gICAgICogQXZhaWxhYmxlIHZhbHVlcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21heC13aWR0aFxuICAgICAqXG4gICAgICogQHBhcmFtIG1heFdpZHRoIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHdpZHRoLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TWF4V2lkdGgobWF4V2lkdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLm9wdGlvbnMubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byB0aGUgZWxlbWVudCBwcm92aWRlZCBhcyBhIERPTSBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0bWxOb2RlIEEgRE9NIG5vZGUgdG8gYmUgdXNlZCBhcyBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIGNyZWF0ZSBhbiBlbGVtZW50IHdpdGggdGhlIHBvcHVwIGNvbnRlbnRcbiAgICAgKiB2YXIgZGl2ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAqIGRpdi5pbm5lckhUTUwgPSAnSGVsbG8sIHdvcmxkISc7XG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0RE9NQ29udGVudChkaXYpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKi9cbiAgICBzZXRET01Db250ZW50KGh0bWxOb2RlOiBOb2RlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZChodG1sTm9kZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIHRoZSBwb3B1cCBjb250YWluZXIgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgTm9uLWVtcHR5IHN0cmluZyB3aXRoIENTUyBjbGFzcyBuYW1lIHRvIGFkZCB0byBwb3B1cCBjb250YWluZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGV0IHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiBwb3B1cC5hZGRDbGFzc05hbWUoJ3NvbWUtY2xhc3MnKVxuICAgICAqL1xuICAgIGFkZENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIHRoZSBwb3B1cCBjb250YWluZXIgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgTm9uLWVtcHR5IHN0cmluZyB3aXRoIENTUyBjbGFzcyBuYW1lIHRvIHJlbW92ZSBmcm9tIHBvcHVwIGNvbnRhaW5lclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBsZXQgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqIHBvcHVwLnJlbW92ZUNsYXNzTmFtZSgnc29tZS1jbGFzcycpXG4gICAgICovXG4gICAgcmVtb3ZlQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgb3IgcmVtb3ZlIHRoZSBnaXZlbiBDU1MgY2xhc3Mgb24gdGhlIHBvcHVwIGNvbnRhaW5lciwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBjdXJyZW50bHkgaGFzIHRoYXQgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIE5vbi1lbXB0eSBzdHJpbmcgd2l0aCBDU1MgY2xhc3MgbmFtZSB0byBhZGQvcmVtb3ZlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgdGhlIGNsYXNzIHdhcyByZW1vdmVkIHJldHVybiBmYWxzZSwgaWYgY2xhc3Mgd2FzIGFkZGVkLCB0aGVuIHJldHVybiB0cnVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAudG9nZ2xlQ2xhc3NOYW1lKCd0b2dnbGVDbGFzcycpXG4gICAgICovXG4gICAgdG9nZ2xlQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNvbnRlbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1wb3B1cC1jb250ZW50JywgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCAnbWFwYm94Z2wtcG9wdXAtY2xvc2UtYnV0dG9uJywgdGhpcy5fY29udGVudCk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ2xvc2UgcG9wdXAnKTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTCA9ICcmIzIxNTsnO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX3VwZGF0ZShjdXJzb3I6IFBvaW50TGlrZSkge1xuICAgICAgICBjb25zdCBoYXNQb3NpdGlvbiA9IHRoaXMuX2xuZ0xhdCB8fCB0aGlzLl90cmFja1BvaW50ZXI7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tYXAgfHwgIWhhc1Bvc2l0aW9uIHx8ICF0aGlzLl9jb250ZW50KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAnLCB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgdGhpcy5fdGlwICAgICAgID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwLXRpcCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobmFtZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWF4V2lkdGggJiYgdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoICE9PSB0aGlzLm9wdGlvbnMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9IHRoaXMub3B0aW9ucy5tYXhXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzICYmICF0aGlzLl90cmFja1BvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2xuZ0xhdCA9IHNtYXJ0V3JhcCh0aGlzLl9sbmdMYXQsIHRoaXMuX3BvcywgdGhpcy5fbWFwLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyICYmICFjdXJzb3IpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLl9wb3MgPSB0aGlzLl90cmFja1BvaW50ZXIgJiYgY3Vyc29yID8gY3Vyc29yIDogdGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KTtcblxuICAgICAgICBsZXQgYW5jaG9yOiA/QW5jaG9yID0gdGhpcy5vcHRpb25zLmFuY2hvcjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KHRoaXMub3B0aW9ucy5vZmZzZXQpO1xuXG4gICAgICAgIGlmICghYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBsZXQgYW5jaG9yQ29tcG9uZW50cztcblxuICAgICAgICAgICAgaWYgKHBvcy55ICsgb2Zmc2V0LmJvdHRvbS55IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFsndG9wJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy55ID4gdGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQgLSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzID0gWydib3R0b20nXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocG9zLnggPCB3aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zLnggPiB0aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoIC0gd2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cy5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYW5jaG9yQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSAnYm90dG9tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gKGFuY2hvckNvbXBvbmVudHMuam9pbignLScpOiBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ZWRQb3MgPSBwb3MuYWRkKG9mZnNldFthbmNob3JdKS5yb3VuZCgpO1xuICAgICAgICBET00uc2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lciwgYCR7YW5jaG9yVHJhbnNsYXRlW2FuY2hvcl19IHRyYW5zbGF0ZSgke29mZnNldGVkUG9zLnh9cHgsJHtvZmZzZXRlZFBvcy55fXB4KWApO1xuICAgICAgICBhcHBseUFuY2hvckNsYXNzKHRoaXMuX2NvbnRhaW5lciwgYW5jaG9yLCAncG9wdXAnKTtcbiAgICB9XG5cbiAgICBfb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldChvZmZzZXQ6ID9PZmZzZXQpIHtcbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplT2Zmc2V0KG5ldyBQb2ludCgwLCAwKSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHJhZGl1cyBmcm9tIHdoaWNoIHRvIGNhbGN1bGF0ZSBvZmZzZXRzIGF0IGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29ybmVyT2Zmc2V0ID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoMC41ICogTWF0aC5wb3cob2Zmc2V0LCAyKSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IG5ldyBQb2ludCgwLCAwKSxcbiAgICAgICAgICAgICd0b3AnOiBuZXcgUG9pbnQoMCwgb2Zmc2V0KSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tJzogbmV3IFBvaW50KDAsIC1vZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogbmV3IFBvaW50KGNvcm5lck9mZnNldCwgLWNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2xlZnQnOiBuZXcgUG9pbnQob2Zmc2V0LCAwKSxcbiAgICAgICAgICAgICdyaWdodCc6IG5ldyBQb2ludCgtb2Zmc2V0LCAwKVxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIGlmIChvZmZzZXQgaW5zdGFuY2VvZiBQb2ludCB8fCBBcnJheS5pc0FycmF5KG9mZnNldCkpIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGEgc2luZ2xlIG9mZnNldCB0byBiZSBhcHBsaWVkIHRvIGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29udmVydGVkT2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICd0b3AnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2JvdHRvbSc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdyaWdodCc6IGNvbnZlcnRlZE9mZnNldFxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGFuIG9mZnNldCBwZXIgcG9zaXRpb25cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnY2VudGVyJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcC1yaWdodCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbSddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20tcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2xlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAncmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsncmlnaHQnXSB8fCBbMCwgMF0pXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBwcml2YXRlIG5hbWVzcGFjZSBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkXG4gKiBvdXQgaW4gcHJvZHVjdGlvbiBidWlsZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWJ1ZyA9IHtcbiAgICBleHRlbmQoZGVzdDogT2JqZWN0LCAuLi5zb3VyY2VzOiBBcnJheTw/T2JqZWN0Pik6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBleHRlbmQoZGVzdCwgLi4uc291cmNlcyk7XG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzdXBwb3J0ZWQgZnJvbSAnQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkJztcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IE1hcCBmcm9tICcuL3VpL21hcCc7XG5pbXBvcnQgTmF2aWdhdGlvbkNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbCc7XG5pbXBvcnQgR2VvbG9jYXRlQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlX2NvbnRyb2wnO1xuaW1wb3J0IEF0dHJpYnV0aW9uQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvYXR0cmlidXRpb25fY29udHJvbCc7XG5pbXBvcnQgU2NhbGVDb250cm9sIGZyb20gJy4vdWkvY29udHJvbC9zY2FsZV9jb250cm9sJztcbmltcG9ydCBGdWxsc2NyZWVuQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZnVsbHNjcmVlbl9jb250cm9sJztcbmltcG9ydCBQb3B1cCBmcm9tICcuL3VpL3BvcHVwJztcbmltcG9ydCBNYXJrZXIgZnJvbSAnLi91aS9tYXJrZXInO1xuaW1wb3J0IFN0eWxlIGZyb20gJy4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL3V0aWwvY29uZmlnJztcbmltcG9ydCB7RGVidWd9IGZyb20gJy4vdXRpbC9kZWJ1Zyc7XG5pbXBvcnQge2lzU2FmYXJpfSBmcm9tICcuL3V0aWwvdXRpbCc7XG5pbXBvcnQge3NldFJUTFRleHRQbHVnaW4sIGdldFJUTFRleHRQbHVnaW5TdGF0dXN9IGZyb20gJy4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgV29ya2VyUG9vbCBmcm9tICcuL3V0aWwvd29ya2VyX3Bvb2wnO1xuaW1wb3J0IHtjbGVhclRpbGVDYWNoZX0gZnJvbSAnLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5pbXBvcnQge1BlcmZvcm1hbmNlVXRpbHN9IGZyb20gJy4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIHZlcnNpb24sXG4gICAgc3VwcG9ydGVkLFxuICAgIHNldFJUTFRleHRQbHVnaW4sXG4gICAgZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyxcbiAgICBNYXAsXG4gICAgTmF2aWdhdGlvbkNvbnRyb2wsXG4gICAgR2VvbG9jYXRlQ29udHJvbCxcbiAgICBBdHRyaWJ1dGlvbkNvbnRyb2wsXG4gICAgU2NhbGVDb250cm9sLFxuICAgIEZ1bGxzY3JlZW5Db250cm9sLFxuICAgIFBvcHVwLFxuICAgIE1hcmtlcixcbiAgICBTdHlsZSxcbiAgICBMbmdMYXQsXG4gICAgTG5nTGF0Qm91bmRzLFxuICAgIFBvaW50LFxuICAgIE1lcmNhdG9yQ29vcmRpbmF0ZSxcbiAgICBFdmVudGVkLFxuICAgIGNvbmZpZyxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG1hcCdzIFthY2Nlc3MgdG9rZW5dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuLykuXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IGFjY2Vzc1Rva2VuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnRseSBzZXQgYWNjZXNzIHRva2VuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wuYWNjZXNzVG9rZW4gPSBteUFjY2Vzc1Rva2VuO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGVzLylcbiAgICAgKi9cbiAgICBnZXQgYWNjZXNzVG9rZW4oKTogP3N0cmluZyB7XG4gICAgICAgIHJldHVybiBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgIH0sXG5cbiAgICBzZXQgYWNjZXNzVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25maWcuQUNDRVNTX1RPS0VOID0gdG9rZW47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG1hcCdzIGRlZmF1bHQgQVBJIFVSTCBmb3IgcmVxdWVzdGluZyB0aWxlcywgc3R5bGVzLCBzcHJpdGVzLCBhbmQgZ2x5cGhzXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IGJhc2VBcGlVcmxcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY3VycmVudCBiYXNlIEFQSSBVUkwuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5iYXNlQXBpVXJsID0gJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nO1xuICAgICAqL1xuICAgIGdldCBiYXNlQXBpVXJsKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFQSV9VUkw7XG4gICAgfSxcblxuICAgIHNldCBiYXNlQXBpVXJsKHVybDogc3RyaW5nKSB7XG4gICAgICAgIGNvbmZpZy5BUElfVVJMID0gdXJsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2Ygd2ViIHdvcmtlcnMgaW5zdGFudGlhdGVkIG9uIGEgcGFnZSB3aXRoIEdMIEpTIG1hcHMuXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIGhhbGYgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKGNhcHBlZCBhdCA2KS5cbiAgICAgKiBNYWtlIHN1cmUgdG8gc2V0IHRoaXMgcHJvcGVydHkgYmVmb3JlIGNyZWF0aW5nIGFueSBtYXAgaW5zdGFuY2VzIGZvciBpdCB0byBoYXZlIGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gd29ya2VyQ291bnRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2Ygd29ya2VycyBjdXJyZW50bHkgY29uZmlndXJlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLndvcmtlckNvdW50ID0gMjtcbiAgICAgKi9cbiAgICBnZXQgd29ya2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFdvcmtlclBvb2wud29ya2VyQ291bnQ7XG4gICAgfSxcblxuICAgIHNldCB3b3JrZXJDb3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIFdvcmtlclBvb2wud29ya2VyQ291bnQgPSBjb3VudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIChyYXN0ZXIgdGlsZXMsIHNwcml0ZXMsIGljb25zKSB0byBsb2FkIGluIHBhcmFsbGVsLFxuICAgICAqIHdoaWNoIGFmZmVjdHMgcGVyZm9ybWFuY2UgaW4gcmFzdGVyLWhlYXZ5IG1hcHMuIDE2IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0c1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWJlciBvZiBwYXJhbGxlbCByZXF1ZXN0cyBjdXJyZW50bHkgY29uZmlndXJlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLm1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cyA9IDEwO1xuICAgICAqL1xuICAgIGdldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM7XG4gICAgfSxcblxuICAgIHNldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMobnVtUmVxdWVzdHM6IG51bWJlcikge1xuICAgICAgICBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTID0gbnVtUmVxdWVzdHM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsZWFycyBicm93c2VyIHN0b3JhZ2UgdXNlZCBieSB0aGlzIGxpYnJhcnkuIFVzaW5nIHRoaXMgbWV0aG9kIGZsdXNoZXMgdGhlIE1hcGJveCB0aWxlXG4gICAgICogY2FjaGUgdGhhdCBpcyBtYW5hZ2VkIGJ5IHRoaXMgbGlicmFyeS4gVGlsZXMgbWF5IHN0aWxsIGJlIGNhY2hlZCBieSB0aGUgYnJvd3NlclxuICAgICAqIGluIHNvbWUgY2FzZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIEFQSSBpcyBzdXBwb3J0ZWQgb24gYnJvd3NlcnMgd2hlcmUgdGhlIFtgQ2FjaGVgIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NhY2hlKVxuICAgICAqIGlzIHN1cHBvcnRlZCBhbmQgZW5hYmxlZC4gVGhpcyBpbmNsdWRlcyBhbGwgbWFqb3IgYnJvd3NlcnMgd2hlbiBwYWdlcyBhcmUgc2VydmVkIG92ZXJcbiAgICAgKiBgaHR0cHM6Ly9gLCBleGNlcHQgSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgTW9iaWxlLlxuICAgICAqXG4gICAgICogV2hlbiBjYWxsZWQgaW4gdW5zdXBwb3J0ZWQgYnJvd3NlcnMgb3IgZW52aXJvbm1lbnRzIChwcml2YXRlIG9yIGluY29nbml0byBtb2RlKSwgdGhlXG4gICAgICogY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBlcnJvciBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvbiBjbGVhclN0b3JhZ2VcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgd2l0aCBhbiBlcnJvciBhcmd1bWVudCBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBjbGVhclN0b3JhZ2UoY2FsbGJhY2s/OiAoZXJyOiA/RXJyb3IpID0+IHZvaWQpIHtcbiAgICAgICAgY2xlYXJUaWxlQ2FjaGUoY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICB3b3JrZXJVcmw6ICcnXG59O1xuXG4vL1RoaXMgZ2V0cyBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkIG91dCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbkRlYnVnLmV4dGVuZChleHBvcnRlZCwge2lzU2FmYXJpLCBnZXRQZXJmb3JtYW5jZU1ldHJpY3M6IFBlcmZvcm1hbmNlVXRpbHMuZ2V0UGVyZm9ybWFuY2VNZXRyaWNzfSk7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gYHBhY2thZ2UuanNvbmAsXG4gKiBgQ0hBTkdFTE9HLm1kYCwgYW5kIHRoZSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAqL1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBbc3VwcG9ydHMgTWFwYm94IEdMIEpTXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvbWFwYm94LWJyb3dzZXItc3VwcG9ydC8jbWFwYm94LWdsLWpzKS5cbiAqXG4gKiBAZnVuY3Rpb24gc3VwcG9ydGVkXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCxcbiAqICAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZFxuICogICBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhbiBleHBlY3RlZCAoZS5nLiBhIHNvZnR3YXJlIFdlYkdMIHJlbmRlcmVyIHdvdWxkIGJlIHVzZWQpLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zdXBwb3J0ZWQoKSAvLyA9IHRydWVcbiAqIEBzZWUgW0NoZWNrIGZvciBicm93c2VyIHN1cHBvcnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2hlY2stZm9yLXN1cHBvcnQvKVxuICovXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KS5cbiAqIE5lY2Vzc2FyeSBmb3Igc3VwcG9ydGluZyB0aGUgQXJhYmljIGFuZCBIZWJyZXcgbGFuZ3VhZ2VzLCB3aGljaCBhcmUgd3JpdHRlbiByaWdodC10by1sZWZ0LiBNYXBib3ggU3R1ZGlvIGxvYWRzIHRoaXMgcGx1Z2luIGJ5IGRlZmF1bHQuXG4gKlxuICogQGZ1bmN0aW9uIHNldFJUTFRleHRQbHVnaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5VUkwgVVJMIHBvaW50aW5nIHRvIHRoZSBNYXBib3ggUlRMIHRleHQgcGx1Z2luIHNvdXJjZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICogQHBhcmFtIHtib29sZWFufSBsYXp5IElmIHNldCB0byBgdHJ1ZWAsIG1hcGJveGdsIHdpbGwgZGVmZXIgbG9hZGluZyB0aGUgcGx1Z2luIHVudGlsIHJ0bCB0ZXh0IGlzIGVuY291bnRlcmVkLFxuICogICAgcnRsIHRleHQgd2lsbCB0aGVuIGJlIHJlbmRlcmVkIG9ubHkgYWZ0ZXIgdGhlIHBsdWdpbiBmaW5pc2hlcyBsb2FkaW5nLlxuICogQGV4YW1wbGVcbiAqIG1hcGJveGdsLnNldFJUTFRleHRQbHVnaW4oJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvbWFwYm94LWdsLXJ0bC10ZXh0L3YwLjIuMC9tYXBib3gtZ2wtcnRsLXRleHQuanMnKTtcbiAqIEBzZWUgW0FkZCBzdXBwb3J0IGZvciByaWdodC10by1sZWZ0IHNjcmlwdHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWFwYm94LWdsLXJ0bC10ZXh0LylcbiAqL1xuXG4vKipcbiAgKiBHZXRzIHRoZSBtYXAncyBbUlRMIHRleHQgcGx1Z2luXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9wbHVnaW5zLyNtYXBib3gtZ2wtcnRsLXRleHQpIHN0YXR1cy5cbiAgKiBUaGUgc3RhdHVzIGNhbiBiZSBgdW5hdmFpbGFibGVgIChpLmUuIG5vdCByZXF1ZXN0ZWQgb3IgcmVtb3ZlZCksIGBsb2FkaW5nYCwgYGxvYWRlZGAgb3IgYGVycm9yYC5cbiAgKiBJZiB0aGUgc3RhdHVzIGlzIGBsb2FkZWRgIGFuZCB0aGUgcGx1Z2luIGlzIHJlcXVlc3RlZCBhZ2FpbiwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICpcbiAgKiBAZnVuY3Rpb24gZ2V0UlRMVGV4dFBsdWdpblN0YXR1c1xuICAqIEBleGFtcGxlXG4gICogY29uc3QgcGx1Z2luU3RhdHVzID0gbWFwYm94Z2wuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cygpO1xuICAqL1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxuLy8gY2FuYXJ5IGFzc2VydDogdXNlZCB0byBjb25maXJtIHRoYXQgYXNzZXJ0cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHByb2R1Y3Rpb24gYnVpbGRcbmFzc2VydCh0cnVlLCAnY2FuYXJ5IGFzc2VydCcpO1xuIiwiLy9cbi8vIE91ciBjdXN0b20gaW50cm8gcHJvdmlkZXMgYSBzcGVjaWFsaXplZCBcImRlZmluZSgpXCIgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGVcbi8vIEFNRCBtb2R1bGVzIGJlbG93LCB0aGF0IHNldHMgdXAgdGhlIHdvcmtlciBibG9iIFVSTCBhbmQgdGhlbiBleGVjdXRlcyB0aGVcbi8vIG1haW4gbW9kdWxlLCBzdG9yaW5nIGl0cyBleHBvcnRlZCB2YWx1ZSBhcyAnbWFwYm94Z2wnXG5cbi8vIFRoZSB0aHJlZSBcImNodW5rc1wiIGltcG9ydGVkIGhlcmUgYXJlIHByb2R1Y2VkIGJ5IGEgZmlyc3QgUm9sbHVwIHBhc3MsXG4vLyB3aGljaCBvdXRwdXRzIHRoZW0gYXMgQU1EIG1vZHVsZXMuXG5cbi8vIFNoYXJlZCBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgIC8vIENvZGUgZm9yIGFsbCBjb21tb24gZGVwZW5kZW5jaWVzXG4gICAgLy8gRWFjaCBtb2R1bGUncyBleHBvcnRzIGFyZSBhdHRhY2hlZCBhdHRhY2hlZCB0byAnZXhwb3J0cycgKHdpdGhcbiAgICAvLyBuYW1lcyByZXdyaXR0ZW4gdG8gYXZvaWQgY29sbGlzaW9ucywgZXRjLilcbn0pXG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3NoYXJlZCc7XG5cbi8vIFdvcmtlciBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciB3b3JrZXIgc2NyaXB0IGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llcy5cbiAgICAvLyAgRXhwZWN0cyB0aGUgb3V0cHV0IG9mICdzaGFyZWQnIG1vZHVsZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsXG4gICAgLy8gIHNpbmNlIGFsbCByZWZlcmVuY2VzIHRvIGNvbW1vbiBkZXBzIGxvb2sgbGlrZSwgZS5nLixcbiAgICAvLyAgX19zaGFyZWRfX2pzLnNoYXBlVGV4dCgpLlxufSk7XG4qL1xuLy8gV2hlbiB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIG91ciBjdXN0b20gZGVmaW5lKCkgYWJvdmUsXG4vLyBpdCBnZXRzIHN0cmluZ2lmaWVkLCB0b2dldGhlciB3aXRoIHRoZSBzaGFyZWQgd3JhcHBlciAodXNpbmdcbi8vIEZ1bmN0aW9uLnRvU3RyaW5nKCkpLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgY29kZSBpcyBtYWRlIGludG8gYVxuLy8gQmxvYiBVUkwgdGhhdCBnZXRzIHVzZWQgYnkgdGhlIG1haW4gbW9kdWxlIHRvIGNyZWF0ZSB0aGUgd2ViIHdvcmtlcnMuXG5pbXBvcnQgJy4vYnVpbGQvbWFwYm94Z2wvd29ya2VyJztcblxuLy8gTWFpbiBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzXG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciBtYWluIEdMIEpTIG1vZHVsZSBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbiAgICAvL1xuICAgIC8vICBSZXR1cm5zIHRoZSBhY3R1YWwgbWFwYm94Z2wgKGkuZS4gc3JjL2luZGV4LmpzKVxufSk7XG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgbWFwYm94Z2w7XG4iXSwibmFtZXMiOlsiYXJndW1lbnRzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJsZXQiLCJjb25zdCIsIlVuaXRCZXppZXIiLCJ3aW5kb3ciLCJleHBvcnRlZCIsImJyb3dzZXIiLCJ3ZWJwU3VwcG9ydGVkIiwic2RrVmVyc2lvbiIsInRoaXMiLCJzdXBlciIsImFzc2VydCIsImxpc3RlbmVyIiwicGFyc2VDU1NDb2xvciIsInRvU3RyaW5nIiwidHlwZSIsInR5cGVzIiwiYXJnIiwidmFsdWVUb1N0cmluZyIsImkiLCJleHBlY3RlZCIsInBhcnNlZCIsInBvaW50IiwibGluZSIsImVycm9yIiwiYXJyYXkiLCJpbnRlcnBvbGF0ZU51bWJlciIsIm91dHB1dEluZGV4IiwiaXNDb21wYXJhYmxlVHlwZSIsImx0IiwicnQiLCJ0eXBlVG9TdHJpbmciLCJleHRlbmQiLCJzdG9wIiwiaW50ZXJwb2xhdGlvblR5cGUiLCJkZWZpbml0aW9ucyIsImlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50IiwiaXNGZWF0dXJlQ29uc3RhbnQiLCJpc0NvbnN0YW50LmlzRmVhdHVyZUNvbnN0YW50IiwiaXNDb25zdGFudC5pc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQiLCJ2YWxpZGF0ZVNwZWMiLCJlbGVtZW50U3BlY0tleSIsImxhdGVzdFN0eWxlU3BlYyIsInZhbGlkYXRlU291cmNlIiwidmFsaWRhdGVMaWdodCIsInZhbGlkYXRlRmlsdGVyIiwidmFsaWRhdGVQYWludFByb3BlcnR5IiwidmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSIsIkdyaWQiLCJuYW1lIiwiaXNDaGFyIiwicnRsVGV4dFBsdWdpbiIsInByb3BlcnR5Iiwic3R5bGVTcGVjIiwiUG9pbnQiLCJsYXlvdXQiLCJtdXJtdXIzIiwibXVybXVyMiIsIlN0cnVjdEFycmF5TGF5b3V0IiwiUGF0dGVybkxheW91dEFycmF5IiwiQ2lyY2xlTGF5b3V0QXJyYXkiLCJUcmlhbmdsZUluZGV4QXJyYXkiLCJsYXlvdXRBdHRyaWJ1dGVzIiwiYnVja2V0RmVhdHVyZSIsImZlYXR1cmUiLCJpbmRleCIsInNvdXJjZUxheWVySW5kZXgiLCJwYWludCIsImdsTWF0cml4LkFSUkFZX1RZUEUiLCJjbG9uZSIsImVxdWFscyIsImdsTWF0cml4LkVQU0lMT04iLCJjcmVhdGUiLCJjb3B5IiwiaWRlbnRpdHkiLCJmcm9tVmFsdWVzIiwic2V0IiwiaW52ZXJ0IiwiZGV0ZXJtaW5hbnQiLCJtdWx0aXBseSIsInJvdGF0ZSIsInNjYWxlIiwidHJhbnNsYXRlIiwiZnJvbVJvdGF0aW9uIiwiZnJvbVNjYWxpbmciLCJzdHIiLCJmcm9iIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseVNjYWxhciIsIm11bHRpcGx5U2NhbGFyQW5kQWRkIiwiZXhhY3RFcXVhbHMiLCJtdWwiLCJzdWIiLCJ0cmFuc3Bvc2UiLCJhZGpvaW50IiwiZnJvbVRyYW5zbGF0aW9uIiwiZnJvbVF1YXQiLCJiZXppZXIiLCJnbE1hdHJpeC5SQU5ET00iLCJyb3RhdGVYIiwicm90YXRlWSIsInJvdGF0ZVoiLCJkaXZpZGUiLCJjZWlsIiwiZmxvb3IiLCJtaW4iLCJtYXgiLCJyb3VuZCIsInNjYWxlQW5kQWRkIiwiZGlzdGFuY2UiLCJzcXVhcmVkRGlzdGFuY2UiLCJsZW5ndGgiLCJzcXVhcmVkTGVuZ3RoIiwibmVnYXRlIiwiaW52ZXJzZSIsIm5vcm1hbGl6ZSIsImRvdCIsImNyb3NzIiwibGVycCIsInJhbmRvbSIsInRyYW5zZm9ybU1hdDQiLCJ0cmFuc2Zvcm1RdWF0IiwiemVybyIsImRpdiIsImRpc3QiLCJzcXJEaXN0IiwibGVuIiwic3FyTGVuIiwiZm9yRWFjaCIsInZlYzQuY2xvbmUiLCJ2ZWM0LmZyb21WYWx1ZXMiLCJ2ZWM0LmNvcHkiLCJ2ZWM0LnNldCIsInZlYzQuYWRkIiwidmVjNC5zY2FsZSIsInZlYzQuZG90IiwidmVjNC5sZXJwIiwidmVjNC5sZW5ndGgiLCJ2ZWM0LnNxdWFyZWRMZW5ndGgiLCJ2ZWM0Lm5vcm1hbGl6ZSIsInZlYzQuZXhhY3RFcXVhbHMiLCJ2ZWM0LmVxdWFscyIsInZlYzMuY3JlYXRlIiwidmVjMy5mcm9tVmFsdWVzIiwidmVjMy5kb3QiLCJ2ZWMzLmNyb3NzIiwidmVjMy5sZW4iLCJ2ZWMzLm5vcm1hbGl6ZSIsIm1hdDMuY3JlYXRlIiwiZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iLCJmcm9tTWF0NCIsInF1YXQuY3JlYXRlIiwibWF0NC5nZXRSb3RhdGlvbiIsIm1hdDQuZ2V0VHJhbnNsYXRpb24iLCJxdWF0LmNvcHkiLCJnZXRUcmFuc2xhdGlvbiIsInF1YXQucm90YXRlWCIsInF1YXQucm90YXRlWSIsInF1YXQucm90YXRlWiIsInF1YXQuZG90IiwiY29uanVnYXRlIiwicXVhdC5sZW5ndGgiLCJxdWF0LnNxdWFyZWRMZW5ndGgiLCJ0cmFuc2Zvcm1NYXQzIiwiYW5nbGUiLCJ2ZWM0LnRyYW5zZm9ybU1hdDQiLCJwcm9wZXJ0aWVzIiwic3dhcCIsIkZpbGxMYXlvdXRBcnJheSIsIkxpbmVJbmRleEFycmF5IiwicmluZyIsImVhcmN1dCIsImNsYXNzaWZ5UmluZ3MiLCJzaWduZWRBcmVhIiwiVmVjdG9yVGlsZUZlYXR1cmUiLCJWZWN0b3JUaWxlTGF5ZXIiLCJyZXF1aXJlJCQyIiwibXZ0IiwiRUFSQ1VUX01BWF9SSU5HUyIsIkZpbGxFeHRydXNpb25MYXlvdXRBcnJheSIsInAiLCJwcm9qZWN0UXVlcnlHZW9tZXRyeSIsInZlY3RvclRpbGVGZWF0dXJlVHlwZXMiLCJMaW5lTGF5b3V0QXJyYXkiLCJvZmZzZXQiLCJQcm90b2J1ZiIsImJveCIsImlkIiwic3JjIiwiYmluIiwidyIsImgiLCJ0YWdnZWRMaW5lIiwiYWxpZ24iLCJpbnRlcnBvbGF0ZSIsImJvcmRlciIsImRlZmF1bHRDb21wYXJlIiwiUXVldWUiLCJtaW5ab29tIiwibWF4Wm9vbSIsInNoYXBpbmciLCJhbmNob3IiLCJhZGRWZXJ0ZXgiLCJTeW1ib2xMYXlvdXRBcnJheSIsIlN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSIsIlN5bWJvbE9wYWNpdHlBcnJheSIsInVwbG9hZCIsIkNvbGxpc2lvblZlcnRleEFycmF5IiwiZ2xvYmFsUlRMVGV4dFBsdWdpbiIsInRyYW5zZm9ybVRleHQiLCJyZXNvbHZlZFRva2VucyIsImluZGV4QXJyYXkiLCJDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSIsIkNvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5IiwiayIsImNpcmNsZSIsImhlYXRtYXAiLCJoaWxsc2hhZGUiLCJmaWxsIiwiZmlsbEV4dHJ1c2lvbiIsInN5bWJvbCIsImJhY2tncm91bmQiLCJyYXN0ZXIiLCJJbWFnZURhdGEiLCJJbWFnZUJpdG1hcCIsImNhbGxiYWNrIiwiZGVzZXJpYWxpemUiLCJwcm90b3R5cGVBY2Nlc3NvcnMiLCJzb3VyY2VMYXllciIsImxheWVyU3RhdGVzIiwidnQiLCJmZWF0dXJlRmlsdGVyIiwiR2VvSlNPTkZlYXR1cmUiLCJkZXNlcmlhbGl6ZUJ1Y2tldCIsImJ1Y2tldCIsInJlZlByb3BlcnRpZXMiLCJjcmVhdGVTdHlsZUxheWVyIiwidmFsdWVzIiwibGF5ZXJDb25maWdzIiwibGF5ZXIiLCJwb3RwYWNrIiwiQWxwaGFJbWFnZSIsInN0YWNrIiwiZ2x5cGhzIiwicmVnaXN0ZXIiLCJPdmVyc2NhbGVkVGlsZUlEIiwiQ29sbGlzaW9uQm94QXJyYXkiLCJEaWN0aW9uYXJ5Q29kZXIiLCJGZWF0dXJlSW5kZXgiLCJ3YXJuT25jZSIsIm1hcE9iamVjdCIsIkltYWdlQXRsYXMiLCJTeW1ib2xCdWNrZXQiLCJwZXJmb3JtU3ltYm9sTGF5b3V0IiwiTGluZUJ1Y2tldCIsIkZpbGxCdWNrZXQiLCJGaWxsRXh0cnVzaW9uQnVja2V0IiwiRXZhbHVhdGlvblBhcmFtZXRlcnMiLCJnZXRBcnJheUJ1ZmZlciIsIlJlcXVlc3RQZXJmb3JtYW5jZSIsIkRFTURhdGEiLCJSR0JBSW1hZ2UiLCJFWFRFTlQiLCJnZW9tZXRyeSIsIkdlb0pTT05XcmFwcGVyIiwiRmVhdHVyZVdyYXBwZXIiLCJQYmYiLCJzb3J0IiwicmV3aW5kIiwidHJhbnNmb3JtIiwidnRwYmYiLCJnZXRKU09OIiwiY3JlYXRlRXhwcmVzc2lvbiIsIkFjdG9yIiwiZW5mb3JjZUNhY2hlU2l6ZUxpbWl0Iiwic2VsZiIsIm9wdGlvbnMiLCJSZXNvdXJjZVR5cGUiLCJnZXRJbWFnZSIsIkVycm9yRXZlbnQiLCJFdmVudCIsIkltYWdlUG9zaXRpb24iLCJUZXh0dXJlIiwiRXZlbnRlZCIsInBhcnNlR2x5cGhQQkYiLCJhc3luY0FsbCIsIlRpbnlTREYiLCJzcGhlcmljYWxUb0NhcnRlc2lhbiIsIlByb3BlcnRpZXMiLCJEYXRhQ29uc3RhbnRQcm9wZXJ0eSIsIlRyYW5zaXRpb25hYmxlIiwiZW5kc1dpdGgiLCJlbWl0VmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRlU3R5bGUiLCJ1bmlxdWVJZCIsInBpY2siLCJMbmdMYXRCb3VuZHMiLCJtZXJjYXRvclhmcm9tTG5nIiwibWVyY2F0b3JZZnJvbUxhdCIsInBvc3RUdXJuc3RpbGVFdmVudCIsInBvc3RNYXBMb2FkRXZlbnQiLCJjYWNoZUVudHJ5UG9zc2libHlBZGRlZCIsIm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsImNyZWF0ZUxheW91dCIsIk1lcmNhdG9yQ29vcmRpbmF0ZSIsIlJhc3RlckJvdW5kc0FycmF5IiwiU2VnbWVudFZlY3RvciIsIkNhbm9uaWNhbFRpbGVJRCIsImdldFZpZGVvIiwiVmFsaWRhdGlvbkVycm9yIiwidmVjdG9yIiwicmFzdGVyRGVtIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiLCJjYW52YXMiLCJiaW5kQWxsIiwibWF0NC5pZGVudGl0eSIsIm1hdDQudHJhbnNsYXRlIiwibWF0NC5zY2FsZSIsIm1hdDQubXVsdGlwbHkiLCJDb2xvciIsIkFMV0FZUyIsImRlZXBFcXVhbCIsImNyZWF0ZVNvdXJjZSIsIlNvdXJjZUZlYXR1cmVTdGF0ZSIsInRpbGUiLCJrZXlzRGlmZmVyZW5jZSIsInRpbGVJRCIsIlRpbGUiLCJtYXBib3hnbCIsImxhdGVzdCIsImlzRXF1YWwiLCJtYXQ0LmNyZWF0ZSIsIm1hdDQucm90YXRlWiIsIm1hdDQuY2xvbmUiLCJzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20iLCJXcml0aW5nTW9kZSIsInN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZSIsIm9yaWVudGF0aW9uQ2hhbmdlIiwiYWRkRHluYW1pY0F0dHJpYnV0ZXMiLCJwcm9qZWN0aW9uLnByb2plY3QiLCJwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgiLCJpbnRlcnNlY3Rpb25UZXN0cy5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24iLCJwcm9qZWN0aW9uLnh5VHJhbnNmb3JtTWF0NCIsImdldEFuY2hvckFsaWdubWVudCIsImV2YWx1YXRlVmFyaWFibGVPZmZzZXQiLCJwcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgiLCJwbGFjZUhvcml6b250YWwiLCJwbGFjZVZlcnRpY2FsIiwiZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbiIsImNyb3NzVGlsZUlEIiwicHJldk9wYWNpdHkiLCJwYWNrZWRPcGFjaXR5IiwiaG9yaXpvbnRhbE9wYWNpdHkiLCJ2ZXJ0aWNhbE9wYWNpdHkiLCJzIiwic3ltYm9sSW5zdGFuY2UiLCJfZW1pdFZhbGlkYXRpb25FcnJvcnMiLCJkaWZmT3BlcmF0aW9ucyIsImdldFdvcmtlclBvb2wiLCJab29tSGlzdG9yeSIsImdldFJlZmVycmVyIiwidHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudCIsImlzTWFwYm94VVJMIiwiZGVyZWYiLCJ2YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIiLCJmaWx0ZXJPYmplY3QiLCJsIiwibGF5ZXJJZCIsInNvdXJjZVJlc3VsdCIsImxheWVyRmVhdHVyZXMiLCJmZWF0dXJlV3JhcHBlciIsInJ0bFRleHRQbHVnaW5FdmVudGVkIiwibGF5ZXJJRCIsInN0eWxlTGF5ZXIiLCJtYWtlUmVxdWVzdCIsImdldFNvdXJjZVR5cGUiLCJzZXRTb3VyY2VUeXBlIiwicmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSIsInZlcnRleEJ1ZmZlciIsIlByb2dyYW0iLCJVbmlmb3JtTWF0cml4NGYiLCJVbmlmb3JtM2YiLCJVbmlmb3JtMWYiLCJVbmlmb3JtMWkiLCJVbmlmb3JtMmYiLCJtYXQzLmZyb21Sb3RhdGlvbiIsInZlYzMudHJhbnNmb3JtTWF0MyIsIlVuaWZvcm1Db2xvciIsIm1hdDQub3J0aG8iLCJVbmlmb3JtNGYiLCJzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgiLCJzeW1ib2xTaXplIiwic3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzIiwic3ltYm9sUHJvamVjdGlvbi5wcm9qZWN0IiwiT05FX0VNIiwic2hpZnQiLCJnIiwic3ltYm9sUHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4Iiwic3ltYm9sUHJvamVjdGlvbi51cGRhdGVMaW5lTGFiZWxzIiwic3RhdGUiLCJ1bmlmb3JtVmFsdWVzIiwicHJvZ3JhbSIsImxheW91dFZlcnRleEJ1ZmZlciIsImluZGV4QnVmZmVyIiwicHJvZ3JhbUNvbmZpZ3VyYXRpb24iLCJkZXB0aE1vZGUiLCJjbGFtcCIsImRyYXciLCJkZWJ1ZyIsImN1c3RvbSIsIlBvc0FycmF5IiwiTGluZVN0cmlwSW5kZXhBcnJheSIsInNvdXJjZUNhY2hlIiwiY29vcmRzIiwidmVjMy5zdWIiLCJ2ZWMzLnNjYWxlIiwidmVjMy5hZGQiLCJ2ZWMzLmNsb25lIiwibnVtYmVyIiwiTG5nTGF0Iiwid3JhcCIsIm1hdDIuY3JlYXRlIiwibWF0Mi5yb3RhdGUiLCJVbndyYXBwZWRUaWxlSUQiLCJ2ZWMyLnNxckxlbiIsIm1hdDQucGVyc3BlY3RpdmUiLCJtYXQ0LnJvdGF0ZVgiLCJtZXJjYXRvclpmcm9tQWx0aXR1ZGUiLCJtYXQ0LmludmVydCIsIl9lYXNlIiwiaW5lcnRpYUxpbmVhcml0eSIsImluZXJ0aWFFYXNpbmciLCJpbmVydGlhRGVjZWxlcmF0aW9uIiwiaW5lcnRpYU1heFNwZWVkIiwic2Nyb2xsWm9vbSIsImJveFpvb20iLCJkcmFnUm90YXRlIiwiZHJhZ1BhbiIsImtleWJvYXJkIiwiZG91YmxlQ2xpY2tab29tIiwidG91Y2hab29tUm90YXRlIiwiZGVmYXVsdEVhc2luZyIsImNvbmZpZyIsIlBlcmZvcm1hbmNlVXRpbHMiLCJQZXJmb3JtYW5jZU1hcmtlcnMiLCJSZXF1ZXN0TWFuYWdlciIsIm1vdXNlaW4iLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIndpZHRoIiwiaGVpZ2h0IiwiZGF0YSIsImlzU3VwcG9ydGVkIiwic2V0Q2FjaGVMaW1pdHMiLCJ2ZXJzaW9uIiwiZGVmYXVsdE9wdGlvbnMiLCJ0aXRsZSIsInN1cHBvcnRlZCIsInNldFJUTFRleHRQbHVnaW4iLCJnZXRSVExUZXh0UGx1Z2luU3RhdHVzIiwiY2xlYXJUaWxlQ2FjaGUiLCJpc1NhZmFyaSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsWUFBWSxDQUFDOztBQUViLElBQUkscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3pELElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ3JELElBQUksZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQzs7QUFFN0QsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0NBQ3RCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO0VBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsdURBQXVELENBQUMsQ0FBQztFQUM3RTs7Q0FFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNuQjs7QUFFRCxTQUFTLGVBQWUsR0FBRztDQUMxQixJQUFJO0VBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7R0FDbkIsT0FBTyxLQUFLLENBQUM7R0FDYjs7Ozs7RUFLRCxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENB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LENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7SUFFbEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7SUFFbEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7O0lBRTVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3RELENBQUM7O0FBRUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDNUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUs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QUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXJELFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFwRSxVQUFVLE1BQU0sU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7SUFRbkUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXRELEdBQUcsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Ozs7OztJQVFyRCxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7Ozs7O0lBU3hELFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7SUFPeEUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7OztJQVN6RCxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXBELElBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTs7Ozs7OztJQU9wRCxLQUFLLElBQUksV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Ozs7Ozs7O0lBUXJELEdBQUcsRUFBRSxXQUFXO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2RDs7Ozs7Ozs7SUFRRCxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUU7UUFDcEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO2VBQ2xCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM3Qjs7Ozs7OztJQU9ELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckM7Ozs7Ozs7OztJQVNELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDNUI7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQzs7Ozs7OztJQU9ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pEOzs7Ozs7O0lBT0QsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0Qzs7Ozs7Ozs7O0lBU0QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLO1lBQ2IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEM7O0lBRUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdB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LENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQy9CLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25ELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNqRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ25ELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN2RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQzs7QUFFekQsU0FBUyxjQUFjLENBQUMs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TyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0NBQ25HOztBQUVELFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQzNCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN4RTs7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckg7OztBQUdELFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUN0Q0QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25CLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlDQyxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO1lBQzFELElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBQztTQUNuRTtLQUNKO0lBQ0QsT0FBTyxNQUFNLENBQUM7Q0FDakI7O0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQzFDLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLGtCQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztLQUMzRDtJQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FDMUM7OztBQUdELFVBQVUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTs7SUFFL0JDLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekJBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7SUFDL0QsT0FBTyxLQUFLLENBQUM7Q0FDaEI7O0FBRUQsU0FBUyxpQkFBaUIsQ0FB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QUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDeEMsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzQyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFOztBQUUzQyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2hFLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEUsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENB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LENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUNyRDs7dURBRUQsb0NBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtRQUMzTkEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNyRzs7dURBRUQsNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDbE9BLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEJBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7RUEzQ2tELGNBNEN0RDs7QUFFRCx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN4RSxRQUFRLENBQUMsMENBQTBDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFXL0YsSUFBTSw4QkFBOEI7Ozs7Ozs7Ozs2Q0FPaEMsMENBQWdCO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDckQ7OzZDQUVELG9DQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVU7UUFDaFZBLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDbEo7OzZDQUVELDRCQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO1FBQ3ZWQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENB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LEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksVUFBVSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOztDQUVwRixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFbEYsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNQLEVBQUUsQ0FBQyxDQUFDO0dBQ0w7O0VBRUQsUUFBUSxDQUFDO0VBQ1QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztFQUNsRCxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0VBQ2pELEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1VBQ2hDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDeEY7O0VBRUQsQ0FBQyxJQUFJLENBQUMsS0FB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Q0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFB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LENBQUM7Q0FDM0M7Ozs7Ozs7OztBQVNELFNBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbEI7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6RTs7Ozs7Ozs7O0FBU00sU0FBU0UsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN6Vjs7Ozs7Ozs7OztBQVVELFNBQWdCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFD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LEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3JDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRTtFQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNsQzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFH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Ozs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsY0FBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3JCLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3BHOzs7Ozs7OztBQVFNLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFEOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsc0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0c7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbmdCOzs7Ozs7QUFNTSxJQUFJcUIsS0FBRyxHQUFHYixVQUFRLENBQUM7Ozs7OztBQU0xQixJQUFXYyxLQUFHLEdBQUdMLFVBQVE7Ozs7Ozs7Ozs7Ozs7QUN6ZHpCLFNBQWdCaEIsUUFBTSxHQUFHO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXJDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUNaOztFQUVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxPQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7OztBQWdCRCxTQUFnQkUsWUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3RFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkQsU0FBZ0JRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTs7RUFFaEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUNkLE1BQU07SUFDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDZjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztF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O01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN2Rzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JGLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7OztBQVVELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBU2UsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTYixjQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNyQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMs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Q1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxH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QUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3JCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQzdJOzs7Ozs7OztBQVFNLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxzQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM5Sjs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsd0I7Ozs7OztBQU1NLElBQUlxQixLQUFHLEdBQUdiLFVBQVEsQ0FBQzs7Ozs7O0FBTTFCLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7Ozs7Ozs7Ozs7OztBQzl2QnpCLFNBQWdCaEIsUUFBTSxHQUFHO0VBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRXRDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUNiOztFQUVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7RUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSUQsVUFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJNLFNBQVNFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDekcsSUFBSSxHQUFHLEdBQUcsSUFBSVAsVUFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JNLFNBQVNRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNGLFVBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTs7RUFFaEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDZixNQUFNO0lBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNqQjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDUixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztFQUNwRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTa0IsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDeEcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4RyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUN4RyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNqQixhQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2hDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNoQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0VBRWhDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDOUU7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRWhCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ25ELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDcEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0VBQ3BELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkcsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7RUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNuRCxNQUFNO0lBQ0wsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUMvQzs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JELE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCRCxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNYLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN2QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ2xCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDbEIsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7RUFFbEIsSUFBSSxHQUFHLEdBQUdULE9BQWdCLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztFQUVaLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUVwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7RUFFNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDakI7O0VBRUQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2pCOzs7RUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVN5QixpQkFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTWixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7Ozs7QUFjRCxTQUFnQkQsY0FBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQzNDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNYLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O0VBRVosSUFBSSxHQUFHLEdBQUdaLE9BQWdCLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUM7R0FDYjs7RUFFRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0VBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUVWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7O0FBYU0sU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUN0QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxTQUFnQix1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7RUFFakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDaEMsSUFBSSxXQUFXLEdBQUcsSUFBSUgsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM3QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0VBRXRELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtJQUNqQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDekUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3pFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztHQUMxRSxNQUFNO0lBQ0wsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFH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QyxHQUFHLEdBQUcsQ0FBQztFQUN4QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN4QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7RUFFVixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7SUFDYixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0dBQzVCLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7SUFDckMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0dBQzVCLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0lBQ3RCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztHQUM1QixNQUFNO0lBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0dBQ25C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QUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDaEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztFQUNoQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0VBQzFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUMxQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzFELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDMUQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMzRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVNLFNBQVM2QixVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdB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QUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7RUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7OztBQVdELFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7RUFDN0MsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztN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RUFDckIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUNyUDs7Ozs7Ozs7QUFRTSxTQUFTQyxNQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ25IOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsc0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDalM7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7TUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNYLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FB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RyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JHLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVCxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCRSxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDNUI7Ozs7Ozs7OztBQVNNLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5Qjs7Ozs7Ozs7QUFRTSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM5Qjs7Ozs7Ozs7O0FBU00sU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRWhDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTs7SUFFWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDMUI7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hEOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7QUFhTSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMxQyxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM3QyxJQUFJLE9BQU8sR0FBRyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN6QyxJQUFJLE9BQU8sR0FBRyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0VBQzNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0VBQzNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztFQUV2QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7RUFHYixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3JCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3JCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7O0VBRTFCLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDMUIsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDMUIsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQzs7RUFFL0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUNoQixHQUFHLElBQUksRUFBRSxDQUFDO0VBQ1YsR0FBRyxJQUFJLEVBQUUsQ0FBQztFQUNWLEdBQUcsSUFBSSxFQUFFLENBQUM7O0VBRVYsSUFBSSxJQUFJLENBQUMsQ0FBQztFQUNWLElBQUksSUFBSSxDQUFDLENBQUM7RUFDVixJQUFJLElBQUksQ0FBQyxDQUFDOztFQUVWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7RUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO01BQ04sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7RUFFWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO01BQ04sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7RUFFWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO01BQ04sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7RUFFWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMxQixJQUFJLEtBQUssR0FBRzNCLFlBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLElBQUksS0FBSyxHQUFHQSxZQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3hCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDeEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzs7RUFFL0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDO0dBQ1YsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUN4QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7R0FDaEIsTUFBTTtJQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztHQUMxQjtDQUNGOzs7Ozs7OztBQVFNLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7OztBQVFNLFNBQVNVLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDekQ7Ozs7Ozs7OztBQVNNLFNBQVNNLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEQ7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcs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Q1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCVCxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCd0IsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7OztBQVNNLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0I0QixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7RUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxVQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvQjs7Ozs7Ozs7O0FBU00sU0FBU0MsaUJBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RDOzs7Ozs7OztBQVFNLFNBQVNDLFFBQU0sQ0FBQyxDQUFDLEVBQUU7RUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQy9COzs7Ozs7OztBQVFNLFNBQVNDLGVBQWEsQ0FBQyxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RDOzs7Ozs7Ozs7QUFTTSxTQUFTQyxRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztFQUV4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDMUI7O0VBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOzs7Ozs7Ozs7OztBQVdELFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsQyxPQUFPLEdBQUcsQ0FBQztDQUNaO0FBQ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQkMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDakMsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7Ozs7RUFJckIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDbkIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDOztFQUVYLEdBQUc7SUFDRCxFQUFFLEdBQUdyQixNQUFlLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0dBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTs7RUFFbEIsR0FBRztJQUNELEVBQUUsR0FBR0EsTUFBZSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztHQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7O0VBRWxCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDeEIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCc0IsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWQsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7RUFFbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtFQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTdEMsS0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ3ZFOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekU7Ozs7Ozs7OztBQVNNLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUks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LENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCcUIsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLEdBQUcsSUFBSSxHQUFHLENBQUM7RUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNsQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzNCLE9BQU8sR0FB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QUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU3RCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEQsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztFQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0VBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVU0sU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7OztBQWFNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztFQUcvQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQyxJQUFJLEtBQUssQ0FBQzs7RUFFVixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUU7O0lBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7O0lBRXBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0dBQ2hDLE1BQU07O0lBRUwsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7SUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztJQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFD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QUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7R0FDNUMsQ0FBQztDQUNILEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwckJILFNBQWdCNUMsUUFBTSxHQUFHO0VBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRXBDLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDWDs7RUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtFQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2IsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7OztBQWdCTSxTQUFTTyxZQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUN6RCxJQUFJLEVBQUUsR0FBRyxJQUFJUCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsT0FBTyxFQUFFLENBQUM7Q0FDWDs7Ozs7Ozs7Ozs7Ozs7O0FBZU0sU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDeEUsSUFBSSxFQUFFLEdBQUcsSUFBSUEsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1gsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7TUFDYixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztFQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxPQUFPLEVBQUUsQ0FBQztDQUNYOzs7Ozs7Ozs7OztBQVdELFNBQWdCa0YseUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDakQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxTQUFTdEQsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFH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QUksT0FBTyxHQUFHQSxNQUFTLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRTSxTQUFTQyxnQkFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFF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RyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoRHlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNuRCxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaER5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDbkQsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0VBQ25DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUMzQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDM0MsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzNDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hEeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1osRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7Ozs7QUFXRCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7O0VBRWxELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR3hGLE9BQWdCLEVBQUU7SUFDcEMsT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUNyQjs7RUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDaEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ25ELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7O0FBV0QsU0FBZ0JjLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JSLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDdkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUN2RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3ZHLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7OztBQU1NLElBQUlhLEtBQUcsR0FBR2IsVUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVcxQixTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVTSxJQUFJb0MsS0FBRyxHQUFHMkMsS0FBUSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZMUIsU0FBZ0J6QyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJRixLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFD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OztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7O0FBUU0sU0FBUzVCLEtBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQ2hJOzs7Ozs7Ozs7QUFTTSxTQUFTTSxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUM3STs7Ozs7Ozs7O0FBU00sU0FBU3JCLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFF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QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7QUFTTSxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNaOzs7Ozs7Ozs7O0FBVUQsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7QUFVRCxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7O0FBU00sU0FBU0MsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7Ozs7OztBQVVELFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFD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Qzs7UUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ3RDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsSUFBSSxHQUFHLENBQUMsR0FBQztTQUMxQjs7O1FBR0QsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDN0M7O0lBRUQsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRTdELE9BQU8sU0FBUyxDQUFDO0NBQ3BCOzs7QUFHRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO0lBQ2xELElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQzs7SUFFWixJQUFJLFNBQVMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDdkQsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdB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R0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHMUUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7UUFDaEQsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRXJELElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLO1FBQ2IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7OztJQUdsQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJ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RyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ2pFLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBQztRQUNyQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUNkLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTs7SUFFbEIsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7QUFJRCxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUk7UUFDWCxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7SUFFaEIsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzs7SUFFWCxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNiLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDOztJQUViLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2IsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7O0lBRWIsRUFBRSxDQUFDLElBQUks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Q0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUJBLElBQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUJBLElBQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDM0JBLElBQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7O0lBRTNCLEtBQUssc0JBQVcsdUNBQVEsRUFBRTtRQUFyQkEsSUFBTTs7UUFDUEEsSUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCQSxJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxrQkFBVywwQkFBQyxFQUFFO1lBQWRBLElBQU07O1lBQ1BBLElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZEEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFZEEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2Q0EsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2Q0EsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2Q0EsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFF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QUFRLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUV2QixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsT0FBTyxDQUFDLENBQUM7S0FDWjs7SUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUNqQ0EsSUFBTSxLQUFLLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxRQUFVLElBQUksVUFBSSxLQUFLLENBQUMsRUFBQyxVQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUc7S0FDMUM7O0lBRUQsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDQyxJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUJBLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDOUJBLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7O1FBRTNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDUCxTQUFTO1NBQ1o7O1FBRURBLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQzlCLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFeEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTs7WUFFckdBLElBQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pEQSxJQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRXhFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUU1QixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxNQUFNLENBQUM7O1NBRTVDLE1BQU0sSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFOztZQUU5QixjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzs7U0FFM0MsTUFBTSxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUU7O1lBRTlCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDOztTQUUxQyxNQUFNOztZQUVILEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNQLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7O0lBRUQsT0FBTyxjQUFjLENBQUMsTUFBTSxXQUFFLENBQUMsRUFBRSxTQUFHLENBQUMsQ0FBQyxXQUFRLENBQUMsQ0FBQztDQUNuRDs7OztBQzNFRCxJQUFhLHdCQUF3QixHQUFHO0lBQ3BDLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEdBQUc7SUFDUixHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FB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QUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEdBQUMsR0FBRztJQUM3RyxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEdBQUMsR0FBRztJQUM3RyxnQkFBZ0IsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEdBQUMsS0FBSztJQUM3RyxpQkFBaUIsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEdBQUMsSUFBSTtJQUM3RyxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEdBQUMsR0FBRztJQUM3RyxtQkFBbUIsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEdBQUMsRUFBRTtJQUM3RyxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEdBQUMsR0FBRztJQUM3RyxtQkFBbUIsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEdBQUMsRUFBRTs7SUFFN0csZUFBZSxFQUFFLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQjtJQUNELGlCQUFpQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjtJQUNELGtCQUFrQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMzQjtJQUNELGlCQUFpQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjtJQUNELGtCQUFrQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMzQjtJQUNELGdCQUFnQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUNELGlCQUFpQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjtJQUNELGdCQUFnQixFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUNELGVBQWUsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEI7SUFDRCxnQkFBZ0IsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekI7SUFDRCxpQkFBaUIsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM1QztDQUNKLENBQUM7O0FBRUYsU0FBUyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRztRQUNYLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRVQsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7SUFDN0UsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxD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QUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUM7Q0FDbkM7O0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7O0lBRTdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87SUFDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3JDOztBQUVELFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDaEQsSUFBSSxRQUFRO1FBQ1IsR0FBRyxJQUFJLE1BQU0sR0FBRyxDQUFDO1FBQ2pCLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQztRQUNuQixHQUFHLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQztDQUNwRjs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSztBQUMxRyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENB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LENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3hCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckYsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQixFQUFFLEdBQUcsSUFBSUEsYUFBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JGOztZQUVELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzFCLFNBQVM7YUFDWixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25CLEVB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LEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzNCeU0sV0FBVyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDOUtBLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDdExBLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7VUFDdExBLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdB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QUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVoRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25FOztJQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxJ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SyxFQUFFLEtBQUssRUFBRTtJQUN0RSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksUUFBUSxJQUFFLFNBQU87O0lBRXJDdlEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQzs7SUFFOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUUvQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDMUQ7O0FBRUQsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7O0lBRTlDLE9BQU8sS0FBSyxHQUFHLElBQUksRUFBRTtRQUNqQixJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ3BCQSxJQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQkEsSUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDdkJBLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEJBLElBQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcENBLElBQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRUEsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvREEsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsRDs7UUFFREEsSUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDOUJELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNiQSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7O1FBRWQsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBQzs7UUFFcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1YsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxDQUFDO1lB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RCxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7O0lBRXBFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDckQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7O0lBRWQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7O1FBRW5CLElBQUksWUFBWSxJQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENB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S0FBSyxFQUFFdkUsR0FBQyxFQUFFLE1BQU0sRUFBRUMsR0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBR3RFc0UscUJBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFdEUsR0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELEdBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRnVFLHFCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHdEUsR0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELEdBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRnVFLHFCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUV2RSxHQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUVDLEdBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakZzRSxxQkFBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHdkUsR0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUVDLEdBQUMsQ0FBQyxDQUFDLENB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QUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZGOztJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFMUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pHOztJQUVELE9BQU8sWUFBWSxDQUFDO0NBQ3ZCLENBQUM7OztBQUdGLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7S0FDSjtJQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5QjtRQUNELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QztLQUNKO0NBQ0o7OztBQUdELFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7SUFFWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxD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QUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsSUFBSSxDQUFDQSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENB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 diff --git a/app/assets/stylesheets/mapbox-gl.scss b/app/assets/stylesheets/mapbox-gl.scss index ab7a2d4..9e698e1 100644 --- a/app/assets/stylesheets/mapbox-gl.scss +++ b/app/assets/stylesheets/mapbox-gl.scss @@ -3,12 +3,17 @@ overflow: hidden; position: relative; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - text-align: left; +} - &:-webkit-full-screen { - width: 100%; - height: 100%; - } +.mapboxgl-canvas { + position: absolute; + left: 0; + top: 0; +} + +.mapboxgl-map:-webkit-full-screen { + width: 100%; + height: 100%; } .mapboxgl-canary { diff --git a/lib/mapbox-gl/rails/version.rb b/lib/mapbox-gl/rails/version.rb index 19c448e..405c5b3 100644 --- a/lib/mapbox-gl/rails/version.rb +++ b/lib/mapbox-gl/rails/version.rb @@ -14,9 +14,9 @@ module VERSION # Major version number MAJOR = 1 # Minor version number - MINOR = 8 + MINOR = 9 # Smallest version number - TINY = 1 + TINY = 0 # Full version number STRING = [MAJOR, MINOR, TINY].compact.join('.')